You are here

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);
}