function quiz_question_revision_actions_submit in Quiz 7
Same name and namespace in other branches
- 8.4 question_types/quiz_question/quiz_question.pages.inc \quiz_question_revision_actions_submit()
- 6.4 question_types/quiz_question/quiz_question.pages.inc \quiz_question_revision_actions_submit()
- 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') {
$res = db_query('SELECT 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'],
));
if ($max_score = $res
->fetchField()) {
}
else {
$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) FROM {quiz_node_relationship}
WHERE parent_vid = :parent_vid', array())
->fetchField();
$quiz_randomization = db_query('SELECT randomization FROM {quiz_node_properties}
WHERE nid = :nid AND vid = :vid', array())
->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',
))
->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,
))
->execute();
}
}
}