. /** * @package moodlecore * @subpackage backup-moodle2 * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ /** * Class implementing the subplugins support for moodle2 backups * * TODO: Finish phpdocs * TODO: Make this subclass of backup_plugin */ abstract class backup_subplugin { protected $subplugintype; protected $subpluginname; protected $connectionpoint; protected $optigroup; // Optigroup, parent of all optigroup elements public function __construct($subplugintype, $subpluginname, $optigroup) { $this->subplugintype = $subplugintype; $this->subpluginname = $subpluginname; $this->optigroup = $optigroup; $this->connectionpoint = ''; } public function define_subplugin_structure($connectionpoint) { $this->connectionpoint = $connectionpoint; $methodname = 'define_' . $connectionpoint . '_subplugin_structure'; if (method_exists($this, $methodname)) { $this->$methodname(); } } /** * 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($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 . '_' . $this->connectionpoint; $optigroup_element = new backup_subplugin_element($name, $final_elements, $conditionparam, $conditionvalue); $this->optigroup->add_child($optigroup_element); // Add optigroup_element to stay connected since beginning return $optigroup_element; } /** * 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() { return 'subplugin_' . $this->subplugintype . '_' . $this->subpluginname . '_' . $this->connectionpoint; } }