function opigno_quiz_app_get_course_class_score_average in Opigno Quiz App 7
Helper function to get the average score for a course or a class.
File
- ./
opigno_quiz_app.module, line 2258 - Module file. Defines module hooks.
Code
function opigno_quiz_app_get_course_class_score_average($node_nid, $uid = null) {
if ($uid === null) {
global $user;
$uid = $user->uid;
}
// If class given, get all the courses
$node = node_load($node_nid);
if ($node->type == 'class') {
// If no course, no score.
if (empty($node->opigno_class_courses[LANGUAGE_NONE])) {
return 0;
}
$courses_nids = array_map(function ($entry) {
return $entry['target_id'];
}, $node->opigno_class_courses[LANGUAGE_NONE]);
}
else {
if ($node->type == 'course') {
$courses_nids = array(
$node_nid,
);
}
else {
return 0;
// Should never run through here...
}
}
// Then get all the lessons from theses courses.
$query = new EntityFieldQuery();
$query
->entityCondition('entity_type', 'node');
$query
->propertyCondition('type', 'quiz');
$query
->fieldCondition('og_group_ref', 'target_id', $courses_nids);
$lessons_nids = $query
->execute();
// If no lessons, no score.
if (empty($lessons_nids)) {
return 0;
}
$lessons_nids = array_keys($lessons_nids['node']);
// Get all the scores for each lessons and do the totals
$scores = quiz_get_score_data($lessons_nids, $uid);
$nb_quizzes_done = 0;
$total_score = 0;
foreach ($scores as $score) {
// If the quiz has not be taken, don't count it.
if ($score->percent_score === null) {
continue;
}
$total_score += $score->percent_score;
$nb_quizzes_done++;
}
// Finally, do the average, but careful with division by 0.
return $nb_quizzes_done == 0 ? 0 : round($total_score / $nb_quizzes_done);
}