]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-13034 fixes "insertion of question / category ids at the CONTEXT_MODULE level...
authorjamiesensei <jamiesensei>
Fri, 18 Jan 2008 14:49:59 +0000 (14:49 +0000)
committerjamiesensei <jamiesensei>
Fri, 18 Jan 2008 14:49:59 +0000 (14:49 +0000)
mod/quiz/backuplib.php
question/backuplib.php

index fe289d3393c8185b09e05b1ffab491d1476fe90d..526847ec446792800de4edf02640037360e528e1 100644 (file)
     // the data about student interaction with the questions. The functions to do
     // that are included with the following library
     require_once("$CFG->dirroot/question/backuplib.php");
-
+    
     /*
-     * Insert necessary category ids to backup_ids table. Called during backup_check.html
+     * Insert necessary category ids to backup_ids table. Called during backup_check.html.
+     * This backs up ids for quiz module. It backs up :
+     *     all categories and questions in course
+     *     all categories and questions in contexts of quiz module instances which have been selected for backup
+     *     all categories and questions in contexts above course level that are used by quizzes that have been selected for backup
      */
     function insert_category_and_question_ids($course, $backup_unique_code, $instances = null) {
         global $CFG;
-
+        $status = true;
+        
         // Create missing categories and reasign orphaned questions.
         fix_orphaned_questions($course);
-        // First, all categories from this course's context.
+
         $coursecontext = get_context_instance(CONTEXT_COURSE, $course);
-        $status = execute_sql("INSERT INTO {$CFG->prefix}backup_ids
-                                   (backup_code, table_name, old_id, info)
-                               SELECT '$backup_unique_code', 'question_categories', qc.id, ''
-                               FROM {$CFG->prefix}question_categories qc
-                               WHERE qc.contextid = {$coursecontext->id}", false);
-
-
-        // then, all categories from this course's modules' contexts.
-        // using 'dummykeyname' in sql because otherwise get_records_sql_menu returns an error
-        // if two key names are the same.
-        $cmcontexts = get_records_sql_menu("SELECT c.id, c.id AS dummykeyname FROM {$CFG->prefix}modules m,
-                                                        {$CFG->prefix}course_modules cm,
-                                                        {$CFG->prefix}context c
-                               WHERE m.name = 'quiz' AND m.id = cm.module AND cm.id = c.instanceid
-                                    AND c.contextlevel = ".CONTEXT_MODULE." AND cm.course = $course");
-        if ($cmcontexts){
-            $status = $status && execute_sql("INSERT INTO {$CFG->prefix}backup_ids
-                                       (backup_code, table_name, old_id, info)
-                                   SELECT '$backup_unique_code', 'question_categories', qc.id, ''
-                                   FROM {$CFG->prefix}question_categories qc
-                                   WHERE qc.contextid IN (".join(array_keys($cmcontexts), ', ').")", false);
-        }
-        //put the ids of the questions from all these categories into the db.
-        $status = $status && execute_sql("INSERT INTO {$CFG->prefix}backup_ids
-                                       (backup_code, table_name, old_id, info)
-                                       SELECT '$backup_unique_code', 'question', q.id, ''
-                                       FROM {$CFG->prefix}question q, {$CFG->prefix}backup_ids bk
-                                       WHERE q.category = bk.old_id AND bk.table_name = 'question_categories' AND
-                                        bk.backup_code = '$backup_unique_code'", false);
+        $status = $status && question_insert_c_and_q_ids_for_course($coursecontext, $backup_unique_code);
+        
+        // then, all categories and questions from this course's modules' contexts.
+        $status = $status && question_insert_c_and_q_ids_for_module($backup_unique_code, $course, 'quiz', $instances);
+
 
         // Then categories from parent contexts used by the quizzes we are backing up.
         //TODO this will need generalising when we have modules other than quiz using shared questions above course level.
         }
         return $status;
     }
-
+    
     /**
      * Helper function adding the id of all the subcategories of a category to an array.
      */
    ////Return an array of info (name,value)
 /// $instances is an array with key = instanceid, value = object (name,id,userdata)
    function quiz_check_backup_mods($course,$user_data= false,$backup_unique_code,$instances=null) {
-        //Deletes data from mdl_backup_ids (categories section)
-        delete_ids ($backup_unique_code, 'question_categories');
-        delete_ids ($backup_unique_code, 'question');
         //this function selects all the questions / categories to be backed up.
         insert_category_and_question_ids($course, $backup_unique_code, $instances);
         if ($course != SITEID){
index a6fb5655b44e803f28b67d11cf055cf21e7bb42d..c56214375dd41b1d752412ca9cdde575810d8156 100644 (file)
                                  WHERE backup_code = '$backup_unique_code' AND
                                        table_name = 'question'");
     }
+    
+    //Function for inserting question and category ids into db that are all called from
+    // quiz_check_backup_mods during execution of backup_check.html 
 
-    //Delete category ids from backup_ids table
-    function delete_ids ($backup_unique_code, $tablename) {
+
+    function question_insert_c_and_q_ids_for_course($coursecontext, $backup_unique_code){
+        global $CFG;
+            // First, all categories from this course's context.
+        $status = execute_sql("INSERT INTO {$CFG->prefix}backup_ids
+                                   (backup_code, table_name, old_id, info)
+                               SELECT '$backup_unique_code', 'question_categories', qc.id, 'course'
+                               FROM {$CFG->prefix}question_categories qc
+                               WHERE qc.contextid = {$coursecontext->id}", false);
+        $status = $status && question_insert_q_ids($backup_unique_code, 'course');
+        return $status;
+    }
+    /*
+     * Insert all question ids for categories whose ids have already been inserted in the backup_ids table
+     * Insert code to identify categories to later insert all question ids later eg. course, quiz or other module name.
+     */
+    function question_insert_q_ids($backup_unique_code, $info){
+        global $CFG;
+            //put the ids of the questions from all these categories into the db.
+        $status = execute_sql("INSERT INTO {$CFG->prefix}backup_ids
+                                       (backup_code, table_name, old_id, info)
+                                       SELECT '$backup_unique_code', 'question', q.id, ''
+                                       FROM {$CFG->prefix}question q, {$CFG->prefix}backup_ids bk
+                                       WHERE q.category = bk.old_id AND bk.table_name = 'question_categories' 
+                                       AND bk.info = '$info'
+                                       AND bk.backup_code = '$backup_unique_code'", false);
+        return $status;
+    }
+    
+    function question_insert_c_and_q_ids_for_module($backup_unique_code, $course, $modulename, $instances){
         global $CFG;
-        $status = execute_sql("DELETE FROM {$CFG->prefix}backup_ids
-                               WHERE backup_code = '$backup_unique_code' AND table_name = '$tablename'",false);
+        $status = true;
+            // using 'dummykeyname' in sql because otherwise get_records_sql_menu returns an error
+        // if two key names are the same.
+        $cmcontexts = get_records_sql_menu("SELECT c.id, c.id AS dummykeyname FROM {$CFG->prefix}modules m,
+                                                        {$CFG->prefix}course_modules cm,
+                                                        {$CFG->prefix}context c
+                               WHERE m.name = 'quiz' AND m.id = cm.module AND cm.id = c.instanceid
+                                    AND c.contextlevel = ".CONTEXT_MODULE." AND cm.course = $course
+                                    AND cm.instance IN (".implode(',',array_keys($instances)).")");
+                                    
+        if ($cmcontexts){
+            $status = $status && execute_sql("INSERT INTO {$CFG->prefix}backup_ids
+                                       (backup_code, table_name, old_id, info)
+                                   SELECT '$backup_unique_code', 'question_categories', qc.id, '$modulename'
+                                   FROM {$CFG->prefix}question_categories qc
+                                   WHERE qc.contextid IN (".join(array_keys($cmcontexts), ', ').")", false);
+        }
+        $status = $status && question_insert_q_ids($backup_unique_code, $modulename);
         return $status;
     }
+
     function question_insert_site_file_names($course, $backup_unique_code){
         global $QTYPES, $CFG;
         $status = true;