| Server IP : 165.22.154.248 / Your IP : 216.73.217.0 [ Web Server : Apache/2.4.29 (Ubuntu) System : Linux droplet-integra 4.15.0-197-generic #208-Ubuntu SMP Tue Nov 1 17:23:37 UTC 2022 x86_64 User : www-data ( 33) PHP Version : 7.2.24-0ubuntu0.18.04.15 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, Domains : 1 Domains MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/avanza-lms.old.bak9874115/backup/util/structure/ |
Upload File : |
<?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-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
*/
/**
* Instantiable class defining the process of backup structures
*
* This class will process the given backup structure (nested/final/attribute)
* based on its definition, triggering as many actions as necessary (pre/post
* triggers, ids annotations, deciding based on settings, xml output...). Somehow
* one visitor pattern to allow backup structures to work with nice decoupling
*/
class backup_structure_processor extends base_processor {
protected $writer; // xml_writer where the processor is going to output data
protected $vars; // array of backup::VAR_XXX => helper value pairs to be used by source specifications
/**
* @var \core\progress\base Progress tracker (null if none)
*/
protected $progress;
/**
* Constructor.
*
* @param xml_writer $writer XML writer to save data
* @param c\core\progress\base$progress Progress tracker (optional)
*/
public function __construct(xml_writer $writer, \core\progress\base $progress = null) {
$this->writer = $writer;
$this->progress = $progress;
$this->vars = array();
}
public function set_var($key, $value) {
if (isset($this->vars[$key])) {
throw new backup_processor_exception('processorvariablealreadyset', $key);
}
$this->vars[$key] = $value;
}
public function get_var($key) {
if (!isset($this->vars[$key])) {
throw new backup_processor_exception('processorvariablenotfound', $key);
}
return $this->vars[$key];
}
public function pre_process_nested_element(base_nested_element $nested) {
// Send open tag to xml_writer
$attrarr = array();
foreach ($nested->get_attributes() as $attribute) {
$attrarr[$attribute->get_name()] = $attribute->get_value();
}
$this->writer->begin_tag($nested->get_name(), $attrarr);
}
public function process_nested_element(base_nested_element $nested) {
// Proceed with all the file annotations for this element
$fileannotations = $nested->get_file_annotations();
if ($fileannotations) { // If there are areas to search
$backupid = $this->get_var(backup::VAR_BACKUPID);
foreach ($fileannotations as $component => $area) {
foreach ($area as $filearea => $info) {
$contextid = !is_null($info->contextid) ? $info->contextid : $this->get_var(backup::VAR_CONTEXTID);
$itemid = !is_null($info->element) ? $info->element->get_value() : null;
backup_structure_dbops::annotate_files($backupid, $contextid, $component, $filearea, $itemid, $this->progress);
}
}
}
}
public function post_process_nested_element(base_nested_element $nested) {
// Send close tag to xml_writer
$this->writer->end_tag($nested->get_name());
if ($this->progress) {
$this->progress->progress();
}
}
public function process_final_element(base_final_element $final) {
// Send full tag to xml_writer and annotations (only if has value)
if ($final->is_set()) {
$attrarr = array();
foreach ($final->get_attributes() as $attribute) {
$attrarr[$attribute->get_name()] = $attribute->get_value();
}
$this->writer->full_tag($final->get_name(), $final->get_value(), $attrarr);
if ($this->progress) {
$this->progress->progress();
}
// Annotate current value if configured to do so
$final->annotate($this->get_var(backup::VAR_BACKUPID));
}
}
public function process_attribute(base_attribute $attribute) {
// Annotate current value if configured to do so
$attribute->annotate($this->get_var(backup::VAR_BACKUPID));
}
}
/**
* backup_processor exception to control all the errors while working with backup_processors
*
* This exception will be thrown each time the backup_processors detects some
* inconsistency related with the elements to process or its configuration
*/
class backup_processor_exception extends base_processor_exception {
/**
* Constructor - instantiates one backup_processor_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);
}
}