You are here

function _quiz_maintain_results in Quiz 6.4

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

Deletes results for a quiz according to the keep results setting

Parameters

$quiz: The quiz node to be maintained

$rid: The result id of the latest result for the current user

Return value

TRUE if results where deleted.

3 calls to _quiz_maintain_results()
quiz_report_form_submit in ./quiz.pages.inc
Submit the report form
quiz_take_quiz in ./quiz.module
Handles quiz taking.
quiz_update_total_score in ./quiz.module
Update a score for a quiz.

File

./quiz.module, line 3827
Quiz Module

Code

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

  // Do not delete results for anonymous users
  if ($user->uid == 0) {
    return;
  }
  switch ($quiz->keep_results) {
    case QUIZ_KEEP_ALL:
      return FALSE;
    case QUIZ_KEEP_BEST:

      //I'm afraid of what this might do to performance...
      $sql = 'SELECT result_id
              FROM {quiz_node_results}
              WHERE nid = %d AND uid = %d AND is_evaluated = 1 AND result_id != (
                SELECT result_id
                FROM {quiz_node_results}
                WHERE score = (
                  SELECT MAX(score)
                  FROM {quiz_node_results}
                  WHERE nid = %d AND uid = %d
                )
                AND nid = %d AND uid = %d LIMIT 1
              )';
      $res = db_query($sql, $quiz->nid, $user->uid, $quiz->nid, $user->uid, $quiz->nid, $user->uid);
      $rids = array();
      while ($rid2 = db_result($res)) {
        $rids[] = $rid2;
      }
      quiz_delete_results($rids);
      return !empty($rids);
    case QUIZ_KEEP_LATEST:
      $sql = 'SELECT result_id
              FROM {quiz_node_results}
              WHERE nid = %d AND uid = %d AND is_evaluated = 1 AND result_id != %d';
      $res = db_query($sql, $quiz->nid, $user->uid, $rid);
      $rids = array();
      while ($rid2 = db_result($res)) {
        $rids[] = $rid2;
      }
      quiz_delete_results($rids);
      return !empty($rids);
  }
}