]> git.mjollnir.org Git - moodle.git/commitdiff
Now readjusting course_modules instance and course modinfo
authorstronk7 <stronk7>
Sat, 31 May 2003 15:21:39 +0000 (15:21 +0000)
committerstronk7 <stronk7>
Sat, 31 May 2003 15:21:39 +0000 (15:21 +0000)
os implemented and working

backup/restore_execute.html
backup/restorelib.php

index 9b11d106dfcd642647966435b3799a4e1f2b1b32..256cdfc0d149661cfcb82c1c10712579fff46cfd 100644 (file)
         error("Site not found!");
     }
 
+    //Checks for the required files/functions to restore every module
+    //and include them
+    if ($allmods = get_records("modules") ) {
+        foreach ($allmods as $mod) {
+            $modname = $mod->name;
+            $modfile = "$mods_home/$modname/restorelib.php";
+            //If file exists and we have selected to restore that type of module
+            if ((file_exists($modfile)) and ($restore->mods[$modname]->restore)) {
+               include_once($modfile);
+            }
+        }
+    }
+
     //Start the main table
     echo "<table cellpadding=5>";
     echo "<tr><td>";
 
     //Now create log entries as needed
     if ($status and ($restore->logs)) {
-        echo "<li>Creating Log Entries <b>(not implemented)</b>. Execute after everything...";
+        echo "<li>Creating Log Entries <b>(not implemented!!)</b>";
     }    
 
     //Now, if all is OK, adjust the instance field in course_modules !!
+    if ($status) {
+        echo "<li>Checking Instances";
+        $status = restore_check_instances($restore);
+    }
 
     //Now if all is OK, update course modinfo field !!
+    if ($status) {
+        echo "<li>Checking Course";
+        rebuild_course_cache($restore->course_id);
+    }
+
+    //Cleanup temps (files and db)
 
     //End the main ul
     echo "</ul>";
index 7d66ffe3ab36ce210b3a82fc918fdee96a9e407d..3feb9b69b6b0a2268c04bba3ca582995461a5ee4 100644 (file)
                                     $course_module->deleted = $mod->deleted;
                                     $course_module->score = $mod->score;
                                     $course_module->visible = $mod->visible;
-                                    //NOTE: The instance is calculated and updaed in db in the
+                                    $course_module->instance = null;
+                                    //NOTE: The instance (new) is calculated and updated in db in the
                                     //      final step of the restore. We don't know it yet.
+                                    //print_object($course_module);                                    //Debug
                                     //Save it to db
                                     $newidmod = insert_record("course_modules",$course_module); 
                                     if ($newidmod) {
                                         //save old and new module id
-                                        backup_putid ($restore->backup_unique_code,"course_modules",$keym,$newidmod);
+                                        //In the info field, we save the original instance of the module
+                                        //to use it later
+                                        backup_putid ($restore->backup_unique_code,"course_modules",
+                                                                $keym,$newidmod,$mod->instance);
                                     } else {
                                         $status = false;
                                     }
         //Now, if we have anything in info, we have to restore that mods
         //from backup_ids (calling every mod restore function)
         if ($info) {
-print_object($info);
+            //Iterate over each module
+            foreach ($info as $mod) {
+                $modrestore = $mod->modtype."_restore_mods";
+                if (function_exists($modrestore)) {
+                    $status = $modrestore($mod,$restore);
+                } else {
+                    //Something was wrong. Function should exist.
+                    $status = false;
+                }
+            }
+        } else {
+            $status = false;
+        }
+       return $status; 
+    }
+
+    //This function adjusts the instance field into course_modules. It's executed after
+    //modules restore. There, we KNOW the new instance id !!
+    function restore_check_instances($restore) {
+
+        global $CFG;
+
+        $status = true;
 
+        //We are going to iterate over each course_module saved in backup_ids
+        $course_modules = get_records_sql("SELECT new_id,info as instance
+                                           FROM {$CFG->prefix}backup_ids
+                                           WHERE backup_code = '$restore->backup_unique_code' AND
+                                                 table_name = 'course_modules'");
+        if ($course_modules) {
+            foreach($course_modules as $cm) {
+                //Now we are going to the REAL course_modules to get its type (field module)
+                $module = get_record("course_modules","id",$cm->new_id);
+                if ($module) {
+                    //We know the module type id. Get the name from modules
+                    $type = get_record("modules","id",$module->module);
+                    if ($type) {
+                        //We know the type name and the old_id. Get its new_id
+                        //from backup_ids. It's the instance !!!
+                        $instance = get_record("backup_ids","backup_code",$restore->backup_unique_code,
+                                                            "table_name",$type->name,
+                                                            "old_id",$cm->instance);
+                        if ($instance) {
+                            //We have the new instance, so update the record in course_modules
+                            $module->instance = $instance->new_id;
+                            //print_object ($module);                                                  //Debug
+                            $status = update_record("course_modules",$module);
+                        } else {
+                            $status = false;
+                        }
+                    } else {
+                        $status = false;
+                    }
+                } else {
+                    $status = false;
+               }
+            }
         } else {
             $status = false;
         }
 
-       return $status; 
 
+        return $status;
     }
 
     //=====================================================================================
@@ -1213,8 +1273,8 @@ print_object($info);
                 //    echo "C".str_repeat("&nbsp;",($this->level+2)*2).$this->getContents()."<br>\n";           //Debug
                 //echo $this->level.str_repeat("&nbsp;",$this->level*2)."&lt;/".$tagName."&gt;<br>\n";          //Debug
                 //Acumulate data to info (content + close tag)
-                //Reconvert it to utf & htmlchars and trim to generate xml data
-                $this->temp .= utf8_encode(htmlspecialchars(trim($this->content)))."</".$tagName.">";
+                //Reconvert: strip htmlchars again and trim to generate xml data
+                $this->temp .= htmlspecialchars(trim($this->content))."</".$tagName.">";
                 //If we've finished a mod, xmlize it an save to db
                 if (($this->level == 4) and ($tagName == "MOD")) {
                     //Prepend XML standard header to info gathered
@@ -1238,7 +1298,9 @@ print_object($info);
                         backup_putid($this->preferences->backup_unique_code,$mod_type,$mod_id,
                                      null,$sla_mod_temp);
                         //Create returning info
-                        $this->info[] = array(id => $mod_id,modtype => $mod_type);
+                        $ret_info->id = $mod_id;
+                        $ret_info->modtype = $mod_type;
+                        $this->info[] = $ret_info;
                     }
                     //Reset info to empty
                     $this->temp = "";