You are here

function quiz_update_2 in Quiz 5.2

Implementation of hook_update_N().

File

./quiz.install, line 262

Code

function quiz_update_2() {
  $ret = array();

  //Use db_update to display which queries were run
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':

      /**
       * Stores correct answers for multichoice quiz.
       */

      // Creates the quiz node user answers multichoice table.
      $ret[] = update_sql("CREATE TABLE {quiz_multichoice_user_answers} (\n        question_nid INTEGER UNSIGNED NOT NULL,\n        question_vid INTEGER UNSIGNED NOT NULL,\n        result_id INTEGER UNSIGNED NOT NULL,\n        answer_id INTEGER UNSIGNED NOT NULL,\n        PRIMARY KEY(result_id, question_nid, question_vid, answer_id)\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");

      /**
       * Stores user answers for multichoice quiz.
       */

      // Creates the quiz node answers multichoice table.
      $ret[] = update_sql("CREATE TABLE {quiz_multichoice_answers} (\n        answer_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,\n        nid INTEGER UNSIGNED NOT NULL,\n        vid INTEGER UNSIGNED NOT NULL,\n        answer varchar(255) NOT NULL,\n        feedback LONGTEXT,\n        result_option INTEGER UNSIGNED DEFAULT 0,\n        is_correct TINYINT UNSIGNED DEFAULT 0,\n        PRIMARY KEY(answer_id)\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");

      /**
       * This connects all the quiz specific properties to the correct version of a quiz.
       */

      // Creates the quiz node properties table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_properties} (\n        property_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,\n        vid INTEGER UNSIGNED NOT NULL,\n        nid INTEGER UNSIGNED NOT NULL,\n        number_of_random_questions TINYINT UNSIGNED DEFAULT 0 NOT NULL,\n        pass_rate TINYINT UNSIGNED NOT NULL,\n        summary_pass LONGTEXT,\n        summary_default LONGTEXT,\n        shuffle TINYINT UNSIGNED NOT NULL,\n        backwards_navigation TINYINT UNSIGNED NOT NULL,\n        feedback_time TINYINT UNSIGNED NOT NULL,\n        quiz_open INTEGER UNSIGNED DEFAULT 0,\n        quiz_close INTEGER UNSIGNED DEFAULT 0,\n        takes TINYINT UNSIGNED NOT NULL,\n        time_limit INTEGER UNSIGNED DEFAULT 0 NOT NULL,\n        quiz_always TINYINT NOT NULL default 0,\n        tid INTEGER UNSIGNED NOT NULL DEFAULT 0,\n        PRIMARY KEY(property_id),\n        KEY vid (vid, nid)\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");

      /**
       * Both a quiz and a quiz question are nodes with versions.  A quiz is a parent node of a quiz question,
       * making the quiz question the child.
       *
       * The quiz_node_relationship table stores this relationship in a way that allows a quiz question to be
       * the child of multiple quizzes without losing version history.
       *
       * Future functionality will allow a quiz question to be a parent of another quiz question with the same
       * data model.  This will make adaptive quiz functionality possible without redesign.
       */

      // Creates the quiz node relationship table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_relationship} (\n        parent_nid INTEGER UNSIGNED NOT NULL,\n        parent_vid INTEGER UNSIGNED NOT NULL,\n        child_nid INTEGER UNSIGNED NOT NULL,\n        child_vid INTEGER UNSIGNED NOT NULL,\n        question_status TINYINT UNSIGNED DEFAULT 1 NOT NULL,\n        PRIMARY KEY(parent_nid, parent_vid, child_nid, child_vid)\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");

      /**
       * This connects all the quiz question specific properties to the correct version of a quiz question.
       */

      // Creates the quiz node question properties table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_question_properties} (\n        nid INTEGER UNSIGNED NOT NULL,\n        vid INTEGER UNSIGNED NOT NULL,\n        number_of_answers TINYINT UNSIGNED DEFAULT 1 NOT NULL\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");

      /**
       * Quiz specific options concerning  availability and access to scores.
       */

      // Creates the quiz node results table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_results} (\n        result_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,\n        nid INTEGER UNSIGNED NOT NULL,\n        vid INTEGER UNSIGNED NOT NULL,\n        uid INTEGER UNSIGNED NOT NULL,\n        time_start INTEGER UNSIGNED DEFAULT 0,\n        time_end INTEGER UNSIGNED DEFAULT 0,\n        released INTEGER UNSIGNED DEFAULT 0,\n        score TINYINT NOT NULL DEFAULT 0,\n        PRIMARY KEY(result_id)\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");

      /**
       * Information about a particular question in a result
       */
      $ret[] = update_sql("CREATE TABLE {quiz_node_results_answers} (\n        result_id INT UNSIGNED NOT NULL ,\n        question_nid INT UNSIGNED NOT NULL ,\n        question_vid INT UNSIGNED NOT NULL ,\n        is_correct TINYINT UNSIGNED NOT NULL DEFAULT '0',\n        points_awarded TINYINT NOT NULL DEFAULT '0',\n        answer_timestamp INT UNSIGNED NOT NULL,\n        PRIMARY KEY(result_id, question_nid, question_vid)\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");

      /**
       * Allows custom feedback based on the results of a user completing a quiz.
       */

      // Creates the quiz node result options table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_result_options} (\n        option_id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,\n        nid INTEGER UNSIGNED NOT NULL,\n        vid INTEGER UNSIGNED NOT NULL,\n        option_name VARCHAR(255) NOT NULL,\n        option_summary LONGTEXT,\n        option_start INTEGER UNSIGNED DEFAULT 0,\n        option_end INTEGER UNSIGNED DEFAULT 0,\n        PRIMARY KEY(option_id)\n      ) /*!40100 DEFAULT CHARACTER SET utf8 */;");
      quiz_data_update_2();
      break;
    case 'pgsql':

      /**
       * Stores correct answers for multichoice quiz.
       */

      // Creates the quiz node user answers multichoice table.
      $ret[] = update_sql("CREATE TABLE {quiz_multichoice_user_answers} (\n        question_nid int_unsigned NOT NULL,\n        question_vid int_unsigned NOT NULL,\n        result_id int_unsigned NOT NULL,\n        answer_id int_unsigned NOT NULL,\n        PRIMARY KEY(result_id, question_nid, question_vid, answer_id)\n      );");

      /**
       * Stores user answers for multichoice quiz.
       */

      // Creates the quiz node answers multichoice table.
      $ret[] = update_sql("CREATE TABLE {quiz_multichoice_answers} (\n        answer_id SERIAL,\n        nid int_unsigned NOT NULL,\n        vid int_unsigned NOT NULL,\n        answer varchar(255) NOT NULL,\n        feedback text,\n        result_option int_unsigned DEFAULT 0,\n        is_correct smallint_unsigned DEFAULT 0,\n        PRIMARY KEY(answer_id)\n      );");

      /**
       * This connects all the quiz specific properties to the correct version of a quiz.
       */

      // Creates the quiz node properties table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_properties} (\n        property_id SERIAL,\n        vid int_unsigned NOT NULL,\n        nid int_unsigned NOT NULL,\n        number_of_random_questions smallint_unsigned DEFAULT 0 NOT NULL,\n        pass_rate smallint_unsigned NOT NULL,\n        summary_pass text,\n        summary_default text,\n        shuffle smallint_unsigned NOT NULL,\n        backwards_navigation smallint_unsigned NOT NULL,\n        feedback_time smallint_unsigned NOT NULL,\n        quiz_open int_unsigned DEFAULT 0,\n        quiz_close int_unsigned DEFAULT 0,\n        takes smallint_unsigned NOT NULL,\n        time_limit int_unsigned DEFAULT 0 NOT NULL,\n        quiz_always smallint NOT NULL default 0,\n        tid int_unsigned NOT NULL DEFAULT 0,\n        PRIMARY KEY(property_id)\n      );");
      $ret[] = update_sql("CREATE INDEX idx_{quiz_node_properties}_vidnid ON {quiz_node_properties}(vid, nid);");

      /**
       * Both a quiz and a quiz question are nodes with versions.  A quiz is a parent node of a quiz question,
       * making the quiz question the child.
       *
       * The quiz_node_relationship table stores this relationship in a way that allows a quiz question to be
       * the child of multiple quizzes without losing version history.
       *
       * Future functionality will allow a quiz question to be a parent of another quiz question with the same
       * data model.  This will make adaptive quiz functionality possible without redesign.
       */

      // Creates the quiz node relationship table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_relationship} (\n        parent_nid int_unsigned NOT NULL,\n        parent_vid int_unsigned NOT NULL,\n        child_nid int_unsigned NOT NULL,\n        child_vid int_unsigned NOT NULL,\n        question_status smallint_unsigned DEFAULT 1 NOT NULL,\n        PRIMARY KEY(parent_nid, parent_vid, child_nid, child_vid)\n      );");

      /**
       * This connects all the quiz question specific properties to the correct version of a quiz question.
       */

      // Creates the quiz node question properties table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_question_properties} (\n        nid int_unsigned NOT NULL,\n        vid int_unsigned NOT NULL,\n        number_of_answers smallint_unsigned DEFAULT 1 NOT NULL\n      );");

      /**
       * Quiz specific options concerning  availability and access to scores.
       */

      // Creates the quiz node results table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_results} (\n        result_id SERIAL,\n        nid int_unsigned NOT NULL,\n        vid int_unsigned NOT NULL,\n        uid int_unsigned NOT NULL,\n        time_start int_unsigned DEFAULT 0,\n        time_end int_unsigned DEFAULT 0,\n        released int_unsigned DEFAULT 0,\n        score smallint NOT NULL DEFAULT 0,\n        PRIMARY KEY(result_id)\n      );");

      /**
       * Information about a particular question in a result
       */
      $ret[] = update_sql("CREATE TABLE {quiz_node_results_answers} (\n        result_id int_unsigned NOT NULL ,\n        question_nid int_unsigned NOT NULL ,\n        question_vid int_unsigned NOT NULL ,\n        is_correct smallint_unsigned NOT NULL DEFAULT '0',\n        points_awarded smallint NOT NULL DEFAULT '0',\n        answer_timestamp int_unsigned NOT NULL,\n        PRIMARY KEY(result_id, question_nid, question_vid)\n      );");

      /**
       * Allows custom feedback based on the results of a user completing a quiz.
       */

      // Creates the quiz node result options table.
      $ret[] = update_sql("CREATE TABLE {quiz_node_result_options} (\n        option_id SERIAL,\n        nid int_unsigned NOT NULL,\n        vid int_unsigned NOT NULL,\n        option_name VARCHAR(255) NOT NULL,\n        option_summary text,\n        option_start int_unsigned DEFAULT 0,\n        option_end int_unsigned DEFAULT 0,\n        PRIMARY KEY(option_id)\n      );");
      quiz_data_update_2();
      break;
  }
  return $ret;
}