You are here

function quiz_question_revision_actions_submit in Quiz 7.4

Same name and namespace in other branches
  1. 8.4 question_types/quiz_question/quiz_question.pages.inc \quiz_question_revision_actions_submit()
  2. 6.4 question_types/quiz_question/quiz_question.pages.inc \quiz_question_revision_actions_submit()
  3. 7 question_types/quiz_question/quiz_question.pages.inc \quiz_question_revision_actions_submit()

Submit callback for the revision actions page

1 string reference to 'quiz_question_revision_actions_submit'
quiz_question_revision_actions in question_types/quiz_question/quiz_question.pages.inc
Create the form for the revision actions page

File

question_types/quiz_question/quiz_question.pages.inc, line 162
User page callbacks for the quiz_question module.

Code

function quiz_question_revision_actions_submit($form, &$form_state) {

  // TODO: Add date check here?
  // We should't be able to revisit the revision actions page after this.
  unset($_SESSION['quiz_question_kept']);
  foreach ($form_state['values'] as $key => $value) {
    if (!preg_match('/^[0-9]+-[0-9]+-[0,1]-[0,1]$/', $key)) {
      continue;
    }
    list($update, $revise, $publish) = str_split($value);

    //FORMAT: Update[0,1], revise[0,1] and publish[0,1]
    list($nid, $vid, $published, $answered) = explode('-', $key);

    //FORMAT: nid(int), vid(int), published[0,1] and answered[0,1]

    //If we are to revise the quiz we need to do that first...
    if ($revise == '1') {
      $quiz_node = node_load((int) $nid, (int) $vid);
      $quiz_node->revision = 1;
    }
    if (!isset($quiz_node) && $publish != $published) {
      $quiz_node = node_load((int) $nid, (int) $vid);
    }

    // If the quiz node is to be revised and/or (un)published we save it now
    if (isset($quiz_node)) {
      $quiz_node->auto_created = TRUE;
      $quiz_node->status = $publish;
      node_save($quiz_node);
      $quiz_nid = $quiz_node->nid;
      $quiz_vid = $quiz_node->vid;
    }
    else {
      $quiz_nid = (int) $nid;
      $quiz_vid = (int) $vid;
    }
    if ($update == '1') {
      $res_relationship = db_query('SELECT max_score, auto_update_max_score FROM {quiz_node_relationship}
              WHERE parent_vid = :parent_vid AND child_nid = :child_nid', array(
        ':parent_vid' => $quiz_vid,
        ':child_nid' => $form_state['values']['q_nid'],
      ))
        ->fetch();
      $auto_update_max_score = isset($res_relationship->auto_update_max_score) ? $res_relationship->auto_update_max_score : 0;
      if ($res_relationship) {
        $max_score = $res_relationship->max_score;
      }
      if (!$res_relationship || $auto_update_max_score) {
        $res = db_query('SELECT max_score FROM {quiz_question_properties}
                WHERE vid = :vid', array(
          ':vid' => $form_state['values']['q_vid'],
        ));
        $max_score = $res
          ->fetchField();
      }
      $res = db_query('SELECT weight, question_status FROM {quiz_node_relationship}
              WHERE parent_nid = :parent_nid AND parent_vid = :parent_vid AND child_nid = :child_nid', array(
        ':parent_nid' => $quiz_nid,
        ':parent_vid' => $quiz_vid,
        ':child_nid' => $form_state['values']['q_nid'],
      ));
      if ($res_o = $res
        ->fetch()) {

        // Remove old revsions of the question from the quiz
        db_delete('quiz_node_relationship')
          ->condition('parent_nid', $quiz_nid)
          ->condition('parent_vid', $quiz_vid)
          ->condition('child_nid', $form_state['values']['q_nid'])
          ->execute();
        $weight = $res_o->weight;
        $question_status = $res_o->question_status;
      }
      else {
        $weight = 1 + db_query("SELECT MAX(weight)\n          FROM {quiz_node_relationship}\n          WHERE parent_vid = :parent_vid", array(
          ':parent_vid' => $quiz_vid,
        ))
          ->fetchField();
        $quiz_randomization = db_query("SELECT randomization\n          FROM {quiz_node_properties}\n          WHERE nid = :nid AND vid = :vid", array(
          ':nid' => $quiz_nid,
          ':vid' => $quiz_vid,
        ))
          ->fetchField();
        $question_status = $quiz_randomization == 2 ? QUESTION_RANDOM : QUESTION_ALWAYS;
      }

      // Insert the newest revision of the question into the quiz
      $insert_qnr = db_insert('quiz_node_relationship')
        ->fields(array(
        'parent_nid',
        'parent_vid',
        'child_nid',
        'child_vid',
        'max_score',
        'weight',
        'question_status',
        'auto_update_max_score',
      ))
        ->values(array(
        'parent_nid' => $quiz_nid,
        'parent_vid' => $quiz_vid,
        'child_nid' => $form_state['values']['q_nid'],
        'child_vid' => $form_state['values']['q_vid'],
        'max_score' => $max_score,
        'weight' => $weight,
        'question_status' => $question_status,
        'auto_update_max_score' => $auto_update_max_score,
      ))
        ->execute();
    }
  }
}