You are here

function quiz_questions_form_validate in Quiz 6.6

Same name and namespace in other branches
  1. 8.4 quiz.admin.inc \quiz_questions_form_validate()
  2. 6.3 quiz.admin.inc \quiz_questions_form_validate()
  3. 6.4 quiz.admin.inc \quiz_questions_form_validate()
  4. 6.5 quiz.admin.inc \quiz_questions_form_validate()
  5. 7.6 quiz.admin.inc \quiz_questions_form_validate()
  6. 7 quiz.admin.inc \quiz_questions_form_validate()
  7. 7.4 quiz.admin.inc \quiz_questions_form_validate()
  8. 7.5 quiz.admin.inc \quiz_questions_form_validate()

Validate that the supplied questions are real.

1 call to quiz_questions_form_validate()
qcollection_questions_form_validate in includes/qcollection/qcollection.inc
Validate that the supplied questions are real.

File

./quiz.admin.inc, line 310
Administrator interface for Quiz module.

Code

function quiz_questions_form_validate($form, $form_state) {
  $question_types = array_keys(_quiz_get_question_types());
  $removed = explode(',', $form_state['values']['remove_from_quiz']);
  $placeholders = db_placeholders($question_types, 'varchar');
  $sql = 'SELECT COUNT(nid) FROM {node} WHERE type IN (' . $placeholders . ') AND nid = %d';
  $already_checked = array();
  $weight_map = $form_state['values']['weights'];
  if (empty($weight_map)) {
    form_set_error('none', 'No questions were included.');
    return;
  }
  foreach ($weight_map as $id => $weight) {
    if (in_array($id, $removed)) {

      // Ignore items that are going to be removed anyway.
      continue;
    }
    list($state, $nid) = explode('-', $id, 2);
    $params = $question_types;

    // Copy array.
    $params[] = $nid;
    if (db_result(db_query($sql, $params)) == 0) {
      form_set_error('none', 'One of the supplied questions was invalid. It has been removed from the quiz.');
      unset($form_state['values']['weights'][$id]);
    }
    elseif (in_array($nid, $already_checked)) {
      form_set_error('none', 'A duplicate question has been removed. You can only ask a question once per quiz.');
      unset($form_state['values']['weights'][$id]);
    }
    else {
      $already_checked[] = $nid;
    }
  }
}