diff --git a/backup/moodle2/backup_stepslib.php b/backup/moodle2/backup_stepslib.php index 17b2b3b0f26..4d24a91dffc 100644 --- a/backup/moodle2/backup_stepslib.php +++ b/backup/moodle2/backup_stepslib.php @@ -689,7 +689,7 @@ class backup_gradebook_structure_step extends backup_structure_step { // Define sources //Include manual, category and the course grade item - $grade_items_sql ="SELECT * FROM {grade_items} + $grade_items_sql ="SELECT * FROM {grade_items} WHERE courseid = :courseid AND (itemtype='manual' OR itemtype='course' OR itemtype='category')"; $grade_items_params = array('courseid'=>backup::VAR_COURSEID); diff --git a/backup/moodle2/restore_activity_task.class.php b/backup/moodle2/restore_activity_task.class.php index 8a414c29179..76e6c3b7814 100644 --- a/backup/moodle2/restore_activity_task.class.php +++ b/backup/moodle2/restore_activity_task.class.php @@ -164,6 +164,7 @@ abstract class restore_activity_task extends restore_task { // Find activity_included_setting if (!$this->get_setting_value('included')) { $this->log('activity skipped by _included setting', backup::LOG_DEBUG, $this->name); + $this->plan->set_excluding_activities(); // Inform plan we are excluding actvities } else { // Setting tells us it's ok to execute parent::execute(); diff --git a/backup/moodle2/restore_plan_builder.class.php b/backup/moodle2/restore_plan_builder.class.php index 9ad332a4b99..3f096899e4d 100644 --- a/backup/moodle2/restore_plan_builder.class.php +++ b/backup/moodle2/restore_plan_builder.class.php @@ -124,7 +124,10 @@ abstract class restore_plan_builder { // TODO: Debug information about block not supported } } + } else { // Activity is missing in target site, inform plan about that + $plan->set_missing_modules(); } + } /** diff --git a/backup/moodle2/restore_stepslib.php b/backup/moodle2/restore_stepslib.php index f7061bbf868..648b9cd9322 100644 --- a/backup/moodle2/restore_stepslib.php +++ b/backup/moodle2/restore_stepslib.php @@ -87,6 +87,17 @@ class restore_gradebook_step extends restore_structure_step { return false; } + // Some module present in backup file isn't available to restore + // in this site, don't execute + if ($this->task->is_missing_modules()) { + return false; + } + + // Some activity has been excluded to be restored, don't execute + if ($this->task->is_excluding_activities()) { + return false; + } + // Arrived here, execute the step return true; } diff --git a/backup/util/plan/restore_plan.class.php b/backup/util/plan/restore_plan.class.php index 711ca3eae1f..355c4a3bfc5 100644 --- a/backup/util/plan/restore_plan.class.php +++ b/backup/util/plan/restore_plan.class.php @@ -37,6 +37,8 @@ class restore_plan extends base_plan implements loggable { protected $basepath; // Fullpath to dir where backup is available protected $preloaded; // When executing the plan, do we have preloaded (from checks) info protected $decoder; // restore_decode_processor in charge of decoding all the interlinks + protected $missingmodules; // to flag if restore has detected some missing module + protected $excludingdactivities; // to flag if restore settings are excluding any activity /** * Constructor - instantiates one object of this class @@ -51,6 +53,9 @@ class restore_plan extends base_plan implements loggable { $this->basepath = $CFG->dataroot . '/temp/backup/' . $controller->get_tempdir(); $this->preloaded = false; $this->decoder = new restore_decode_processor($this->get_restoreid(), $this->get_info()->original_wwwroot, $CFG->wwwroot); + $this->missingmodules = false; + $this->excludingdactivities = false; + parent::__construct('restore_plan'); } @@ -96,6 +101,14 @@ class restore_plan extends base_plan implements loggable { return $this->controller->is_samesite(); } + public function is_missing_modules() { + return $this->missingmodules; + } + + public function is_excluding_activities() { + return $this->excludingdactivities; + } + public function set_preloaded_information() { $this->preloaded = true; } @@ -108,6 +121,14 @@ class restore_plan extends base_plan implements loggable { return $this->controller->get_tempdir(); } + public function set_missing_modules() { + $this->missingmodules = true; + } + + public function set_excluding_activities() { + $this->excludingdactivities = true; + } + public function log($message, $level, $a = null, $depth = null, $display = false) { backup_helper::log($message, $level, $a, $depth, $display, $this->get_logger()); } diff --git a/backup/util/plan/restore_task.class.php b/backup/util/plan/restore_task.class.php index 108b22219d4..11beb743028 100644 --- a/backup/util/plan/restore_task.class.php +++ b/backup/util/plan/restore_task.class.php @@ -63,6 +63,14 @@ abstract class restore_task extends base_task { return $this->plan->is_samesite(); } + public function is_missing_modules() { + return $this->plan->is_missing_modules(); + } + + public function is_excluding_activities() { + return $this->plan->is_excluding_activities(); + } + public function set_preloaded_information() { $this->plan->set_preloaded_information(); }