You are here

function opigno_statistics_app_query_class_students_results in Opigno Statistics App 7

Query students results statistics for a class (cached for 1 day)

Parameters

int $class_nid:

Return value

array

1 call to opigno_statistics_app_query_class_students_results()
opigno_statistics_app_present_class_students_results in includes/group/class/presenters.inc
Present student results statistics for a class

File

includes/group/class/queries.inc, line 248

Code

function opigno_statistics_app_query_class_students_results($class_nid) {
  $cache_key = __FUNCTION__ . ':' . $class_nid;
  $cached_object = cache_get($cache_key);
  if ($cached_object) {
    $students_results = $cached_object->data;
  }
  else {
    $students_results = array();
    $class_childs = opigno_statistics_app_query_class_child_nids($class_nid);
    $class_childs[] = $class_nid;
    $filter_class_childs = '(';
    foreach ($class_childs as $class_child_nid) {
      $filter_class_childs .= $class_child_nid . ',';
    }
    $filter_class_childs = substr($filter_class_childs, 0, -1);
    $filter_class_childs .= ')';
    $result = db_query("\n      SELECT ROUND(AVG(uc.score), 0) as avg_score, j1.page_views as number_of_interactions, j1.uid, uc.username as student_name, COUNT(*) as tot_courses, SUM(status) as passed_courses\n      FROM {opigno_statistics_user_course} uc\n      INNER JOIN (\n        SELECT SUM(page_views) as page_views, uid\n          FROM {opigno_statistics_user_group} ug\n          WHERE group_nid IN " . $filter_class_childs . "\n          GROUP BY uid\n      ) j1 ON j1.uid = uc.uid\n      WHERE uc.uid IN (\n          SELECT etid\n          FROM {og_membership}\n          WHERE group_type = 'node'\n          AND gid = :group_nid\n          AND entity_type = 'user'\n      )\n      AND course_nid IN " . $filter_class_childs . "\n      GROUP BY j1.uid\n    ", array(
      ':group_nid' => $class_nid,
    ));
    $total_number_of_interactions = 0;
    $total_score = 0;
    while ($record = $result
      ->fetchAssoc()) {
      $record['status'] = $record['tot_courses'] == $record['passed_courses'] ? true : false;
      $students_results[] = $record;
      $total_number_of_interactions += $record['number_of_interactions'];
      $total_score += $record['avg_score'];
    }
    $avg_number_of_interactions = count($students_results) > 0 ? $total_number_of_interactions / count($students_results) : 0;
    $avg_score = count($students_results) > 0 ? $total_score / count($students_results) : 0;
    foreach ($students_results as &$student_result) {
      $student_result['avg_number_of_interactions'] = round($avg_number_of_interactions, 0);
      $student_result['general_avg_score'] = round($avg_score, 0);
    }
    cache_set($cache_key, $students_results, 'cache', time() + 7200);

    // 7200s = 2h cache
  }
  return $students_results;
}