Merge branch 'MDL-46455-master-20151012' of git://github.com/damyon/moodle
This commit is contained in:
@@ -112,4 +112,9 @@ class langpack_imported extends \core\event\base {
|
||||
throw new \coding_exception('The \'langcode\' value must be set to a valid language code');
|
||||
}
|
||||
}
|
||||
|
||||
public static function get_other_mapping() {
|
||||
// No mapping required for this event because this event is not backed up.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,4 +113,9 @@ class langpack_removed extends \core\event\base {
|
||||
throw new \coding_exception('The \'langcode\' value must be set to a valid language code');
|
||||
}
|
||||
}
|
||||
|
||||
public static function get_other_mapping() {
|
||||
// No mapping required for this event because this event is not backed up.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -112,4 +112,9 @@ class langpack_updated extends \core\event\base {
|
||||
throw new \coding_exception('The \'langcode\' value must be set to a valid language code');
|
||||
}
|
||||
}
|
||||
|
||||
public static function get_other_mapping() {
|
||||
// No mapping required for this event because this event is not backed up.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Backup support for tool_log logstore subplugins.
|
||||
*
|
||||
* @package tool_log
|
||||
* @category backup
|
||||
* @copyright 2015 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Parent class of all the logstore subplugin implementations.
|
||||
*
|
||||
* Note: While this intermediate class is not strictly required and all the
|
||||
* subplugin implementations can extend directly {@link backup_subplugin},
|
||||
* it is always recommended to have it, both for better testing and also
|
||||
* for sharing code between all subplugins.
|
||||
*/
|
||||
abstract class backup_tool_log_logstore_subplugin extends backup_subplugin {
|
||||
}
|
||||
@@ -0,0 +1,150 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Restore support for tool_log logstore subplugins.
|
||||
*
|
||||
* @package tool_log
|
||||
* @category backup
|
||||
* @copyright 2015 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Parent class of all the logstore subplugin implementations.
|
||||
*
|
||||
* Note: While this intermediate class is not strictly required and all the
|
||||
* subplugin implementations can extend directly {@link restore_subplugin},
|
||||
* it is always recommended to have it, both for better testing and also
|
||||
* for sharing code between all subplugins.
|
||||
*/
|
||||
abstract class restore_tool_log_logstore_subplugin extends restore_subplugin {
|
||||
|
||||
/**
|
||||
* Process log entries.
|
||||
*
|
||||
* This method proceeds to read, complete, remap and, finally,
|
||||
* discard or save every log entry.
|
||||
*
|
||||
* @param array $data log entry.
|
||||
* @return object|null $dataobject A data object with values for one or more fields in the record,
|
||||
* or null if we are not going to process the log.
|
||||
*/
|
||||
protected function process_log($data) {
|
||||
$data = (object) $data;
|
||||
|
||||
// Complete the information that does not come from backup.
|
||||
$contextid = $data->contextid;
|
||||
if (!$data->contextid = $this->get_mappingid('context', $contextid)) {
|
||||
$message = "Context id \"$contextid\" could not be mapped. Skipping log record.";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
return;
|
||||
}
|
||||
$context = context::instance_by_id($data->contextid, MUST_EXIST);
|
||||
$data->contextlevel = $context->contextlevel;
|
||||
$data->contextinstanceid = $context->instanceid;
|
||||
$data->courseid = $this->task->get_courseid();
|
||||
|
||||
// Remap users.
|
||||
$userid = $data->userid;
|
||||
if (!$data->userid = $this->get_mappingid('user', $userid)) {
|
||||
$message = "User id \"$userid\" could not be mapped. Skipping log record.";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
return;
|
||||
}
|
||||
if (!empty($data->relateduserid)) { // This is optional.
|
||||
$relateduserid = $data->relateduserid;
|
||||
if (!$data->relateduserid = $this->get_mappingid('user', $relateduserid)) {
|
||||
$message = "Related user id \"$relateduserid\" could not be mapped. Skipping log record.";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!empty($data->realuserid)) { // This is optional.
|
||||
$realuserid = $data->realuserid;
|
||||
if (!$data->realuserid = $this->get_mappingid('user', $realuserid)) {
|
||||
$message = "Real user id \"$realuserid\" could not be mapped. Skipping log record.";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Roll dates.
|
||||
$data->timecreated = $this->apply_date_offset($data->timecreated);
|
||||
|
||||
// Revert other to its original php way.
|
||||
$data->other = unserialize(base64_decode($data->other));
|
||||
|
||||
// Arrived here, we have both 'objectid' and 'other' to be converted. This is the tricky part.
|
||||
// Both are pointing to other records id, but the sources are not identified in the
|
||||
// same way restore mappings work. So we need to delegate them to some resolver that
|
||||
// will give us the correct restore mapping to be used.
|
||||
if (!empty($data->objectid)) {
|
||||
// Check if there is an available class for this event we can use to map this value.
|
||||
$eventclass = $data->eventname;
|
||||
if (class_exists($eventclass)) {
|
||||
$mapping = $eventclass::get_objectid_mapping();
|
||||
if ($mapping) {
|
||||
// Check if it can not be mapped.
|
||||
if ((is_int($mapping) && $mapping === \core\event\base::NOT_MAPPED) ||
|
||||
($mapping['restore'] === \core\event\base::NOT_MAPPED)) {
|
||||
$data->objectid = \core\event\base::NOT_MAPPED;
|
||||
} else {
|
||||
$data->objectid = $this->get_mappingid($mapping['restore'], $data->objectid);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$message = "Event class not found: \"$eventclass\". Skipping log record.";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
return; // No such class, can not restore.
|
||||
}
|
||||
}
|
||||
if (!empty($data->other)) {
|
||||
// Check if there is an available class for this event we can use to map this value.
|
||||
$eventclass = $data->eventname;
|
||||
if (class_exists($eventclass)) {
|
||||
$othermapping = $eventclass::get_other_mapping();
|
||||
if ($othermapping) {
|
||||
// Go through the data we have.
|
||||
foreach ($data->other as $key => $value) {
|
||||
// Check if there is a corresponding key we can use to map to.
|
||||
if (isset($othermapping[$key]) && !empty($value)) {
|
||||
// Ok, let's map this.
|
||||
$mapping = $othermapping[$key];
|
||||
// Check if it can not be mapped.
|
||||
if ((is_int($mapping) && $mapping === \core\event\base::NOT_MAPPED) ||
|
||||
($mapping['restore'] === \core\event\base::NOT_MAPPED)) {
|
||||
$data->other[$key] = \core\event\base::NOT_MAPPED;
|
||||
} else {
|
||||
$data->other[$key] = $this->get_mappingid($mapping['restore'], $value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// Now we want to serialize it so we can store it in the DB.
|
||||
$data->other = serialize($data->other);
|
||||
} else {
|
||||
$message = "Event class not found: \"$eventclass\". Skipping log record.";
|
||||
$this->log($message, backup::LOG_DEBUG);
|
||||
return; // No such class, can not restore.
|
||||
}
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
}
|
||||
+98
@@ -0,0 +1,98 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Backup implementation for the (tool_log) logstore_database nested element.
|
||||
*
|
||||
* @package logstore_database
|
||||
* @category backup
|
||||
* @copyright 2015 Damyon Wiese <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
/**
|
||||
* Custom subclass of backup_nested_element that iterates over an external DB connection.
|
||||
*
|
||||
* @package logstore_database
|
||||
* @category backup
|
||||
* @copyright 2015 Damyon Wiese <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
class backup_logstore_database_nested_element extends backup_nested_element {
|
||||
|
||||
/**
|
||||
* @var \moodle_database $sourcedb
|
||||
*/
|
||||
protected $sourcedb;
|
||||
|
||||
/**
|
||||
* Constructor - instantiates one backup_nested_element, specifying its basic info.
|
||||
*
|
||||
* @param string $name name of the element
|
||||
* @param array $attributes attributes this element will handle (optional, defaults to null)
|
||||
* @param array $finalelements this element will handle (optional, defaults to null)
|
||||
*/
|
||||
public function __construct($name, $attributes = null, $finalelements = null) {
|
||||
global $DB;
|
||||
|
||||
parent::__construct($name, $attributes, $finalelements);
|
||||
$this->sourcedb = $DB;
|
||||
}
|
||||
|
||||
/**
|
||||
* For sql or table datasources, this will iterate over the "external" DB connection
|
||||
* stored in this class instead of the default $DB. All other cases use the parent default.
|
||||
* @param object $processor the processor
|
||||
*/
|
||||
protected function get_iterator($processor) {
|
||||
if ($this->get_source_table() !== null) { // It's one table, return recordset iterator.
|
||||
return $this->get_source_db()->get_recordset(
|
||||
$this->get_source_table(),
|
||||
backup_structure_dbops::convert_params_to_values($this->procparams, $processor),
|
||||
$this->get_source_table_sortby()
|
||||
);
|
||||
|
||||
} else if ($this->get_source_sql() !== null) { // It's one sql, return recordset iterator.
|
||||
return $this->get_source_db()->get_recordset_sql(
|
||||
$this->get_source_sql(),
|
||||
backup_structure_dbops::convert_params_to_values($this->procparams, $processor)
|
||||
);
|
||||
}
|
||||
|
||||
return parent::get_iterator($processor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the database we want to use.
|
||||
*
|
||||
* @param \moodle_database $db
|
||||
*/
|
||||
public function set_source_db($db) {
|
||||
$this->sourcedb = $db;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the database we want to use.
|
||||
*
|
||||
* @return \moodle_database $db
|
||||
*/
|
||||
public function get_source_db() {
|
||||
return $this->sourcedb;
|
||||
}
|
||||
|
||||
}
|
||||
+65
@@ -0,0 +1,65 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Backup implementation for the (tool_log) logstore_database subplugin.
|
||||
*
|
||||
* @package logstore_database
|
||||
* @category backup
|
||||
* @copyright 2015 Mark Nelson <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
require_once('backup_logstore_database_nested_element.php');
|
||||
|
||||
class backup_logstore_database_subplugin extends backup_tool_log_logstore_subplugin {
|
||||
|
||||
/**
|
||||
* Returns the subplugin structure to attach to the 'logstore' XML element.
|
||||
*
|
||||
* @return backup_subplugin_element the subplugin structure to be attached.
|
||||
*/
|
||||
protected function define_logstore_subplugin_structure() {
|
||||
$subplugin = $this->get_subplugin_element();
|
||||
$subpluginwrapper = new backup_nested_element($this->get_recommended_name());
|
||||
|
||||
// Create the custom (base64 encoded, xml safe) 'other' final element.
|
||||
$otherelement = new base64_encode_final_element('other');
|
||||
|
||||
$subpluginlog = new backup_logstore_database_nested_element('logstore_database_log', array('id'), array(
|
||||
'eventname', 'component', 'action', 'target', 'objecttable',
|
||||
'objectid', 'crud', 'edulevel', 'contextid', 'userid', 'relateduserid',
|
||||
'anonymous', $otherelement, 'timecreated', 'ip', 'realuserid'));
|
||||
|
||||
$subplugin->add_child($subpluginwrapper);
|
||||
$subpluginwrapper->add_child($subpluginlog);
|
||||
|
||||
// Get the details for the external database.
|
||||
$manager = new \tool_log\log\manager();
|
||||
$store = new \logstore_database\log\store($manager);
|
||||
$extdb = $store->get_extdb();
|
||||
|
||||
if (!$extdb) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$subpluginlog->set_source_db($extdb);
|
||||
$subpluginlog->set_source_table($store->get_config_value('dbtable'), array('contextid' => backup::VAR_CONTEXTID));
|
||||
|
||||
return $subplugin;
|
||||
}
|
||||
}
|
||||
+102
@@ -0,0 +1,102 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Restore implementation for the (tool_log) logstore_database subplugin.
|
||||
*
|
||||
* @package logstore_database
|
||||
* @category backup
|
||||
* @copyright 2015 Mark Nelson <[email protected]>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
class restore_logstore_database_subplugin extends restore_tool_log_logstore_subplugin {
|
||||
|
||||
/**
|
||||
* @var moodle_database the external database.
|
||||
*/
|
||||
private static $extdb = null;
|
||||
|
||||
/**
|
||||
* @var string the external database table name.
|
||||
*/
|
||||
private static $extdbtablename = null;
|
||||
|
||||
/**
|
||||
* The constructor for this logstore.
|
||||
*
|
||||
* @param string $subplugintype the subplugin type.
|
||||
* @param string $subpluginname the subplugin name.
|
||||
* @param restore_structure_step $step.
|
||||
*/
|
||||
public function __construct($subplugintype, $subpluginname, $step) {
|
||||
// Check that the logstore is enabled before setting variables.
|
||||
$enabledlogstores = explode(',', get_config('tool_log', 'enabled_stores'));
|
||||
if (in_array('logstore_database', $enabledlogstores)) {
|
||||
$manager = new \tool_log\log\manager();
|
||||
$store = new \logstore_database\log\store($manager);
|
||||
self::$extdb = $store->get_extdb();
|
||||
self::$extdbtablename = $store->get_config_value('dbtable');
|
||||
}
|
||||
|
||||
parent::__construct($subplugintype, $subpluginname, $step);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the subplugin structure to attach to the 'logstore' XML element.
|
||||
*
|
||||
* @return restore_path_element[] array of elements to be processed on restore.
|
||||
*/
|
||||
protected function define_logstore_subplugin_structure() {
|
||||
// If the logstore is not enabled we don't add structures for it.
|
||||
$enabledlogstores = explode(',', get_config('tool_log', 'enabled_stores'));
|
||||
if (!in_array('logstore_database', $enabledlogstores)) {
|
||||
return array(); // The logstore is not enabled, nothing to restore.
|
||||
}
|
||||
|
||||
$paths = array();
|
||||
|
||||
$elename = $this->get_namefor('log');
|
||||
$elepath = $this->get_pathfor('/logstore_database_log');
|
||||
$paths[] = new restore_path_element($elename, $elepath);
|
||||
|
||||
return $paths;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process logstore_database_log entries.
|
||||
*
|
||||
* This method proceeds to read, complete, remap and, finally,
|
||||
* discard or save every log entry.
|
||||
*
|
||||
* @param array() $data log entry.
|
||||
* @return null if we are not restoring the log.
|
||||
*/
|
||||
public function process_logstore_database_log($data) {
|
||||
// Do not bother processing if we can not add it to a database.
|
||||
if (!self::$extdb || !self::$extdbtablename) {
|
||||
return;
|
||||
}
|
||||
|
||||
$data = $this->process_log($data);
|
||||
|
||||
if ($data) {
|
||||
self::$extdb->insert_record(self::$extdbtablename, $data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -258,6 +258,30 @@ class store implements \tool_log\log\writer, \core\log\sql_reader {
|
||||
return $this->extdb->count_records_select($dbtable, $selectwhere, $params);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a config value for the store.
|
||||
*
|
||||
* @param string $name Config name
|
||||
* @param mixed $default default value
|
||||
* @return mixed config value if set, else the default value.
|
||||
*/
|
||||
public function get_config_value($name, $default = null) {
|
||||
return $this->get_config($name, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the external database object.
|
||||
*
|
||||
* @return \moodle_database $extdb
|
||||
*/
|
||||
public function get_extdb() {
|
||||
if (!$this->init()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $this->extdb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Are the new events appearing in the reader?
|
||||
*
|
||||
|
||||
+55
@@ -0,0 +1,55 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Backup implementation for the (tool_log) logstore_standard subplugin.
|
||||
*
|
||||
* @package logstore_standard
|
||||
* @category backup
|
||||
* @copyright 2015 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
class backup_logstore_standard_subplugin extends backup_tool_log_logstore_subplugin {
|
||||
|
||||
/**
|
||||
* Returns the subplugin structure to attach to the 'logstore' XML element.
|
||||
*
|
||||
* @return backup_subplugin_element the subplugin structure to be attached.
|
||||
*/
|
||||
protected function define_logstore_subplugin_structure() {
|
||||
|
||||
$subplugin = $this->get_subplugin_element();
|
||||
$subpluginwrapper = new backup_nested_element($this->get_recommended_name());
|
||||
|
||||
// Create the custom (base64 encoded, xml safe) 'other' final element.
|
||||
$otherelement = new base64_encode_final_element('other');
|
||||
|
||||
$subpluginlog = new backup_nested_element('logstore_standard_log', array('id'), array(
|
||||
'eventname', 'component', 'action', 'target', 'objecttable',
|
||||
'objectid', 'crud', 'edulevel', 'contextid', 'userid', 'relateduserid',
|
||||
'anonymous', $otherelement, 'timecreated', 'ip', 'realuserid'));
|
||||
|
||||
$subplugin->add_child($subpluginwrapper);
|
||||
$subpluginwrapper->add_child($subpluginlog);
|
||||
|
||||
$subpluginlog->set_source_table('logstore_standard_log', array('contextid' => backup::VAR_CONTEXTID));
|
||||
|
||||
return $subplugin;
|
||||
}
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
<?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/>.
|
||||
|
||||
/**
|
||||
* Restore implementation for the (tool_log) logstore_standard subplugin.
|
||||
*
|
||||
* @package logstore_standard
|
||||
* @category backup
|
||||
* @copyright 2015 onwards Eloy Lafuente (stronk7) {@link http://stronk7.com}
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
*/
|
||||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
class restore_logstore_standard_subplugin extends restore_tool_log_logstore_subplugin {
|
||||
|
||||
/**
|
||||
* Returns the subplugin structure to attach to the 'logstore' XML element.
|
||||
*
|
||||
* @return restore_path_element[] array of elements to be processed on restore.
|
||||
*/
|
||||
protected function define_logstore_subplugin_structure() {
|
||||
|
||||
// If the logstore is not enabled we don't add structures for it.
|
||||
$enabledlogstores = explode(',', get_config('tool_log', 'enabled_stores'));
|
||||
if (!in_array('logstore_standard', $enabledlogstores)) {
|
||||
return array(); // The logstore is not enabled, nothing to restore.
|
||||
}
|
||||
|
||||
$paths = array();
|
||||
|
||||
$elename = $this->get_namefor('log');
|
||||
$elepath = $this->get_pathfor('/logstore_standard_log');
|
||||
$paths[] = new restore_path_element($elename, $elepath);
|
||||
|
||||
return $paths;
|
||||
}
|
||||
|
||||
/**
|
||||
* Process logstore_standard_log entries.
|
||||
*
|
||||
* This method proceeds to read, complete, remap and, finally,
|
||||
* discard or save every log entry.
|
||||
*
|
||||
* @param array() $data log entry.
|
||||
*/
|
||||
public function process_logstore_standard_log($data) {
|
||||
global $DB;
|
||||
|
||||
$data = $this->process_log($data);
|
||||
|
||||
if ($data) {
|
||||
$DB->insert_record('logstore_standard_log', $data);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -74,4 +74,9 @@ class rule_created extends \core\event\base {
|
||||
return new \moodle_url('/admin/tool/monitor/edit.php', array('ruleid' => $this->objectid,
|
||||
'courseid' => $this->courseid));
|
||||
}
|
||||
|
||||
public static function get_objectid_mapping() {
|
||||
// No mapping required for this event because event monitor rules are not backed up.
|
||||
return array('db' => 'tool_monitor_rules', 'restore' => \core\event\base::NOT_MAPPED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,4 +73,9 @@ class rule_deleted extends \core\event\base {
|
||||
public function get_url() {
|
||||
return new \moodle_url('/admin/tool/monitor/managerules.php', array('courseid' => $this->courseid));
|
||||
}
|
||||
|
||||
public static function get_objectid_mapping() {
|
||||
// No mapping required for this event because event monitor rules are not backed up.
|
||||
return array('db' => 'tool_monitor_rules', 'restore' => \core\event\base::NOT_MAPPED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -74,4 +74,9 @@ class rule_updated extends \core\event\base {
|
||||
return new \moodle_url('/admin/tool/monitor/edit.php', array('ruleid' => $this->objectid,
|
||||
'courseid' => $this->courseid));
|
||||
}
|
||||
|
||||
public static function get_objectid_mapping() {
|
||||
// No mapping required for this event because event monitor rules are not backed up.
|
||||
return array('db' => 'tool_monitor_rules', 'restore' => \core\event\base::NOT_MAPPED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,4 +64,9 @@ class subscription_created extends \core\event\base {
|
||||
public function get_description() {
|
||||
return "The user with id '$this->userid' created the event monitor subscription with id '$this->objectid'.";
|
||||
}
|
||||
|
||||
public static function get_objectid_mapping() {
|
||||
// No mapping required for this event because event monitor subscriptions are not backed up.
|
||||
return array('db' => 'tool_monitor_subscriptions', 'restore' => \core\event\base::NOT_MAPPED);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,4 +83,9 @@ class subscription_criteria_met extends \core\event\base {
|
||||
throw new \coding_exception('The \'subscriptionid\' value must be set in other.');
|
||||
}
|
||||
}
|
||||
|
||||
public static function get_other_mapping() {
|
||||
// No mapping required for this event because event monitor subscriptions are not backed up.
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,4 +64,9 @@ class subscription_deleted extends \core\event\base {
|
||||
public function get_description() {
|
||||
return "The user with id '$this->userid' deleted the event monitor subscription with id '$this->objectid'.";
|
||||
}
|
||||
|
||||
public static function get_objectid_mapping() {
|
||||
// No mapping required for this event because event monitor subscriptions are not backed up.
|
||||
return array('db' => 'tool_monitor_subscriptions', 'restore' => \core\event\base::NOT_MAPPED);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user