Skip to content

Commit

Permalink
MDL-27636 restore - add support for after_restore() to plugins. Credi…
Browse files Browse the repository at this point in the history
…t goes to Mark Nielsen. Thanks!
  • Loading branch information
stronk7 committed May 26, 2011
1 parent 16b5541 commit c44299c
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 0 deletions.
17 changes: 17 additions & 0 deletions backup/moodle2/restore_plugin.class.php
Expand Up @@ -80,6 +80,23 @@ public function launch_after_execute_methods() {
} }
} }


/**
* after_restore dispatcher for any restore_plugin class
*
* This method will dispatch execution to the corresponding
* after_restore_xxx() method when available, with xxx
* being the connection point of the instance, so plugin
* classes with multiple connection points will support
* multiple after_restore methods, one for each connection point
*/
public function launch_after_restore_methods() {
// Check if the after_restore method exists and launch it
$afterrestore = 'after_restore_' . basename($this->connectionpoint->get_path());
if (method_exists($this, $afterrestore)) {
$this->$afterrestore();
}
}

/** /**
* Returns one array with all the decode contents * Returns one array with all the decode contents
* to be processed by the links decoder * to be processed by the links decoder
Expand Down
37 changes: 37 additions & 0 deletions backup/util/plan/restore_structure_step.class.php
Expand Up @@ -360,6 +360,43 @@ protected function launch_after_execute_methods() {


} }


/**
* Launch all the after_restore methods present in all the processing objects
*
* This method will launch all the after_restore methods that can be defined
* both in restore_plugin class
*
* For restore_plugin classes the name of the method to be executed will be
* "after_restore_" + connection point (as far as can be multiple connection
* points in the same class)
*/
public function launch_after_restore_methods() {
$alreadylaunched = array(); // To avoid multiple executions
foreach ($this->pathelements as $pathelement) {
// Get the processing object
$pobject = $pathelement->get_processing_object();
// Skip null processors (child of grouped ones for sure)
if (is_null($pobject)) {
continue;
}
// Skip restore structure step processors (this)
if ($pobject instanceof restore_structure_step) {
continue;
}
// Skip already launched processing objects
if (in_array($pobject, $alreadylaunched, true)) {
continue;
}
// Add processing object to array of launched ones
$alreadylaunched[] = $pobject;
// If the processing object has support for
// launching after_restore methods, use it
if (method_exists($pobject, 'launch_after_restore_methods')) {
$pobject->launch_after_restore_methods();
}
}
}

/** /**
* This method will be executed after the whole structure step have been processed * This method will be executed after the whole structure step have been processed
* *
Expand Down
7 changes: 7 additions & 0 deletions backup/util/plan/restore_task.class.php
Expand Up @@ -100,6 +100,13 @@ public function get_old_system_contextid() {
* method if available * method if available
*/ */
public function execute_after_restore() { public function execute_after_restore() {
if ($this->executed) {
foreach ($this->steps as $step) {
if (method_exists($step, 'launch_after_restore_methods')) {
$step->launch_after_restore_methods();
}
}
}
if ($this->executed && method_exists($this, 'after_restore')) { if ($this->executed && method_exists($this, 'after_restore')) {
$this->after_restore(); $this->after_restore();
} }
Expand Down

0 comments on commit c44299c

Please sign in to comment.