MDL-22245 backup - improving subplugin support a bit, thanks to David for his comments

This commit is contained in:
Eloy Lafuente
2010-07-03 17:12:39 +00:00
parent c82d7320a7
commit 4abf04ea06
2 changed files with 30 additions and 13 deletions
+21 -8
View File
@@ -80,33 +80,42 @@ class create_taskbasepath_directory extends backup_execution_step {
*/
abstract class backup_activity_structure_step extends backup_structure_step {
protected function add_subplugin_structure($subpluginname, $element, $multiple) {
/**
* Add subplugin structure to any element in the activity backup tree
*
* @param string $subplugintype type of subplugin as defined in activity db/subplugins.php
* @param backup_nested_element $element element in the activity backup tree that
* we are going to add subplugin information to
* @param bool $multiple to define if multiple subplugins can produce information
* for each instance of $element (true) or no (false)
*/
protected function add_subplugin_structure($subplugintype, $element, $multiple) {
global $CFG;
// Check the requested subpluginname is a valid one
// Check the requested subplugintype is a valid one
$subpluginsfile = $CFG->dirroot . '/mod/' . $this->task->get_modulename() . '/db/subplugins.php';
if (!file_exists($subpluginsfile)) {
throw new backup_step_exception('activity_missing_subplugins_php_file', $this->task->get_modulename());
}
include($subpluginsfile);
if (!array_key_exists($subpluginname, $subplugins)) {
throw new backup_step_exception('incorrect_subplugin_type', $subpluginname);
if (!array_key_exists($subplugintype, $subplugins)) {
throw new backup_step_exception('incorrect_subplugin_type', $subplugintype);
}
// Arrived here, subplugin is correct, let's create the optigroup
$optigroupname = $subpluginname . '_' . $element->get_name() . '_subplugin';
$optigroupname = $subplugintype . '_' . $element->get_name() . '_subplugin';
$optigroup = new backup_optigroup($optigroupname, null, $multiple);
// Get all the optigroup_elements, looking across al the subplugin dirs
$elements = array();
$subpluginsdirs = get_plugin_list($subpluginname);
$subpluginsdirs = get_plugin_list($subplugintype);
foreach ($subpluginsdirs as $name => $subpluginsdir) {
$classname = 'backup_' . $subpluginname . '_' . $name . '_subplugin';
$classname = 'backup_' . $subplugintype . '_' . $name . '_subplugin';
$backupfile = $subpluginsdir . '/backup/moodle2/' . $classname . '.class.php';
if (file_exists($backupfile)) {
require_once($backupfile);
$backupsubplugin = new $classname($subpluginname, $name);
$backupsubplugin = new $classname($subplugintype, $name);
// Add subplugin returned structure to optigroup (must be optigroup_element instance)
if ($subpluginstructure = $backupsubplugin->define_subplugin_structure($element->get_name())) {
$optigroup->add_child($subpluginstructure);
@@ -117,6 +126,10 @@ abstract class backup_activity_structure_step extends backup_structure_step {
$element->add_child($optigroup);
}
/**
* Wraps any activity backup structure within the common 'activity' element
* that will include common to all activities information like id, context...
*/
protected function prepare_activity_structure($activitystructure) {
// Create the wrap element
+9 -5
View File
@@ -31,18 +31,22 @@ abstract class backup_subplugin {
protected $subplugintype;
protected $subpluginname;
protected $connectionpoint;
public function __construct($subplugintype, $subpluginname) {
$this->subplugintype = $subplugintype;
$this->subpluginname = $subpluginname;
$this->connectionpoint = '';
}
public function define_subplugin_structure($connectionpoint) {
$this->connectionpoint = $connectionpoint;
$methodname = 'define_' . $connectionpoint . '_subplugin_structure';
if (method_exists($this, $methodname)) {
return $this->$methodname($connectionpoint);
return $this->$methodname();
}
return false;
@@ -52,10 +56,10 @@ abstract class backup_subplugin {
* Factory method that will return one backup_subplugin_element (backup_optigroup_element)
* with its name automatically calculated, based one the subplugin being handled (type, name)
*/
protected function get_subplugin_element($connectionpoint, $final_elements = null, $conditionparam = null, $conditionvalue = null) {
protected function get_subplugin_element($final_elements = null, $conditionparam = null, $conditionvalue = null) {
// Something exclusive for this backup_subplugin_element (backup_optigroup_element)
// because it hasn't XML representation
$name = 'optigroup_' . $this->subplugintype . '_' . $this->subpluginname . '_' . $connectionpoint;
$name = 'optigroup_' . $this->subplugintype . '_' . $this->subpluginname . '_' . $this->connectionpoint;
return new backup_subplugin_element($name, $final_elements, $conditionparam, $conditionvalue);
}
@@ -63,8 +67,8 @@ abstract class backup_subplugin {
* Simple helper function that suggests one name for the main nested element in subplugins
* It's not mandatory to use it but recommended ;-)
*/
protected function get_recommended_name($connectionpoint) {
return 'subplugin_' . $this->subplugintype . '_' . $this->subpluginname . '_' . $connectionpoint;
protected function get_recommended_name() {
return 'subplugin_' . $this->subplugintype . '_' . $this->subpluginname . '_' . $this->connectionpoint;
}
}