From c3c8f8b87db58d88aad9dd8609ef897bd156eee3 Mon Sep 17 00:00:00 2001 From: Eloy Lafuente Date: Mon, 12 Jul 2010 22:50:20 +0000 Subject: [PATCH] MDL-21432 backup - restore element to completely guide parsing --- .../structure/restore_path_element.class.php | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 backup/util/structure/restore_path_element.class.php diff --git a/backup/util/structure/restore_path_element.class.php b/backup/util/structure/restore_path_element.class.php new file mode 100644 index 00000000000..9914f983bc8 --- /dev/null +++ b/backup/util/structure/restore_path_element.class.php @@ -0,0 +1,138 @@ +. + +/** + * @package moodlecore + * @subpackage backup-structure + * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com} + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * + * TODO: Finish phpdocs + */ + +/** + * Class representing one path to be restored from XML file + */ +class restore_path_element { + + /** @var string name of the element */ + private $name; + + /** @var string path within the XML file this element will handle */ + private $path; + + /** @var bool flag to define if this element will get child ones grouped or no */ + private $grouped; + + /** @var object object instance in charge of processing this element. */ + private $pobject; + + /** @var mixed last data read for this element or returned data by processing method */ + private $data; + + /** + * Constructor - instantiates one restore_path_element, specifying its basic info. + * + * @param string $name name of the element + * @param string $path path of the element + * @param bool $grouped to gather information in grouped mode or no + */ + public function __construct($name, $path, $grouped = false) { + + $this->validate_name($name); // Check name + + $this->name = $name; + $this->path = $path; + $this->grouped = $grouped; + $this->pobject = null; + $this->data = null; + } + + protected function validate_name($name) { + // Validate various name constraints, throwing exception if needed + if (empty($name)) { + throw new restore_path_element_exception('restore_path_element_emptyname', $name); + } + if (preg_replace('/\s/', '', $name) != $name) { + throw new restore_path_element_exception('restore_path_element_whitespace', $name); + } + if (preg_replace('/[^\x30-\x39\x41-\x5a\x5f\x61-\x7a]/', '', $name) != $name) { + throw new restore_path_element_exception('restore_path_element_notasciiname', $name); + } + } + + protected function validate_pobject($pobject) { + if (!is_object($pobject)) { + throw new restore_path_element_exception('restore_path_element_noobject', $pobject); + } + if (!method_exists($pobject, $this->get_processing_method())) { + throw new restore_path_element_exception('restore_path_element_missingmethod', $this->get_processing_method()); + } + } + + +/// Public API starts here + + public function set_processing_object($pobject) { + $this->validate_pobject($pobject); + $this->pobject = $pobject; + } + + public function set_data($data) { + $this->data = $data; + } + public function get_name() { + return $this->name; + } + + public function get_path() { + return $this->path; + } + + public function is_grouped() { + return $this->grouped; + } + + public function get_processing_object() { + return $this->pobject; + } + + public function get_processing_method() { + return 'process_' . $this->name; + } + + public function get_data() { + return $this->data; + } +} + +/** + * restore_path_element exception class + */ +class restore_path_element_exception extends moodle_exception { + + /** + * Constructor - instantiates one restore_path_element_exception + * + * @param string $errorcode key for the corresponding error string + * @param object $a extra words and phrases that might be required in the error string + * @param string $debuginfo optional debugging information + */ + public function __construct($errorcode, $a = null, $debuginfo = null) { + parent::__construct($errorcode, '', '', $a, $debuginfo); + } +}