View source
<?php
module_load_include('inc', 'opigno_tincan_api', 'includes/opigno_tincan_api.statements_func');
module_load_include('inc', 'opigno_tincan_api', 'includes/opigno_tincan_api.tincan_activity_definition_types');
module_load_include('inc', 'opigno_tincan_api', 'includes/opigno_tincan_api.tincan_verbs');
function opigno_tincan_api_opigno_statements_opigno_course_passed($course_nid, $uid) {
$course = node_load($course_nid);
$statement = _opigno_tincan_api_statement_base_creation(OpignoTincanApiTinCanVerbs::$passed, OpignoTincanApiTinCanActivityDefinitionTypes::$course, $course);
if ($statement === false) {
return;
}
$classes = _opigno_tincan_api_get_classes_from_course($course_nid);
$context = new TinCan\Context();
_opigno_tincan_api_context_set_parents($context, $classes);
_opigno_tincan_api_context_set_language($context, $course->language);
$statement
->setContext($context);
$result = opigno_quiz_app_get_course_data_result($uid, $course_nid);
$total_score = isset($result['total_score']) ? $result['total_score'] : null;
$total_time = isset($result['total_time']) ? $result['total_time'] : null;
_opigno_tincan_api_set_result($statement, $total_score, 100, true, null, $total_time);
_opigno_tincan_api_send_statement($statement);
if (isset($course->certificate['node_settings']['manual']['manual']) && $course->certificate['node_settings']['manual']['manual'] !== "-1") {
$cert_url = url('node/' . $course_nid . '/certificate', array(
'absolute' => true,
));
if ($cert_url != '') {
$statement = new TinCan\Statement();
_opigno_tincan_api_set_actor($statement);
_opigno_tincan_api_set_verb($statement, OpignoTincanApiTinCanVerbs::$received);
$statement
->setObject(array(
'id' => $cert_url,
'definition' => array(
'name' => array(
'en-US' => 'Certificate for: ' . $course->title,
),
'type' => OpignoTincanApiTinCanActivityDefinitionTypes::$certificate,
),
));
$statement
->setContext(array(
'contextActivities' => array(
'grouping' => array(
array(
'id' => url('node/' . $course_nid, array(
'absolute' => true,
)),
),
),
),
));
_opigno_tincan_api_send_statement($statement);
}
}
}
function _opigno_tincan_api_get_classes_from_course($course_nid) {
$query = db_select('field_data_opigno_class_courses', 't')
->condition(db_and()
->condition('opigno_class_courses_target_id', $course_nid, '=')
->condition('bundle', 'class', '='))
->fields('t', array(
'entity_id',
))
->execute();
$classes_ids = array();
while ($row = $query
->fetchAssoc()) {
$classes_ids[$row['entity_id']] = $row['entity_id'];
}
return $classes_ids;
}