MDL-55605 mod_lesson: Fix activitylinks restore bug
authorKenneth Hendricks <kennethhendricks@catalyst-au.net>
Wed, 17 Aug 2016 07:12:51 +0000 (17:12 +1000)
committerKenneth Hendricks <kennethhendricks@catalyst-au.net>
Thu, 18 Aug 2016 06:35:34 +0000 (16:35 +1000)
mod/lesson/backup/moodle2/restore_lesson_activity_task.class.php
mod/lesson/backup/moodle2/restore_lesson_stepslib.php

index 3f4f8a1..099dea0 100644 (file)
@@ -119,4 +119,43 @@ class restore_lesson_activity_task extends restore_activity_task {
 
         return $rules;
     }
 
         return $rules;
     }
+
+
+    /**
+     * Re-map the dependency and activitylink information
+     * If a depency or activitylink has no mapping in the backup data then it could either be a duplication of a
+     * lesson, or a backup/restore of a single lesson. We have no way to determine which and whether this is the
+     * same site and/or course. Therefore we try and retrieve a mapping, but fallback to the original value if one
+     * was not found. We then test to see whether the value found is valid for the course being restored into.
+     */
+    public function after_restore() {
+        global $DB;
+
+        $lesson = $DB->get_record('lesson', array('id' => $this->get_activityid()), 'id, course, dependency, activitylink');
+        $updaterequired = false;
+
+        if (!empty($lesson->dependency)) {
+            $updaterequired = true;
+            if ($newitem = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'lesson', $lesson->dependency)) {
+                $lesson->dependency = $newitem->newitemid;
+            }
+            if (!$DB->record_exists('lesson', array('id' => $lesson->dependency, 'course' => $lesson->course))) {
+                $lesson->dependency = 0;
+            }
+        }
+
+        if (!empty($lesson->activitylink)) {
+            $updaterequired = true;
+            if ($newitem = restore_dbops::get_backup_ids_record($this->get_restoreid(), 'course_module', $lesson->activitylink)) {
+                $lesson->activitylink = $newitem->newitemid;
+            }
+            if (!$DB->record_exists('course_modules', array('id' => $lesson->activitylink, 'course' => $lesson->course))) {
+                $lesson->activitylink = 0;
+            }
+        }
+
+        if ($updaterequired) {
+            $DB->update_record('lesson', $lesson);
+        }
+    }
 }
 }
index 38a33a4..1edbf1c 100644 (file)
@@ -330,32 +330,5 @@ class restore_lesson_activity_structure_step extends restore_activity_structure_
         }
 
         $DB->execute($sql);
         }
 
         $DB->execute($sql);
-
-        // Re-map the dependency and activitylink information
-        // If a depency or activitylink has no mapping in the backup data then it could either be a duplication of a
-        // lesson, or a backup/restore of a single lesson. We have no way to determine which and whether this is the
-        // same site and/or course. Therefore we try and retrieve a mapping, but fallback to the original value if one
-        // was not found. We then test to see whether the value found is valid for the course being restored into.
-        $lesson = $DB->get_record('lesson', array('id' => $this->task->get_activityid()), 'id, course, dependency, activitylink');
-        $updaterequired = false;
-        if (!empty($lesson->dependency)) {
-            $updaterequired = true;
-            $lesson->dependency = $this->get_mappingid('lesson', $lesson->dependency, $lesson->dependency);
-            if (!$DB->record_exists('lesson', array('id' => $lesson->dependency, 'course' => $lesson->course))) {
-                $lesson->dependency = 0;
-            }
-        }
-
-        if (!empty($lesson->activitylink)) {
-            $updaterequired = true;
-            $lesson->activitylink = $this->get_mappingid('course_module', $lesson->activitylink, $lesson->activitylink);
-            if (!$DB->record_exists('course_modules', array('id' => $lesson->activitylink, 'course' => $lesson->course))) {
-                $lesson->activitylink = 0;
-            }
-        }
-
-        if ($updaterequired) {
-            $DB->update_record('lesson', $lesson);
-        }
     }
 }
     }
 }