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