From 32bf8be85c7e629eb5ab580c7e650115e9655b0e Mon Sep 17 00:00:00 2001 From: Kumi Date: Thu, 13 Jan 2022 08:12:46 +0100 Subject: [PATCH] Check in initial version --- db/access.php | 18 +++++++++++ lang/en/local_replication.php | 11 +++++++ settings.php | 35 ++++++++++++++++++++++ test.php | 12 ++++++++ trigger.php | 56 +++++++++++++++++++++++++++++++++++ version.php | 9 ++++++ 6 files changed, 141 insertions(+) create mode 100644 db/access.php create mode 100644 lang/en/local_replication.php create mode 100644 settings.php create mode 100644 test.php create mode 100644 trigger.php create mode 100644 version.php diff --git a/db/access.php b/db/access.php new file mode 100644 index 0000000..1a92830 --- /dev/null +++ b/db/access.php @@ -0,0 +1,18 @@ + array( + 'riskbitmask' => RISK_DATALOSS, + 'captype' => 'write', + 'contextlevel' => CONTEXT_COURSE, + 'archetypes' => array( + 'editingteacher' => CAP_ALLOW, + 'manager' => CAP_ALLOW + ), + 'clonepermissionsfrom' => 'moodle/course:manageactivities' + ) + +); diff --git a/lang/en/local_replication.php b/lang/en/local_replication.php new file mode 100644 index 0000000..cf9a81b --- /dev/null +++ b/lang/en/local_replication.php @@ -0,0 +1,11 @@ +. + +defined('MOODLE_INTERNAL') || die(); + +if ($hassiteconfig) { + $ADMIN->add('localplugins', new admin_category('local_replication_settings', new lang_string('pluginname', 'local_replication'))); + $settingspage = new admin_settingpage('local_replication', new lang_string('pluginname', 'local_replication')); + + if ($ADMIN->fulltree) { + $settingspage->add(new admin_setting_configtext( + 'local_replication/directory', + new lang_string('directory', 'local_replication'), + new lang_string('directory_help', 'local_replication'), + 1 + )); + } + + $ADMIN->add('localplugins', $settingspage); +} + + diff --git a/test.php b/test.php new file mode 100644 index 0000000..f33b9c6 --- /dev/null +++ b/test.php @@ -0,0 +1,12 @@ +dirroot . '/backup/util/includes/backup_includes.php'); + +$id = $_GET["id"]; +$course = get_course($id); + +$replicationconfig = get_config('local_replication'); +$directory = $replicationconfig->directory; + +$context = context_course::instance($id); + diff --git a/trigger.php b/trigger.php new file mode 100644 index 0000000..f3802bc --- /dev/null +++ b/trigger.php @@ -0,0 +1,56 @@ +dirroot . '/backup/util/includes/backup_includes.php'); + +$id = $_GET["id"]; +$course = get_course($id); + +$replicationconfig = get_config('local_replication'); +$directory = $replicationconfig->directory; + +$context = context_course::instance($id); + +if (!has_capability('local/replication:replicate', $context)) { + die("User not allowed to trigger replication!"); +} + +$bc = new backup_controller(\backup::TYPE_1COURSE, $id, backup::FORMAT_MOODLE, + backup::INTERACTIVE_YES, backup::MODE_GENERAL, $USER->id); + +$tasks = $bc->get_plan()->get_tasks(); +foreach ($tasks as &$task) { + if ($task instanceof \backup_root_task) { + $setting = $task->get_setting('users'); + $setting->set_value('0'); + $setting = $task->get_setting('anonymize'); + $setting->set_value('1'); + $setting = $task->get_setting('role_assignments'); + $setting->set_value('0'); + $setting = $task->get_setting('filters'); + $setting->set_value('0'); + $setting = $task->get_setting('comments'); + $setting->set_value('0'); + $setting = $task->get_setting('logs'); + $setting->set_value('0'); + $setting = $task->get_setting('grade_histories'); + $setting->set_value('0'); + } +} + +$filename = $directory . '/course_' . $id . "_" . $course->category . "_" . date('U') . '.mbz'; + +$bc->set_status(backup::STATUS_AWAITING); +$bc->execute_plan(); + +$result = $bc->get_results(); + +if(isset($result['backup_destination']) && $result['backup_destination']) { + $file = $result['backup_destination']; + + if(!$file->copy_content_to($filename)) { + echo("Problems copying final backup to '". $filename . "'"); + } +} + +echo('Course is now getting replicated. Back to Course Administration'); + diff --git a/version.php b/version.php new file mode 100644 index 0000000..a7e472d --- /dev/null +++ b/version.php @@ -0,0 +1,9 @@ +version = "2021120101"; +$plugin->component = 'local_replication'; +$plugin->maturity = MATURITY_ALPHA; +$plugin->release = 'v0.0.1'; +$plugin->requires = '2019111800';