Merge branch 'MDL-86087-501' of https://github.com/HuongNV13/moodle into MOODLE_501_STABLE
This commit is contained in:
@@ -5108,4 +5108,208 @@
|
||||
</CUSTOM_CHECK>
|
||||
</CUSTOM_CHECKS>
|
||||
</MOODLE>
|
||||
<MOODLE version="5.2" requires="4.4.0">
|
||||
<UNICODE level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="unicoderequired" />
|
||||
</FEEDBACK>
|
||||
</UNICODE>
|
||||
<DATABASE level="required">
|
||||
<VENDOR name="mariadb" version="10.11.0" />
|
||||
<VENDOR name="mysql" version="8.4" />
|
||||
<VENDOR name="postgres" version="16" />
|
||||
<VENDOR name="mssql" version="15.0" />
|
||||
<VENDOR name="auroramysql" version="8.0" />
|
||||
</DATABASE>
|
||||
<PHP version="8.3.0" level="required">
|
||||
</PHP>
|
||||
<PCREUNICODE level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="pcreunicodewarning" />
|
||||
</FEEDBACK>
|
||||
</PCREUNICODE>
|
||||
<PHP_EXTENSIONS>
|
||||
<PHP_EXTENSION name="iconv" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="iconvrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="mbstring" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="mbstringrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="curl" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="curlrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="openssl" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="opensslrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="tokenizer" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="tokenizerrecommended" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="soap" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="soaprecommended" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="ctype" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="ctyperequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="zip" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="ziprequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="zlib" level="required">
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="gd" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="gdrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="simplexml" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="simplexmlrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="spl" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="splrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="pcre" level="required">
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="dom" level="required">
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="xml" level="required">
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="xmlreader" level="required">
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="intl" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="intlrequired" />
|
||||
</FEEDBACK>
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="json" level="required">
|
||||
</PHP_EXTENSION>
|
||||
<PHP_EXTENSION name="hash" level="required"/>
|
||||
<PHP_EXTENSION name="fileinfo" level="required"/>
|
||||
<PHP_EXTENSION name="sodium" level="required"/>
|
||||
<PHP_EXTENSION name="exif" level="optional"/>
|
||||
<PHP_EXTENSION name="filter" level="required"/>
|
||||
</PHP_EXTENSIONS>
|
||||
<PHP_SETTINGS>
|
||||
<PHP_SETTING name="memory_limit" value="96M" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="settingmemorylimit" />
|
||||
</FEEDBACK>
|
||||
</PHP_SETTING>
|
||||
<PHP_SETTING name="file_uploads" value="1" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="settingfileuploads" />
|
||||
</FEEDBACK>
|
||||
</PHP_SETTING>
|
||||
<PHP_SETTING name="opcache.enable" value="1" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="opcacherecommended" />
|
||||
</FEEDBACK>
|
||||
</PHP_SETTING>
|
||||
<PHP_SETTING name="zend.exception_ignore_args" value="1" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="settingzendexceptionignoreargs" />
|
||||
</FEEDBACK>
|
||||
</PHP_SETTING>
|
||||
</PHP_SETTINGS>
|
||||
<CUSTOM_CHECKS>
|
||||
<CUSTOM_CHECK function="\core\environment::check_composer_dependencies_installed" level="optional" />
|
||||
<CUSTOM_CHECK function="\core\environment::check_composer_developer_dependencies_not_installed" level="optional" />
|
||||
<CUSTOM_CHECK function="\core\environment::check_composer_dependencies_optimised" level="optional" />
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_storage_engine" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="unsupporteddbstorageengine" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="question/engine/upgrade/upgradelib.php" function="quiz_attempts_upgraded" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="quizattemptsupgradedmessage" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_slasharguments" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="slashargumentswarning" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_database_tables_row_format" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="unsupporteddbtablerowformat" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_unoconv_version" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="unoconvwarning" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_libcurl_version" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="libcurlwarning" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_format" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="unsupporteddbfileformat" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_file_per_table" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="unsupporteddbfilepertable" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_large_prefix" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="unsupporteddblargeprefix" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_is_https" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="ishttpswarning" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mysql_incomplete_unicode_support" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="incompleteunicodesupport" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_sixtyfour_bits" level="required">
|
||||
<FEEDBACK>
|
||||
<ON_ERROR message="sixtyfourbitsrequired" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_max_input_vars" level="optional">
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_admin_dir_usage" level="optional">
|
||||
<FEEDBACK>
|
||||
<ON_CHECK message="iscustomadminwarnings" />
|
||||
</FEEDBACK>
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_xmlrpc_usage" level="optional">
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_mod_assignment" level="required">
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_db_prefix_length" level="required">
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_async_backup" level="recommended">
|
||||
</CUSTOM_CHECK>
|
||||
<CUSTOM_CHECK file="lib/upgradelib.php" function="check_aurora_version" level="optional">
|
||||
</CUSTOM_CHECK>
|
||||
</CUSTOM_CHECKS>
|
||||
</MOODLE>
|
||||
</COMPATIBILITY_MATRIX>
|
||||
|
||||
@@ -54,7 +54,7 @@ final class model_test extends \advanced_testcase {
|
||||
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
|
||||
$target = \core_analytics\manager::get_target('test_target_shortname');
|
||||
@@ -68,8 +68,6 @@ final class model_test extends \advanced_testcase {
|
||||
}
|
||||
|
||||
public function test_enable(): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$this->assertEquals(0, $this->model->get_model_obj()->enabled);
|
||||
$this->assertEquals(0, $this->model->get_model_obj()->trained);
|
||||
$this->assertEquals('', $this->model->get_model_obj()->timesplitting);
|
||||
@@ -81,8 +79,6 @@ final class model_test extends \advanced_testcase {
|
||||
}
|
||||
|
||||
public function test_create(): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$target = \core_analytics\manager::get_target('\core_course\analytics\target\course_dropout');
|
||||
$indicators = array(
|
||||
\core_analytics\manager::get_indicator('\core\analytics\indicator\any_write_action'),
|
||||
@@ -194,7 +190,6 @@ final class model_test extends \advanced_testcase {
|
||||
*/
|
||||
public function test_clear_static(): void {
|
||||
global $DB;
|
||||
$this->resetAfterTest();
|
||||
|
||||
$statictarget = new \test_static_target_shortname();
|
||||
$indicators['test_indicator_max'] = \core_analytics\manager::get_indicator('test_indicator_max');
|
||||
@@ -211,8 +206,6 @@ final class model_test extends \advanced_testcase {
|
||||
}
|
||||
|
||||
public function test_model_manager(): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$this->assertCount(3, $this->model->get_indicators());
|
||||
$this->assertInstanceOf('\core_analytics\local\target\binary', $this->model->get_target());
|
||||
|
||||
@@ -225,8 +218,6 @@ final class model_test extends \advanced_testcase {
|
||||
}
|
||||
|
||||
public function test_output_dir(): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$dir = make_request_directory();
|
||||
set_config('modeloutputdir', $dir, 'analytics');
|
||||
|
||||
@@ -237,9 +228,6 @@ final class model_test extends \advanced_testcase {
|
||||
|
||||
public function test_unique_id(): void {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$originaluniqueid = $this->model->get_unique_id();
|
||||
|
||||
// Same id across instances.
|
||||
@@ -283,8 +271,6 @@ final class model_test extends \advanced_testcase {
|
||||
* @return void
|
||||
*/
|
||||
public function test_exists(): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$target = \core_analytics\manager::get_target('\core_course\analytics\target\no_teaching');
|
||||
$this->assertTrue(\core_analytics\model::exists($target));
|
||||
|
||||
@@ -302,9 +288,6 @@ final class model_test extends \advanced_testcase {
|
||||
*/
|
||||
public function test_model_timelimit(): void {
|
||||
global $DB;
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
set_config('modeltimelimit', 2, 'analytics');
|
||||
|
||||
$courses = array();
|
||||
@@ -365,8 +348,6 @@ final class model_test extends \advanced_testcase {
|
||||
* Test model_config::get_class_component.
|
||||
*/
|
||||
public function test_model_config_get_class_component(): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$this->assertEquals('core',
|
||||
\core_analytics\model_config::get_class_component('\\core\\analytics\\indicator\\read_actions'));
|
||||
$this->assertEquals('core',
|
||||
@@ -387,8 +368,6 @@ final class model_test extends \advanced_testcase {
|
||||
$this->markTestSkipped('mlbackend_python is not configured.');
|
||||
}
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$this->model->enable('\\core\\analytics\\time_splitting\\quarters');
|
||||
$zipfilepath = $this->model->export_model('yeah-config.zip');
|
||||
|
||||
@@ -408,8 +387,6 @@ final class model_test extends \advanced_testcase {
|
||||
* Test can export configuration
|
||||
*/
|
||||
public function test_can_export_configuration(): void {
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// No time splitting method.
|
||||
$this->assertFalse($this->model->can_export_configuration());
|
||||
|
||||
@@ -433,8 +410,6 @@ final class model_test extends \advanced_testcase {
|
||||
$this->markTestSkipped('mlbackend_python is not configured.');
|
||||
}
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$this->model->enable('\\core\\analytics\\time_splitting\\quarters');
|
||||
|
||||
$modelconfig = new \core_analytics\model_config($this->model);
|
||||
@@ -463,8 +438,6 @@ final class model_test extends \advanced_testcase {
|
||||
public function test_inplace_editable_name(): void {
|
||||
global $PAGE;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
$output = new \core_renderer($PAGE, RENDERER_TARGET_GENERAL);
|
||||
|
||||
// Check as a user with permission to edit the name.
|
||||
@@ -489,8 +462,6 @@ final class model_test extends \advanced_testcase {
|
||||
public function test_get_name_and_rename(): void {
|
||||
global $PAGE;
|
||||
|
||||
$this->resetAfterTest();
|
||||
|
||||
$output = new \core_renderer($PAGE, RENDERER_TARGET_GENERAL);
|
||||
|
||||
// By default, the model exported for template uses its target's name in the name inplace editable element.
|
||||
@@ -518,8 +489,6 @@ final class model_test extends \advanced_testcase {
|
||||
* Tests model::get_potential_timesplittings()
|
||||
*/
|
||||
public function test_potential_timesplittings(): void {
|
||||
$this->resetAfterTest();
|
||||
|
||||
$this->assertArrayNotHasKey('\core\analytics\time_splitting\no_splitting', $this->model->get_potential_timesplittings());
|
||||
$this->assertArrayHasKey('\core\analytics\time_splitting\single_range', $this->model->get_potential_timesplittings());
|
||||
$this->assertArrayHasKey('\core\analytics\time_splitting\quarters', $this->model->get_potential_timesplittings());
|
||||
@@ -531,8 +500,6 @@ final class model_test extends \advanced_testcase {
|
||||
* @return null
|
||||
*/
|
||||
public function test_get_samples(): void {
|
||||
$this->resetAfterTest();
|
||||
|
||||
if (!PHPUNIT_LONGTEST) {
|
||||
$this->markTestSkipped('PHPUNIT_LONGTEST is not defined');
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ final class stats_test extends \advanced_testcase {
|
||||
*/
|
||||
public function setUp(): void {
|
||||
parent::setUp();
|
||||
|
||||
$this->resetAfterTest();
|
||||
$this->setAdminUser();
|
||||
}
|
||||
|
||||
@@ -47,9 +47,6 @@ final class stats_test extends \advanced_testcase {
|
||||
* Test the {@link \core_analytics\stats::enabled_models()} implementation.
|
||||
*/
|
||||
public function test_enabled_models(): void {
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
// By default, sites have {@link \core_course\analytics\target\no_teaching} and
|
||||
// {@link \core_user\analytics\target\upcoming_activities_due} enabled.
|
||||
$this->assertEquals(4, \core_analytics\stats::enabled_models());
|
||||
@@ -77,8 +74,6 @@ final class stats_test extends \advanced_testcase {
|
||||
$this->markTestSkipped('mlbackend_python is not configured.');
|
||||
}
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$model = \core_analytics\model::create(
|
||||
\core_analytics\manager::get_target('test_target_shortname'),
|
||||
[
|
||||
@@ -127,8 +122,6 @@ final class stats_test extends \advanced_testcase {
|
||||
$this->markTestSkipped('mlbackend_python is not configured.');
|
||||
}
|
||||
|
||||
$this->resetAfterTest(true);
|
||||
|
||||
$model = \core_analytics\model::create(
|
||||
\core_analytics\manager::get_target('test_target_shortname'),
|
||||
[
|
||||
|
||||
@@ -41,8 +41,8 @@ final class memcached_test extends \advanced_testcase {
|
||||
/** @var memcached|null $memcachedession An instance of the memcached session or null if not initialized. */
|
||||
private ?memcached $memcachedession = null;
|
||||
|
||||
/** @var \Memcached $memcached An instance of the Memcached class used for handling session storage. */
|
||||
private \Memcached $memcached;
|
||||
/** @var ?\Memcached $memcached An instance of the Memcached class used for handling session storage. */
|
||||
private ?\Memcached $memcached = null;
|
||||
|
||||
/** @var mock_handler $mockhandler Dedicated testing handler. */
|
||||
private mock_handler $mockhandler;
|
||||
@@ -87,7 +87,10 @@ final class memcached_test extends \advanced_testcase {
|
||||
|
||||
#[\Override]
|
||||
public function tearDown(): void {
|
||||
$this->memcached->quit();
|
||||
if ($this->memcached !== null) {
|
||||
$this->memcached->quit();
|
||||
$this->memcached = null;
|
||||
}
|
||||
parent::tearDown();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user