You are here

function quiz_update_quiz_question_relationship in Quiz 7.6

Same name and namespace in other branches
  1. 8.4 quiz.module \quiz_update_quiz_question_relationship()
  2. 5.2 quiz.module \quiz_update_quiz_question_relationship()
  3. 6.6 quiz.module \quiz_update_quiz_question_relationship()
  4. 6.2 quiz.module \quiz_update_quiz_question_relationship()
  5. 6.3 quiz.module \quiz_update_quiz_question_relationship()
  6. 6.4 quiz.module \quiz_update_quiz_question_relationship()
  7. 6.5 quiz.module \quiz_update_quiz_question_relationship()
  8. 7 quiz.module \quiz_update_quiz_question_relationship()
  9. 7.4 quiz.module \quiz_update_quiz_question_relationship()
  10. 7.5 quiz.module \quiz_update_quiz_question_relationship()

Copies quiz-question relation entries in the quiz_node_relationship table from an old version of a quiz to a new.

Parameters

$old_quiz_vid: The quiz vid prior to a new revision.

$new_quiz_vid: The quiz vid of the latest revision.

$quiz_nid: The quiz node id.

Related topics

1 call to quiz_update_quiz_question_relationship()
quiz_update in ./quiz.module
Implements hook_update().

File

./quiz.module, line 1687
quiz.module Main file for the Quiz module.

Code

function quiz_update_quiz_question_relationship($old_quiz_vid, $new_quiz_vid, $quiz_nid) {

  // query for questions in previous version
  $result = db_select('quiz_node_relationship', 'qnr')
    ->fields('qnr', array(
    'parent_nid',
    'child_nid',
    'child_vid',
    'question_status',
    'weight',
    'max_score',
    'auto_update_max_score',
    'qnr_id',
    'qnr_pid',
  ))
    ->condition('parent_nid', $quiz_nid)
    ->condition('parent_vid', $old_quiz_vid)
    ->condition('question_status', QUIZ_QUESTION_NEVER, '!=')
    ->execute();

  // only proceed if query returned data
  if ($result
    ->rowCount()) {
    $questions = $result
      ->fetchAll();
    foreach ($questions as $quiz_question) {
      $quiz_question->old_qnr_id = $quiz_question->qnr_id;
      $quiz_question->parent_nid = $quiz_nid;
      $quiz_question->parent_vid = $new_quiz_vid;
      unset($quiz_question->qnr_id);
      $quiz_question = (object) $quiz_question;
      entity_save('quiz_question_relationship', $quiz_question);
    }

    // Update the parentage when a new revision is created.
    // @todo this is copy pasta from quiz_set_questions
    foreach ($questions as $question) {
      db_update('quiz_node_relationship')
        ->condition('qnr_pid', $question->old_qnr_id)
        ->condition('parent_nid', $quiz_nid)
        ->condition('parent_vid', $new_quiz_vid)
        ->fields(array(
        'qnr_pid' => $question->qnr_id,
      ))
        ->execute();
    }
  }

  /* Update terms if any */
  $result = db_select('quiz_terms', 'qt')
    ->fields('qt', array(
    'nid',
    'tid',
    'weight',
    'max_score',
    'number',
  ))
    ->condition('vid', $old_quiz_vid)
    ->execute();

  // only proceed if query returned data
  if ($result
    ->rowCount()) {
    $insert_query = db_insert('quiz_terms')
      ->fields(array(
      'nid',
      'vid',
      'tid',
      'weight',
      'max_score',
      'number',
    ));
    while ($quiz_term = $result
      ->fetchAssoc()) {
      $insert_query
        ->values(array(
        'nid' => $quiz_nid,
        'vid' => $new_quiz_vid,
        'tid' => $quiz_term['tid'],
        'weight' => $quiz_term['weight'],
        'max_score' => $quiz_term['max_score'],
        'number' => $quiz_term['number'],
      ));
    }
    $insert_query
      ->execute();
  }
}