You are here

function _quiz_maintain_results in Quiz 7.5

Same name and namespace in other branches
  1. 8.4 quiz.module \_quiz_maintain_results()
  2. 6.4 quiz.module \_quiz_maintain_results()
  3. 7.6 quiz.module \_quiz_maintain_results()
  4. 7 quiz.module \_quiz_maintain_results()
  5. 7.4 quiz.module \_quiz_maintain_results()

Mark results as invalid for a quiz according to the keep results setting.

This function will only mark the results as invalid. The actual delete action happens based on a cron run. If we would have deleted the results in this function the user might not have been able to view the result screen of the quiz he just finished.

Parameters

object $quiz: The quiz node to be maintained.

int $result_id: The result id of the latest result for the current user.

Return value

bool TRUE if results where marked as invalid, FALSE otherwise.

3 calls to _quiz_maintain_results()
quiz_quiz_result_update in question_types/quiz_question/quiz_question.module
Implements hook_quiz_result_update().
quiz_report_form_submit in ./quiz.pages.inc
Submit the report form.
quiz_update_total_score in ./quiz.module
Update a score for a quiz.

File

./quiz.module, line 3145
quiz.module Main file for the Quiz module.

Code

function _quiz_maintain_results($quiz, $result_id) {
  global $user;

  // Do not delete results for anonymous users.
  if ($user->uid == 0) {
    return FALSE;
  }
  $result_ids = array();
  switch ($quiz->keep_results) {
    case QUIZ_KEEP_ALL:
      break;
    case QUIZ_KEEP_BEST:
      $best_result_id = db_select('quiz_node_results', 'qnr')
        ->fields('qnr', array(
        'result_id',
      ))
        ->condition('qnr.nid', $quiz->nid)
        ->condition('qnr.uid', $user->uid)
        ->condition('qnr.is_evaluated', 1)
        ->condition('qnr.is_invalid', 0)
        ->orderBy('score', 'DESC')
        ->execute()
        ->fetchField();
      if ($best_result_id) {
        $result_ids = db_select('quiz_node_results', 'qnr')
          ->fields('qnr', array(
          'result_id',
        ))
          ->condition('qnr.nid', $quiz->nid)
          ->condition('qnr.uid', $user->uid)
          ->condition('qnr.is_evaluated', 1)
          ->condition('qnr.is_invalid', 0)
          ->condition('qnr.result_id', $best_result_id, '!=')
          ->execute()
          ->fetchCol('result_id');
      }
      break;
    case QUIZ_KEEP_LATEST:
      $result_ids = db_select('quiz_node_results', 'qnr')
        ->fields('qnr', array(
        'result_id',
      ))
        ->condition('qnr.nid', $quiz->nid)
        ->condition('qnr.uid', $user->uid)
        ->condition('qnr.is_evaluated', 1)
        ->condition('qnr.is_invalid', 0)
        ->condition('qnr.result_id', $result_id, '!=')
        ->execute()
        ->fetchCol('result_id');
      break;
  }
  if ($result_ids) {
    db_update('quiz_node_results')
      ->fields(array(
      'is_invalid' => 1,
    ))
      ->condition('result_id', $result_ids, 'IN')
      ->execute();
    return TRUE;
  }
  return FALSE;
}