You are here

function _quiz_results_mr_prepare_filter in Quiz 8.4

Same name and namespace in other branches
  1. 6.4 quiz.admin.inc \_quiz_results_mr_prepare_filter()
  2. 7 quiz.admin.inc \_quiz_results_mr_prepare_filter()
  3. 7.4 quiz.admin.inc \_quiz_results_mr_prepare_filter()

Returns sql and parameters to be added in join, where and group clauses in the _quiz_results_mr_data_provider select statement

TODO: Rewrite to use db_select

Parameters

$filter_params: params to be sent as parameter to db_query. (array)

Return value

$filter_sql sql to be added to where statement in browser(string)

See also

_quiz_results_mr_data_provider()

1 call to _quiz_results_mr_prepare_filter()
_quiz_results_mr_data_provider in ./quiz.admin.inc

File

./quiz.admin.inc, line 1893
Administrator interface for Quiz module.

Code

function _quiz_results_mr_prepare_filter($quiz) {
  $pre = 'quiz_results_mr_';

  // Get all the intervals we need
  $started_intervals = _quiz_get_interval_timestamps('time_start');
  $finished_intervals = _quiz_get_interval_timestamps('time_end');
  $duration_intervals = _quiz_get_duration_intervals();
  $score_intervals = _quiz_get_score_intervals($quiz);

  // Prepare the filter array
  $filter = array(
    'params' => array(
      ':quiz_nid' => $quiz
        ->id(),
    ),
    'join' => '',
    'where' => '',
    'group' => '',
  );
  if (isset($_SESSION[$pre . 'name']) && drupal_strlen($_SESSION[$pre . 'name']) > 0) {
    $filter['where'] .= ' AND u.name LIKE :name';
    $filter['params'][':name'] = '%' . $_SESSION[$pre . 'name'] . '%';
  }
  if (isset($_SESSION[$pre . 'started']) && isset($started_intervals[$_SESSION[$pre . 'started']]['sql'])) {
    $filter['where'] .= $started_intervals[$_SESSION[$pre . 'started']]['sql'];
  }
  if (isset($_SESSION[$pre . 'finished']) && isset($finished_intervals[$_SESSION[$pre . 'finished']]['sql'])) {
    $filter['where'] .= $finished_intervals[$_SESSION[$pre . 'finished']]['sql'];
  }
  if (isset($_SESSION[$pre . 'score']) && isset($score_intervals[$_SESSION[$pre . 'score']])) {
    $filter['where'] .= $score_intervals[$_SESSION[$pre . 'score']];
  }
  if (isset($_SESSION[$pre . 'evaluated'])) {
    switch ($_SESSION[$pre . 'evaluated']) {
      case '0':
        $filter['where'] .= ' AND is_evaluated = 0';
        break;
      case '1':
        $filter['where'] .= ' AND is_evaluated = 1';
        break;
    }
  }
  if ($_SESSION[$pre . 'not_in_progress'] == 1) {
    $filter['where'] .= " AND time_end <> 0";
  }
  if ($_SESSION[$pre . 'best_results'] == 1) {
    $filter['join'] .= " INNER JOIN (\n                           SELECT qnrs.uid, MAX(qnrs.score) AS top_score\n                           FROM {quiz_node_results} qnrs\n                           LEFT JOIN {users} u ON u.uid = qnrs.uid\n                           LEFT JOIN {quiz_node_properties} qnp ON qnrs.vid = qnp.vid\n                           WHERE qnrs.nid = :quiz_nid " . $filter['where'] . "\n                           GROUP BY qnrs.uid\n                         ) AS qnrc ON qnrs.uid = qnrc.uid AND qnrs.score = qnrc.top_score";
    $filter['group'] .= " GROUP BY qnrs.uid";
    if (db_driver() == 'pgsql') {
      $filter['group'] .= " GROUP BY qnrs.uid, u.uid, u.name, qnrs.result_id, qnrs.score, qnrs.is_evaluated, qnrs.time_start, qnrs.time_end, qnp.pass_rate";
    }
  }
  return $filter;
}