Merge branch 'MDL-73397-master' of https://github.com/aanabit/moodle

This commit is contained in:
Shamim Rezaie 2022-01-04 22:48:40 +11:00
commit 64915bed6d
94 changed files with 1725 additions and 1584 deletions

View file

@ -45,6 +45,7 @@
"subsystems": {
"access": null,
"admin": "admin",
"adminpresets": "adminpresets",
"analytics": "analytics",
"antivirus": "lib\/antivirus",
"auth": "auth",

View file

@ -331,4 +331,8 @@ function xmldb_main_install() {
require_once($CFG->dirroot . '/badges/upgradelib.php'); // Core install and upgrade related functions only for badges.
badges_install_default_backpacks();
// Create default core site admin presets.
require_once($CFG->dirroot . '/adminpresets/classes/helper.php');
\core_adminpresets\helper::create_default_presets();
}

View file

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" ?>
<XMLDB PATH="lib/db" VERSION="20211106" COMMENT="XMLDB file for core Moodle tables"
<XMLDB PATH="lib/db" VERSION="20211221" COMMENT="XMLDB file for core Moodle tables"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="../../lib/xmldb/xmldb.xsd"
>
@ -4497,5 +4497,130 @@
<KEY NAME="usermodified" TYPE="foreign" FIELDS="usermodified" REFTABLE="user" REFFIELDS="id"/>
</KEYS>
</TABLE>
<TABLE NAME="adminpresets" COMMENT="Table to store presets data">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="name" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="comments" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="site" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="author" TYPE="char" LENGTH="255" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="moodleversion" TYPE="char" LENGTH="20" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="moodlerelease" TYPE="char" LENGTH="255" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="iscore" TYPE="int" LENGTH="1" NOTNULL="true" DEFAULT="0" SEQUENCE="false" COMMENT="Whether this is a
core preset or not"/>
<FIELD NAME="timecreated" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="timeimported" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" DEFAULT="0" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
</TABLE>
<TABLE NAME="adminpresets_it" COMMENT="Table to store settings">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="adminpresetid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="plugin" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="name" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="value" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="adminpresetid" UNIQUE="false" FIELDS="adminpresetid"/>
</INDEXES>
</TABLE>
<TABLE NAME="adminpresets_it_a"
COMMENT="Admin presets items attributes. For settings with attributes (extra values like 'advanced')">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="itemid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="name" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="value" TYPE="text" LENGTH="medium" NOTNULL="false" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="itemid" UNIQUE="false" FIELDS="itemid"/>
</INDEXES>
</TABLE>
<TABLE NAME="adminpresets_app" COMMENT="Applied presets">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="adminpresetid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="userid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="time" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="adminpresetid" UNIQUE="false" FIELDS="adminpresetid"/>
</INDEXES>
</TABLE>
<TABLE NAME="adminpresets_app_it" COMMENT="Admin presets applied items. To maintain the relation with config_log">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="adminpresetapplyid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="configlogid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="configlogid" UNIQUE="false" FIELDS="configlogid"/>
<INDEX NAME="adminpresetapplyid" UNIQUE="false" FIELDS="adminpresetapplyid"/>
</INDEXES>
</TABLE>
<TABLE NAME="adminpresets_app_it_a" COMMENT="Attributes of the applied items">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="adminpresetapplyid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="configlogid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="itemname" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false" COMMENT="Necessary to rollback"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="configlogid" UNIQUE="false" FIELDS="configlogid"/>
<INDEX NAME="adminpresetapplyid" UNIQUE="false" FIELDS="adminpresetapplyid"/>
</INDEXES>
</TABLE>
<TABLE NAME="adminpresets_plug"
COMMENT="Admin presets plugins status, to store information about whether they are enabled or not">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="adminpresetid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="plugin" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="name" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="enabled" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="0" SEQUENCE="false"
COMMENT="Whether this plugins is currently enabled."/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="adminpresetid" UNIQUE="false" FIELDS="adminpresetid"/>
</INDEXES>
</TABLE>
<TABLE NAME="adminpresets_app_plug" COMMENT="Admin presets plugins applied">
<FIELDS>
<FIELD NAME="id" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="true" SEQUENCE="true"/>
<FIELD NAME="adminpresetapplyid" TYPE="int" LENGTH="10" NOTNULL="true" UNSIGNED="false" SEQUENCE="false"/>
<FIELD NAME="plugin" TYPE="char" LENGTH="100" NOTNULL="false" SEQUENCE="false"/>
<FIELD NAME="name" TYPE="char" LENGTH="100" NOTNULL="true" SEQUENCE="false"/>
<FIELD NAME="value" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
<FIELD NAME="oldvalue" TYPE="int" LENGTH="4" NOTNULL="true" DEFAULT="0" SEQUENCE="false"/>
</FIELDS>
<KEYS>
<KEY NAME="primary" TYPE="primary" FIELDS="id"/>
</KEYS>
<INDEXES>
<INDEX NAME="adminpresetapplyid" UNIQUE="false" FIELDS="adminpresetapplyid"/>
</INDEXES>
</TABLE>
</TABLES>
</XMLDB>

View file

@ -3322,5 +3322,221 @@ privatefiles,moodle|/user/files.php';
upgrade_main_savepoint(true, 2021122100.02);
}
if ($oldversion < 2021123000.01) {
// The tool_admin_presets tables have been moved to core, because core_adminpresets component has been created, so
// it can interact with the rest of core.
// So the tool_admin_presetsXXX tables will be renamed to adminipresetsXXX if they exists; otherwise, they will be created.
$tooltable = new xmldb_table('tool_admin_presets');
$table = new xmldb_table('adminpresets');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('name', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
$table->add_field('comments', XMLDB_TYPE_TEXT, null, null, null, null, null);
$table->add_field('site', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
$table->add_field('author', XMLDB_TYPE_CHAR, '255', null, null, null, null);
$table->add_field('moodleversion', XMLDB_TYPE_CHAR, '20', null, XMLDB_NOTNULL, null, null);
$table->add_field('moodlerelease', XMLDB_TYPE_CHAR, '255', null, XMLDB_NOTNULL, null, null);
$table->add_field('iscore', XMLDB_TYPE_INTEGER, '1', null, XMLDB_NOTNULL, null, '0');
$table->add_field('timecreated', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
$table->add_field('timeimported', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, '0');
// Adding keys to table adminpresets.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Launch create table for adminpresets.
$dbman->create_table($table);
}
$tooltable = new xmldb_table('tool_admin_presets_it');
$table = new xmldb_table('adminpresets_it');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets_it');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets_it.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('adminpresetid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('plugin', XMLDB_TYPE_CHAR, '100', null, null, null, null);
$table->add_field('name', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null);
$table->add_field('value', XMLDB_TYPE_TEXT, null, null, null, null, null);
// Adding keys to table adminpresets_it.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table adminpresets_it.
$table->add_index('adminpresetid', XMLDB_INDEX_NOTUNIQUE, ['adminpresetid']);
// Launch create table for adminpresets_it.
$dbman->create_table($table);
}
$tooltable = new xmldb_table('tool_admin_presets_it_a');
$table = new xmldb_table('adminpresets_it_a');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets_it_a');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets_it_a.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('itemid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('name', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null);
$table->add_field('value', XMLDB_TYPE_TEXT, null, null, null, null, null);
// Adding keys to table adminpresets_it_a.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table adminpresets_it_a.
$table->add_index('itemid', XMLDB_INDEX_NOTUNIQUE, ['itemid']);
// Launch create table for adminpresets_it_a.
$dbman->create_table($table);
}
$tooltable = new xmldb_table('tool_admin_presets_app');
$table = new xmldb_table('adminpresets_app');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets_app');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets_app.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('adminpresetid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('userid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('time', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
// Adding keys to table adminpresets_app.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table adminpresets_app.
$table->add_index('adminpresetid', XMLDB_INDEX_NOTUNIQUE, ['adminpresetid']);
// Launch create table for adminpresets_app.
$dbman->create_table($table);
}
$tooltable = new xmldb_table('tool_admin_presets_app_it');
$table = new xmldb_table('adminpresets_app_it');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets_app_it');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets_app_it.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('adminpresetapplyid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('configlogid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
// Adding keys to table adminpresets_app_it.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table adminpresets_app_it.
$table->add_index('configlogid', XMLDB_INDEX_NOTUNIQUE, ['configlogid']);
$table->add_index('adminpresetapplyid', XMLDB_INDEX_NOTUNIQUE, ['adminpresetapplyid']);
// Launch create table for adminpresets_app_it.
$dbman->create_table($table);
}
$tooltable = new xmldb_table('tool_admin_presets_app_it_a');
$table = new xmldb_table('adminpresets_app_it_a');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets_app_it_a');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets_app_it_a.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('adminpresetapplyid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('configlogid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('itemname', XMLDB_TYPE_CHAR, '100', null, null, null, null);
// Adding keys to table adminpresets_app_it_a.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table adminpresets_app_it_a.
$table->add_index('configlogid', XMLDB_INDEX_NOTUNIQUE, ['configlogid']);
$table->add_index('adminpresetapplyid', XMLDB_INDEX_NOTUNIQUE, ['adminpresetapplyid']);
// Launch create table for adminpresets_app_it_a.
$dbman->create_table($table);
}
$tooltable = new xmldb_table('tool_admin_presets_plug');
$table = new xmldb_table('adminpresets_plug');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets_plug');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets_plug.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('adminpresetid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('plugin', XMLDB_TYPE_CHAR, '100', null, null, null, null);
$table->add_field('name', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null);
$table->add_field('enabled', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '0');
// Adding keys to table adminpresets_plug.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table adminpresets_plug.
$table->add_index('adminpresetid', XMLDB_INDEX_NOTUNIQUE, ['adminpresetid']);
// Launch create table for adminpresets_plug.
$dbman->create_table($table);
}
$tooltable = new xmldb_table('tool_admin_presets_app_plug');
$table = new xmldb_table('adminpresets_app_plug');
if ($dbman->table_exists($tooltable)) {
$dbman->rename_table($tooltable, 'adminpresets_app_plug');
} else if (!$dbman->table_exists($table)) {
// Adding fields to table adminpresets_app_plug.
$table->add_field('id', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, XMLDB_SEQUENCE, null);
$table->add_field('adminpresetapplyid', XMLDB_TYPE_INTEGER, '10', null, XMLDB_NOTNULL, null, null);
$table->add_field('plugin', XMLDB_TYPE_CHAR, '100', null, null, null, null);
$table->add_field('name', XMLDB_TYPE_CHAR, '100', null, XMLDB_NOTNULL, null, null);
$table->add_field('value', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '0');
$table->add_field('oldvalue', XMLDB_TYPE_INTEGER, '4', null, XMLDB_NOTNULL, null, '0');
// Adding keys to table adminpresets_app_plug.
$table->add_key('primary', XMLDB_KEY_PRIMARY, ['id']);
// Adding indexes to table adminpresets_app_plug.
$table->add_index('adminpresetapplyid', XMLDB_INDEX_NOTUNIQUE, ['adminpresetapplyid']);
// Launch create table for adminpresets_app_plug.
if (!$dbman->table_exists($table)) {
$dbman->create_table($table);
}
}
if ($DB->count_records('adminpresets', ['iscore' => 1]) == 0) {
// Create default core site admin presets.
require_once($CFG->dirroot . '/adminpresets/classes/helper.php');
\core_adminpresets\helper::create_default_presets();
}
// Main savepoint reached.
upgrade_main_savepoint(true, 2021123000.01);
}
if ($oldversion < 2021123000.02) {
// If exists, migrate sensiblesettings admin settings from tool_admin_preset to adminpresets.
if (get_config('tool_admin_presets', 'sensiblesettings') !== false) {
set_config('sensiblesettings', get_config('tool_admin_presets', 'sensiblesettings'), 'adminpresets');
unset_config('sensiblesettings', 'tool_admin_presets');
}
// Main savepoint reached.
upgrade_main_savepoint(true, 2021123000.02);
}
if ($oldversion < 2021123000.03) {
// If exists, migrate lastpresetapplied setting from tool_admin_preset to adminpresets.
if (get_config('tool_admin_presets', 'lastpresetapplied') !== false) {
set_config('lastpresetapplied', get_config('tool_admin_presets', 'lastpresetapplied'), 'adminpresets');
unset_config('lastpresetapplied', 'tool_admin_presets');
}
// Main savepoint reached.
upgrade_main_savepoint(true, 2021123000.03);
}
return true;
}

View file

@ -538,6 +538,6 @@ function install_cli_database(array $options, $interactive) {
// Apply default preset, if it is defined in $CFG and has a valid value.
if (!empty($CFG->setsitepresetduringinstall)) {
\tool_admin_presets\helper::change_default_preset($CFG->setsitepresetduringinstall);
\core_adminpresets\helper::change_default_preset($CFG->setsitepresetduringinstall);
}
}

View file

@ -36,7 +36,7 @@ class component_test extends advanced_testcase {
* this is defined here to annoy devs that try to add more without any thinking,
* always verify that it does not collide with any existing add-on modules and subplugins!!!
*/
const SUBSYSTEMCOUNT = 74;
const SUBSYSTEMCOUNT = 75;
public function setUp(): void {
$psr0namespaces = new ReflectionProperty('core_component', 'psr0namespaces');