You are here

function quiz_questions_form_validate in Quiz 6.3

Same name and namespace in other branches
  1. 8.4 quiz.admin.inc \quiz_questions_form_validate()
  2. 6.6 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.

File

./quiz.admin.inc, line 311
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();
  if (empty($form_state['values']['weights'])) {
    return;
  }
  foreach ($form_state['values']['weights'] 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;
    }
  }
}