You are here

function opigno_class_app_user_results in Opigno Class App 7

Page callback: view user results. Overwrite callback from Quiz app, group courses by class.

Parameters

int $uid:

Return value

string

1 string reference to 'opigno_class_app_user_results'
opigno_class_app_menu_alter in ./opigno_class_app.module
Implements hook_menu_alter().

File

./opigno_class_app.module, line 274
Module hooks.

Code

function opigno_class_app_user_results($uid = NULL) {
  if (!isset($uid)) {
    global $user;
    $uid = $user->uid;
    $account = clone $user;
  }
  else {
    $account = user_load($uid);
  }
  if (empty($uid)) {
    drupal_set_message(t("Could not find any user to display results for."), 'error');
    drupal_not_found();
  }

  // Failsafe.
  if (!module_exists('opigno_quiz_app')) {
    return t("This page requires the Opigno Quiz App to be enabled.");
  }
  $html = '';
  $scores = array();
  $classes = array();
  $printed_scores = array();
  foreach (og_get_groups_by_user($account, 'node') as $gid => $nid) {
    $node = node_load($nid);
    if ($node->type == OPIGNO_COURSE_BUNDLE) {
      if ($score_data = opigno_quiz_app_get_course_data_result($uid, $nid)) {
        $scores[$nid] = $score_data;
        $scores[$nid]['node'] = $node;
      }
    }
    elseif ($node->type == 'class') {
      $classes[$nid]['node'] = $node;
      foreach ($node->opigno_class_courses as $lang => $items) {
        foreach ($items as $item) {
          $classes[$nid]['courses'][$item['target_id']] = $item['target_id'];
        }
      }
    }
  }
  if (!empty($classes)) {
    foreach ($classes as $class_nid => $data) {
      $class_scores = array();
      if (!empty($data['courses'])) {
        $printed_scores = array_merge($printed_scores, array_keys($data['courses']));
        foreach ($data['courses'] as $course_nid) {
          $class_scores[$scores[$course_nid]['node']->title] = $scores[$course_nid];
        }
        $passed = OPIGNO_QUIZ_APP_PASSED;
        foreach ($data['courses'] as $course_nid) {
          if (!empty($scores[$course_nid]['passed']) && $scores[$course_nid]['passed'] != OPIGNO_QUIZ_APP_PASSED) {
            $passed = $scores[$course_nid]['passed'];
            break;
          }
        }
        $html .= theme('table', array(
          'header' => array(
            t("@name (!status)", array(
              '@name' => check_plain($data['node']->title),
              '!status' => $passed == OPIGNO_QUIZ_APP_PASSED ? t("Passed") : ($passed == OPIGNO_QUIZ_APP_FAILED ? t("Failed") : t("Pending")),
            )),
          ),
          'rows' => array(
            array(
              theme('opigno_quiz_app_user_results', array(
                'user' => $account,
                'results' => $class_scores,
              )),
            ),
          ),
          'attributes' => array(
            'class' => array(
              'opigno-quiz-app-results-table',
              'opigno-quiz-app-results-collapsible-table',
              'opigno-quiz-app-course-class-results-table',
            ),
          ),
        ));
      }
    }
    foreach ($printed_scores as $printed_score) {
      unset($scores[$printed_score]);
    }
  }
  $other_scores = array();
  foreach ($scores as $nid => $score_data) {
    $other_scores[$score_data['node']->title] = $score_data;
  }
  $html .= theme('opigno_quiz_app_user_results', array(
    'user' => $account,
    'results' => $other_scores,
  ));
  $path = drupal_get_path('module', 'opigno_quiz_app');
  drupal_add_js($path . '/js/opigno_quiz_app.js');
  drupal_add_css($path . '/css/opigno_quiz_app.css');
  return $html;
}