You are here

function quiz_question_revision_actions_submit in Quiz 6.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. 7 question_types/quiz_question/quiz_question.pages.inc \quiz_question_revision_actions_submit()
  3. 7.4 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') {
      $sql = 'SELECT max_score
              FROM {quiz_node_relationship}
              WHERE parent_vid = %d
              AND child_nid = %d';
      $res = db_query($sql, $quiz_vid, $form_state['values']['q_nid']);
      if ($max_score = db_result($res)) {
      }
      else {
        $sql = 'SELECT max_score
                FROM {quiz_question_properties}
                WHERE vid = %d';
        $res = db_query($sql, $form_state['values']['q_vid']);
        $max_score = db_result($res);
      }
      $sql = 'SELECT weight, question_status
              FROM {quiz_node_relationship}
              WHERE parent_nid = %d AND parent_vid = %d AND child_nid = %d';
      $res = db_query($sql, $quiz_nid, $quiz_vid, $form_state['values']['q_nid']);
      if ($res_o = db_fetch_object($res)) {

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

      // Insert the newest revision of the question into the quiz
      $sql = 'INSERT INTO {quiz_node_relationship} (parent_nid, parent_vid, child_nid, child_vid, max_score, weight, question_status)
              VALUES(%d, %d, %d, %d, %d, %d, %d)';
      db_query($sql, $quiz_nid, $quiz_vid, $form_state['values']['q_nid'], $form_state['values']['q_vid'], $max_score, $weight, $question_status);
    }
  }
}