You are here

function quiz_install in Quiz 5.2

Same name and namespace in other branches
  1. 8.6 quiz.install \quiz_install()
  2. 8.4 quiz.install \quiz_install()
  3. 8.5 quiz.install \quiz_install()
  4. 5 quiz.install \quiz_install()
  5. 6.6 quiz.install \quiz_install()
  6. 6.2 quiz.install \quiz_install()
  7. 6.3 quiz.install \quiz_install()
  8. 6.4 quiz.install \quiz_install()
  9. 6.5 quiz.install \quiz_install()
  10. 7.6 quiz.install \quiz_install()
  11. 7 quiz.install \quiz_install()
  12. 7.4 quiz.install \quiz_install()
  13. 7.5 quiz.install \quiz_install()
  14. 6.x quiz.install \quiz_install()

Implementation of hook_install()

File

./quiz.install, line 6

Code

function quiz_install() {
  switch ($GLOBALS['db_type']) {
    case 'mysql':
    case 'mysqli':

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

      // Create the quiz node properties table
      db_query("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.
       */

      // Create the quiz node relationship table
      db_query("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.
       */

      // Create the quiz node question properties table
      db_query("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.
       */

      // Create the quiz node results table
      db_query("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
       */
      db_query("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.
       */

      // Create the quiz node result options table
      db_query("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 */;");
      break;
    case 'pgsql':

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

      // Create the quiz node properties table
      db_query("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        );");
      db_query("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.
       */

      // Create the quiz node relationship table
      db_query("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.
       */

      // Create the quiz node question properties table
      db_query("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.
       */

      // Create the quiz node results table
      db_query("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
       */
      db_query("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.
       */

      // Create the quiz node result options table
      db_query("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        );");
      db_query("CREATE FUNCTION plus_bigint_smallint_unsigned(bigint,smallint_unsigned)\n          RETURNS bigint AS 'select \$1 + \$2::bigint'\n          LANGUAGE 'sql';");
      db_query("CREATE OPERATOR + ( \n          PROCEDURE = plus_bigint_smallint_unsigned, \n          LEFTARG = bigint, \n          RIGHTARG = smallint_unsigned );");
      break;
  }

  // Default the "Show Author and Date" for quiz nodes to OFF.
  $temp_array = variable_get('theme_settings', $default);
  $temp_array['toggle_node_info_quiz'] = 0;
  variable_set('theme_settings', $temp_array);
}