You are here

opigno_quiz_app.pages.inc in Opigno Quiz App 7

Defines all page callbacks.

File

includes/opigno_quiz_app.pages.inc
View source
<?php

/**
 * @file
 * Defines all page callbacks.
 */

/**
 * Page callback: take quiz. See if fullscreen is available.
 */
function opigno_quiz_app_quiz_take($node) {
  _opigno_quiz_app_enable_fullscreen($node);
  return quiz_take($node);
}

/** 
 * Page callback: view quiz results for the current user.
 * @see 
 */
function opigno_quiz_app_current_user_results() {
  global $user;
  module_load_include('inc', 'quiz', 'quiz.pages');
  return quiz_get_user_results($user->uid);
}

/**
 * Page callback: view user results.
 *
 * @param  int $uid
 *
 * @return string
 */
function opigno_quiz_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();
  }
  $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[$node->title] = $score_data;
        $scores[$node->title]['node'] = $node;
      }
    }
  }
  $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 theme('opigno_quiz_app_user_results', array(
    'user' => $account,
    'results' => $scores,
  ));
}

/**
 * Page callback: view all user results for a specific course.
 *
 * @param  stdClass $node
 *
 * @return string
 */
function opigno_quiz_app_course_results($node) {
  if (empty($node->nid)) {
    drupal_set_message(t("Could not find the course."), 'error');
    drupal_not_found();
  }
  $state = isset($_SESSION['opigno_quiz_app']['state_filter'][request_path()]) ? $_SESSION['opigno_quiz_app']['state_filter'][request_path()] : OG_STATE_ACTIVE;
  $scores = array();
  foreach (opigno_get_users_in_group($node->nid, $state) as $uid => $account) {
    if (!og_user_access('node', $node->nid, 'skip display of results', $account, FALSE, TRUE) && ($data = opigno_quiz_app_get_course_data_result($uid, $node->nid, TRUE))) {
      $scores[$uid] = $data;
      $scores[$uid]['user'] = $account;
    }
  }
  $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');
  $form = render(drupal_get_form('opigno_quiz_app_filter_by_status_form'));
  return $form . theme('opigno_quiz_app_course_results', array(
    'course' => $node,
    'results' => $scores,
  ));
}

/**
 * Page callback: view all user results for all courses (where allowed).
 *
 * @return string
 */
function opigno_quiz_app_courses_results() {
  global $user;
  $html = '';
  $state = isset($_SESSION['opigno_quiz_app']['state_filter'][request_path()]) ? $_SESSION['opigno_quiz_app']['state_filter'][request_path()] : OG_STATE_ACTIVE;
  foreach (og_get_groups_by_user($user, 'node') as $gid => $nid) {
    $node = node_load($nid);
    if ($node->type == OPIGNO_COURSE_BUNDLE) {
      $scores = array();
      foreach (opigno_get_users_in_group($node->nid, $state) as $uid => $account) {

        // Only display results for roles that don't have the 'skip display of results' permission.
        if (!og_user_access('node', $nid, 'skip display of results', $account, FALSE, TRUE) && ($data = opigno_quiz_app_get_course_data_result($uid, $node->nid, TRUE))) {
          $scores[$uid] = $data;
          $scores[$uid]['user'] = $account;
        }
      }

      // Are there any results to show ?
      if (!empty($scores)) {
        $header = array(
          'data' => check_plain($node->title),
        );
        $rows = array(
          array(
            theme('opigno_quiz_app_course_results', array(
              'course' => $node,
              'results' => $scores,
            )),
          ),
        );
        $html .= theme('table', array(
          'header' => $header,
          'rows' => $rows,
          'attributes' => array(
            'class' => array(
              'opigno-quiz-app-results-table',
              'opigno-quiz-app-results-collapsible-table',
              'opigno-quiz-app-all-courses-user-results-table',
            ),
          ),
        ));
      }
    }
  }
  $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');
  $form = render(drupal_get_form('opigno_quiz_app_filter_by_status_form'));
  return $form . $html;
}

/**
 * Page callback: sort course quizzes.
 *
 * @param  array $form
 * @param  array $form_state
 * @param  stdClass $node
 *
 * @return array
 */
function opigno_quiz_app_sort_course_quizzes_form($form, $form_state, $node) {
  $form['table'] = array(
    '#tree' => TRUE,
  );
  $form['gid'] = array(
    '#type' => 'hidden',
    '#value' => $node->nid,
  );
  foreach (opigno_quiz_app_get_course_quizzes($node) as $quiz_nid) {
    $quiz = node_load($quiz_nid);
    $form['table']["quiz_{$quiz_nid}"]['nid'] = array(
      '#type' => 'hidden',
      '#value' => $quiz_nid,
    );
    $form['table']["quiz_{$quiz_nid}"]['title'] = array(
      '#markup' => check_plain($quiz->title),
    );
    $form['table']["quiz_{$quiz_nid}"]['weight'] = array(
      '#type' => 'weight',
      '#delta' => 50,
      '#default_value' => opigno_quiz_app_get_course_quiz_weight($node->nid, $quiz_nid),
      '#attributes' => array(
        'class' => array(
          'opigno-quiz-app-sort-course-quizzes-weight',
        ),
      ),
    );
  }
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t("Save order"),
  );
  return $form;
}

/**
 * Submit callback for opigno_quiz_app_sort_course_quizzes_form().
 */
function opigno_quiz_app_sort_course_quizzes_form_submit($form, $form_state) {
  foreach ($form_state['values']['table'] as $values) {
    opigno_quiz_app_set_course_quiz_weight($form_state['values']['gid'], $values['nid'], $values['weight']);
  }
}

/**
 * Helper form for filtering student lists by student membership state.
 */
function opigno_quiz_app_filter_by_status_form($form, $form_state) {
  $form['state'] = array(
    '#type' => 'select',
    '#title' => t("User state"),
    '#options' => array(
      OG_STATE_ACTIVE => t("Active"),
      OG_STATE_PENDING => t("Pending"),
      OG_STATE_BLOCKED => t("Blocked"),
    ),
    '#default_value' => isset($_SESSION['opigno_quiz_app']['state_filter'][request_path()]) ? $_SESSION['opigno_quiz_app']['state_filter'][request_path()] : OG_STATE_ACTIVE,
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t("Filter"),
  );
  return $form;
}

/**
 * Submit callback for opigno_quiz_app_filter_by_status_form().
 */
function opigno_quiz_app_filter_by_status_form_submit($form, $form_state) {
  $_SESSION['opigno_quiz_app']['state_filter'][request_path()] = $form_state['values']['state'];
}

Functions

Namesort descending Description
opigno_quiz_app_courses_results Page callback: view all user results for all courses (where allowed).
opigno_quiz_app_course_results Page callback: view all user results for a specific course.
opigno_quiz_app_current_user_results Page callback: view quiz results for the current user.
opigno_quiz_app_filter_by_status_form Helper form for filtering student lists by student membership state.
opigno_quiz_app_filter_by_status_form_submit Submit callback for opigno_quiz_app_filter_by_status_form().
opigno_quiz_app_quiz_take Page callback: take quiz. See if fullscreen is available.
opigno_quiz_app_sort_course_quizzes_form Page callback: sort course quizzes.
opigno_quiz_app_sort_course_quizzes_form_submit Submit callback for opigno_quiz_app_sort_course_quizzes_form().
opigno_quiz_app_user_results Page callback: view user results.