MDL-21432 backup - added inforef and users parsers
authorEloy Lafuente <stronk7@moodle.org>
Wed, 14 Jul 2010 23:53:29 +0000 (23:53 +0000)
committerEloy Lafuente <stronk7@moodle.org>
Wed, 14 Jul 2010 23:53:29 +0000 (23:53 +0000)
backup/util/helper/restore_inforef_parser_processor.class.php [new file with mode: 0644]
backup/util/helper/restore_users_parser_processor.class.php [new file with mode: 0644]

diff --git a/backup/util/helper/restore_inforef_parser_processor.class.php b/backup/util/helper/restore_inforef_parser_processor.class.php
new file mode 100644 (file)
index 0000000..2e308e4
--- /dev/null
@@ -0,0 +1,56 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * @package moodlecore
+ * @subpackage backup-helper
+ * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once($CFG->dirroot.'/backup/util/xml/parser/processors/grouped_parser_processor.class.php');
+
+/**
+ * helper implementation of grouped_parser_processor that will
+ * load all the contents of one inforef.xml file to the backup_ids table
+*
+ * TODO: Complete phpdocs
+ */
+class restore_inforef_parser_processor extends grouped_parser_processor {
+
+    protected $restoreid;
+
+    public function __construct($restoreid) {
+        $this->restoreid = $restoreid;
+        parent::__construct(array());
+        // Get itemnames handled by inforef files
+        $items = backup_helper::get_inforef_itemnames();
+        // Let's add all them as target paths for the processor
+        foreach($items as $itemname) {
+            $pathvalue = '/inforef/' . $itemname . 'ref/' . $itemname;
+            $this->add_path($pathvalue);
+        }
+    }
+
+    protected function dispatch_chunk($data) {
+        // Received one inforef chunck, we are going to store it into backup_ids
+        // table, with name = itemname + "ref" for later use
+        $itemname = basename($data['path']). 'ref';
+        $itemid   = $data['tags']['id'];
+        restore_dbops::set_backup_ids_record($this->restoreid, $itemname, $itemid);
+    }
+}
diff --git a/backup/util/helper/restore_users_parser_processor.class.php b/backup/util/helper/restore_users_parser_processor.class.php
new file mode 100644 (file)
index 0000000..709dcd3
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+
+// This file is part of Moodle - http://moodle.org/
+//
+// Moodle is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// Moodle is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
+
+/**
+ * @package moodlecore
+ * @subpackage backup-helper
+ * @copyright 2010 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
+ * @license   http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+require_once($CFG->dirroot.'/backup/util/xml/parser/processors/grouped_parser_processor.class.php');
+
+/**
+ * helper implementation of grouped_parser_processor that will
+ * load all the contents of one users.xml file to the backup_ids table
+ * storing the whole structure there for later processing.
+ * Note: only "needed" users are loaded (must have userref record in backup_ids)
+ * Note: parentitemid will contain the user->contextid
+ * Note: althought included in backup, we don't restore user context ras/caps
+ * in same site they will be already there and it doesn't seem a good idea
+ * to make them "transportable" arround sites.
+ *
+ * TODO: Complete phpdocs
+ */
+class restore_users_parser_processor extends grouped_parser_processor {
+
+    protected $restoreid;
+
+    public function __construct($restoreid) {
+        $this->restoreid = $restoreid;
+        parent::__construct(array());
+        // Set the paths we are interested on, returning all them grouped under user
+        $this->add_path('/users/user', true);
+        $this->add_path('/users/user/custom_fields/custom_field');
+        $this->add_path('/users/user/tags/tag');
+        $this->add_path('/users/user/preferences/preference');
+        // As noted above, we skip user context ras and caps
+        // $this->add_path('/users/user/roles/role_overrides/override');
+        // $this->add_path('/users/user/roles/role_assignments/assignment');
+    }
+
+    protected function dispatch_chunk($data) {
+        // Received one user chunck, we are going to store it into backup_ids
+        // table, with name = user and parentid = contextid for later use
+        $itemname = 'user';
+        $itemid   = $data['tags']['id'];
+        $parentitemid = $data['tags']['contextid'];
+        $info = $data['tags'];
+        // Only load it if needed (exist same userref itemid in table)
+        if (restore_dbops::get_backup_ids_record($this->restoreid, 'userref', $itemid)) {
+            restore_dbops::set_backup_ids_record($this->restoreid, $itemname, $itemid, 0, $parentitemid, $info);
+        }
+    }
+}