From ca4b8908bbdaa4991127b8f179c7c683b639d789 Mon Sep 17 00:00:00 2001 From: Melanie Treitinger Date: Mon, 4 Mar 2024 10:32:55 +0100 Subject: [PATCH 001/185] Add cli script to install webservice. --- cli/installwebservice.php | 148 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 cli/installwebservice.php diff --git a/cli/installwebservice.php b/cli/installwebservice.php new file mode 100644 index 0000000..73ecf09 --- /dev/null +++ b/cli/installwebservice.php @@ -0,0 +1,148 @@ +. + +/** + * quiz_archiver - webservice install script + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * 2024 Melanie Treitinger, Ruhr-Universität Bochum + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +const CLI_SCRIPT = 1; + +require_once(__DIR__ . '/config.php'); +require_once($CFG->libdir . '/clilib.php'); +require_once($CFG->dirroot . '/lib/testing/generator/data_generator.php'); +require_once($CFG->dirroot . '/webservice/lib.php'); + +// Set the variables for the new webservice. +$wsname = 'quiz_archiver_webservice'; +$additionalcapabilities = [ + 'mod/quiz:reviewmyattempts', + 'mod/quiz:view', + 'mod/quiz:viewreports', + 'mod/quiz_archiver:use_webservice', + 'moodle/backup:anonymise', + 'moodle/backup:backupactivity', + 'moodle/backup:backupcourse', + 'moodle/backup:backupsection', + 'moodle/backup:backuptargetimport', + 'moodle/backup:configure', + 'moodle/backup:downloadfile', + 'moodle/backup:userinfo', + 'moodle/course:ignoreavailabilityrestrictions', + 'moodle/course:view', + 'moodle/course:viewhiddenactivities', + 'moodle/course:viewhiddencourses', + 'moodle/course:viewhiddensections', + 'moodle/user:ignoreuserquota', + 'webservice/rest:use', +]; +$wsfunctions = [ + 'quiz_archiver_generate_attempt_report', + 'quiz_archiver_get_attempts_metadata', + 'quiz_archiver_update_job_status', + 'quiz_archiver_process_uploaded_artifact', + 'quiz_archiver_get_backup_status', +]; + +// Set system context. +try { + $systemcontext = context_system::instance(); +} catch (dml_exception $e) { + cli_error("Error: Cannot get system context: ".$e->getMessage()); + exit(1); +} + +// Set admin user. +$USER = get_admin(); + +// Enable web services and REST protocol. +set_config('enablewebservices', true); +try { + $enabledprotocols = get_config('core', 'webserviceprotocols'); +} catch (dml_exception $e) { + cli_error("Error: Cannot get config setting webserviceprotocols: ".$e->getMessage()); + exit(1); +} +if (stripos($enabledprotocols, 'rest') === false) { + set_config('webserviceprotocols', $enabledprotocols . ',rest'); +} +// Create a web service user. +$datagenerator = new testing_data_generator(); +$webserviceuser = $datagenerator->create_user([ + 'username' => 'ws-'.$wsname.'-user', 'firstname' => 'Webservice', 'lastname' => 'User ('.$wsname.')', 'policyagreed' => 1]); + +// Create a web service role. +try { + $rolename = 'WS Role for ' . $wsname; + $roleshort = 'ws-' . $wsname . '-role'; + $wsroleid = create_role($rolename, $roleshort, ''); +} catch (coding_exception $e) { + cli_error("Error: Cannot create role $rolename: ".$e->getMessage()); + exit(1); +} +set_role_contextlevels($wsroleid, [CONTEXT_SYSTEM]); + +foreach ($additionalcapabilities as $cap){ + try { + assign_capability($cap, CAP_ALLOW, $wsroleid, $systemcontext->id, true); + } catch (coding_exception $e) { + cli_error("Error: Cannot assign capability $cap: ".$e->getMessage()); + exit(1); + } +} + +// Give the user the role. +try { + role_assign($wsroleid, $webserviceuser->id, $systemcontext->id); +} catch (coding_exception $e) { + cli_error("Error: Cannot assign role to webserviceuser: ".$e->getMessage()); + exit(1); +} + +// Enable the webservice. +$webservicemanager = new webservice(); +$serviceid = $webservicemanager->add_external_service((object)[ + 'name' => $wsname, + 'shortname' => $wsname, + 'enabled' => 1, + 'requiredcapability' => '', + 'restrictedusers' => true, + 'downloadfiles' => true, + 'uploadfiles' => true, +]); + +if(!$serviceid){ + cli_error("ERROR: Service $wsname was not created."); + exit(1); +} + +// Add functions to the service +foreach ($wsfunctions as $f) { + $webservicemanager->add_external_function_to_service($f, $serviceid); +} + +// Authorise the user to use the service. +$webservicemanager->add_ws_authorised_user((object) ['externalserviceid' => $serviceid, 'userid' => $webserviceuser->id]); + +$service = $webservicemanager->get_external_service_by_id($serviceid); +$webservicemanager->update_external_service($service); + +cli_writeln("Service $wsname was created successfully with for user with id $webserviceuser->id."); +exit(0); From c8d008d863de8ec78c220996f8dc4c4313eda6f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 11:29:49 +0100 Subject: [PATCH 002/185] Rename installwebservice CLI script to autoinstall --- cli/{installwebservice.php => autoinstall.php} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename cli/{installwebservice.php => autoinstall.php} (99%) diff --git a/cli/installwebservice.php b/cli/autoinstall.php similarity index 99% rename from cli/installwebservice.php rename to cli/autoinstall.php index 73ecf09..0acda15 100644 --- a/cli/installwebservice.php +++ b/cli/autoinstall.php @@ -15,7 +15,7 @@ // along with Moodle. If not, see . /** - * quiz_archiver - webservice install script + * quiz_archiver - automatic install script * * @package quiz_archiver * @copyright 2024 Niels Gandraß From f3ed37c5385777bcfb13923f242244e77208e872 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 12:12:13 +0100 Subject: [PATCH 003/185] cli/autoinstall: Add CLI, fix imports, allow customization of created objects, write usage/help info --- cli/autoinstall.php | 107 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 23 deletions(-) diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 0acda15..9c50ac4 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -23,16 +23,21 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -const CLI_SCRIPT = 1; +const CLI_SCRIPT = true; -require_once(__DIR__ . '/config.php'); -require_once($CFG->libdir . '/clilib.php'); -require_once($CFG->dirroot . '/lib/testing/generator/data_generator.php'); -require_once($CFG->dirroot . '/webservice/lib.php'); +require_once(__DIR__ . '/../../../../../config.php'); +require_once("{$CFG->libdir}/clilib.php"); +require_once("{$CFG->dirroot}/lib/testing/generator/data_generator.php"); +require_once("{$CFG->dirroot}/webservice/lib.php"); -// Set the variables for the new webservice. -$wsname = 'quiz_archiver_webservice'; -$additionalcapabilities = [ +################################### +# Defaults and base configuration # +################################### + +const DEFAULT_WSNAME = 'quiz_archiver_webservice'; +const DEFAULT_USERNAME = 'quiz_archiver_serviceacount'; +const DEFAULT_ROLESHORTNAME = 'quiz_archiver'; +const WS_ROLECAPS = [ 'mod/quiz:reviewmyattempts', 'mod/quiz:view', 'mod/quiz:viewreports', @@ -53,7 +58,7 @@ 'moodle/user:ignoreuserquota', 'webservice/rest:use', ]; -$wsfunctions = [ +const WS_FUNCTIONS = [ 'quiz_archiver_generate_attempt_report', 'quiz_archiver_get_attempts_metadata', 'quiz_archiver_update_job_status', @@ -61,6 +66,57 @@ 'quiz_archiver_get_backup_status', ]; +####################### +# CLI options parsing # +####################### + +list($options, $unrecognised) = cli_get_params( + [ + 'help' => false, + 'wsname' => DEFAULT_WSNAME, + 'rolename' => DEFAULT_ROLESHORTNAME, + 'username' => DEFAULT_USERNAME, + ], + [ + 'h' => 'help', + ] +); + +$usage = << Sets a custom name for the web service (default: quiz_archiver_webservice) + --rolename= Sets a custom name for the web service role (default: quiz_archiver) + --username= Sets a custom username for the web service user (default: quiz_archiver_serviceacount) +EOT; + +if ($unrecognised) { + $unrecognised = implode(PHP_EOL . ' ', $unrecognised); + cli_error(get_string('cliunknowoption', 'core_admin', $unrecognised)); +} + +if ($options['help']) { + cli_writeln($usage); + exit(2); +} + +################################ +# Begin of autoinstall routine # +################################ + // Set system context. try { $systemcontext = context_system::instance(); @@ -90,20 +146,22 @@ // Create a web service role. try { - $rolename = 'WS Role for ' . $wsname; - $roleshort = 'ws-' . $wsname . '-role'; - $wsroleid = create_role($rolename, $roleshort, ''); + $wsroleid = create_role( + 'Quiz Archiver Service Account', + $options['rolename'], + 'A role that bundles all access rights required for the quiz archiver plugin to work.' + ); + set_role_contextlevels($wsroleid, [CONTEXT_SYSTEM]); } catch (coding_exception $e) { - cli_error("Error: Cannot create role $rolename: ".$e->getMessage()); + cli_error("Error: Cannot create role {$options['rolename']}: {$e->getMessage()}"); exit(1); } -set_role_contextlevels($wsroleid, [CONTEXT_SYSTEM]); -foreach ($additionalcapabilities as $cap){ +foreach (WS_ROLECAPS as $cap){ try { assign_capability($cap, CAP_ALLOW, $wsroleid, $systemcontext->id, true); } catch (coding_exception $e) { - cli_error("Error: Cannot assign capability $cap: ".$e->getMessage()); + cli_error("Error: Cannot assign capability {$cap}: {$e->getMessage()}"); exit(1); } } @@ -112,15 +170,15 @@ try { role_assign($wsroleid, $webserviceuser->id, $systemcontext->id); } catch (coding_exception $e) { - cli_error("Error: Cannot assign role to webserviceuser: ".$e->getMessage()); + cli_error("Error: Cannot assign role to webservice user: ".$e->getMessage()); exit(1); } // Enable the webservice. $webservicemanager = new webservice(); $serviceid = $webservicemanager->add_external_service((object)[ - 'name' => $wsname, - 'shortname' => $wsname, + 'name' => $options['wsname'], + 'shortname' => $options['wsname'], 'enabled' => 1, 'requiredcapability' => '', 'restrictedusers' => true, @@ -129,20 +187,23 @@ ]); if(!$serviceid){ - cli_error("ERROR: Service $wsname was not created."); + cli_error("ERROR: Service {$options['wsname']} could not be created."); exit(1); } // Add functions to the service -foreach ($wsfunctions as $f) { +foreach (WS_FUNCTIONS as $f) { $webservicemanager->add_external_function_to_service($f, $serviceid); } // Authorise the user to use the service. -$webservicemanager->add_ws_authorised_user((object) ['externalserviceid' => $serviceid, 'userid' => $webserviceuser->id]); +$webservicemanager->add_ws_authorised_user((object) [ + 'externalserviceid' => $serviceid, + 'userid' => $webserviceuser->id +]); $service = $webservicemanager->get_external_service_by_id($serviceid); $webservicemanager->update_external_service($service); -cli_writeln("Service $wsname was created successfully with for user with id $webserviceuser->id."); +cli_writeln("Service {$options['wsname']} was created successfully with for user with id $webserviceuser->id."); exit(0); From 286475853ca5e23640c9af7568c41176ab17f14b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 12:13:18 +0100 Subject: [PATCH 004/185] cli/autoinstall: Set a password and proper defaults for created user --- cli/autoinstall.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 9c50ac4..f5b3a47 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -142,7 +142,17 @@ // Create a web service user. $datagenerator = new testing_data_generator(); $webserviceuser = $datagenerator->create_user([ - 'username' => 'ws-'.$wsname.'-user', 'firstname' => 'Webservice', 'lastname' => 'User ('.$wsname.')', 'policyagreed' => 1]); + 'username' => $options['username'], + 'password' => bin2hex(random_bytes(32)), + 'firstname' => 'Quiz Archiver', + 'firstnamephonetic' => '', + 'middlename' => '', + 'lastname' => 'Service Account', + 'lastnamephonetic' => '', + 'alternatename' => '', + 'email' => 'noreply@localhost', + 'policyagreed' => 1 +]); // Create a web service role. try { From 11c534c304ff27fae2376ab9f86b790748776ea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 12:23:00 +0100 Subject: [PATCH 005/185] cli/autoinstall: Add more verbose script output --- cli/autoinstall.php | 66 ++++++++++++++++++++++++++++++--------------- 1 file changed, 44 insertions(+), 22 deletions(-) diff --git a/cli/autoinstall.php b/cli/autoinstall.php index f5b3a47..396a98d 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -125,34 +125,31 @@ exit(1); } +cli_writeln("Starting automatic installation of quiz archiver plugin..."); + // Set admin user. $USER = get_admin(); -// Enable web services and REST protocol. -set_config('enablewebservices', true); +// Create a web service user. try { - $enabledprotocols = get_config('core', 'webserviceprotocols'); + $datagenerator = new testing_data_generator(); + $webserviceuser = $datagenerator->create_user([ + 'username' => $options['username'], + 'password' => bin2hex(random_bytes(32)), + 'firstname' => 'Quiz Archiver', + 'firstnamephonetic' => '', + 'middlename' => '', + 'lastname' => 'Service Account', + 'lastnamephonetic' => '', + 'alternatename' => '', + 'email' => 'noreply@localhost', + 'policyagreed' => 1 + ]); + cli_writeln(" -> Web service user '{$webserviceuser->username}' with ID {$webserviceuser->id} created."); } catch (dml_exception $e) { - cli_error("Error: Cannot get config setting webserviceprotocols: ".$e->getMessage()); + cli_error("Error: Cloud not create webservice user: ".$e->getMessage()); exit(1); } -if (stripos($enabledprotocols, 'rest') === false) { - set_config('webserviceprotocols', $enabledprotocols . ',rest'); -} -// Create a web service user. -$datagenerator = new testing_data_generator(); -$webserviceuser = $datagenerator->create_user([ - 'username' => $options['username'], - 'password' => bin2hex(random_bytes(32)), - 'firstname' => 'Quiz Archiver', - 'firstnamephonetic' => '', - 'middlename' => '', - 'lastname' => 'Service Account', - 'lastnamephonetic' => '', - 'alternatename' => '', - 'email' => 'noreply@localhost', - 'policyagreed' => 1 -]); // Create a web service role. try { @@ -162,6 +159,8 @@ 'A role that bundles all access rights required for the quiz archiver plugin to work.' ); set_role_contextlevels($wsroleid, [CONTEXT_SYSTEM]); + + cli_writeln(" -> Role '{$options['rolename']}' created."); } catch (coding_exception $e) { cli_error("Error: Cannot create role {$options['rolename']}: {$e->getMessage()}"); exit(1); @@ -170,6 +169,7 @@ foreach (WS_ROLECAPS as $cap){ try { assign_capability($cap, CAP_ALLOW, $wsroleid, $systemcontext->id, true); + cli_writeln(" -> Capability {$cap} assigned to role '{$options['rolename']}'."); } catch (coding_exception $e) { cli_error("Error: Cannot assign capability {$cap}: {$e->getMessage()}"); exit(1); @@ -179,11 +179,27 @@ // Give the user the role. try { role_assign($wsroleid, $webserviceuser->id, $systemcontext->id); + cli_writeln(" -> Role '{$options['rolename']}' assigned to user '{$webserviceuser->username}'."); } catch (coding_exception $e) { cli_error("Error: Cannot assign role to webservice user: ".$e->getMessage()); exit(1); } +// Enable web services and REST protocol. +try { + set_config('enablewebservices', true); + cli_writeln(' -> Web services enabled.'); + + $enabledprotocols = get_config('core', 'webserviceprotocols'); + if (stripos($enabledprotocols, 'rest') === false) { + set_config('webserviceprotocols', $enabledprotocols . ',rest'); + } + cli_writeln(' -> REST webservice protocol enabled.'); +} catch (dml_exception $e) { + cli_error("Error: Cannot get config setting webserviceprotocols: ".$e->getMessage()); + exit(1); +} + // Enable the webservice. $webservicemanager = new webservice(); $serviceid = $webservicemanager->add_external_service((object)[ @@ -199,11 +215,14 @@ if(!$serviceid){ cli_error("ERROR: Service {$options['wsname']} could not be created."); exit(1); +} else { + cli_writeln(" -> Web service '{$options['wsname']}' created with ID {$serviceid}."); } // Add functions to the service foreach (WS_FUNCTIONS as $f) { $webservicemanager->add_external_function_to_service($f, $serviceid); + cli_writeln(" -> Function {$f} added to service '{$options['wsname']}'."); } // Authorise the user to use the service. @@ -215,5 +234,8 @@ $service = $webservicemanager->get_external_service_by_id($serviceid); $webservicemanager->update_external_service($service); -cli_writeln("Service {$options['wsname']} was created successfully with for user with id $webserviceuser->id."); +cli_writeln(" -> User '{$webserviceuser->username}' authorised to use service '{$options['wsname']}'."); + +cli_writeln(''); +cli_writeln("Automatic installation of quiz archiver plugin finished successfully."); exit(0); From 0945977103d1e2ebceb05eb4c0471e6ce53818a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 12:33:08 +0100 Subject: [PATCH 006/185] cli/autoinstall: Automatically set corresponding configuration parameters in quiz_archiver plugin settings --- cli/autoinstall.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 396a98d..a5e6b9d 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -233,9 +233,22 @@ $service = $webservicemanager->get_external_service_by_id($serviceid); $webservicemanager->update_external_service($service); - cli_writeln(" -> User '{$webserviceuser->username}' authorised to use service '{$options['wsname']}'."); +// Configure quiz_archiver plugin settings +try { + cli_writeln(" -> Configuring the quiz archiver plugin..."); + + set_config('webservice_id', $serviceid, 'quiz_archiver'); + cli_writeln(" -> Web service set to '{$options['wsname']}'."); + + set_config('webservice_userid', $webserviceuser->id, 'quiz_archiver'); + cli_writeln(" -> Web service user set to '{$webserviceuser->username}'."); +} catch (dml_exception $e) { + cli_error("Error: Failed to set config settings for quiz_archiver plugin: ".$e->getMessage()); + exit(1); +} + cli_writeln(''); cli_writeln("Automatic installation of quiz archiver plugin finished successfully."); exit(0); From 7a6e7bf928c0d54fda190c12989826a893d3a96d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 12:41:43 +0100 Subject: [PATCH 007/185] cli/autoinstall: Add PHPDoc comments for constants --- cli/autoinstall.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/cli/autoinstall.php b/cli/autoinstall.php index a5e6b9d..1c553f7 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -23,6 +23,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +/** @var bool Identifies this script as a CLI script */ const CLI_SCRIPT = true; require_once(__DIR__ . '/../../../../../config.php'); @@ -34,9 +35,16 @@ # Defaults and base configuration # ################################### +/** @var string Default name for the webservice to create */ const DEFAULT_WSNAME = 'quiz_archiver_webservice'; + +/** @var string Default username for the service account to create */ const DEFAULT_USERNAME = 'quiz_archiver_serviceacount'; + +/** @var string Default shortname for the role to create */ const DEFAULT_ROLESHORTNAME = 'quiz_archiver'; + +/** @var string[] List of capabilities to assign to the created role */ const WS_ROLECAPS = [ 'mod/quiz:reviewmyattempts', 'mod/quiz:view', @@ -58,6 +66,8 @@ 'moodle/user:ignoreuserquota', 'webservice/rest:use', ]; + +/** @var string[] List of functions to add to the created webservice */ const WS_FUNCTIONS = [ 'quiz_archiver_generate_attempt_report', 'quiz_archiver_get_attempts_metadata', From 032d9e481152eae8a1666d06e8e9b48b1c48421c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 16:33:02 +0100 Subject: [PATCH 008/185] cli/autoinstall: Move CLI functions to local class and replace testing_data_generator with proper user_create_user() function call --- classes/local/autoinstall.php | 233 ++++++++++++++++++++++++++++++++++ cli/autoinstall.php | 191 +++------------------------- 2 files changed, 249 insertions(+), 175 deletions(-) create mode 100644 classes/local/autoinstall.php diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php new file mode 100644 index 0000000..b6b1ec6 --- /dev/null +++ b/classes/local/autoinstall.php @@ -0,0 +1,233 @@ +. + +namespace quiz_archiver\local; + +require_once("{$CFG->dirroot}/user/lib.php"); +require_once("{$CFG->dirroot}/webservice/lib.php"); + +use coding_exception; +use context_system; +use dml_exception; +use webservice; + +/** + * Autoinstall routines for the quiz_archiver plugin + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * 2024 Melanie Treitinger, Ruhr-Universität Bochum + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + */ +class autoinstall { + + /** @var string Default name for the webservice to create */ + const DEFAULT_WSNAME = 'quiz_archiver_webservice'; + + /** @var string Default username for the service account to create */ + const DEFAULT_USERNAME = 'quiz_archiver_serviceacount'; + + /** @var string Default shortname for the role to create */ + const DEFAULT_ROLESHORTNAME = 'quiz_archiver'; + + /** @var string[] List of capabilities to assign to the created role */ + const WS_ROLECAPS = [ + 'mod/quiz:reviewmyattempts', + 'mod/quiz:view', + 'mod/quiz:viewreports', + 'mod/quiz_archiver:use_webservice', + 'moodle/backup:anonymise', + 'moodle/backup:backupactivity', + 'moodle/backup:backupcourse', + 'moodle/backup:backupsection', + 'moodle/backup:backuptargetimport', + 'moodle/backup:configure', + 'moodle/backup:downloadfile', + 'moodle/backup:userinfo', + 'moodle/course:ignoreavailabilityrestrictions', + 'moodle/course:view', + 'moodle/course:viewhiddenactivities', + 'moodle/course:viewhiddencourses', + 'moodle/course:viewhiddensections', + 'moodle/user:ignoreuserquota', + 'webservice/rest:use', + ]; + + /** @var string[] List of functions to add to the created webservice */ + const WS_FUNCTIONS = [ + 'quiz_archiver_generate_attempt_report', + 'quiz_archiver_get_attempts_metadata', + 'quiz_archiver_update_job_status', + 'quiz_archiver_process_uploaded_artifact', + 'quiz_archiver_get_backup_status', + ]; + + public static function execute( + string $wsname = self::DEFAULT_WSNAME, + string $rolename = self::DEFAULT_ROLESHORTNAME, + string $username = self::DEFAULT_USERNAME + ): array { + // Prepare return values + $success = false; + + try { + // Ensure current user is an admin. + if (!is_siteadmin()) { + $log[] = "Error: You need to be a site administrator to run this script."; + throw new \RuntimeException(); + } + + // Get system context. + try { + $systemcontext = context_system::instance(); + } catch (dml_exception $e) { + $log[] = "Error: Cannot get system context: ".$e->getMessage(); + throw new \RuntimeException(); + } + + // Create a web service user. + try { + $webserviceuserid = user_create_user([ + 'auth' => 'manual', + 'username' => $username, + 'password' => bin2hex(random_bytes(28))."#1A", + 'firstname' => 'Quiz Archiver', + 'lastname' => 'Service Account', + 'email' => 'noreply@localhost', + 'confirmed' => 1, + 'deleted' => 0, + 'policyagreed' => 1, + ]); + $webserviceuser = \core_user::get_user($webserviceuserid); + $log[] = " -> Web service user '{$webserviceuser->username}' with ID {$webserviceuser->id} created."; + } catch (dml_exception $e) { + $log[] = "Error: Cloud not create webservice user: ".$e->getMessage(); + throw new \RuntimeException(); + } catch (\Exception $e) { // \Random\RandomException is only thrown with PHP >= 8.2, generic \Exception otherwise + $log[] = "Error: Could not create webservice user: ".$e->getMessage(); + throw new \RuntimeException(); + } + + // Create a web service role. + try { + $wsroleid = create_role( + 'Quiz Archiver Service Account', + $rolename, + 'A role that bundles all access rights required for the quiz archiver plugin to work.' + ); + set_role_contextlevels($wsroleid, [CONTEXT_SYSTEM]); + + $log[] = " -> Role '{$rolename}' created."; + } catch (coding_exception $e) { + $log[] = "Error: Cannot create role {$rolename}: {$e->getMessage()}"; + throw new \RuntimeException(); + } + + foreach (self::WS_ROLECAPS as $cap){ + try { + assign_capability($cap, CAP_ALLOW, $wsroleid, $systemcontext->id, true); + $log[] = " -> Capability {$cap} assigned to role '{$rolename}'."; + } catch (coding_exception $e) { + $log[] = "Error: Cannot assign capability {$cap}: {$e->getMessage()}"; + throw new \RuntimeException(); + } + } + + // Give the user the role. + try { + role_assign($wsroleid, $webserviceuser->id, $systemcontext->id); + $log[] = " -> Role '{$rolename}' assigned to user '{$webserviceuser->username}'."; + } catch (coding_exception $e) { + $log[] = "Error: Cannot assign role to webservice user: ".$e->getMessage(); + throw new \RuntimeException(); + } + + // Enable web services and REST protocol. + try { + set_config('enablewebservices', true); + $log[] = " -> Web services enabled."; + + $enabledprotocols = get_config('core', 'webserviceprotocols'); + if (stripos($enabledprotocols, 'rest') === false) { + set_config('webserviceprotocols', $enabledprotocols . ',rest'); + } + $log[] = " -> REST webservice protocol enabled."; + } catch (dml_exception $e) { + $log[] = "Error: Cannot get config setting webserviceprotocols: ".$e->getMessage(); + throw new \RuntimeException(); + } + + // Enable the webservice. + $webservicemanager = new webservice(); + $serviceid = $webservicemanager->add_external_service((object)[ + 'name' => $wsname, + 'shortname' => $wsname, + 'enabled' => 1, + 'requiredcapability' => '', + 'restrictedusers' => true, + 'downloadfiles' => true, + 'uploadfiles' => true, + ]); + + if(!$serviceid){ + $log[] = "Error: Service {$wsname} could not be created."; + throw new \RuntimeException(); + } else { + $log[] = " -> Web service '{$wsname}' created with ID {$serviceid}."; + } + + // Add functions to the service + foreach (self::WS_FUNCTIONS as $f) { + $webservicemanager->add_external_function_to_service($f, $serviceid); + $log[] = " -> Function {$f} added to service '{$wsname}'."; + } + + // Authorise the user to use the service. + $webservicemanager->add_ws_authorised_user((object) [ + 'externalserviceid' => $serviceid, + 'userid' => $webserviceuser->id + ]); + + $service = $webservicemanager->get_external_service_by_id($serviceid); + $webservicemanager->update_external_service($service); + $log[] = " -> User '{$webserviceuser->username}' authorised to use service '{$wsname}'."; + + // Configure quiz_archiver plugin settings + try { + $log[] = " -> Configuring the quiz archiver plugin..."; + + set_config('webservice_id', $serviceid, 'quiz_archiver'); + $log[] = " -> Web service set to '{$wsname}'."; + + set_config('webservice_userid', $webserviceuser->id, 'quiz_archiver'); + $log[] = " -> Web service user set to '{$webserviceuser->username}'."; + } catch (\Exception $e) { + $log[] = "Error: Failed to set config settings for quiz_archiver plugin: ".$e->getMessage(); + throw new \RuntimeException(); + } + + $success = true; + } catch (\RuntimeException $e) { + $success = false; + } catch (\Exception $e) { + $success = false; + $log[] = "Error: An unexpected error occurred: ".$e->getMessage(); + } finally { + return [$success, implode("\r\n", $log)]; + } + } + +} diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 1c553f7..00f7f42 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -28,53 +28,9 @@ require_once(__DIR__ . '/../../../../../config.php'); require_once("{$CFG->libdir}/clilib.php"); -require_once("{$CFG->dirroot}/lib/testing/generator/data_generator.php"); -require_once("{$CFG->dirroot}/webservice/lib.php"); +require_once("{$CFG->dirroot}/mod/quiz/report/archiver/classes/local/autoinstall.php"); -################################### -# Defaults and base configuration # -################################### - -/** @var string Default name for the webservice to create */ -const DEFAULT_WSNAME = 'quiz_archiver_webservice'; - -/** @var string Default username for the service account to create */ -const DEFAULT_USERNAME = 'quiz_archiver_serviceacount'; - -/** @var string Default shortname for the role to create */ -const DEFAULT_ROLESHORTNAME = 'quiz_archiver'; - -/** @var string[] List of capabilities to assign to the created role */ -const WS_ROLECAPS = [ - 'mod/quiz:reviewmyattempts', - 'mod/quiz:view', - 'mod/quiz:viewreports', - 'mod/quiz_archiver:use_webservice', - 'moodle/backup:anonymise', - 'moodle/backup:backupactivity', - 'moodle/backup:backupcourse', - 'moodle/backup:backupsection', - 'moodle/backup:backuptargetimport', - 'moodle/backup:configure', - 'moodle/backup:downloadfile', - 'moodle/backup:userinfo', - 'moodle/course:ignoreavailabilityrestrictions', - 'moodle/course:view', - 'moodle/course:viewhiddenactivities', - 'moodle/course:viewhiddencourses', - 'moodle/course:viewhiddensections', - 'moodle/user:ignoreuserquota', - 'webservice/rest:use', -]; - -/** @var string[] List of functions to add to the created webservice */ -const WS_FUNCTIONS = [ - 'quiz_archiver_generate_attempt_report', - 'quiz_archiver_get_attempts_metadata', - 'quiz_archiver_update_job_status', - 'quiz_archiver_process_uploaded_artifact', - 'quiz_archiver_get_backup_status', -]; +use quiz_archiver\local\autoinstall; ####################### # CLI options parsing # @@ -83,9 +39,9 @@ list($options, $unrecognised) = cli_get_params( [ 'help' => false, - 'wsname' => DEFAULT_WSNAME, - 'rolename' => DEFAULT_ROLESHORTNAME, - 'username' => DEFAULT_USERNAME, + 'wsname' => autoinstall::DEFAULT_WSNAME, + 'rolename' => autoinstall::DEFAULT_ROLESHORTNAME, + 'username' => autoinstall::DEFAULT_USERNAME, ], [ 'h' => 'help', @@ -127,138 +83,23 @@ # Begin of autoinstall routine # ################################ -// Set system context. -try { - $systemcontext = context_system::instance(); -} catch (dml_exception $e) { - cli_error("Error: Cannot get system context: ".$e->getMessage()); - exit(1); -} - -cli_writeln("Starting automatic installation of quiz archiver plugin..."); - // Set admin user. $USER = get_admin(); -// Create a web service user. -try { - $datagenerator = new testing_data_generator(); - $webserviceuser = $datagenerator->create_user([ - 'username' => $options['username'], - 'password' => bin2hex(random_bytes(32)), - 'firstname' => 'Quiz Archiver', - 'firstnamephonetic' => '', - 'middlename' => '', - 'lastname' => 'Service Account', - 'lastnamephonetic' => '', - 'alternatename' => '', - 'email' => 'noreply@localhost', - 'policyagreed' => 1 - ]); - cli_writeln(" -> Web service user '{$webserviceuser->username}' with ID {$webserviceuser->id} created."); -} catch (dml_exception $e) { - cli_error("Error: Cloud not create webservice user: ".$e->getMessage()); - exit(1); -} - -// Create a web service role. -try { - $wsroleid = create_role( - 'Quiz Archiver Service Account', - $options['rolename'], - 'A role that bundles all access rights required for the quiz archiver plugin to work.' - ); - set_role_contextlevels($wsroleid, [CONTEXT_SYSTEM]); - - cli_writeln(" -> Role '{$options['rolename']}' created."); -} catch (coding_exception $e) { - cli_error("Error: Cannot create role {$options['rolename']}: {$e->getMessage()}"); - exit(1); -} - -foreach (WS_ROLECAPS as $cap){ - try { - assign_capability($cap, CAP_ALLOW, $wsroleid, $systemcontext->id, true); - cli_writeln(" -> Capability {$cap} assigned to role '{$options['rolename']}'."); - } catch (coding_exception $e) { - cli_error("Error: Cannot assign capability {$cap}: {$e->getMessage()}"); - exit(1); - } -} +cli_writeln("Starting automatic installation of quiz archiver plugin..."); +cli_separator(); -// Give the user the role. -try { - role_assign($wsroleid, $webserviceuser->id, $systemcontext->id); - cli_writeln(" -> Role '{$options['rolename']}' assigned to user '{$webserviceuser->username}'."); -} catch (coding_exception $e) { - cli_error("Error: Cannot assign role to webservice user: ".$e->getMessage()); - exit(1); -} +list($success, $log) = autoinstall::execute($options['wsname'], $options['rolename'], $options['username']); -// Enable web services and REST protocol. -try { - set_config('enablewebservices', true); - cli_writeln(' -> Web services enabled.'); +cli_write($log."\r\n"); - $enabledprotocols = get_config('core', 'webserviceprotocols'); - if (stripos($enabledprotocols, 'rest') === false) { - set_config('webserviceprotocols', $enabledprotocols . ',rest'); - } - cli_writeln(' -> REST webservice protocol enabled.'); -} catch (dml_exception $e) { - cli_error("Error: Cannot get config setting webserviceprotocols: ".$e->getMessage()); - exit(1); -} - -// Enable the webservice. -$webservicemanager = new webservice(); -$serviceid = $webservicemanager->add_external_service((object)[ - 'name' => $options['wsname'], - 'shortname' => $options['wsname'], - 'enabled' => 1, - 'requiredcapability' => '', - 'restrictedusers' => true, - 'downloadfiles' => true, - 'uploadfiles' => true, -]); - -if(!$serviceid){ - cli_error("ERROR: Service {$options['wsname']} could not be created."); - exit(1); +if ($success) { + cli_separator(); + cli_writeln("Automatic installation of quiz archiver plugin finished successfully."); + exit(0); } else { - cli_writeln(" -> Web service '{$options['wsname']}' created with ID {$serviceid}."); -} - -// Add functions to the service -foreach (WS_FUNCTIONS as $f) { - $webservicemanager->add_external_function_to_service($f, $serviceid); - cli_writeln(" -> Function {$f} added to service '{$options['wsname']}'."); -} - -// Authorise the user to use the service. -$webservicemanager->add_ws_authorised_user((object) [ - 'externalserviceid' => $serviceid, - 'userid' => $webserviceuser->id -]); - -$service = $webservicemanager->get_external_service_by_id($serviceid); -$webservicemanager->update_external_service($service); -cli_writeln(" -> User '{$webserviceuser->username}' authorised to use service '{$options['wsname']}'."); - -// Configure quiz_archiver plugin settings -try { - cli_writeln(" -> Configuring the quiz archiver plugin..."); - - set_config('webservice_id', $serviceid, 'quiz_archiver'); - cli_writeln(" -> Web service set to '{$options['wsname']}'."); - - set_config('webservice_userid', $webserviceuser->id, 'quiz_archiver'); - cli_writeln(" -> Web service user set to '{$webserviceuser->username}'."); -} catch (dml_exception $e) { - cli_error("Error: Failed to set config settings for quiz_archiver plugin: ".$e->getMessage()); + cli_writeln("Aborted."); + cli_separator(); + cli_writeln("FAILED: Automatic installation of quiz archiver plugin failed."); exit(1); } - -cli_writeln(''); -cli_writeln("Automatic installation of quiz archiver plugin finished successfully."); -exit(0); From 236d6d79df344e6bc221f14f66512f867b8e807b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 16:35:32 +0100 Subject: [PATCH 009/185] autoinstall: Add PHPDoc --- classes/local/autoinstall.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index b6b1ec6..8335963 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -75,6 +75,21 @@ class autoinstall { 'quiz_archiver_get_backup_status', ]; + /** + * Performs an automatic installation of the quiz_archiver plugin. + * + * This function: + * - Enables web services and REST protocol + * - Creates a quiz archiver service role and a corresponding user + * - Creates a new web service with all required webservice functions + * - Authorises the user to use the webservice. + * + * @param string $wsname The name for the web service to create + * @param string $rolename The shortname for the role to create + * @param string $username The username for the service account to create + * @return array An array with two elements: a boolean indicating success + * and a string with a log of the performed actions + */ public static function execute( string $wsname = self::DEFAULT_WSNAME, string $rolename = self::DEFAULT_ROLESHORTNAME, From 5d506ff58e9f97c8fbe166a204353a8aa07e7d6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 16:40:43 +0100 Subject: [PATCH 010/185] autoinstall: Check if the plugin is already configured and abort, unless --force is specified --- classes/local/autoinstall.php | 24 +++++++++++++++++++++++- cli/autoinstall.php | 10 +++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 8335963..bf4e088 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -75,6 +75,17 @@ class autoinstall { 'quiz_archiver_get_backup_status', ]; + /** + * Determines if the quiz_archiver plugin was configured previously. + * + * @return bool True if the plugin is unconfigured, false otherwise + * @throws dml_exception If the plugin configuration cannot be retrieved + */ + public static function plugin_is_unconfigured(): bool { + return empty(get_config('quiz_archiver', 'webservice_id')) + && empty(get_config('quiz_archiver', 'webservice_userid')); + } + /** * Performs an automatic installation of the quiz_archiver plugin. * @@ -93,7 +104,8 @@ class autoinstall { public static function execute( string $wsname = self::DEFAULT_WSNAME, string $rolename = self::DEFAULT_ROLESHORTNAME, - string $username = self::DEFAULT_USERNAME + string $username = self::DEFAULT_USERNAME, + bool $force = false ): array { // Prepare return values $success = false; @@ -105,6 +117,16 @@ public static function execute( throw new \RuntimeException(); } + // Check if the plugin is already configured. + if (!self::plugin_is_unconfigured()) { + if ($force) { + $log[] = "Warning: The quiz archiver plugin is already configured. Forcing reconfiguration nonetheless ..."; + } else { + $log[] = "Error: The quiz archiver plugin is already configured. Use --force to bypass this check."; + throw new \RuntimeException(); + } + } + // Get system context. try { $systemcontext = context_system::instance(); diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 00f7f42..7c7dbc6 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -42,9 +42,11 @@ 'wsname' => autoinstall::DEFAULT_WSNAME, 'rolename' => autoinstall::DEFAULT_ROLESHORTNAME, 'username' => autoinstall::DEFAULT_USERNAME, + 'force' => false, ], [ 'h' => 'help', + 'f' => 'force', ] ); @@ -64,6 +66,7 @@ Options: --help, -h Show this help message + --force, -f Force the autoinstall, regardless of the current state of the system --wsname= Sets a custom name for the web service (default: quiz_archiver_webservice) --rolename= Sets a custom name for the web service role (default: quiz_archiver) --username= Sets a custom username for the web service user (default: quiz_archiver_serviceacount) @@ -89,7 +92,12 @@ cli_writeln("Starting automatic installation of quiz archiver plugin..."); cli_separator(); -list($success, $log) = autoinstall::execute($options['wsname'], $options['rolename'], $options['username']); +list($success, $log) = autoinstall::execute( + $options['wsname'], + $options['rolename'], + $options['username'], + $options['force'] +); cli_write($log."\r\n"); From f343c7aba997b2ddb1057afd8a0f951e738e3cee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 16:58:00 +0100 Subject: [PATCH 011/185] autoinstall: Prepare for automatic install routine from plugin settings menu --- classes/local/autoinstall.php | 4 ++-- settings.php | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index bf4e088..240e740 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -82,8 +82,8 @@ class autoinstall { * @throws dml_exception If the plugin configuration cannot be retrieved */ public static function plugin_is_unconfigured(): bool { - return empty(get_config('quiz_archiver', 'webservice_id')) - && empty(get_config('quiz_archiver', 'webservice_userid')); + return intval(get_config('quiz_archiver', 'webservice_id')) <= 0 + && intval(get_config('quiz_archiver', 'webservice_userid')) <= 0; } /** diff --git a/settings.php b/settings.php index fd03c01..d81547b 100644 --- a/settings.php +++ b/settings.php @@ -27,6 +27,7 @@ use quiz_archiver\local\admin\setting\admin_setting_archive_filename_pattern; use quiz_archiver\local\admin\setting\admin_setting_attempt_filename_pattern; use quiz_archiver\local\admin\setting\admin_setting_configcheckbox_alwaystrue; +use quiz_archiver\local\autoinstall; use quiz_archiver\Report; defined('MOODLE_INTERNAL') || die(); @@ -44,6 +45,17 @@ get_string('setting_header_docs_desc', 'quiz_archiver') )); + // Autoinstall + if (autoinstall::plugin_is_unconfigured()) { + $autoinstall_desc = "Automatically configure the Quiz Archiver plugin now"; + } else { + $autoinstall_desc = 'Plugin is already configured.'; + } + $settings->add(new admin_setting_description('quiz_archiver/autoinstall', + get_string('autoinstall', 'quiz_archiver'), + $autoinstall_desc + )); + // Generic settings $settings->add(new admin_setting_heading('quiz_archiver/header_archive_worker', get_string('setting_header_archive_worker', 'quiz_archiver'), From 0b30870cdd63250d951d3f5d561cef4aab65e21c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 17:03:32 +0100 Subject: [PATCH 012/185] autoinstall: Provide language string to make moodle-plugin-ci happy :) --- lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 1 + settings.php | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index bf9d518..212595e 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -160,6 +160,7 @@ $string['tsp_client_error_http_code'] = 'TSP Server hat unerwarteten HTTP Statuscode {$a} zurückgegeben'; // Settings +$string['setting_autoconfigure'] = 'Automatische Konfiguration'; $string['setting_header_archive_worker'] = 'Archive Worker Service'; $string['setting_header_archive_worker_desc'] = 'Konfiguration des Archive Worker Services und des Moodle Webservices.'; $string['setting_header_docs_desc'] = 'Dieses Plugin archiviert Testversuche als PDF- und HTML-Dateien zur langfristigen Speicherung unabhängig von Moodle. Es erfordert die Installation eines separaten Archive Worker Services um korrekt zu funktionieren. Die Dokumentation enthält alle notwendigen Informationen und Installationsanweisungen.'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 7385834..463bffd 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -159,6 +159,7 @@ $string['tsp_client_error_http_code'] = 'TSP server returned HTTP status code {$a}'; // Settings +$string['setting_autoconfigure'] = 'Automatic configuration'; $string['setting_header_archive_worker'] = 'Archive Worker Service'; $string['setting_header_archive_worker_desc'] = 'Configuration of the archive worker service and the Moodle web service it uses.'; $string['setting_header_docs_desc'] = 'This plugin archives quiz attempts as PDF and HTML files for long-term storage, independent of Moodle. It requires a separate worker service to be installed for the actual archiving process to work. Please refer to the documentation for more details and setup instructions.'; diff --git a/settings.php b/settings.php index d81547b..f92a1b6 100644 --- a/settings.php +++ b/settings.php @@ -52,7 +52,7 @@ $autoinstall_desc = 'Plugin is already configured.'; } $settings->add(new admin_setting_description('quiz_archiver/autoinstall', - get_string('autoinstall', 'quiz_archiver'), + get_string('setting_autoconfigure', 'quiz_archiver'), $autoinstall_desc )); From 548b04cdaa9220e26921ce30126be9b853cdb745 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 6 Mar 2024 17:08:36 +0100 Subject: [PATCH 013/185] autoinstall: Add missing PHPDoc comment --- classes/local/autoinstall.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 240e740..c4361a9 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -98,6 +98,8 @@ public static function plugin_is_unconfigured(): bool { * @param string $wsname The name for the web service to create * @param string $rolename The shortname for the role to create * @param string $username The username for the service account to create + * @param bool $force If true, the installation is forced regardless of the + * current state of the system * @return array An array with two elements: a boolean indicating success * and a string with a log of the performed actions */ From 19a05707f84531666bac6be12a36ceb4b67a1e9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 7 Mar 2024 12:08:19 +0100 Subject: [PATCH 014/185] autoinstall: Create autoinstall admin UI page with quick form, accessible via the plugin admin settings page --- adminui/autoinstall.php | 84 +++++++++++++++++++++++++++++++ classes/form/autoinstall_form.php | 70 ++++++++++++++++++++++++++ lang/de/quiz_archiver.php | 15 ++++++ lang/en/quiz_archiver.php | 15 ++++++ settings.php | 7 ++- 5 files changed, 189 insertions(+), 2 deletions(-) create mode 100644 adminui/autoinstall.php create mode 100644 classes/form/autoinstall_form.php diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php new file mode 100644 index 0000000..a85b3b6 --- /dev/null +++ b/adminui/autoinstall.php @@ -0,0 +1,84 @@ +. + +/** + * Handler for autoinstall feature from the admin UI of the quiz archiver plugin. + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + */ + +const NO_OUTPUT_BUFFERING = true; + +require_once(__DIR__.'/../../../../../config.php'); +require_once("{$CFG->libdir}/moodlelib.php"); + +use quiz_archiver\form\autoinstall_form; +use quiz_archiver\local\autoinstall; + +// Ensure user has permissions +require_login(); +$ctx = context_system::instance(); +require_capability('moodle/site:config', $ctx); + +// Setup page +$PAGE->set_context($ctx); +$PAGE->set_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); +$title = get_string('autoinstall_plugin', 'quiz_archiver'); +$PAGE->set_title($title); + +echo $OUTPUT->header(); +echo $OUTPUT->heading($title); + +// Content +if (autoinstall::plugin_is_unconfigured()) { + $form = new autoinstall_form(); + + if ($form->is_cancelled()) { + // Cancelled + echo $OUTPUT->paragraph(get_string('autoinstall_cancelled', 'quiz_archiver')); + echo $OUTPUT->paragraph(get_string('pleaseclose')); + } else if ($data = $form->get_data()) { + // Perform autoinstall + list($success, $log) = autoinstall::execute( + $data->wsname, + $data->rolename, + $data->username + ); + + // Show result + echo $OUTPUT->paragraph(get_string('autoinstall_started', 'quiz_archiver')); + echo $OUTPUT->paragraph(get_string('logs')); + echo "
{$log}

"; + + if ($success) { + echo $OUTPUT->paragraph(get_string('autoinstall_success', 'quiz_archiver')); + } else { + echo $OUTPUT->paragraph(get_string('autoinstall_failure', 'quiz_archiver')); + } + + echo $OUTPUT->paragraph(get_string('pleaseclose')); + } else { + $form->display(); + } +} else { + echo $OUTPUT->paragraph(get_string('autoinstall_already_configured_long', 'quiz_archiver')); + echo $OUTPUT->paragraph(get_string('pleaseclose')); +} + +// End page +echo $OUTPUT->footer(); diff --git a/classes/form/autoinstall_form.php b/classes/form/autoinstall_form.php new file mode 100644 index 0000000..05cbd97 --- /dev/null +++ b/classes/form/autoinstall_form.php @@ -0,0 +1,70 @@ +. + +/** + * Defines the editing form for artifacts + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\form; + +use quiz_archiver\local\autoinstall; + +defined('MOODLE_INTERNAL') || die(); + +require_once($CFG->dirroot.'/lib/formslib.php'); +require_once($CFG->dirroot.'/mod/quiz/report/archiver/classes/local/autoinstall.php'); + + +/** + * Form to trigger automatic installation of the quiz archiver plugin + */ +class autoinstall_form extends \moodleform { + + /** + * Form definiton. + * + * @throws \dml_exception + * @throws \coding_exception + * @throws \moodle_exception + */ + public function definition() { + $mform = $this->_form; + + // Add configuration options + $mform->addElement('text', 'wsname', get_string('autoinstall_wsname', 'quiz_archiver'), ['size' => 50]); + $mform->setDefault('wsname', autoinstall::DEFAULT_WSNAME); + $mform->setType('wsname', PARAM_TEXT); + $mform->addRule('wsname', null, 'required', null, 'client'); + + $mform->addElement('text', 'rolename', get_string('autoinstall_rolename', 'quiz_archiver'), ['size' => 50]); + $mform->setDefault('rolename', autoinstall::DEFAULT_ROLESHORTNAME); + $mform->setType('rolename', PARAM_TEXT); + $mform->addRule('rolename', null, 'required', null, 'client'); + + $mform->addElement('text', 'username', get_string('autoinstall_username', 'quiz_archiver'), ['size' => 50]); + $mform->setDefault('username', autoinstall::DEFAULT_USERNAME); + $mform->setType('username', PARAM_TEXT); + $mform->addRule('username', null, 'required', null, 'client'); + + // Action buttons + $this->add_action_buttons(true, get_string('confirm', 'moodle')); + } + +} diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 212595e..d049988 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -216,3 +216,18 @@ $string['task_autodelete_job_artifacts'] = 'Löschen abgelaufener Testarchive'; $string['task_autodelete_job_artifacts_start'] = 'Lösche abgelaufene Testarchive ...'; $string['task_autodelete_job_artifacts_report'] = '{$a} Testarchive gelöscht.'; + +// Autoinstall +$string['autoinstall_already_configured'] = 'Plugin ist bereits konfiguriert'; +$string['autoinstall_already_configured_long'] = 'Das Quiz Archiver Plugin ist bereits konfiguriert. Eine erneute automatische Konfiguration ist nicht möglich.'; +$string['autoinstall_cancelled'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde abgebrochen. Es wurden keine Einstellungen verändert.'; +$string['autoinstall_failure'] = 'Die automatische Konfiguration des Quiz Archiver Plugins ist fehlgeschlagen.'; +$string['autoinstall_plugin'] = 'Quiz Archiver: Automatische Konfiguration'; +$string['autoinstall_started'] = 'Automatische Konfiguration gestartet ...'; +$string['autoinstall_success'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde erfolgreich abgeschlossen.'; +$string['autoinstall_rolename'] = 'Rollenname'; +$string['autoinstall_rolename_help'] = 'TODO'; +$string['autoinstall_username'] = 'Nutzername'; +$string['autoinstall_username_help'] = 'TODO'; +$string['autoinstall_wsname'] = 'Webservice name'; +$string['autoinstall_wsname_help'] = 'TODO'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 463bffd..1d7350e 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -213,3 +213,18 @@ $string['task_autodelete_job_artifacts'] = 'Delete expired quiz archives'; $string['task_autodelete_job_artifacts_start'] = 'Deleting expired quiz archives ...'; $string['task_autodelete_job_artifacts_report'] = 'Deleted {$a} quiz archives.'; + +// Autoinstall +$string['autoinstall_already_configured'] = 'Plugin is already configured'; +$string['autoinstall_already_configured_long'] = 'The Quiz Archiver Plugin is already configured. Automatic configuration is not possible twice.'; +$string['autoinstall_cancelled'] = 'The automatic configuration of the Quiz Archiver Plugin was cancelled. No changes were made.'; +$string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin failed.'; +$string['autoinstall_plugin'] = 'Quiz Archiver: Automatic configuration'; +$string['autoinstall_started'] = 'Automatic configuration started ...'; +$string['autoinstall_success'] = 'The automatic configuration of the Quiz Archiver Plugin was successful.'; +$string['autoinstall_rolename'] = 'Role name'; +$string['autoinstall_rolename_help'] = 'TODO'; +$string['autoinstall_username'] = 'Username'; +$string['autoinstall_username_help'] = 'TODO'; +$string['autoinstall_wsname'] = 'Web service name'; +$string['autoinstall_wsname_help'] = 'TODO'; diff --git a/settings.php b/settings.php index f92a1b6..97d02a5 100644 --- a/settings.php +++ b/settings.php @@ -23,6 +23,8 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +require_once(__DIR__ . '/classes/local/autoinstall.php'); + use quiz_archiver\ArchiveJob; use quiz_archiver\local\admin\setting\admin_setting_archive_filename_pattern; use quiz_archiver\local\admin\setting\admin_setting_attempt_filename_pattern; @@ -47,9 +49,10 @@ // Autoinstall if (autoinstall::plugin_is_unconfigured()) { - $autoinstall_desc = "Automatically configure the Quiz Archiver plugin now"; + $autoinstall_url = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); + $autoinstall_desc = "".get_string('autoinstall_already_configured', 'quiz_archiver').""; } else { - $autoinstall_desc = 'Plugin is already configured.'; + $autoinstall_desc = get_string('autoinstall_already_configured', 'quiz_archiver'); } $settings->add(new admin_setting_description('quiz_archiver/autoinstall', get_string('setting_autoconfigure', 'quiz_archiver'), From 70d3d1a4ed88cace586cd8177937b183af841488 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 7 Mar 2024 12:12:54 +0100 Subject: [PATCH 015/185] autoinstall: Make PHPDoc happy again ;) --- adminui/autoinstall.php | 1 + 1 file changed, 1 insertion(+) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index a85b3b6..8f400b8 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -22,6 +22,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late */ +/** @var bool Disables output buffering */ const NO_OUTPUT_BUFFERING = true; require_once(__DIR__.'/../../../../../config.php'); From 7755ca228e7650e73b8b00aba6ad2702bc29ad53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 7 Mar 2024 12:16:34 +0100 Subject: [PATCH 016/185] autoinstall: Fix language string in admin settings UI --- lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 1 + settings.php | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index d049988..4702906 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -224,6 +224,7 @@ $string['autoinstall_failure'] = 'Die automatische Konfiguration des Quiz Archiver Plugins ist fehlgeschlagen.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatische Konfiguration'; $string['autoinstall_started'] = 'Automatische Konfiguration gestartet ...'; +$string['autoinstall_start_now'] = 'Automatische Konfiguration jetzt starten'; $string['autoinstall_success'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde erfolgreich abgeschlossen.'; $string['autoinstall_rolename'] = 'Rollenname'; $string['autoinstall_rolename_help'] = 'TODO'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 1d7350e..46bae83 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -221,6 +221,7 @@ $string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin failed.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatic configuration'; $string['autoinstall_started'] = 'Automatic configuration started ...'; +$string['autoinstall_start_now'] = 'Start automatic configuration now'; $string['autoinstall_success'] = 'The automatic configuration of the Quiz Archiver Plugin was successful.'; $string['autoinstall_rolename'] = 'Role name'; $string['autoinstall_rolename_help'] = 'TODO'; diff --git a/settings.php b/settings.php index 97d02a5..abb70fd 100644 --- a/settings.php +++ b/settings.php @@ -50,7 +50,7 @@ // Autoinstall if (autoinstall::plugin_is_unconfigured()) { $autoinstall_url = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); - $autoinstall_desc = "".get_string('autoinstall_already_configured', 'quiz_archiver').""; + $autoinstall_desc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; } else { $autoinstall_desc = get_string('autoinstall_already_configured', 'quiz_archiver'); } From 85d6161d9b865fb8d1b7a0ec82e239584cf7a668 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 14 Mar 2024 13:00:47 +0100 Subject: [PATCH 017/185] Throw error message on job creation if plugin is not fully configured yet --- lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 1 + report.php | 6 ++++++ 3 files changed, 8 insertions(+) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 4702906..f4deb1b 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -83,6 +83,7 @@ $string['export_report_section_attachments_help'] = 'Alle Dateiabgaben (z.B. von Aufsätzen/Essay Aufgaben) im Archiv einschließen. Warnung: Dies kann die Archivgröße erheblich erhöhen.'; $string['job_overview'] = 'Testarchive'; $string['num_attempts'] = 'Anzahl Testversuche'; +$string['error_plugin_is_not_configured'] = 'Fehler: Das Quiz Archiver Plugin ist noch nicht konfiguriert. Bitte kontaktieren Sie Ihren Website-Administrator.'; // Job creation form: Filename pattern $string['archive_filename_pattern'] = 'Archivname'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 46bae83..90ac92b 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -83,6 +83,7 @@ $string['export_report_section_attachments_help'] = 'Include all file attachments (e.g., essay file submissions) inside the archive. Warning: This can significantly increase the archive size.'; $string['job_overview'] = 'Archives'; $string['num_attempts'] = 'Number of attempts'; +$string['error_plugin_is_not_configured'] = 'Error: The quiz archiver plugin is not configured yet. Please contact your site administrator.'; // Job creation form: Filename pattern $string['archive_filename_pattern'] = 'Archive name'; diff --git a/report.php b/report.php index 1708ef4..7576386 100644 --- a/report.php +++ b/report.php @@ -29,6 +29,7 @@ use quiz_archiver\ArchiveJob; use quiz_archiver\BackupManager; use quiz_archiver\form\artifact_delete_form; +use quiz_archiver\local\autoinstall; use quiz_archiver\local\util; use quiz_archiver\RemoteArchiveWorker; use quiz_archiver\Report; @@ -347,6 +348,11 @@ protected function initiate_archive_job( // Check permissions. require_capability('mod/quiz_archiver:create', $this->context); + // Check if webservice is configured properly + if (autoinstall::plugin_is_unconfigured()) { + throw new \RuntimeException(get_string('error_plugin_is_not_configured', 'quiz_archiver')); + } + // Create temporary webservice token if (class_exists('core_external\util')) { // Moodle 4.2 and above From f548cc9cd4327ffe27c67439aa27b1d27ee8ac34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 14 Mar 2024 13:09:02 +0100 Subject: [PATCH 018/185] autoinstall: Polish integration into admin UI --- adminui/autoinstall.php | 9 ++++++--- classes/form/autoinstall_form.php | 1 + classes/local/autoinstall.php | 2 +- lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 2 ++ settings.php | 3 ++- 6 files changed, 13 insertions(+), 5 deletions(-) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index 8f400b8..792a9f8 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -27,6 +27,7 @@ require_once(__DIR__.'/../../../../../config.php'); require_once("{$CFG->libdir}/moodlelib.php"); +require_once("{$CFG->dirroot}/mod/quiz/report/archiver/classes/local/autoinstall.php"); use quiz_archiver\form\autoinstall_form; use quiz_archiver\local\autoinstall; @@ -52,7 +53,7 @@ if ($form->is_cancelled()) { // Cancelled echo $OUTPUT->paragraph(get_string('autoinstall_cancelled', 'quiz_archiver')); - echo $OUTPUT->paragraph(get_string('pleaseclose')); + echo $OUTPUT->paragraph(''.(get_string('pleaseclose')).''); } else if ($data = $form->get_data()) { // Perform autoinstall list($success, $log) = autoinstall::execute( @@ -72,13 +73,15 @@ echo $OUTPUT->paragraph(get_string('autoinstall_failure', 'quiz_archiver')); } - echo $OUTPUT->paragraph(get_string('pleaseclose')); + echo $OUTPUT->paragraph(''.(get_string('pleaseclose')).''); } else { + echo $OUTPUT->paragraph(get_string('autoinstall_explanation', 'quiz_archiver')); + echo $OUTPUT->paragraph(get_string('autoinstall_explanation_details', 'quiz_archiver')); $form->display(); } } else { echo $OUTPUT->paragraph(get_string('autoinstall_already_configured_long', 'quiz_archiver')); - echo $OUTPUT->paragraph(get_string('pleaseclose')); + echo $OUTPUT->paragraph(''.(get_string('pleaseclose')).''); } // End page diff --git a/classes/form/autoinstall_form.php b/classes/form/autoinstall_form.php index 05cbd97..9581871 100644 --- a/classes/form/autoinstall_form.php +++ b/classes/form/autoinstall_form.php @@ -46,6 +46,7 @@ class autoinstall_form extends \moodleform { */ public function definition() { $mform = $this->_form; + $mform->addElement('header', 'header', get_string('settings', 'plugin')); // Add configuration options $mform->addElement('text', 'wsname', get_string('autoinstall_wsname', 'quiz_archiver'), ['size' => 50]); diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index c4361a9..43a1fb5 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -38,7 +38,7 @@ class autoinstall { const DEFAULT_WSNAME = 'quiz_archiver_webservice'; /** @var string Default username for the service account to create */ - const DEFAULT_USERNAME = 'quiz_archiver_serviceacount'; + const DEFAULT_USERNAME = 'quiz_archiver_serviceaccount'; /** @var string Default shortname for the role to create */ const DEFAULT_ROLESHORTNAME = 'quiz_archiver'; diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index f4deb1b..e8c8434 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -222,6 +222,7 @@ $string['autoinstall_already_configured'] = 'Plugin ist bereits konfiguriert'; $string['autoinstall_already_configured_long'] = 'Das Quiz Archiver Plugin ist bereits konfiguriert. Eine erneute automatische Konfiguration ist nicht möglich.'; $string['autoinstall_cancelled'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde abgebrochen. Es wurden keine Einstellungen verändert.'; +$string['autoinstall_explanation'] = 'Das Quiz Archiver Plugin erfordert anfangs einige Konfigurationsschritte, um zu funktionieren (siehe Installation). Sie können diese Einstellungen manuell konfigurieren, oder die automatische Konfiguration verwenden, um alle Moodle-bezogenen Einstellungen zu setzen.'; $string['autoinstall_failure'] = 'Die automatische Konfiguration des Quiz Archiver Plugins ist fehlgeschlagen.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatische Konfiguration'; $string['autoinstall_started'] = 'Automatische Konfiguration gestartet ...'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 90ac92b..2616e72 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -219,6 +219,8 @@ $string['autoinstall_already_configured'] = 'Plugin is already configured'; $string['autoinstall_already_configured_long'] = 'The Quiz Archiver Plugin is already configured. Automatic configuration is not possible twice.'; $string['autoinstall_cancelled'] = 'The automatic configuration of the Quiz Archiver Plugin was cancelled. No changes were made.'; +$string['autoinstall_explanation'] = 'The Quiz Archiver plugin requires a few initial configuration steps to work (see Installation). You can either configure all of these settings manually or use the automatic configuration feature to take care of all Moodle related settings.'; +$string['autoinstall_explanation_details'] = 'The automatic configuration feature will take care of the following steps:
  • Enabling web services and REST protocol
  • Creating a quiz archiver service role and a corresponding user
  • Creating a new web service with all required webservice functions
  • Authorising the user to use the webservice
'; $string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin failed.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatic configuration'; $string['autoinstall_started'] = 'Automatic configuration started ...'; diff --git a/settings.php b/settings.php index abb70fd..154f52c 100644 --- a/settings.php +++ b/settings.php @@ -50,7 +50,8 @@ // Autoinstall if (autoinstall::plugin_is_unconfigured()) { $autoinstall_url = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); - $autoinstall_desc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; + $autoinstall_desc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; + $autoinstall_desc .= "

".get_string('autoinstall_explanation', 'quiz_archiver')."

"; } else { $autoinstall_desc = get_string('autoinstall_already_configured', 'quiz_archiver'); } From 08a2d7e06fba92d72c17c435e7d1b3848df703ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 14 Mar 2024 14:07:01 +0100 Subject: [PATCH 019/185] autoinstall: Add worker url as additional parameter --- adminui/autoinstall.php | 3 ++- classes/form/autoinstall_form.php | 5 +++++ classes/local/autoinstall.php | 11 +++++++++++ cli/autoinstall.php | 5 ++++- 4 files changed, 22 insertions(+), 2 deletions(-) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index 792a9f8..85b6ac3 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -27,7 +27,7 @@ require_once(__DIR__.'/../../../../../config.php'); require_once("{$CFG->libdir}/moodlelib.php"); -require_once("{$CFG->dirroot}/mod/quiz/report/archiver/classes/local/autoinstall.php"); +require_once("{$CFG->dirroot}/mod/quiz/report/archiver/classes/form/autoinstall_form.php"); use quiz_archiver\form\autoinstall_form; use quiz_archiver\local\autoinstall; @@ -57,6 +57,7 @@ } else if ($data = $form->get_data()) { // Perform autoinstall list($success, $log) = autoinstall::execute( + $data->workerurl, $data->wsname, $data->rolename, $data->username diff --git a/classes/form/autoinstall_form.php b/classes/form/autoinstall_form.php index 9581871..8783a38 100644 --- a/classes/form/autoinstall_form.php +++ b/classes/form/autoinstall_form.php @@ -49,6 +49,11 @@ public function definition() { $mform->addElement('header', 'header', get_string('settings', 'plugin')); // Add configuration options + $mform->addElement('text', 'workerurl', get_string('setting_worker_url', 'quiz_archiver'), ['size' => 50]); + $mform->addElement('static', 'workerurl_help', '', get_string('setting_worker_url_desc', 'quiz_archiver')); + $mform->setType('workerurl', PARAM_TEXT); + $mform->addRule('workerurl', null, 'required', null, 'client'); + $mform->addElement('text', 'wsname', get_string('autoinstall_wsname', 'quiz_archiver'), ['size' => 50]); $mform->setDefault('wsname', autoinstall::DEFAULT_WSNAME); $mform->setType('wsname', PARAM_TEXT); diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 43a1fb5..315e788 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -95,6 +95,7 @@ public static function plugin_is_unconfigured(): bool { * - Creates a new web service with all required webservice functions * - Authorises the user to use the webservice. * + * @param string $workerurl The URL of the quiz archive worker service * @param string $wsname The name for the web service to create * @param string $rolename The shortname for the role to create * @param string $username The username for the service account to create @@ -104,6 +105,7 @@ public static function plugin_is_unconfigured(): bool { * and a string with a log of the performed actions */ public static function execute( + string $workerurl, string $wsname = self::DEFAULT_WSNAME, string $rolename = self::DEFAULT_ROLESHORTNAME, string $username = self::DEFAULT_USERNAME, @@ -129,6 +131,12 @@ public static function execute( } } + // Check worker URL + if (empty($workerurl)) { + $log[] = "Error: The given worker URL is invalid."; + throw new \RuntimeException(); + } + // Get system context. try { $systemcontext = context_system::instance(); @@ -253,6 +261,9 @@ public static function execute( set_config('webservice_userid', $webserviceuser->id, 'quiz_archiver'); $log[] = " -> Web service user set to '{$webserviceuser->username}'."; + + set_config('worker_url', $workerurl, 'quiz_archiver'); + $log[] = " -> Worker URL set to '{$workerurl}'."; } catch (\Exception $e) { $log[] = "Error: Failed to set config settings for quiz_archiver plugin: ".$e->getMessage(); throw new \RuntimeException(); diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 7c7dbc6..9c5f024 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -39,6 +39,7 @@ list($options, $unrecognised) = cli_get_params( [ 'help' => false, + 'workerurl' => 'http://localhost:8080', 'wsname' => autoinstall::DEFAULT_WSNAME, 'rolename' => autoinstall::DEFAULT_ROLESHORTNAME, 'username' => autoinstall::DEFAULT_USERNAME, @@ -67,9 +68,10 @@ Options: --help, -h Show this help message --force, -f Force the autoinstall, regardless of the current state of the system + --workerurl= Sets the URL of the worker (default: http://localhost:8080) --wsname= Sets a custom name for the web service (default: quiz_archiver_webservice) --rolename= Sets a custom name for the web service role (default: quiz_archiver) - --username= Sets a custom username for the web service user (default: quiz_archiver_serviceacount) + --username= Sets a custom username for the web service user (default: quiz_archiver_serviceaccount) EOT; if ($unrecognised) { @@ -93,6 +95,7 @@ cli_separator(); list($success, $log) = autoinstall::execute( + $options['workerurl'], $options['wsname'], $options['rolename'], $options['username'], From 08d525fef93e36ed2c1bbea6de1ac9b1cc1b1007 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 14 Mar 2024 15:35:04 +0100 Subject: [PATCH 020/185] Document automatic configuration feature and move manual configuration instructions to an expendable section --- README.md | 84 ++++++++++++++++-- .../configuration_plugin_autoinstall_2.png | Bin 0 -> 143718 bytes ...nfiguration_plugin_autoinstall_2_thumb.png | Bin 0 -> 10835 bytes .../configuration_plugin_autoinstall_3.png | Bin 0 -> 102065 bytes ...nfiguration_plugin_autoinstall_3_thumb.png | Bin 0 -> 11377 bytes .../configuration_plugin_autoinstall_4.png | Bin 0 -> 219356 bytes ...nfiguration_plugin_autoinstall_4_thumb.png | Bin 0 -> 18185 bytes 7 files changed, 79 insertions(+), 5 deletions(-) create mode 100644 doc/configuration/configuration_plugin_autoinstall_2.png create mode 100644 doc/configuration/configuration_plugin_autoinstall_2_thumb.png create mode 100644 doc/configuration/configuration_plugin_autoinstall_3.png create mode 100644 doc/configuration/configuration_plugin_autoinstall_3_thumb.png create mode 100644 doc/configuration/configuration_plugin_autoinstall_4.png create mode 100644 doc/configuration/configuration_plugin_autoinstall_4_thumb.png diff --git a/README.md b/README.md index df78ddb..2646bc7 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,7 @@ permissions, setup a webservice for the archive worker, and set configuration options for the Moodle plugin. -### 1. Prerequisites +### Prerequisites Installation of the additional [quiz archive worker service](https://github.com/ngandrass/moodle-quiz-archive-worker) is mandatory for this plugin to work. @@ -137,7 +137,81 @@ is mandatory for this plugin to work. [Quiz Archive Worker: Installation](https://github.com/ngandrass/moodle-quiz-archive-worker#installation)** -### 2. Create Moodle User and Role +### Automatic Configuration + +Creation of the dedicated Moodle user and role, as well as the setup of the +webservice for the archive worker, can be done automatically. + +The easiest way is to use the automatic configuration feature provided via the +Moodle admin interface. + +1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > + _Quiz_ > _Quiz Archiver_ (2) +2. Click the _Automatic configuration_ button (3) +3. Enter the URL under which the quit archive worker can be reached (4) +4. (Optional) Change the configuration defaults (5) +5. Execute the automatic configuration (6) +6. Close the window (7) +7. (Optional) Adjust the default plugin setting on the plugin settings page + +[![Screenshot: Configuration - Automatic Configuration 1](doc/configuration/configuration_plugin_settings_1_thumb.png)](doc/configuration/configuration_plugin_settings_1.png) +[![Screenshot: Configuration - Automatic Configuration 2](doc/configuration/configuration_plugin_autoinstall_2_thumb.png)](doc/configuration/configuration_plugin_autoinstall_2.png) +[![Screenshot: Configuration - Automatic Configuration 3](doc/configuration/configuration_plugin_autoinstall_3_thumb.png)](doc/configuration/configuration_plugin_autoinstall_3.png) +[![Screenshot: Configuration - Automatic Configuration 4](doc/configuration/configuration_plugin_autoinstall_4_thumb.png)](doc/configuration/configuration_plugin_autoinstall_4.png) + + +#### Using the Command Line Interface (CLI) + +
+Expand here to show CLI configuration instructions + +If you want to configure this plugin in an automated fashion, you can use the +provided CLI script. The script is located at +`{$CFG->wwwroot}/mod/quiz/report/archiver/cli/autoinstall.php`. + +To execute the script: + +1. Open a terminal and navigate to the quiz archiver CLI directory: + ```bash + cd /path/to/moodle/mod/quiz/report/archiver/cli + ``` +2. Execute the CLI script using PHP: + ```bash + php autoinstall.php --help + ``` + +Usage: +```text +Automatically configures Moodle for use with the quiz archiver plugin. + +ATTENTION: This CLI script ... +- Enables web services and REST protocol +- Creates a quiz archiver service role and a corresponding user +- Creates a new web service with all required webservice functions +- Authorises the user to use the webservice. + +Usage: + $ php autoinstall.php + $ php autoinstall.php --username="my-custom-archive-user" + $ php autoinstall.php [--help|-h] + +Options: + --help, -h Show this help message + --force, -f Force the autoinstall, regardless of the current state of the system + --workerurl= Sets the URL of the worker (default: http://localhost:8080) + --wsname= Sets a custom name for the web service (default: quiz_archiver_webservice) + --rolename= Sets a custom name for the web service role (default: quiz_archiver) + --username= Sets a custom username for the web service user (default: quiz_archiver_serviceaccount) +``` +
+ + +### Manual Configuration + +
+Expand here to show manual configuration instructions + +### 1. Create Moodle User and Role 1. Create a designated Moodle user for the quiz archiver webservice 1. Navigate to _Site Administration_ > _Users_ (1) > _Accounts_ > _Add a new user_ (2) @@ -174,8 +248,7 @@ is mandatory for this plugin to work. [![Screenshot: Configuration - Assign Role 2](doc/configuration/configuration_assign_role_2_thumb.png)](doc/configuration/configuration_assign_role_2.png) [![Screenshot: Configuration - Assign Role 3](doc/configuration/configuration_assign_role_3_thumb.png)](doc/configuration/configuration_assign_role_3.png) - -### 3. Setup Webservice +### 2. Setup Webservice 1. Enable webservices globally 1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _Overview_ (2) @@ -215,7 +288,7 @@ is mandatory for this plugin to work. [![Screenshot: Configuration - Assign Webservice Functions 4](doc/configuration/configuration_assign_webservice_functions_4_thumb.png)](doc/configuration/configuration_assign_webservice_functions_4.png) -### 4. Configure Plugin Settings +### 3. Configure Plugin Settings 1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > _Quiz_ > _Quiz Archiver_ (2) @@ -238,6 +311,7 @@ is mandatory for this plugin to work. [![Screenshot: Configuration - Plugin Settings 1](doc/configuration/configuration_plugin_settings_1_thumb.png)](doc/configuration/configuration_plugin_settings_1.png) [![Screenshot: Configuration - Plugin Settings 2](doc/configuration/configuration_plugin_settings_2_thumb.png)](doc/configuration/configuration_plugin_settings_2.png) +
### Known Pitfalls diff --git a/doc/configuration/configuration_plugin_autoinstall_2.png b/doc/configuration/configuration_plugin_autoinstall_2.png new file mode 100644 index 0000000000000000000000000000000000000000..9b14255ca096e9661e2069ccaf2b3a3221137669 GIT binary patch literal 143718 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

hV*fawp(uQSS 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 KQ>|9Eg8dK83J-(; literal 0 HcmV?d00001 diff --git a/doc/configuration/configuration_plugin_autoinstall_3.png b/doc/configuration/configuration_plugin_autoinstall_3.png new file mode 100644 index 0000000000000000000000000000000000000000..0f38fe6c25c6641b3b0b01ab64bdae5552574d02 GIT binary patch literal 102065 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 z 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�cwHU)TIk2=Vc;DZ6QjG{< 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 HPA~rluONr^ literal 0 HcmV?d00001 diff --git a/doc/configuration/configuration_plugin_autoinstall_4_thumb.png b/doc/configuration/configuration_plugin_autoinstall_4_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..c449645aaed74f72d0407782941852a6629b667b GIT binary patch literal 18185 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 NaSR)DsQF-Q&OfZ8^7H@z literal 0 HcmV?d00001 From 5aecf0100fe6c1be2f3475471d05eb49df988452 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 14 Mar 2024 16:49:20 +0100 Subject: [PATCH 021/185] Fix namespace for two external class tests --- tests/classes/external/get_attempts_metadata_test.php | 5 +---- tests/classes/external/get_backup_status_test.php | 3 +-- tests/classes/external/process_uploaded_artifact_test.php | 3 +-- 3 files changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/classes/external/get_attempts_metadata_test.php b/tests/classes/external/get_attempts_metadata_test.php index 20c893d..b103788 100644 --- a/tests/classes/external/get_attempts_metadata_test.php +++ b/tests/classes/external/get_attempts_metadata_test.php @@ -22,10 +22,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -namespace tests\classes\external; - - -use quiz_archiver\external\get_attempts_metadata; +namespace quiz_archiver\external; /** * Tests for the get_attempts_metadata external service diff --git a/tests/classes/external/get_backup_status_test.php b/tests/classes/external/get_backup_status_test.php index 7c60132..bc3328a 100644 --- a/tests/classes/external/get_backup_status_test.php +++ b/tests/classes/external/get_backup_status_test.php @@ -22,11 +22,10 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -namespace tests\classes\external; +namespace quiz_archiver\external; use quiz_archiver\ArchiveJob; -use quiz_archiver\external\get_backup_status; /** * Tests for the get_backup_status external service diff --git a/tests/classes/external/process_uploaded_artifact_test.php b/tests/classes/external/process_uploaded_artifact_test.php index df30392..13379bb 100644 --- a/tests/classes/external/process_uploaded_artifact_test.php +++ b/tests/classes/external/process_uploaded_artifact_test.php @@ -22,11 +22,10 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -namespace tests\classes\external; +namespace quiz_archiver\external; use quiz_archiver\ArchiveJob; -use quiz_archiver\external\process_uploaded_artifact; use quiz_archiver\FileManager; /** From 7d92bfcd6c56a9ebd396f781ea7f5f1a5f69770e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 14 Mar 2024 16:49:34 +0100 Subject: [PATCH 022/185] autoinstall: Create unit tests --- tests/classes/local/autoinstall_test.php | 117 +++++++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 tests/classes/local/autoinstall_test.php diff --git a/tests/classes/local/autoinstall_test.php b/tests/classes/local/autoinstall_test.php new file mode 100644 index 0000000..0c6f011 --- /dev/null +++ b/tests/classes/local/autoinstall_test.php @@ -0,0 +1,117 @@ +. + +/** + * Tests for the autoinstall class + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\local; + +/** + * Tests for the autoinstall class + */ +class autoinstall_test extends \advanced_testcase { + + /** + * Test one full autoinstall process + * + * @return void + * @throws \dml_exception + */ + public function test_autoinstall(): void { + global $DB; + $this->resetAfterTest(); + + // Gain privileges + $this->setAdminUser(); + + // Execute autoinstall + $workerurl = 'http://foo.bar:1337'; + $wsname = 'test_webservice_name'; + $rolename = 'test_role_name'; + $username = 'test_user_name'; + + list($success, $log) = autoinstall::execute( + $workerurl, + $wsname, + $rolename, + $username + ); + + // Check function return + $this->assertTrue($success, 'Autoinstall returned success=false'); + $this->assertNotEmpty($log, 'Autoinstall returned empty log'); + + // Check worker URL + $this->assertSame($workerurl, get_config('quiz_archiver', 'worker_url'), 'Worker URL was not set correctly'); + + // Check global config + $this->assertEquals(true, get_config('moodle', 'enablewebservices'), 'Webservices were not globally enabled'); // This can not be assertTrue, since Moodle stores a '1' + $this->assertStringContainsString('rest', get_config('moodle', 'webserviceprotocols'), 'REST protocol was not globally enabled'); + + // Check webservice + $webservice = $DB->get_record('external_services', ['name' => $wsname]); + $this->assertNotEmpty($webservice, 'Webservice was not created'); + $this->assertSame($webservice->name, $wsname, 'Webservice name was not set correctly'); + $this->assertNotEmpty($DB->get_records('external_services_functions', ['externalserviceid' => $webservice->id]), 'Webservice functions were not assigned'); + $this->assertSame($webservice->id, get_config('quiz_archiver', 'webservice_id'), 'Webservice ID was not set correctly'); + + // Check role + $role = $DB->get_record('role', ['shortname' => $rolename]); + $this->assertNotEmpty($role, 'Role was not created'); + $this->assertNotEmpty($DB->get_records('role_capabilities', ['roleid' => $role->id]), 'Role capabilities were not assigned'); + + // Check user + $user = $DB->get_record('user', ['username' => $username]); + $this->assertNotEmpty($user, 'User was not created'); + $this->assertNotEmpty($DB->get_records('role_assignments', ['userid' => $user->id, 'roleid' => $role->id]), 'User role was not assigned'); + $this->assertSame($user->id, get_config('quiz_archiver', 'webservice_userid'), 'User ID was not set correctly'); + } + + /** + * Tests if autoinstalls are properly detected and repeated autoinstalls + * are prevented. + * + * @return void + * @throws \dml_exception + */ + public function test_autoinstall_detection(): void { + $this->resetAfterTest(); + + // Gain privileges + $this->setAdminUser(); + + // Plugin should be unconfigured + $this->assertTrue(autoinstall::plugin_is_unconfigured(), 'Plugin was not unconfigured'); + + // Perform autoinstall + list($success, $log) = autoinstall::execute('http://foo.bar:1337'); + $this->assertTrue($success, 'First autoinstall failed'); + + // Try to detect autoinstall + $this->assertFalse(autoinstall::plugin_is_unconfigured(), 'Successful autoinstall was not detected'); + + // Try to autoinstall a second time + list($success, $log) = autoinstall::execute('http://foo.bar:1337'); + $this->assertFalse($success, 'Second autoinstall was successful'); + $this->assertNotEmpty($log, 'Second autoinstall returned empty log'); + } + +} From dacfba5d53bdf0d15579c47cf351673cbb20dabd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Apr 2024 11:04:05 +0200 Subject: [PATCH 023/185] Make autoinstall result bold and do not open autoinstall dialog in new window --- adminui/autoinstall.php | 11 ++++++++--- lang/de/quiz_archiver.php | 4 ++-- lang/en/quiz_archiver.php | 4 ++-- settings.php | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index 85b6ac3..49e8fc6 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -43,6 +43,11 @@ $title = get_string('autoinstall_plugin', 'quiz_archiver'); $PAGE->set_title($title); +$returnlink = html_writer::link( + new moodle_url('/admin/settings.php', ['section' => 'quiz_archiver_settings']), + get_string('back') +); + echo $OUTPUT->header(); echo $OUTPUT->heading($title); @@ -53,7 +58,7 @@ if ($form->is_cancelled()) { // Cancelled echo $OUTPUT->paragraph(get_string('autoinstall_cancelled', 'quiz_archiver')); - echo $OUTPUT->paragraph(''.(get_string('pleaseclose')).''); + echo $OUTPUT->paragraph($returnlink); } else if ($data = $form->get_data()) { // Perform autoinstall list($success, $log) = autoinstall::execute( @@ -74,7 +79,7 @@ echo $OUTPUT->paragraph(get_string('autoinstall_failure', 'quiz_archiver')); } - echo $OUTPUT->paragraph(''.(get_string('pleaseclose')).''); + echo $OUTPUT->paragraph($returnlink); } else { echo $OUTPUT->paragraph(get_string('autoinstall_explanation', 'quiz_archiver')); echo $OUTPUT->paragraph(get_string('autoinstall_explanation_details', 'quiz_archiver')); @@ -82,7 +87,7 @@ } } else { echo $OUTPUT->paragraph(get_string('autoinstall_already_configured_long', 'quiz_archiver')); - echo $OUTPUT->paragraph(''.(get_string('pleaseclose')).''); + echo $OUTPUT->paragraph($returnlink); } // End page diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index e8c8434..a4e8537 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -223,11 +223,11 @@ $string['autoinstall_already_configured_long'] = 'Das Quiz Archiver Plugin ist bereits konfiguriert. Eine erneute automatische Konfiguration ist nicht möglich.'; $string['autoinstall_cancelled'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde abgebrochen. Es wurden keine Einstellungen verändert.'; $string['autoinstall_explanation'] = 'Das Quiz Archiver Plugin erfordert anfangs einige Konfigurationsschritte, um zu funktionieren (siehe Installation). Sie können diese Einstellungen manuell konfigurieren, oder die automatische Konfiguration verwenden, um alle Moodle-bezogenen Einstellungen zu setzen.'; -$string['autoinstall_failure'] = 'Die automatische Konfiguration des Quiz Archiver Plugins ist fehlgeschlagen.'; +$string['autoinstall_failure'] = 'Die automatische Konfiguration des Quiz Archiver Plugins ist fehlgeschlagen.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatische Konfiguration'; $string['autoinstall_started'] = 'Automatische Konfiguration gestartet ...'; $string['autoinstall_start_now'] = 'Automatische Konfiguration jetzt starten'; -$string['autoinstall_success'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde erfolgreich abgeschlossen.'; +$string['autoinstall_success'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde erfolgreich abgeschlossen.'; $string['autoinstall_rolename'] = 'Rollenname'; $string['autoinstall_rolename_help'] = 'TODO'; $string['autoinstall_username'] = 'Nutzername'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 2616e72..00edae4 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -221,11 +221,11 @@ $string['autoinstall_cancelled'] = 'The automatic configuration of the Quiz Archiver Plugin was cancelled. No changes were made.'; $string['autoinstall_explanation'] = 'The Quiz Archiver plugin requires a few initial configuration steps to work (see Installation). You can either configure all of these settings manually or use the automatic configuration feature to take care of all Moodle related settings.'; $string['autoinstall_explanation_details'] = 'The automatic configuration feature will take care of the following steps:

  • Enabling web services and REST protocol
  • Creating a quiz archiver service role and a corresponding user
  • Creating a new web service with all required webservice functions
  • Authorising the user to use the webservice
'; -$string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin failed.'; +$string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin failed.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatic configuration'; $string['autoinstall_started'] = 'Automatic configuration started ...'; $string['autoinstall_start_now'] = 'Start automatic configuration now'; -$string['autoinstall_success'] = 'The automatic configuration of the Quiz Archiver Plugin was successful.'; +$string['autoinstall_success'] = 'The automatic configuration of the Quiz Archiver Plugin was successful.'; $string['autoinstall_rolename'] = 'Role name'; $string['autoinstall_rolename_help'] = 'TODO'; $string['autoinstall_username'] = 'Username'; diff --git a/settings.php b/settings.php index 154f52c..39a33bd 100644 --- a/settings.php +++ b/settings.php @@ -50,7 +50,7 @@ // Autoinstall if (autoinstall::plugin_is_unconfigured()) { $autoinstall_url = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); - $autoinstall_desc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; + $autoinstall_desc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; $autoinstall_desc .= "

".get_string('autoinstall_explanation', 'quiz_archiver')."

"; } else { $autoinstall_desc = get_string('autoinstall_already_configured', 'quiz_archiver'); From f1f93e6e3c3741d45879c5e2d822b5d6f9242cea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Apr 2024 12:04:32 +0200 Subject: [PATCH 024/185] Create welcome message with setup instructions on plugin installation --- db/install.php | 12 ++++++++++++ lang/de/quiz_archiver.php | 2 ++ lang/en/quiz_archiver.php | 2 ++ 3 files changed, 16 insertions(+) diff --git a/db/install.php b/db/install.php index 01e11e0..6bb852d 100644 --- a/db/install.php +++ b/db/install.php @@ -30,5 +30,17 @@ */ function xmldb_quiz_archiver_install() { + // Print welcome message + $autoinstall_url = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); + $pluginsettings_url = new moodle_url('/admin/settings.php', ['section' => 'quiz_archiver_settings']); + + echo ''; + + return true; } diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index a4e8537..14c0e79 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -28,6 +28,8 @@ $string['archiverreport'] = 'Quiz Archiver'; $string['checksum'] = 'Prüfsumme'; $string['beta_version_warning'] = 'Dieses Plugin befindet sich derzeit in der Beta-Phase. Bitte melden Sie alle Probleme und Fehler dem Website-Administrator.'; +$string['thanks_for_installing'] = 'Vielen Dank für die Installation des Quiz Archiver Plugins!'; +$string['go_to_plugin_settings'] = 'Plugin-Einstellungen öffnen'; // Capabilities $string['quiz_archiver:view'] = 'Quiz Archiver Berichtsseite anzeigen'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 00edae4..6d7290b 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -28,6 +28,8 @@ $string['archiverreport'] = 'Quiz Archiver'; $string['checksum'] = 'Checksum'; $string['beta_version_warning'] = 'This plugin is currently in beta stage. Please report any problems and bugs you experience to the site administrator.'; +$string['thanks_for_installing'] = 'Thank you for installing the Quiz Archiver plugin!'; +$string['go_to_plugin_settings'] = 'Go to plugin settings'; // Capabilities $string['quiz_archiver:view'] = 'View quiz archiver report page'; From b6bf93929b9070c75a88e0020b281ac57cd78311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Apr 2024 12:06:29 +0200 Subject: [PATCH 025/185] Prepare changelog for upcoming release --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5b76ff0..3afdaec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ # Changelog +## Version 1.2.5 (XXXXXXXXXX) + +- Add an automatic plugin configuration feature, to simplify the setup process (#15 - Thanks to @melanietreitinger) +- Display a welcome message with setup instructions during plugin installation +- Add support for automated configuration using a CLI script +- Add error message during job creation, when plugin is not fully configured yet + + ## Version 1.2.4 (2024021901) - Fix image inlining for Moodle instances that reside in subdirectories (e.g., `https://your.domain/moodle`) From 265f4d7ce7571908c1b348c86897fcd4bf119464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Apr 2024 15:02:54 +0200 Subject: [PATCH 026/185] Apply default plugin settings during autoinstall --- classes/local/autoinstall.php | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 315e788..28b2923 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -18,6 +18,7 @@ require_once("{$CFG->dirroot}/user/lib.php"); require_once("{$CFG->dirroot}/webservice/lib.php"); +require_once("{$CFG->dirroot}/lib/adminlib.php"); use coding_exception; use context_system; @@ -115,6 +116,9 @@ public static function execute( $success = false; try { + // Init log array + $log = []; + // Ensure current user is an admin. if (!is_siteadmin()) { $log[] = "Error: You need to be a site administrator to run this script."; @@ -131,6 +135,22 @@ public static function execute( } } + // Apply default values for all plugin settings + $adminroot = admin_get_root(); + $adminsearch = $adminroot->search('quiz_archiver_settings'); + if (!$adminsearch || !$adminsearch['quiz_archiver_settings']->page) { + $log[] = "Error: Could not find admin settings definitions for quiz archiver plugin."; + throw new \RuntimeException(); + } + $adminpage = $adminsearch['quiz_archiver_settings']->page; + $appliedsettings = admin_apply_default_settings($adminpage); + if (count($appliedsettings) < 1) { + $log[] = "Error: Could not apply default settings for quiz archiver plugin."; + throw new \RuntimeException(); + } else { + $log[] = " -> Default plugin settings applied."; + } + // Check worker URL if (empty($workerurl)) { $log[] = "Error: The given worker URL is invalid."; From e2f46b5356f2a9a09ecb05a32ef5b4719d5f2b15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Apr 2024 15:03:24 +0200 Subject: [PATCH 027/185] Add help texts to autoinstall form --- classes/form/autoinstall_form.php | 3 +++ lang/de/quiz_archiver.php | 10 ++++++---- lang/en/quiz_archiver.php | 8 ++++---- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/classes/form/autoinstall_form.php b/classes/form/autoinstall_form.php index 8783a38..d01d666 100644 --- a/classes/form/autoinstall_form.php +++ b/classes/form/autoinstall_form.php @@ -55,16 +55,19 @@ public function definition() { $mform->addRule('workerurl', null, 'required', null, 'client'); $mform->addElement('text', 'wsname', get_string('autoinstall_wsname', 'quiz_archiver'), ['size' => 50]); + $mform->addElement('static', 'wsname_help', '', get_string('autoinstall_wsname_help', 'quiz_archiver')); $mform->setDefault('wsname', autoinstall::DEFAULT_WSNAME); $mform->setType('wsname', PARAM_TEXT); $mform->addRule('wsname', null, 'required', null, 'client'); $mform->addElement('text', 'rolename', get_string('autoinstall_rolename', 'quiz_archiver'), ['size' => 50]); + $mform->addElement('static', 'rolename_help', '', get_string('autoinstall_rolename_help', 'quiz_archiver')); $mform->setDefault('rolename', autoinstall::DEFAULT_ROLESHORTNAME); $mform->setType('rolename', PARAM_TEXT); $mform->addRule('rolename', null, 'required', null, 'client'); $mform->addElement('text', 'username', get_string('autoinstall_username', 'quiz_archiver'), ['size' => 50]); + $mform->addElement('static', 'username_help', '', get_string('autoinstall_username_help', 'quiz_archiver')); $mform->setDefault('username', autoinstall::DEFAULT_USERNAME); $mform->setType('username', PARAM_TEXT); $mform->addRule('username', null, 'required', null, 'client'); diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 14c0e79..4c35712 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -225,14 +225,16 @@ $string['autoinstall_already_configured_long'] = 'Das Quiz Archiver Plugin ist bereits konfiguriert. Eine erneute automatische Konfiguration ist nicht möglich.'; $string['autoinstall_cancelled'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde abgebrochen. Es wurden keine Einstellungen verändert.'; $string['autoinstall_explanation'] = 'Das Quiz Archiver Plugin erfordert anfangs einige Konfigurationsschritte, um zu funktionieren (siehe Installation). Sie können diese Einstellungen manuell konfigurieren, oder die automatische Konfiguration verwenden, um alle Moodle-bezogenen Einstellungen zu setzen.'; +$string['autoinstall_explanation_details'] = 'Die automatische Konfiguration übernimmt die folgenden Schritte:
  • Setzen aller Plugin-Einstellungen auf ihre Standardwerte
  • Aktivieren von Webservices und REST-Protokoll
  • Erstellung einer Quiz Archiver Service Rolle und eines entsprechenden Nutzers
  • Erstellen eines neuen Webservices mit allen erforderlichen Webservice-Funktionen
  • Autorisieren des Nutzers zur Nutzung des Webservices
'; $string['autoinstall_failure'] = 'Die automatische Konfiguration des Quiz Archiver Plugins ist fehlgeschlagen.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatische Konfiguration'; $string['autoinstall_started'] = 'Automatische Konfiguration gestartet ...'; $string['autoinstall_start_now'] = 'Automatische Konfiguration jetzt starten'; $string['autoinstall_success'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde erfolgreich abgeschlossen.'; $string['autoinstall_rolename'] = 'Rollenname'; -$string['autoinstall_rolename_help'] = 'TODO'; +$string['autoinstall_rolename_help'] = 'Name der Rolle, die für den Quiz Archiver Service Nutzer erstellt wird.'; $string['autoinstall_username'] = 'Nutzername'; -$string['autoinstall_username_help'] = 'TODO'; -$string['autoinstall_wsname'] = 'Webservice name'; -$string['autoinstall_wsname_help'] = 'TODO'; +$string['autoinstall_username_help'] = 'Name of the service user that is created to access the quiz archiver webservice.'; +$string['autoinstall_username_help'] = 'Name des Nutzerkontos, das für den Zugriff auf den Quiz Archiver Webservice erstellt wird.'; +$string['autoinstall_wsname'] = 'Webservicename'; +$string['autoinstall_wsname_help'] = 'Name des Webservices, der für den Quiz Archive Worker erstellt wird.'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 6d7290b..c507bb4 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -222,15 +222,15 @@ $string['autoinstall_already_configured_long'] = 'The Quiz Archiver Plugin is already configured. Automatic configuration is not possible twice.'; $string['autoinstall_cancelled'] = 'The automatic configuration of the Quiz Archiver Plugin was cancelled. No changes were made.'; $string['autoinstall_explanation'] = 'The Quiz Archiver plugin requires a few initial configuration steps to work (see Installation). You can either configure all of these settings manually or use the automatic configuration feature to take care of all Moodle related settings.'; -$string['autoinstall_explanation_details'] = 'The automatic configuration feature will take care of the following steps:
  • Enabling web services and REST protocol
  • Creating a quiz archiver service role and a corresponding user
  • Creating a new web service with all required webservice functions
  • Authorising the user to use the webservice
'; +$string['autoinstall_explanation_details'] = 'The automatic configuration feature will take care of the following steps:
  • Setting all plugin settings to their default values
  • Enabling web services and REST protocol
  • Creating a quiz archiver service role and a corresponding user
  • Creating a new web service with all required webservice functions
  • Authorising the user to use the webservice
'; $string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin failed.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatic configuration'; $string['autoinstall_started'] = 'Automatic configuration started ...'; $string['autoinstall_start_now'] = 'Start automatic configuration now'; $string['autoinstall_success'] = 'The automatic configuration of the Quiz Archiver Plugin was successful.'; $string['autoinstall_rolename'] = 'Role name'; -$string['autoinstall_rolename_help'] = 'TODO'; +$string['autoinstall_rolename_help'] = 'Name of the role that is created for the quiz archiver service user.'; $string['autoinstall_username'] = 'Username'; -$string['autoinstall_username_help'] = 'TODO'; +$string['autoinstall_username_help'] = 'Name of the service user that is created to access the quiz archiver webservice.'; $string['autoinstall_wsname'] = 'Web service name'; -$string['autoinstall_wsname_help'] = 'TODO'; +$string['autoinstall_wsname_help'] = 'Name of the webservice that is created for the quiz archive worker.'; From 9a6aef39f3fd4db9cdd65d6b18dbbf056927d6e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Apr 2024 15:10:03 +0200 Subject: [PATCH 028/185] Suggest using the continue button for manual configuration during install to prevent skipping the configuration of other plugins --- db/install.php | 4 ++-- lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/db/install.php b/db/install.php index 6bb852d..482b0a2 100644 --- a/db/install.php +++ b/db/install.php @@ -35,10 +35,10 @@ function xmldb_quiz_archiver_install() { $pluginsettings_url = new moodle_url('/admin/settings.php', ['section' => 'quiz_archiver_settings']); echo ''; diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 4c35712..70cdb99 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -30,6 +30,7 @@ $string['beta_version_warning'] = 'Dieses Plugin befindet sich derzeit in der Beta-Phase. Bitte melden Sie alle Probleme und Fehler dem Website-Administrator.'; $string['thanks_for_installing'] = 'Vielen Dank für die Installation des Quiz Archiver Plugins!'; $string['go_to_plugin_settings'] = 'Plugin-Einstellungen öffnen'; +$string['manual_configuration_continue'] = 'Um alle Plugin-Einstellungen manuell zu setzen, verwenden Sie die Schaltfläche "Weiter" am Ende dieser Seite.'; // Capabilities $string['quiz_archiver:view'] = 'Quiz Archiver Berichtsseite anzeigen'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index c507bb4..37c6d84 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -30,6 +30,7 @@ $string['beta_version_warning'] = 'This plugin is currently in beta stage. Please report any problems and bugs you experience to the site administrator.'; $string['thanks_for_installing'] = 'Thank you for installing the Quiz Archiver plugin!'; $string['go_to_plugin_settings'] = 'Go to plugin settings'; +$string['manual_configuration_continue'] = 'To manually configure all plugin settings use the "Continue" button at the bottom of this page.'; // Capabilities $string['quiz_archiver:view'] = 'View quiz archiver report page'; From 6c696b768cd0736c3ffd24d681e0be0709c72c74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Apr 2024 15:13:37 +0200 Subject: [PATCH 029/185] Release version 1.2.5 (2024040900) --- CHANGELOG.md | 4 +++- version.php | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3afdaec..c7793c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,12 +1,14 @@ # Changelog -## Version 1.2.5 (XXXXXXXXXX) +## Version 1.2.5 (2024040900) - Add an automatic plugin configuration feature, to simplify the setup process (#15 - Thanks to @melanietreitinger) - Display a welcome message with setup instructions during plugin installation - Add support for automated configuration using a CLI script - Add error message during job creation, when plugin is not fully configured yet +- Create quizzes with 100, 250, 500, and 1000 attempts in the reference course `res/backup-moodle2-course-qa-ref.mbz` +- Update installation instructions in README.md to reflect the new setup process ## Version 1.2.4 (2024021901) diff --git a/version.php b/version.php index 4a65d25..b4cdb5b 100644 --- a/version.php +++ b/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.4'; -$plugin->version = 2024021901; +$plugin->release = '1.2.5'; +$plugin->version = 2024040900; $plugin->requires = 2022112800; $plugin->supported = [401, 403]; //$plugin->incompatible = 402; From 4a6d408239050cef0b280634f4a3930caa860a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Apr 2024 11:20:57 +0200 Subject: [PATCH 030/185] Widen CI matrix to execute testes on Moodle 4.4 with PHP 8.1 to 8.3, PostgreSQL + MariaDB --- .github/workflows/moodle-plugin-ci.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/moodle-plugin-ci.yml b/.github/workflows/moodle-plugin-ci.yml index 920a65b..51a7f51 100644 --- a/.github/workflows/moodle-plugin-ci.yml +++ b/.github/workflows/moodle-plugin-ci.yml @@ -53,6 +53,13 @@ jobs: - {moodle-branch: 'MOODLE_403_STABLE', php: '8.2', database: 'pgsql'} - {moodle-branch: 'MOODLE_403_STABLE', php: '8.2', database: 'mariadb'} + # Moodle 4.4, PHP 8.1 to 8.3, PostgreSQL and MariaDB + - {moodle-branch: 'MOODLE_404_STABLE', php: '8.1', database: 'pgsql'} + - {moodle-branch: 'MOODLE_404_STABLE', php: '8.1', database: 'mariadb'} + - {moodle-branch: 'MOODLE_404_STABLE', php: '8.2', database: 'pgsql'} + - {moodle-branch: 'MOODLE_404_STABLE', php: '8.2', database: 'mariadb'} + - {moodle-branch: 'MOODLE_404_STABLE', php: '8.3', database: 'pgsql'} + - {moodle-branch: 'MOODLE_404_STABLE', php: '8.3', database: 'mariadb'} steps: - name: Check out repository code uses: actions/checkout@v3 From 39b871fcb34f1b257e2e5c564f249e70bdfff3ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Apr 2024 11:34:56 +0200 Subject: [PATCH 031/185] Remove deprecated set_blocking() call on asynchronous_backup_task object (MDL-67667) --- classes/BackupManager.php | 1 - 1 file changed, 1 deletion(-) diff --git a/classes/BackupManager.php b/classes/BackupManager.php index 5b90287..b1de358 100644 --- a/classes/BackupManager.php +++ b/classes/BackupManager.php @@ -193,7 +193,6 @@ protected static function initiate_backup(string $type, int $id, int $user_id): // Enqueue as adhoc task $bc->set_status(backup::STATUS_AWAITING); $asynctask = new \core\task\asynchronous_backup_task(); - $asynctask->set_blocking(false); $asynctask->set_custom_data(['backupid' => $backupid]); $asynctask->set_userid($user_id); \core\task\manager::queue_adhoc_task($asynctask); From a1ca815b8cba976e903364f1d113edd59ebe1f46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Apr 2024 12:03:44 +0200 Subject: [PATCH 032/185] Release version 1.2.6 (2024042900) --- CHANGELOG.md | 5 +++++ version.php | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7793c1..8893050 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Version 1.2.6 (2024042900) + +- Extend automated tests to cover Moodle 4.4 with PHP 8.1 to 8.3 using PostgreSQL and MariaDB +- Removal of deprecated function use for Moodle 4.4 (See MDL-67667) + ## Version 1.2.5 (2024040900) diff --git a/version.php b/version.php index b4cdb5b..ccb18be 100644 --- a/version.php +++ b/version.php @@ -25,9 +25,9 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.5'; -$plugin->version = 2024040900; +$plugin->release = '1.2.6'; +$plugin->version = 2024042900; $plugin->requires = 2022112800; -$plugin->supported = [401, 403]; +$plugin->supported = [401, 404]; //$plugin->incompatible = 402; $plugin->maturity = MATURITY_STABLE; From 003e30c8a1adda853c28218a4f2cf49e0c98e327 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 8 May 2024 11:16:53 +0200 Subject: [PATCH 033/185] Fix inlining of images with URL encoded filenames --- CHANGELOG.md | 5 +++++ classes/Report.php | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8893050..19346a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Version X.X.X (XXXXXXXXXX) + +- Fix inlining of images with filenames that contains URL encoded characters (e.g., `image (1).jpg`) + + ## Version 1.2.6 (2024042900) - Extend automated tests to cover Moodle 4.4 with PHP 8.1 to 8.3 using PostgreSQL and MariaDB diff --git a/classes/Report.php b/classes/Report.php index bc749ce..5894fb3 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -712,6 +712,9 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } } + // Decode RFC 3986 URL escaped sequences + $regex_matches['filename'] = urldecode($regex_matches['filename']); + // Get file content via Moodle File API $fs = get_file_storage(); $file = $fs->get_file( @@ -732,6 +735,9 @@ protected function convert_image_to_base64(\DOMElement $img): bool { // ### Link type: qtype_stack plotfile ### $img->setAttribute('x-url-type', 'MOODLE_URL_STACKPLOT'); + // Decode RFC 3986 URL escaped sequences + $regex_matches['filename'] = urldecode($regex_matches['filename']); + // Get STACK plot file from disk $filename = $CFG->dataroot . '/stack/plots/' . clean_filename($regex_matches['filename']); if (!is_readable($filename)) { From 7012561e45a09122926b2968964c6aa1afa130fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 8 May 2024 11:31:27 +0200 Subject: [PATCH 034/185] Fix inlining of Moodle theme icons --- CHANGELOG.md | 1 + classes/Report.php | 12 +++++++++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 19346a1..5fd15bf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Version X.X.X (XXXXXXXXXX) - Fix inlining of images with filenames that contains URL encoded characters (e.g., `image (1).jpg`) +- Fix inlining of Moodle theme icons (e.g., drag and drop markers) ## Version 1.2.6 (2024042900) diff --git a/classes/Report.php b/classes/Report.php index 5894fb3..7081875 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -695,6 +695,7 @@ protected function convert_image_to_base64(\DOMElement $img): bool { // Try to get image content based on link type $regex_matches = null; $img_data = null; + $img_mime = self::ALLOWED_IMAGE_TYPES[$img_ext]; // Handle special internal URLs first $is_internal_url = substr($img_src_url, 0, strlen($moodle_baseurl)) === $moodle_baseurl; @@ -771,6 +772,15 @@ protected function convert_image_to_base64(\DOMElement $img): bool { $img->setAttribute('x-debug-notice', 'HTTP request failed'); return false; } + + // Check if we need to detect mime type from response headers + if (!$img_mime) { + $img_mime = $c->get_info()['content_type']; + if (!in_array($img_mime, self::ALLOWED_IMAGE_TYPES)) { + $img->setAttribute('x-debug-notice', 'image type from response header is not allowed'); + return false; + } + } } // Encode and replace image if present @@ -779,7 +789,7 @@ protected function convert_image_to_base64(\DOMElement $img): bool { return false; } $img_base64 = base64_encode($img_data); - $img->setAttribute('src', 'data:'.self::ALLOWED_IMAGE_TYPES[$img_ext].';base64,'.$img_base64); + $img->setAttribute('src', 'data:'.$img_mime.';base64,'.$img_base64); return true; } From ea9ae2ed1eaf275fb01ace2b687ea391477daefe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 8 May 2024 11:33:48 +0200 Subject: [PATCH 035/185] Release development version v1.2.6+2024050800 --- version.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.php b/version.php index ccb18be..59b63ff 100644 --- a/version.php +++ b/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.6'; -$plugin->version = 2024042900; +$plugin->release = '1.2.6+2024050800'; +$plugin->version = 2024050800; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; //$plugin->incompatible = 402; From 093bb97b3162b5477a2f7a67dbf80b650f24f95a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 13 May 2024 15:32:48 +0200 Subject: [PATCH 036/185] Prevent PHP warning during image MIME type lookup try --- classes/Report.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Report.php b/classes/Report.php index 7081875..1d6d7f9 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -695,7 +695,7 @@ protected function convert_image_to_base64(\DOMElement $img): bool { // Try to get image content based on link type $regex_matches = null; $img_data = null; - $img_mime = self::ALLOWED_IMAGE_TYPES[$img_ext]; + $img_mime = array_key_exists($img_ext, self::ALLOWED_IMAGE_TYPES) ? self::ALLOWED_IMAGE_TYPES[$img_ext] : null; // Handle special internal URLs first $is_internal_url = substr($img_src_url, 0, strlen($moodle_baseurl)) === $moodle_baseurl; From c46834444928fab73ec74a1699799daa2a1b408c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 13 May 2024 16:20:18 +0200 Subject: [PATCH 037/185] Fix PHP warning on quiz_archiver_generate_attempt_report webservice call --- classes/external/generate_attempt_report.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index 022f0af..ebc5912 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -123,7 +123,7 @@ public static function execute( array $sections_raw, bool $attachments_raw ): array { - global $DB; + global $DB, $PAGE; // Validate request $params = self::validate_parameters(self::execute_parameters(), [ @@ -164,6 +164,9 @@ public static function execute( 'attemptid' => $params['attemptid'], ]; + // Forcefully set URL in $PAGE to the webservice handler to prevent further warnings + $PAGE->set_url(new \moodle_url('/webservice/rest/server.php', ['wsfunction' => 'quiz_archiver_generate_attempt_report'])); + // Generate report $report = new Report($course, $cm, $quiz); if (!$report->has_access(optional_param('wstoken', null, PARAM_TEXT))) { From f2809b0877188890e52392806f35745277f345b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 13 May 2024 16:26:22 +0200 Subject: [PATCH 038/185] Fix quiz header / summary table injection in Moodle 4.4+ --- classes/Report.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/classes/Report.php b/classes/Report.php index 1d6d7f9..1541189 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -357,7 +357,7 @@ public function get_attempt_attechments_metadata(int $attemptid): array { * @throws \moodle_exception */ public function generate(int $attemptid, array $sections): string { - global $DB, $PAGE; + global $CFG, $DB, $PAGE; $ctx = \context_module::instance($this->cm->id); $renderer = $PAGE->get_renderer('mod_quiz'); $html = ''; @@ -500,7 +500,15 @@ public function generate(int $attemptid, array $sections): string { ]; // Add summary table to the html - $html .= $renderer->review_summary_table($quiz_header_data, 0); + if ($CFG->branch <= 403) { + // FIXME: Remove after Moodle 4.1 (LTS) support ends on 2025-12-08 + $html .= $renderer->review_summary_table($quiz_header_data, 0); + } else { + $html .= $renderer->review_attempt_summary( + \mod_quiz\output\attempt_summary_information::create_from_legacy_array($quiz_header_data), + 0 + ); + } } // ##### Section: Quiz questions ##### From e4fc13ab79967b043fb188c6fc32deee8c0711ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 13 May 2024 16:39:09 +0200 Subject: [PATCH 039/185] Replace deprecated Moodle 4.4+ language strings --- classes/Report.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/classes/Report.php b/classes/Report.php index 1541189..4d76579 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -427,7 +427,7 @@ public function generate(int $attemptid, array $sections): string { 'content' => userdate($attempt->timefinish), ]; $quiz_header_data['timetaken'] = [ - 'title' => get_string('timetaken', 'quiz'), + 'title' => get_string('attemptduration', 'quiz'), 'content' => $timetaken, ]; } @@ -444,7 +444,7 @@ public function generate(int $attemptid, array $sections): string { if ($options->marks >= \question_display_options::MARK_AND_MAX && quiz_has_grades($quiz)) { if (is_null($grade)) { $quiz_header_data['grade'] = [ - 'title' => get_string('grade', 'quiz'), + 'title' => get_string('gradenoun'), 'content' => quiz_format_grade($quiz, $grade), ]; } @@ -473,7 +473,7 @@ public function generate(int $attemptid, array $sections): string { $formattedgrade = get_string('outof', 'quiz', $a); } $quiz_header_data['grade'] = [ - 'title' => get_string('grade', 'quiz'), + 'title' => get_string('gradenoun'), 'content' => $formattedgrade, ]; } @@ -504,6 +504,7 @@ public function generate(int $attemptid, array $sections): string { // FIXME: Remove after Moodle 4.1 (LTS) support ends on 2025-12-08 $html .= $renderer->review_summary_table($quiz_header_data, 0); } else { + // TODO: Rework into proper use of new 4.4 API but create appropriate test cases first. $html .= $renderer->review_attempt_summary( \mod_quiz\output\attempt_summary_information::create_from_legacy_array($quiz_header_data), 0 From 4671faf2479a60db71ea39f830678f89ee879f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 13 May 2024 16:59:58 +0200 Subject: [PATCH 040/185] Release version 1.2.7 (2024051300) --- CHANGELOG.md | 5 ++++- version.php | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5fd15bf..ee9cd09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,12 @@ # Changelog -## Version X.X.X (XXXXXXXXXX) +## Version 1.2.7 (2024051300) - Fix inlining of images with filenames that contains URL encoded characters (e.g., `image (1).jpg`) - Fix inlining of Moodle theme icons (e.g., drag and drop markers) +- Fix PHP warning on quiz_archiver_generate_attempt_report webservice call +- Fix quiz header / summary table injection in Moodle 4.4+ +- Replace deprecated Moodle 4.4+ language strings ## Version 1.2.6 (2024042900) diff --git a/version.php b/version.php index 59b63ff..ebdb293 100644 --- a/version.php +++ b/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.6+2024050800'; -$plugin->version = 2024050800; +$plugin->release = '1.2.7'; +$plugin->version = 2024051300; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; //$plugin->incompatible = 402; From 168e9845e67c0314b9d230f17886ed35a0c2a2f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 10:42:26 +0200 Subject: [PATCH 041/185] Cleanup report generation code --- classes/Report.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/classes/Report.php b/classes/Report.php index 4d76579..524058a 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -366,6 +366,8 @@ public function generate(int $attemptid, array $sections): string { $attemptobj = quiz_create_attempt_handling_errors($attemptid, $this->cm->id); $attempt = $attemptobj->get_attempt(); $quiz = $attemptobj->get_quiz(); + $quba = \question_engine::load_questions_usage_by_activity($attemptobj->get_uniqueid()); + $quba->preload_all_step_users(); $options = \mod_quiz\question\display_options::make_from_quiz($this->quiz, quiz_attempt_state($quiz, $attempt)); $options->flags = quiz_get_flag_option($attempt, $ctx); $overtime = 0; @@ -485,12 +487,10 @@ public function generate(int $attemptid, array $sections): string { // Feedback if there is any, and the user is allowed to see it now. if ($sections['quiz_feedback']) { $feedback = $attemptobj->get_overall_feedback($grade); - if ($options->overallfeedback && $feedback) { - $quiz_header_data['feedback'] = [ - 'title' => get_string('feedback', 'quiz'), - 'content' => $feedback, - ]; - } + $quiz_header_data['feedback'] = [ + 'title' => get_string('feedback', 'quiz'), + 'content' => $feedback, + ]; } // Add export date @@ -537,7 +537,6 @@ public function generate(int $attemptid, array $sections): string { $attemptobj->get_question_attempt($slot)->set_max_mark( $attemptobj->get_question_attempt($originalslot)->get_max_mark()); } - $quba = \question_engine::load_questions_usage_by_activity($attemptobj->get_uniqueid()); $html .= $quba->render_question($slot, $displayoptions, $number); } } From c9650411b89365bcb2de922c7111f65cafd3e5eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 10:42:55 +0200 Subject: [PATCH 042/185] Create basic tests for report generation --- tests/classes/Report_test.php | 358 +++++++++++++++++++++++++++++++ tests/fixtures/referencequiz.mbz | Bin 0 -> 17195 bytes 2 files changed, 358 insertions(+) create mode 100644 tests/classes/Report_test.php create mode 100644 tests/fixtures/referencequiz.mbz diff --git a/tests/classes/Report_test.php b/tests/classes/Report_test.php new file mode 100644 index 0000000..f5db5d9 --- /dev/null +++ b/tests/classes/Report_test.php @@ -0,0 +1,358 @@ +. + +/** + * Tests for the Report class + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver; + +global $CFG; + +require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php'); + + +/** + * Tests for the Report class + */ +class Report_test extends \advanced_testcase { + + /** @var string[] Question types present in the reference quiz */ + const QUESTION_TYPES_IN_REFERENCE_QUIZ = [ + 'description', + 'multichoice', + 'truefalse', + 'match', + 'shortanswer', + 'numerical', + 'essay', + 'calculated', + 'calculatedmulti', + 'calculatedsimple', + 'ddwtos', + 'ddmarker', + 'ddimageortext', + 'multianswer', + 'gapselect', + ]; + + /** + * Called before every test. + */ + public function setUp(): void { + parent::setUp(); + $this->setAdminUser(); + } + + /** + * Imports the reference course into a new course and returns the reference + * quiz, the respective cm, and the course itself. + * + * @throws \restore_controller_exception + * @throws \dml_exception + * @throws \moodle_exception + * @return \stdClass Object with keys 'quiz' (the reference quiz), 'cm' (the + * respective cm), 'course' (the course itself), 'attemptids' (array of all + * attempt ids inside the reference quiz) + */ + protected function prepareReferenceCourse(): \stdClass { + global $DB, $USER; + $this->resetAfterTest(); + + // Prepare backup of reference course for restore + $backupid = 'referencequiz'; + $backuppath = make_backup_temp_directory($backupid); + get_file_packer('application/vnd.moodle.backup')->extract_to_pathname( + __DIR__ . "/../fixtures/referencequiz.mbz", + $backuppath + ); + + // Restore reference course as a new course with default settings. + $categoryid = $DB->get_field('course_categories', 'MIN(id)', []); + $newcourseid = \restore_dbops::create_new_course('Reference Course', 'REF', $categoryid); + $rc = new \restore_controller( + $backupid, + $newcourseid, + \backup::INTERACTIVE_NO, + \backup::MODE_GENERAL, + $USER->id, + \backup::TARGET_NEW_COURSE + ); + + $this->assertTrue($rc->execute_precheck()); + $rc->execute_plan(); + + // 2024-05-14: Do not destroy restore_controller. This will drop temptables without removing them from + // $DB->temptables properly, causing DB reset to fail in subsequent tests due to missing tables. Destroying the + // restore_controller is optional and not necessary for this test. + //$rc->destroy(); + + // Get course and find the reference quiz + $course = get_course($rc->get_courseid()); + $modinfo = get_fast_modinfo($course); + $cms = $modinfo->get_cms(); + $cm = null; + foreach ($cms as $curCm) { + if ($curCm->modname == 'quiz' && strpos($curCm->name, 'Reference Quiz') === 0) { + $cm = $curCm; + break; + } + } + $quiz = $DB->get_record('quiz', ['id' => $cm->instance], '*', MUST_EXIST); + $attemptids = array_values(array_map( + fn($r): int => $r->id, + $DB->get_records('quiz_attempts', ['quiz' => $quiz->id], '', 'id') + )); + + return (object) [ + 'course' => $course, + 'cm' => $cm, + 'quiz' => $quiz, + 'attemptids' => $attemptids, + ]; + } + + /** + * @return array To pass to Report::generate(), with all report sections enabled + */ + protected static function getAllReportSectionsEnabled(): array { + $sections = []; + foreach (Report::SECTIONS as $section) { + $sections[$section] = true; + } + return $sections; + } + + /** + * Test generation of a full page report with all sections + * + * @return void + * @throws \DOMException + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_generate_full_report() { + $rd = $this->prepareReferenceCourse(); + + // Generate full report with all sections + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $html = $report->generate($rd->attemptids[0], self::getAllReportSectionsEnabled()); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify quiz header + $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); + $this->assertMatchesRegularExpression('/]*>'.preg_quote($rd->course->fullname, '/').'[^<>]+<\/td>/', $html, 'Course name not found'); + $this->assertMatchesRegularExpression('/]*>'.preg_quote($rd->quiz->name, '/').'[^<>]+<\/td>/', $html, 'Quiz name not found'); + + // Verify overall quiz feedback + // TODO: Add proper overall feedback to reference quiz and check its contents + $this->assertMatchesRegularExpression('/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', $html, 'Overall feedback header not found'); + + // Verify questions + foreach (self::QUESTION_TYPES_IN_REFERENCE_QUIZ as $qtype) { + $this->assertMatchesRegularExpression('/<[^<>]*class="[^\"<>]*que[^\"<>]*'.preg_quote($qtype, '/').'[^\"<>]*"[^<>]*>/', $html, 'Question of type '.$qtype.' not found'); + } + + // Verify individual question feedback + $this->assertMatchesRegularExpression('/
/', $html, 'Individual question feedback not found'); + + // Verify general question feedback + $this->assertMatchesRegularExpression('/
/', $html, 'General question feedback not found'); + + // Verify correct answers + $this->assertMatchesRegularExpression('/
/', $html, 'Correct question answers not found'); + + // Verify answer history + $this->assertMatchesRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history not found'); + } + + /** + * Tests generation of a report with no header + * + * @throws \restore_controller_exception + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_generate_report_no_header() { + $rd = $this->prepareReferenceCourse(); + + // Generate report without a header + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $sections = self::getAllReportSectionsEnabled(); + $sections['header'] = false; + $html = $report->generate($rd->attemptids[0], $sections); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify that quiz header is absent + $this->assertDoesNotMatchRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table found when it should be absent'); + + // If the quiz header is disabled, the quiz feedback should also be absent + $this->assertDoesNotMatchRegularExpression('/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', $html, 'Overall feedback header found when it should be absent'); + } + + /** + * Tests generation of a report with no quiz feedback + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_generate_report_no_quiz_feedback() { + $rd = $this->prepareReferenceCourse(); + + // Generate report without quiz feedback + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $sections = self::getAllReportSectionsEnabled(); + $sections['quiz_feedback'] = false; + $sections['questions'] = false; + $html = $report->generate($rd->attemptids[0], $sections); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify that quiz feedback is absent + $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); + $this->assertDoesNotMatchRegularExpression('/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', $html, 'Overall feedback header found when it should be absent'); + } + + /** + * Tests generation of a report with no questions + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_generate_report_no_questions() { + $rd = $this->prepareReferenceCourse(); + + // Generate report without questions + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $sections = self::getAllReportSectionsEnabled(); + $sections['question'] = false; + $html = $report->generate($rd->attemptids[0], $sections); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify that no questions are present + $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="[^\"<>]*que[^<>]*>/', $html, 'Question found when it should be absent'); + + // If questions are disabled, question_feedback, general_feedback, rightanswer and history should be absent + $this->assertDoesNotMatchRegularExpression('/
/', $html, 'Individual question feedback found when it should be absent'); + $this->assertDoesNotMatchRegularExpression('/
/', $html, 'General question feedback found when it should be absent'); + $this->assertDoesNotMatchRegularExpression('/
/', $html, 'Correct question answers found when they should be absent'); + $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history found when it should be absent'); + } + + /** + * Tests generation of a report with no individual question feedback + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_generate_report_no_question_feedback() { + $rd = $this->prepareReferenceCourse(); + + // Generate report without question feedback + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $sections = self::getAllReportSectionsEnabled(); + $sections['question_feedback'] = false; + $html = $report->generate($rd->attemptids[0], $sections); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify that question feedback is absent + $this->assertDoesNotMatchRegularExpression('/
/', $html, 'Individual question feedback found when it should be absent'); + } + + /** + * Tests generation of a report with no general question feedback + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_generate_report_no_general_feedback() { + $rd = $this->prepareReferenceCourse(); + + // Generate report without general feedback + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $sections = self::getAllReportSectionsEnabled(); + $sections['general_feedback'] = false; + $html = $report->generate($rd->attemptids[0], $sections); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify that general feedback is absent + $this->assertDoesNotMatchRegularExpression('/
/', $html, 'General question feedback found when it should be absent'); + } + + /** + * Tests generation of a report without showing correct answers for questions + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_generate_report_no_rightanswers() { + $rd = $this->prepareReferenceCourse(); + + // Generate report without right answers + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $sections = self::getAllReportSectionsEnabled(); + $sections['rightanswer'] = false; + $html = $report->generate($rd->attemptids[0], $sections); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify that right answers are absent + $this->assertDoesNotMatchRegularExpression('/
/', $html, 'Correct question answers found when they should be absent'); + } + + /** + * Tests generation of a report without showing answer histories + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_generate_report_no_history() { + $rd = $this->prepareReferenceCourse(); + + // Generate report without answer history + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $sections = self::getAllReportSectionsEnabled(); + $sections['history'] = false; + $html = $report->generate($rd->attemptids[0], $sections); + $this->assertNotEmpty($html, 'Generated report is empty'); + + // Verify that answer history is absent + $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history found when it should be absent'); + } + +} \ No newline at end of file diff --git a/tests/fixtures/referencequiz.mbz b/tests/fixtures/referencequiz.mbz new file mode 100644 index 0000000000000000000000000000000000000000..a6b86b1780af7485a95ab9720c04138da208506a GIT binary patch literal 17195 zcmV)`Kz_d;iwFP!000001MI!qn%l;;Ane=dDJs1)u@rT)0T2MmR;wLFl5OqnQ*1fj z*_P8^5h#+dK!C!b57zX2|NXqc+)du#e}_EEJi$D|tW||W0R%{p-DHyzm{<)|tvan* zwN6!7)p_>)^Dkfh?dAEaZ(h9o&rde;Q{ZRnI{yp5@?TZcwNF${=_$I_)iGU#RQ(g8 zY^FQKUmQj>fUaz#tsVS*?fbUN2o0=>bHT{SffvWK*;R);_hTi%x@yRO>r{!Zqe-mik=<9j7kWMAQ+Yn5*4ucN;;*kLa(O?Fp!uwRc`CFA z?_w5Wx6<5RU+tPQfIO&PPtFM~DrFVM6NfCwCcoP?@MD6O3)arj*_?>891q*H*qN>im@J{t*?2l+!I_fuL%bEM8Tn^_`13bEe)ZL#|BzM$Ng0ft z6p~=zS81mx!jXKD&1rKMmqHx84etTHJr1*79} zz{VVFmd{2xY&oN*fCeQ73jA-bgq9V#WX^aJ`LL)0$7VOWyH3dOxhp1xgXTCmUcfnR6RW zHxKe`06^md2u?daPM+k+x7xkPDY-uX35{AKo(6+x3}_wq2h)xjqYtsTO~n ztMOdVm)=83@poAif$1QFWJ%DId7I(B&7JmF`Ymw3-&q?A?SHka>Rq*L|Es-r|7R<| zRqcN+zjgh92$LD#Of7vwJN)SZ($4|0d@o{G5dx@spNsob%tB$rhO92dvm&2P;43wWFB8 z=A@<*VWB2jvh3h;z@G_unLX!Omg|Qs%@Z$qrt3_dD9scv4>B=q$7}-Kc41U!G>-f* z9s+<6%5q-ji?P@Y6e^#KW%*SA%s9>h5U)`5!tvwa%uZ5Lp$k^@Jdh}DQ4do6Y}*Li zm`f9&6okTb7KP`z!=#*40Q5bVhLHr8BuGA{DT^jBkkrwUyb6HC7M}SqH6aT5VuAol z`&i67f(om1M5%yXIP5a%)tNcy_xqp;77}GZpsIjbk;lUDOz#?63M;3}@SvqmY4A3L zng@!WLT9N(P)w04orei$Focm~Wtx@@K9?z%95asv)U7O7&XdapsB%y*yo4#0%gE_6 zJW?)otJ^8(73U4QAI#{OFQmD&l)GFcbTJATL-uh|pp$SCk47#N-3pPGN+}6gJWaGC z)kxK>JWZm>Imep3=rhNNqN*myJiS7XEW1SzbkOhhs&vRxbdz2Bfqe#RG<{4vJoH#} zhP~tuB6S$}m$(_rtT+Hxes*+vTuw@tk4vvr?spPTQnHpMYZ(&#OSExjjupiLpN?`; z4md;;BurtFw}hQ!`{F5UU{@0g@>v)ai?YiVfccgJ6^qIl3Bz$+|I&v!cRVJSsZ7tX zJ9Fc)ub6Lj!=E;05sYqXA*`QC{k#nx=VtNiAFlaDfGhEhw%<)@J%7GJRms&L3 z-A$HFnhJ?gTtRnC#iBuL6N1&$?sQ1(WE2+j1DGf-d9h%cnc;7DD*$Gix49L~k2 zLY^i=rX8TLR_^Ad7~Trkn)B#fjfk{vjYirgHWqot)( zX0AkK+D=iKx-BX*lzpKxy|~ zJu=%H@4sR0B$=(|{Z~Iy_rJL}?tfz^-T&rl?tk?o_5YiDawB>q|rl^+kUNR?hUXk=EG!Z9x@!OIp|GL=}$9P3*5mMB1mc~6& zlJoybauK%l*>ny)|BYDzJ~_>LR)S8Gi-oKS1JdDRDt-5sXGqA%PD4vE0g5N2a}u*X zKf-h8;^Q_zJO3n69?Sx;3T_^UFl`AX0>u=0d2{A`tB)bdeJU@Qntah~L)D5-D1p<; zBe_Xt-n{hvA_~0IwGIHs7EKZB3k98;j;)IS~7u1GgPPwG~0fY1naQU+axdaPmNV)TEm2=7^ zS6t;usW4)*u$-Eti_fl%Zg-y01PlsLkm&jMIi-}!LYxakzU|MkKY3Qt>5@MDt(n1W z@Z~5HDeJ8G=r$|2=p*tBD8+nb=5c*44v@{3Ah)#1pTiVUsjh(B}Cw!=G?s!pqx1aA`qxsfWnD1JBLV~>geCNz$N9J1$ zdk1G+q?X0_aaoQx6!TrBM$FG`iX@qfRFQ^qzI$hKevv(%g6^uE|ADz+{*h?HKlH^< zFG=!^U+2LI`JB2Td+>xj7g^HNYI;Fc`F+z6^m!T;Fs+6_8Z)$W9?7d2KQnX_3{|~{ z{}}fw&iZ$*zKrPwi)XDctEy}7g_&9-%;vUUlgzsiX8l%}$-?Yk|NQowmnDf-CD7Ir zV|ysP=4n#Ew8D#QNO%oUZuRd~ZZ-31v~sJJTU>5wHF9h2EJu=g7jkRR%B}0OX8|ME zeoS2F0>d)-9+|n+V-aCAh$f${D5YKp7$&^r6{-+5A zVDmOvnlf;5?+URA3<7zALaS%!3{aW(0=6ot52uI zkE77Bu^$1UY7(oe-$^Ix+gN>INtL4ednh62SEYby zB_wHX!y#cbx8scNA$}{jHYac1FKgmE7F(fb2K4L@KNr0}1Ji8gRcO_UR;}P_gyGVemIP+PSkQ!6ldFV`xN&@kd}G;zXWY+v&5;D?DHM2X-%ctjj8@`WnmFxMtS z2Kq>6MUyn-Rf?BA6uk3vD_~l|dj~S4ncd&YkXD9p88UyAtR{X=l6e<0L~CWpwJ_2^ zT%afr%$tB$!lu}{^^Nh`C zKqEg08?my^9}e%;0BUBEx5BFxUR-#YHNtByELW153#cje;^h7-ySd=fTfudG_AGph zUci93zC~T~>=mJ5=-`KX5lXPjz=;?Edx(;;@7p9`mNQEoo)>IPJz~+ftV3Q!1nig? zY@p-{6=F?%%XeV`ahW$`Fh^0is%^C1Hxqw*`Ngwu$n!71eg5rN&tAVg`tIekZ+?7D zo2w}ExK}AYzeEL0E5+~NKuR;@w%>s)6PT$drGdP} zyP76l-1zt#=Vi~+g?uCyFnNv(@q5nn_`Oa7_(67o)M{KLzZ#0yFfs7)l{W^v%VAy= ziYANheRfCxa4sRvjQ)&r2^ zz>jCrds=H!)WDJrvybKKL_deVeVxAr`J;`GoLBOa;$6xrvd=Qiv0PQT)_?u8y2^z0 z-br2a>APFaad8%oIq{TeEvZ2wv6KeGD2Tm0mb;m|5 zu(y>%B-p13r}jpjy3OH{57wo7_pu6Em+l9w9?X9mS{I!>$-M*pz-YE1*}Zf9;7I8h zyQ3g1{&rnc9%~xNc3pdtJs+w0v!<>n?6dmzP~tcHg1MFWRoMmUN*i%BP1%~bA2#cd zwv`U8@`0q;KU9sL0{@tUdlmS1@04x@{s%1ZYa`Mv4@tMaz;8ElL0-P}B0O|dZ~%z4 zC{CqKIJWCVha_Y+ zlpxHBLy%YmClpFMp5@q%9eWXpBjVB_)K6F>>c+2E#~vlrb>79aLw<}1^PDNvO#l<{ zZ~?D$dWau!hQ#x6Th=D*iUpPv@o>E)c3nEPd{Hw3IiZ6s@hY7e024-`<5TF9F9rZj zMIG`2tE6$nh!e!n6ERrFBRrn|gn3||z{nxt!gu2tavA6jjFhl2WW;h@H=d@$U@;lR zV~0kdWI%_=3@HS#)B((O0h6Hv(%(Q#ViieKi625-oFZ16^^`)2>NCZi4DcL!RN^qs2OOnEv~54WQ} zNnO*LiPOXGt-5x56{?La*s4$~s8Ds01?O*dOLFf(h3d6|IY3Ok@OdPOx1N7VCh%Y6 zV~nP2V$&e{jJyJ!!TU7g$CptWzX<#p`OWtjk!1H@K#L#`r;csA>=8)h*MT#ex$H<& zZi;2JMrBqMbNcMZTshkPFJTL_Pd2^j%n7AuuCZc)};sqAVB#Jv8HVB?0& z>kT4Hle4;otgf7;&v#nRHqz{D7;>(e=E?)xJ5{9(etA!-%Hej-K(67MFb>W8)T4TB z$k0}gT0xJh3mH0pMRSsS7kX6todk%fSA9>OPtBY(oe{+12dk50bY(rbNXB$4;vkle97{qk9#~DC5X`_LXZ<)mF4UC0@}gMC`RxpBL7e3aC%QiS3~V5P zu56>N9sHes2J?(zu0mKbpyPLx15ouW9|OHSJ^1nU=STg6&tPE)qTpQF)DH3jnxg57 zu4#&Jqb6{i%OE|S9!m)iIN!DsJ>KB)XRKVSPxEAfE+-&}V<#`C$JryMQ`_deS5Z|{ z@8X`ONa595piA-U_ye!TL&Xl$k|#{O01Xw{8uGv7QA+j!DRF>bE{tW6Lb43*+A@?Y zy24{^0Y-Rt@|P?NknY%7o_NE|B>EdSN=}cZw_+v_o9O^sOE8m*uX>nb4Ko_@Fh8u= zPM%x@zi`-P5t64Af!NgyZ4JnNQ`!zXX-r3Y=MrjB*l! z+5V;H`qakwl}wn1w(F(k!p72qV9zHD@-W1;+Up*i+uXT$bF9st)9aYG9Ytfl)JVU59!Hb!c}`M|Wu* z70DdirzxjtMZ^95D)@ikyDYpz^M9%Sr>Sb0|991v|8M2jl>c+0;Hw#*&V48mIGN^G zk;aqo0)nx}qvlG0g;bFiwmjf|ez`$@mn**bTWbHoV$avV3F}|!Ded~-%CG7A7hbM& z+4Y3poO0rQ52yXD_!~KQEbJ?Oi`T!d^?FKi{VP4w=(g*B8^5OOpVJAK;rPV&0R~_U zC7ZLSiCc9-!^zp8NBeAG3`|2Abo-;eVVdgDX2YRAP|dz=7^V6cA}L^}h)8cvV1WC4Z7pg3KGmZNyd%g<;uIXf1G z_;a4ccQPWV`Dlhah=F&c8k%kl&eegYbY>VHKLg7RUtt%^ySxIU&Ts6j2Snc&rTDwZ zo;p*87uB9QQ#xkHyy7fPfZzsp9C9bPcoNA~rxDOTp4*MCI<%3477uNlhQRBsWg}03 zLL0KEUinWCm>JhYtD` zIX>ibDus+PG+@69Hk*_H52@iPf&y5Y##LCHr}9G3l&Xbb)9!$F88etU)Q5`Q)eK`e zVxxg!;sQ|U$nJxtGuY#W&{>($5&?z}|+Yah&J2%~>B{iPLQ@c@M`NuAZ_Da}CP= zi%Y$?=Tka6_ebY1Th)K|MbyQg&x!{}+YX$%xb zt*$m4sFd3M!BE>GW!nK=LffXX25FB)M2@u>e7CEZ`@-G}O}DzHrC5fErz{k0pbkx{YKlsM$kp8Qi3;*~p`d+Af@ zbz7fG>r+`k>L1Sj=31oQa`6wBi&yS%nugieRh3yoZD<&jQdO}B+R(CkBTF4ACS}7> zf23G*m5`VM+Z~hdPlxt_v zpR1D7K=$c+PT$LbSq&9=c}@~mns?>CG52BoroL~x>>Mv-i)R~R1B=(cs&I1@9@92-o!@tCiYoCy$N&Qh)HU$%9 zMW-v8J3TIC72u_|GQi4;ZMWwOAd?s<9{MyZNr;GzLPaK;WMUtV4Yz8{@UqG)zQQUZ9}I?eU!{FhsgoUrSms%v4Moz$WCyZvru9Vtw84JCu8KD$gN*CE&}a&egk%9*0D z%_8c!*}Y)NJ4x0Zzs_{nQ-`{x4d|d}0ih|H+BFr6DFcJ)1EVk9J9o-;@|2ZFkPGvAA6H^f-U106;?r*K#o- z#lW#ZL8@#O5R}@qIll6^;8IK3P~GZfF59M`uW)BfR-#bANFy1+*wM7 zp3J^a-$NEfx!Rj2NY%RRg1KkN7r}(&&v~9Wb(vV*NvR)v*iY(dg9$k zlX%bXw&`a`?eTUIYf<1|z?LCz%VXu-C=W}%&8A&{yw#z~mu%JZhK)3x3fm#|-foj8 z2?x-Y*XxXdc(=BUVaXG=-QjXw2In<-+-B=nbms88nYX%Z*_c|_n~^=a;ZSZmQ!F$6 zb6&+x*BS>nPwezMa#(-8-DM~Fu8=qK*Xv~VnmB(8j;73klX#-;+kdw2KR=Fuxo!3e zh^6EzsIc$Iv*7^{-+dr0kXgn~E(aZP0 zsEW~R?|<6Luj%?PU*VW|zUFU-x=Hso9FW%Qyheh$?JlFP9+v+g3!n#sy8h&M z$Lo-~=Hqw&{>3ZhMJ4s{>r`v#XD}G-E(NKz6!h0;N8i8vde}}XGtNQxi zCx5G+eY{+FYqMXOE9O(zd-CpA3YKEcN$wx6NY4u`?Hh;kFFk&M5VvNN$N6@Po9{K5 zVM2*rx$DB{On3Fc?3}NNWJeDtj%_oqc>Zv%xl+26Q`f#c!zJlZ0O1SdYoJbN<}&hp z;yc!y2V|~MB+|1#y3v!_AIH&?ADGLmh(ti?mLK3o7NK5v34`t+%rOVb=ZzO$Tz5j( zYOzpxgEK2SW-y1;9WiF3eV+I1^~8Y*3VGKOAd*5A`c|%CX&ZSDt25>+NSFYgrac3F zNBnR@G*7OWK;}_5x;|4nUGamNOp+=v$Tx_mIG0v3kMD|m#u=!~ym2(a?k7+4Aa(4- zFf{e?*YsEIhyN_FlS1L*`B_C(O{0rzckcY`Tq)@+ZLwJKEN!7&QseL%7j*tI517^= zAf>ko%)9Z}@y^8|XbGq1DMikgL8q0V`>MPwSFBh=H!4_HHxTc(1 z3-5J>M*Nrn3{mMADV=6%wT05P1F*Hrs05q$YuWPQ#gg7P!mha*c0Z?X$hM4IWnXby zC2IM?SIIO^CCu}ed^L{Kjy+dd8!5r!Nhj?zC!X;12&0ABbTLp zgMpS(s*5EGz`Q8_yB`N6C8ID^6beGPT((gQ`9xG_R96D(P~=e8y>8mytUzVYYpYwW z^?WQ#AgZf%yr!ecAPb|IFW<18yx(O5F1QEPXvX?Gj?eRJ~fw?l$zb?C!MK2WNLzE$af{{aY{U{@R9v*6zM9 z%dpNYZ!N>tGHflw)-p`{&{~GAWeAqxV1F&cvXZfF%dkqxX>1w34q`_9fN<4kMa%G6 zzz9fi;yM?=0SWYI=2DMEgn?L?e0D#^-|m}nQh{Y=9B_B2lF!U0jJRG`ef;7p`o&M( zm5eyuSZnh%D|VkoT!zs*GvN%Sk&%H5ZFPe}*^03yIZS9oLO=HGkkBD0=Ol2(lcM^y z19qLEHbQyA(>9LtwT!q7=RYymC7n)(JO@RZOc}XwD0!?8$V26kt`K1Gx?%SEgAVzL z5f6%!$R`nX-`@AEEVc-Qt zT4lObrZ=EW7bMbtDbspcm~L5_o@<{2H9omWBWr@Ha9Zn%3iWq9Y!aDbHT;<1$ah`; zQmzp)Y+B%AMR_tDP zOAwojMFj`(XHmZX>vlt0H*f3a-ME`~9bYZ12#JX6shrhOsNnTnMef!cHPzzcC$!dR z;)Jn%5ECo-TqRe{)p0wk}P~45uvP>8DR+`mt#p^9ZL?B#aPfDc5O;M zI%cT+5)n2n!(bfVI|jez-}T=iwiX=gE)4D-#`@~hDe>bdbZo{yL89amjM`g`J;|zC zY~{_4CDN(2%v#HA6PB5}zm{3qgR^bRtjdGb`~Vz=2PHy4t!I=W+u$}C7AF1(oWC1p^VS1p;PJfjQv38;vEYKYeHJr zdL!bHSs343;g`Qyv}!v5Ta#*Bs*yHZeyv{G>ZO~|OSS#gOUoi=+j?o0h-<8ueiKgt z2^Mu%R7$z)Cy6DHuq@CtU1!7&d0Ol_ICjQ&3m80JM|@*~xgl#0=9DLEbp_PR=WP?} zr=}Q>fBf-X5L~aMe)cqD9rZIScAx5JhS9rIJ{PzOC8bE$c2(ufR{IOz`;Cn+ZAsA+CFe_ zp6jv^r-b}v5je)EhFRmxA}J&%Eh?JxCp9G^Ik{%C$~aht^+kIaIaI(bKd9EzD&WLQ zTpFPPkMZb>?I2`bz6&w{@AAV_LfOmG;ft;;8-DG;N_u(|KGkaJt(LwCExo(HT6$R) zZ#g2_T>BiTsh0jS4C(c%hvUPyLPEPfFbneR6~Q}G@Sq_V;g^9EF+A-_$=LU80_?|` zr5j-vY)n03(YLHaUPT1tQS9109v{WHd=uaDU6@_2+|L;G;^@ADo9%;A-}tmW6Vtp2 zh2B)O$D{7ck@?$73jM%b>i|$z>^>EGj?Kj~g@Xv*R(n1;VBriFI7_I5*?8$MUhG>) zUR*X{?_wul{L-|!v?a}=gmN8^g=d-~HJc|_m!CS`CFm2bGj*cEh0juQO-XuHSyE1} zv3{b6S`(otfEp{mE-jFuLn#zof+c?ON{|E=mR^=YOFW>Qws<-sHk~2s<9v3~MRxZ$ z&Mcp&O!4SD&Jf9S;GX1r&Q&>U6u=LPu_02<%E_NIUXZmma~;d^(jILew^kB&2l^#L=TsjNc2}z%xkW0soCMN_q z#D9BoKm;Jjs{^bE>j6l9(~I<;)|wPGuw=vRW4Suf&!KN$=Wjv&Xyc=PoOnvKmee4TSW1K07YlPl=)2jY z>u{RKHGyCCP~y^H%z)r7`L`#$q<|4!5Jhu-m#w>I%QIi!H96JQ;MFrc)U*qV(%GNH zJ?(iyEx#OIN8%FL?77lF;o@egfwxRg*+-<_R)A!f7tBsANZ^yX1Rcx&1)U{${ zO>_52&9zsG#gi5kyD*?bh+{$WXB&8Km}2;nladAzmwEF~D6h%GHxJ1rdGqMe33<;Y z_)VELi^ne+ewWF?-2{BXljh)$rIs=^B9GYhC9JDb5U&#gwLT+Hp(B6dwYR2aiLzGT zFR~;e+kkzk>fOQPcfJ4mp|?^PY*X(I*03-0V)toZ<|w_p9iwK^xRRCmr*z5f>i$u? z6I8PkG+1yft=$P)xD#a4h=MjR-E~%n`FThY8BALclr6hw1#di&?p&z^=E9mU#X7;A z0CKddWQkHKsOeW7b;y~*;sxI`h@}NR`yZ{o?-Garb1ebO~hz;IZ71)%sh%{Vw-cTcN*$jrOH`4D{auCkZIV~_m3oC!?(g37 zzACtCJyNpX79S~^15C8YrHA|QP*H!CLq#2R>9HcYK*m`M3AOB9d_yjJli2rK7A2sN z+^CAVKm*I|Nt7!kT-Nw{8_kV8GmCAoIY42AEw~gZy!Na~;Cs$*A_B1VT3e)1ykN3! zCZ< z=QAJe!`-Ht!)LRrQgVE1>K5>Mv_CgzmJ!-(78W{3=uwN%%Di3JNZj7;Smo8}NtxAM z#B?LxVdcbF(LLPVsC&4tHFF29;vQC&P5J}1X8yoc{KMKt``c{qaTWitc2@}A+UCsy zjbrtdIs8agX0uJ;l{RiROX4vu)s&mgZeycu)5hx=r>L%+>Z5ly-9= zZK($73qqCVNFTIFmn*n6(iiN(WJvEREz;!*c553=U9fk5i+wb8d;4g29+Z8)jkUtE zlY0)#zM%cvg=QyP3(j8E(wgDf$^4F<<2XCDqqoe%*>3AC?`XTNxB9l8xxd?b_Z$|a zGDO%q+j>7Z)0w;Kj^0an4@w`538afi(I@2n)lIv%SDKvL?CpigG;LyY&+KZCf9m~x zbmgtIxu*`+3GtB^+l|dVf!I6S-Rm`ra}3L4SHHc=)hR|NzbBwn!6J`6u)891(njlB z2q%sQE^xxM-)L=k7pgWK&sx6jtBv@&JIaZw;6JOlyVVW5yPKW+U&-Cw`PjX&OHU@C zkE*-dKB}^V>4Wr9-O_wsszbE)b8A0u!hY`Uul-!!G}&_S`^x*}8r#n=0y^d~EMElv zOx%_98r1j|t!N(4WJW!F{>l$P6#x9Q`pYlG_FX?9A?Vvb|E&G;%OS?k41s&H2>qM3 zGjl>qgv58ELlS}!Z~KHfaR~Mg!EjYj+VL#Mc5F}8sD@Zkbp>GTk9Kn#iJW1udZuqzf=4qzRz7`rY7Wkl4BKu+jjOT0>F z2Ec?-g51Z4&hY_2Q&ES!z$$4RG2#R<^h6BS@kqdC0h=%ngX%??aN)c0EW#)?7dTSF z!jKWmaou>D4ugSh0z8C9#KR7u6B}OQpaYoe0wzP48sb|PWkCGIif0bWet?D%%mUv5 zLP888mM}bN?9M2TnfRlTV>y)AEMx)ZPJI` z;rRBXe{v8;_H&np;lYV^@;*EnoE+G|)On1_gD2sMdUBxRUx0KxZYHpUC&Lrv$<6A1 z4`l;qbeEnv;7A8)6t%Okxmj3x2!SL0<(0)|5sTNj(rl-uLfhr3Sb9|hM|z@=v=gzp ziD>qD3)gq|d>VF|H8uMxCQ)Mdd?I#fJuKd#5Zah<57u$4HP0t){&dovoK3pllSvyo zm$a=@Nq2T8iEl)C@iZwSXsnP@?K$VbiC@ZqU6GQ8!O?5i(H^UUN7JFglWd=!u)djDV?<;1j=)^j?2x#+48ym zw-L{qK2XfZ>fno)%8#pf-ui~VP5^`Zn@y=nv%zV8@4S5t>Q{yfU*t6L`8Kn5Ti5UMj<&Af)m^`X{dN7;UP8E~qp-KSgzzQc2YO+XXTtqN9zJ*d z-`JxSUB9mgof1mk|C@Rvxjy7ek6G#_iG1QZBX-C=z_I5bir@|1#0;-Njwa%8Y{<}~ z^8Vkno8NyVK4NWyK4KmsK+M2KJj8~k^dCR-dw|=!QI8np|8f81TZ)I`qqj>)tR$Ykq~TUle)xv_2laxzk2=Z`Iq0mdj9g{>6h`8 zdjIzAfBcWnopADRKj9_8Hy^b4Ut^0nE6_;%r_uj6CH{Z?%TLj_%Eu-C1y1km`;30G z;N5&}Y~j@BS`jF|{g0i9gWg}@?3NIR++|nK&vK@>gMm6E$`@y0)w)yTr!KwrV{V5g zPc;f@qu_scb$DVojzsM4@rHXivQUnumj%mN7GSS*vO#Hb)*&eda>}!5U^^auA)BmI zQNAjx-Y%+h;8xj1O9e)27qxcLChQ`0Z|x$ptQ2k6E}Cne18vhT`r*rOzkmJgn;(99 z`TfaLU2DxCF$1fcLBQIBXwzQMFR$!hgI6Do86@HK?#!SC2Q?&BeVwbdwiAVK2bFed zo`giG`^4}x4w*$m5q~autZYrHajEXpj7nPFr`3Hnq5Ek2tNWC_7+c<5o@<{2HQilK zt`7a$3DK-4KVh7=Hp)^PW$B~X&fnxGUt>B8`P$ly8fzH+$FKhWY8-vDk{UZO)>31$ zV)v=WW*EIYCAL{C>79soK! zCcJgs{q@$>h5<6SY8D1pno$zj2U_e13%=0 z;eEocxZK|f(5??^BJ@5Pi}0joiGaR1?2zXH1po(Dmk;^VL#Q~2Xog|YO*Tec+jQm( zVR#q#-A_QdOBE32d(1+g;RsLqIOwJ1&ezIsiT;N89>(b5q#n9R`J~PQXDYBhqOrx> z;AnPZJ_pc?*o^|m0!btqz-vM1zgfi9?FN?}f8YSU!Y9rE3Tf;eZkhRDi55Ko3FO0kG%L4*7jK$1Ajr-Vw_ z0_+@07|E#!N&~IIWDRjakdTfYTv#ymEOLMZ#8_aM@@fD|as*oV2(TU7LFEAoT*U4y zM(26HxEyN5E-sH`?WS~^(rvnyIcE7xBu@Td2Kpgy0v38YKvDf=WCUGkU>1=265O-wsGQ9Pk_qSYMQ3a|ENCW60uTKQFCm;@}lJ zd@|)V0^>n!Wc-fCW1I;qUo|-n_)=rh0uO076$le{q|_II+mm`y-%MnDFFLFS7BsHGZ5VyWee z3CND)0O;Y6@5lgo;5_2+vkvEcC!GY*DWs?j*)H?R1q~c59OJ5E7R+ZTEg->DL{o_L z1P7d;GC>BYNcnC?REQE1#8Ch(bDo`vl5E7exVuU>uCkSHJ7W)b`lboR#}VHHN`@}8 zjSl$%SYXQQXtJ835)2oknE=FfoFV8i+ciV6#bBVb*u8K(8YFa^3@yVNc0^1VUzhpZ zrX-h@Pvlsfa><;#;L3-&0^o!UWJZW2bBMH<@jDU+H4+R5pN~tdj+Es29-$z1Ayj;* zC6&>M2uS;!%Hczt4bB}>p_I(|VWR6mc0ok|q$T^7VB;mskkh>Dj5)TV$;bfF85}uf{6HZF0s*&nAfSsJL3whA@!7J3Y9ArlMeDQ+sULQEZTg1N-CqE<#hT|?!wg| zq`;KNbFwT*A0+XF{Ro}!Fp-V#g!&jk^8hAOS*Fvanx!xF3+8iuE+G{dIlyrKkf5|g zgvS+H@-b-CCB6Fc=l$ee?ONuU`K7&&Mz=(GiFNZ1zYsG~F1Ss{>8x z%)Idd6po%AH0jd;xpeGk^7O#el>?wSXFQ4U+gatHxci)U_+S65G(28j6&ic^HE)P~ z<&S;Q@+698;mPr_=t0L1#*c1?kogLaqY13gBmv)N&QRFH-cBdR)`V z;|xPxMZ!=|Ull=Lqw)56V!V|{J~7fS|IzsJej_iDE20@IAdO-ZZ-#8_c<(tzZpa(k zkKSM1kUxSo`2_zXPsy9m8BgiM>!YhjYBU(o|Lp(9%VL!=fL?U*GE5ClS>->25K;}cu@bYtH<&)d4n-x9zvhv>G}J& zPt}`$fF5-ImJH#)HvuC2(Ldh5`Td*UYc~k{uCBm8v=qD&VpxRurE&nzz(VuG5E+{d z3_P8&+ODHbJ{-OO+s(O3-r&Z3D5q(NXE9k9kQz8JO=-3x<2gQ%?-^*!wMVeWW*3Z*iSia#65&x^D@9+IF3&NvpVA*i% zMySHl7wx_KhX&(RkKR4Hd7P%0Nece+4-GRc>;@7(Os{?Z{@16<4GiD$M$z?6jx7X# zZ~XdLyLps7cW)lu9FjM{E^Ph}tSELBy&r)#^N0Wb?!OBz5<5q?dtE#Mz%OrZq_q*1SS~NeXZF2yQz-ZA zjacMKHxP%UTydc;9VtmLaj9HI_n{zk`Ek<${AJ+)WJqOMm;X}gvQjNRKIoHe$_78t zuw^IolCy2f>SxLTXS>mbD;HZ==d7AE%bQBO}ZC8x%Ol7*7GmP1pbSB^afrN8^q#g7leg@wL;K=94ZeHwuZ}SicU3QU&fJ%Z=wgbwa+)W2ez9@`OsY zDW&@ACDG*0kHO-=;)?^zuMtQ8FR|;Ahf@&DE`CP8ATl!VfIkwW;QdHnY7U1sxn^Ln zIF9(@IPz-@_ca(qGnXA{%67(j>zf8{MGxVGg2c0&z;YSVFRhY)39RMgCxvHSMLC53 zo}i>jl4?sdx^|#hK=E7AffyJrWr`7x8je)!D~D>&e4@jje$&A&xntliqK7Y)uB}Dd zTBK`Qq*YlCA$|dn7l054_Qnc zbx^ctPeXo;#Re5)Fo3-LHR;DPpFo92A|Ze~rH*caIwF5oJN^A7)8A`4{ie2L`foX5 zhSpOJn6lpEZ@;^^x}ud6rqoWCa?g`BpNP<(d?3F74^wrnrtSvYKnI1X>z^dPit=Bu z(2Y-2-P8$C4z z5KX{*a?*`7u&-k7HhA_UT2-;+LU1WGEZIirNaZO>-yJK81MZVeAJgt-$5D9y^0&GC z+%TI@OmKmRa;b|W%^s6+#?j;q&#qAyh8m~ad8Z>M2qT<8j?>7o_!P~hVzh)g$b8^) z6_gVbbW{`eJ#as}WrjKd+-uMiU0`Lcs#*b&igo?jOnloj%J$;7G zj_gGmEwwD9WwAl3nz$n@r{|;109CWEX@g!@40aCA^~a8f0jdI3{a}XKGmWk(z(i_- zlsG^OKLa%Ts%Z|;`6Oo~lMYKg-?x(9@@(6|4;>Ii(wm%(J5JYW@$@w#c0Y`VxJHKD z6JJb7a2SXkvUtijSmoCo$>~P4Qn4>xwHK|L`k-nr8d?KUG<2dV4d069r1uno=$$>6 zeYvTBx0smwP-TDW=`3I)7T^tAS?+uix9T#ND88Nh_yMA0OUcJI={%W+p)>Xhp7Er> zTux#{3g-(-ilT_o3nE5SD`kwfmWo++Uhb!TS>-f4P}hB?=oh< z@9l0RV+Pt18Kd;OMsLt-Bx5v1(XDyzEG2@6-S-%gs`e8P3mxcYM1H&X6)U%`EIl3>1^g+VuDV$$7OhY(2dcbgB2_+EoRu7FzapB^^k$61YPsiT{o6=eeK4#Uoagmy(o}K_JT5;(fvRD%Ow!U9*+GGE{magPD4FNZFbzfPa0xq=)T1 z$n((G20An8NEsOeTT>`ybYSSco~9e!?#Qlcqj#%$=&g&Ddn~y6Jd}&J^H71#MclMk z%}uvBC3HlMp*8?MMNO^W?+&d|e>l*!;lR>+BW<+7DOoDz)LY}XfA9Dm^mI_9M!kOD yw3yKYa<>$F09vsQ3t?z98sY-{-nXXN{@P#r+qK{S0{{U3{{sM67Ik3&ssaEcz)m6n literal 0 HcmV?d00001 From e8e6a81d3bf4d7e780b2cfb9937ff519180b6a9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 10:57:01 +0200 Subject: [PATCH 043/185] Fix typo in Report::get_attempt_attachments_metadata function name --- classes/Report.php | 2 +- classes/external/generate_attempt_report.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/Report.php b/classes/Report.php index 524058a..ec8948b 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -318,7 +318,7 @@ public function get_attempt_attachments(int $attemptid): array { * @throws \dml_exception * @throws \moodle_exception */ - public function get_attempt_attechments_metadata(int $attemptid): array { + public function get_attempt_attachments_metadata(int $attemptid): array { $res = []; foreach ($this->get_attempt_attachments($attemptid) as $attachment) { diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index ebc5912..aacca04 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -182,7 +182,7 @@ public static function execute( // Check for attachments if ($params['attachments']) { - $res['attachments'] = $report->get_attempt_attechments_metadata($params['attemptid']); + $res['attachments'] = $report->get_attempt_attachments_metadata($params['attemptid']); } else { $res['attachments'] = []; } From bb80fde4bafcccb94e9019a9a7d830535bd6146d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 12:10:18 +0200 Subject: [PATCH 044/185] Document testing procedures --- TESTING.md | 71 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 TESTING.md diff --git a/TESTING.md b/TESTING.md new file mode 100644 index 0000000..99b36be --- /dev/null +++ b/TESTING.md @@ -0,0 +1,71 @@ +# Testing + +**ATTENTION: The following notes are meant for developers only. If you only want +to use this plugin you can fully ignore this file.** + + +## Creating a PHPUnit test environment + +See: https://moodledev.io/general/development/tools/phpunit + +1. Spawn a shell inside your Moodle/php-fpm container and navigate to your + Moodle root directory: + ```bash + docker exec -it my-moodle-container sh + cd /usr/share/nginx/www/moodle/ + ``` +2. Prepare PHPUnit configuration. Add the following lines to your `config.php`: + ```php + $CFG->phpunit_prefix = 'phpu_'; + $CFG->phpunit_dataroot = '/path/to/your/phpunit_moodledata'; + ``` +3. Download composer and install dev dependencies: + ```bash + wget https://getcomposer.org/download/latest-stable/composer.phar + php composer.phar install + ``` +4. Bootstrap test environment: + ```bash + php admin/tool/phpunit/cli/init.php + ``` + + +## Running tests + +- Run all tests: + ```bash + vendor/bin/phpunit --colors --testdox + ``` +- Run all tests for a single component: + ```bash + vendor/bin/phpunit --colors --testdox --filter quiz_archiver + ``` +- Run a single test suite: + ```bash + vendor/bin/phpunit --colors --testdox mod/quiz/report/archiver/tests/classes/Report_test.php + ``` + +### Automatic test execution for all supported software configurations + +The configuration for automated test execution via GitHub CI can be found in +`.github/workflows/moodle-plugin-ci.yml`. It holds a matrix of all supported +software configurations and runs the tests for each of them. + + +## Generating code coverage reports + +**You need to have xdebug installed and enabled in order to generate coverage +reports!** + +1. Run PHPUnit with coverage report: + ```bash + XDEBUG_MODE=coverage vendor/bin/phpunit --colors --testdox --coverage-html /tmp/coverage --filter quiz_archiver + ``` +2. Copy the generated report to your machin: + ```bash + docker cp my-moodle-container:/tmp/coverage /tmp/coverage + ``` +3. Open the report in your browser: + ```bash + xdg-open /tmp/coverage/index.html + ``` From bbeed9b8c52f9978c6d939fcdfc8a44b19f5f910 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 12:11:04 +0200 Subject: [PATCH 045/185] Extend Report tests to attachments --- TESTING.md | 4 +-- tests/classes/Report_test.php | 46 +++++++++++++++++++++++++++++++ tests/fixtures/cake.md | 6 ++++ tests/fixtures/referencequiz.mbz | Bin 17195 -> 17789 bytes 4 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 tests/fixtures/cake.md diff --git a/TESTING.md b/TESTING.md index 99b36be..e2d8716 100644 --- a/TESTING.md +++ b/TESTING.md @@ -1,7 +1,7 @@ # Testing -**ATTENTION: The following notes are meant for developers only. If you only want -to use this plugin you can fully ignore this file.** +**ATTENTION:** The following notes are meant **for developers only**. If you only want +to use this plugin you can fully ignore this file. ## Creating a PHPUnit test environment diff --git a/tests/classes/Report_test.php b/tests/classes/Report_test.php index f5db5d9..80fab0c 100644 --- a/tests/classes/Report_test.php +++ b/tests/classes/Report_test.php @@ -355,4 +355,50 @@ public function test_generate_report_no_history() { $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history found when it should be absent'); } + /** + * Tests to get the attachments of an attempt + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_get_attempt_attachments() { + $rd = $this->prepareReferenceCourse(); + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $attachments = $report->get_attempt_attachments($rd->attemptids[0]); + $this->assertNotEmpty($attachments, 'No attachments found'); + + // Find cake.md attachment + $this->assertNotEmpty(array_filter($attachments, fn($a) => $a['file']->get_filename() === 'cake.md'), 'cake.md attachment not found'); + } + + /** + * Tests metadata retrieval for attempt attachments + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_get_attempt_attachments_metadata() { + $rd = $this->prepareReferenceCourse(); + $report = new Report($rd->course, $rd->cm, $rd->quiz); + $attachments = $report->get_attempt_attachments_metadata($rd->attemptids[0]); + $this->assertNotEmpty($attachments, 'No attachments found'); + + // Find cake.md attachment + $cake = array_values(array_filter($attachments, fn($a) => $a->filename === 'cake.md'))[0]; + $this->assertNotEmpty($cake, 'cake.md attachment not found'); + + $this->assertNotEmpty($cake->slot, 'Attachment slot not set'); + $this->assertNotEmpty($cake->filename, 'Attachment filename not set'); + $this->assertNotEmpty($cake->filesize, 'Attachment filesize not set'); + $this->assertNotEmpty($cake->mimetype, 'Attachment mimetype not set'); + $this->assertNotEmpty($cake->contenthash, 'Attachment contenthash not set'); + $this->assertNotEmpty($cake->downloadurl, 'Attachment downloadurl not set'); + + $this->assertEquals(sha1_file(__DIR__.'/../fixtures/cake.md'), $cake->contenthash, 'Attachment contenthash (SHA1) does not match'); + } + } \ No newline at end of file diff --git a/tests/fixtures/cake.md b/tests/fixtures/cake.md new file mode 100644 index 0000000..374385d --- /dev/null +++ b/tests/fixtures/cake.md @@ -0,0 +1,6 @@ +# Recipe: Chocolate Cake + +- Chocolate +- Cake +- Love + diff --git a/tests/fixtures/referencequiz.mbz b/tests/fixtures/referencequiz.mbz index a6b86b1780af7485a95ab9720c04138da208506a..a322717375c9b39a7e5b44376e4b7f1b7f66c122 100644 GIT binary patch literal 17789 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 literal 17195 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 From 3f61a78c8000d8687fac628d87bc15889b57b45a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 13:15:32 +0200 Subject: [PATCH 046/185] Largely expand tests of report generation class --- tests/classes/Report_test.php | 273 +++++++++++++++++++++++++++++----- 1 file changed, 232 insertions(+), 41 deletions(-) diff --git a/tests/classes/Report_test.php b/tests/classes/Report_test.php index 80fab0c..2b0163a 100644 --- a/tests/classes/Report_test.php +++ b/tests/classes/Report_test.php @@ -53,14 +53,6 @@ class Report_test extends \advanced_testcase { 'gapselect', ]; - /** - * Called before every test. - */ - public function setUp(): void { - parent::setUp(); - $this->setAdminUser(); - } - /** * Imports the reference course into a new course and returns the reference * quiz, the respective cm, and the course itself. @@ -70,11 +62,13 @@ public function setUp(): void { * @throws \moodle_exception * @return \stdClass Object with keys 'quiz' (the reference quiz), 'cm' (the * respective cm), 'course' (the course itself), 'attemptids' (array of all - * attempt ids inside the reference quiz) + * attempt ids inside the reference quiz), 'userids' (array of all user ids + * with attempts in the reference quiz) */ protected function prepareReferenceCourse(): \stdClass { global $DB, $USER; $this->resetAfterTest(); + $this->setAdminUser(); // Prepare backup of reference course for restore $backupid = 'referencequiz'; @@ -121,11 +115,17 @@ protected function prepareReferenceCourse(): \stdClass { $DB->get_records('quiz_attempts', ['quiz' => $quiz->id], '', 'id') )); + $userids = array_values(array_map( + fn($r): int => $r->userid, + $DB->get_records('quiz_attempts', ['quiz' => $quiz->id], '', 'userid') + )); + return (object) [ 'course' => $course, 'cm' => $cm, 'quiz' => $quiz, 'attemptids' => $attemptids, + 'userids' => $userids, ]; } @@ -140,6 +140,50 @@ protected static function getAllReportSectionsEnabled(): array { return $sections; } + /** + * @return \stdClass That emulates the data received from the archive_form + */ + protected static function getFormdataAllReportsSectionsEnabled(): object { + $formdata = new \stdClass(); + foreach (Report::SECTIONS as $section) { + $formdata->{'export_report_section_'.$section} = 1; + } + return $formdata; + } + + /** + * Tests validation of webservice tokens + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_webservice_token_access_validation() { + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + $validToken = md5("VALID-TEST-TOKEN"); + $invalidToken = md5("INVALID-TEST-TOKEN"); + $job = ArchiveJob::create( + 'test-job', + $rc->course->id, + $rc->cm->id, + $rc->quiz->id, + 2, + null, + $validToken, + [], + [], + ); + + $this->assertTrue($report->has_access($validToken), 'Valid token rejected'); + $this->assertFalse($report->has_access($invalidToken), 'Invalid token accepted'); + + $job->set_status(ArchiveJob::STATUS_FINISHED); + $this->assertFalse($report->has_access($validToken), 'Valid token accepted for finished job'); + $this->assertFalse($report->has_access($invalidToken), 'Invalid token accepted for finished job'); + } + /** * Test generation of a full page report with all sections * @@ -150,17 +194,17 @@ protected static function getAllReportSectionsEnabled(): array { * @throws \moodle_exception */ public function test_generate_full_report() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate full report with all sections - $report = new Report($rd->course, $rd->cm, $rd->quiz); - $html = $report->generate($rd->attemptids[0], self::getAllReportSectionsEnabled()); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + $html = $report->generate($rc->attemptids[0], self::getAllReportSectionsEnabled()); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify quiz header $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); - $this->assertMatchesRegularExpression('/]*>'.preg_quote($rd->course->fullname, '/').'[^<>]+<\/td>/', $html, 'Course name not found'); - $this->assertMatchesRegularExpression('/]*>'.preg_quote($rd->quiz->name, '/').'[^<>]+<\/td>/', $html, 'Quiz name not found'); + $this->assertMatchesRegularExpression('/]*>'.preg_quote($rc->course->fullname, '/').'[^<>]+<\/td>/', $html, 'Course name not found'); + $this->assertMatchesRegularExpression('/]*>'.preg_quote($rc->quiz->name, '/').'[^<>]+<\/td>/', $html, 'Quiz name not found'); // Verify overall quiz feedback // TODO: Add proper overall feedback to reference quiz and check its contents @@ -184,6 +228,19 @@ public function test_generate_full_report() { $this->assertMatchesRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history not found'); } + public function test_generate_full_page_stub() { + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + $html = $report->generate_full_page( + $rc->attemptids[0], + self::getAllReportSectionsEnabled(), + false, // We need to disable this since $OUTPUT->header() is not working during tests + false, // We need to disable this since $OUTPUT->header() is not working during tests + true + ); + $this->assertNotEmpty($html, 'Generated report is empty'); + } + /** * Tests generation of a report with no header * @@ -193,13 +250,13 @@ public function test_generate_full_report() { * @throws \moodle_exception */ public function test_generate_report_no_header() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate report without a header - $report = new Report($rd->course, $rd->cm, $rd->quiz); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::getAllReportSectionsEnabled(); $sections['header'] = false; - $html = $report->generate($rd->attemptids[0], $sections); + $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that quiz header is absent @@ -219,14 +276,14 @@ public function test_generate_report_no_header() { * @throws \restore_controller_exception */ public function test_generate_report_no_quiz_feedback() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate report without quiz feedback - $report = new Report($rd->course, $rd->cm, $rd->quiz); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::getAllReportSectionsEnabled(); $sections['quiz_feedback'] = false; $sections['questions'] = false; - $html = $report->generate($rd->attemptids[0], $sections); + $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that quiz feedback is absent @@ -244,13 +301,13 @@ public function test_generate_report_no_quiz_feedback() { * @throws \restore_controller_exception */ public function test_generate_report_no_questions() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate report without questions - $report = new Report($rd->course, $rd->cm, $rd->quiz); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::getAllReportSectionsEnabled(); $sections['question'] = false; - $html = $report->generate($rd->attemptids[0], $sections); + $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that no questions are present @@ -273,13 +330,13 @@ public function test_generate_report_no_questions() { * @throws \restore_controller_exception */ public function test_generate_report_no_question_feedback() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate report without question feedback - $report = new Report($rd->course, $rd->cm, $rd->quiz); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::getAllReportSectionsEnabled(); $sections['question_feedback'] = false; - $html = $report->generate($rd->attemptids[0], $sections); + $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that question feedback is absent @@ -296,13 +353,13 @@ public function test_generate_report_no_question_feedback() { * @throws \restore_controller_exception */ public function test_generate_report_no_general_feedback() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate report without general feedback - $report = new Report($rd->course, $rd->cm, $rd->quiz); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::getAllReportSectionsEnabled(); $sections['general_feedback'] = false; - $html = $report->generate($rd->attemptids[0], $sections); + $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that general feedback is absent @@ -319,13 +376,13 @@ public function test_generate_report_no_general_feedback() { * @throws \restore_controller_exception */ public function test_generate_report_no_rightanswers() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate report without right answers - $report = new Report($rd->course, $rd->cm, $rd->quiz); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::getAllReportSectionsEnabled(); $sections['rightanswer'] = false; - $html = $report->generate($rd->attemptids[0], $sections); + $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that right answers are absent @@ -342,13 +399,13 @@ public function test_generate_report_no_rightanswers() { * @throws \restore_controller_exception */ public function test_generate_report_no_history() { - $rd = $this->prepareReferenceCourse(); + $rc = $this->prepareReferenceCourse(); // Generate report without answer history - $report = new Report($rd->course, $rd->cm, $rd->quiz); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::getAllReportSectionsEnabled(); $sections['history'] = false; - $html = $report->generate($rd->attemptids[0], $sections); + $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that answer history is absent @@ -364,9 +421,9 @@ public function test_generate_report_no_history() { * @throws \restore_controller_exception */ public function test_get_attempt_attachments() { - $rd = $this->prepareReferenceCourse(); - $report = new Report($rd->course, $rd->cm, $rd->quiz); - $attachments = $report->get_attempt_attachments($rd->attemptids[0]); + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + $attachments = $report->get_attempt_attachments($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); // Find cake.md attachment @@ -382,9 +439,9 @@ public function test_get_attempt_attachments() { * @throws \restore_controller_exception */ public function test_get_attempt_attachments_metadata() { - $rd = $this->prepareReferenceCourse(); - $report = new Report($rd->course, $rd->cm, $rd->quiz); - $attachments = $report->get_attempt_attachments_metadata($rd->attemptids[0]); + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + $attachments = $report->get_attempt_attachments_metadata($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); // Find cake.md attachment @@ -401,4 +458,138 @@ public function test_get_attempt_attachments_metadata() { $this->assertEquals(sha1_file(__DIR__.'/../fixtures/cake.md'), $cake->contenthash, 'Attachment contenthash (SHA1) does not match'); } + /** + * Tests to get the attempts of a quiz + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_get_attempts() { + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + $attempts = $report->get_attempts(); + + $this->assertNotEmpty($attempts, 'No attempts found'); + $this->assertCount(count($rc->attemptids), $attempts, 'Incorrect number of attempts found'); + } + + /** + * Tests to get the attempt metadata array for a quiz + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_get_attempts_metadata() { + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + + // Test without filters + $attempts = $report->get_attempts_metadata(); + $this->assertNotEmpty($attempts, 'No attempts found without filters set'); + $this->assertCount(count($rc->attemptids), $attempts, 'Incorrect number of attempts found without filters set'); + + $attempt = array_shift($attempts); + $this->assertObjectHasProperty('attemptid', $attempt, 'Attempt metadata does not contain attemptid'); + $this->assertObjectHasProperty('userid', $attempt, 'Attempt metadata does not contain userid'); + $this->assertObjectHasProperty('attempt', $attempt, 'Attempt metadata does not contain attempt'); + $this->assertObjectHasProperty('state', $attempt, 'Attempt metadata does not contain state'); + $this->assertObjectHasProperty('timestart', $attempt, 'Attempt metadata does not contain timestart'); + $this->assertObjectHasProperty('timefinish', $attempt, 'Attempt metadata does not contain timefinish'); + $this->assertObjectHasProperty('username', $attempt, 'Attempt metadata does not contain username'); + $this->assertObjectHasProperty('firstname', $attempt, 'Attempt metadata does not contain firstname'); + $this->assertObjectHasProperty('lastname', $attempt, 'Attempt metadata does not contain lastname'); + + // Test filtered + $attempts_filtered_existing = $report->get_attempts_metadata($rc->attemptids); + $this->assertNotEmpty($attempts_filtered_existing, 'No attempts found with existing attempt ids'); + $this->assertCount(count($rc->attemptids), $attempts_filtered_existing, 'Incorrect number of attempts found with existing attempt ids'); + + $attempts_filtered_nonexisting = $report->get_attempts_metadata([-1, -2, -3]); + $this->assertEmpty($attempts_filtered_nonexisting, 'Attempts found for non-existing attempt ids'); + } + + /** + * Tests to get the IDs of users with attempts in a quiz + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_get_users_with_attempts() { + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + + $users = $report->get_users_with_attempts(); + $this->assertNotEmpty($users, 'No users found with attempts'); + $this->assertEquals(array_values($rc->userids), array_values($users), 'Incorrect IDs found for users with attempts'); + } + + /** + * Tests to retrieve the latest attemptid of a user + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_get_latest_attempt_for_user() { + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + + $latest_attempt = $report->get_latest_attempt_for_user($rc->userids[0]); + $this->assertNotEmpty($latest_attempt, 'No latest attempt found for user'); + + $latest_attempt_missing = $report->get_latest_attempt_for_user(-1); + $this->assertEmpty($latest_attempt_missing, 'Latest attempt found for non-existing user'); + } + + /** + * Tests to retrieve existing and nonexisting attempts + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_attempt_exists() { + $rc = $this->prepareReferenceCourse(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); + + $this->assertTrue($report->attempt_exists($rc->attemptids[0]), 'Existing attempt not found'); + $this->assertFalse($report->attempt_exists(-1), 'Non-existing attempt found'); + } + + /** + * Tests conversion/sanitization of formdata to report section settings + * + * @return void + */ + public function test_build_report_sections_from_formdata() { + // Test all sections enabled + $formdata = self::getFormdataAllReportsSectionsEnabled(); + $sections = Report::build_report_sections_from_formdata($formdata); + $this->assertEquals(self::getAllReportSectionsEnabled(), $sections, 'Full formdata not correctly converted to report sections'); + + // Test removal of dependent sections + $formdata = self::getFormdataAllReportsSectionsEnabled(); + $formdata->export_report_section_question = 0; + $sections = Report::build_report_sections_from_formdata($formdata); + $this->assertEmpty($sections['question'], 'Root section not removed correctly'); + $this->assertEmpty($sections['question_feedback'], 'Dependent section question_feedback not removed correctly'); + $this->assertEmpty($sections['general_feedback'], 'Dependent section general_feedback not removed correctly'); + $this->assertEmpty($sections['rightanswer'], 'Dependent section rightanswer not removed correctly'); + $this->assertEmpty($sections['history'], 'Dependent section history not removed correctly'); + $this->assertEmpty($sections['attachments'], 'Dependent section attachments not removed correctly'); + + // Test removal of superfluous sections + $formdata = self::getFormdataAllReportsSectionsEnabled(); + $formdata->export_report_section_superfluous = 1; + $sections = Report::build_report_sections_from_formdata($formdata); + $this->assertEquals(self::getAllReportSectionsEnabled(), $sections, 'Superfluous section not removed correctly'); + } + } \ No newline at end of file From a55b4580658b91be7d70c5ce8324769ba256eb34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 13:43:52 +0200 Subject: [PATCH 047/185] Extend archive job tests --- tests/classes/ArchiveJob_test.php | 79 +++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/tests/classes/ArchiveJob_test.php b/tests/classes/ArchiveJob_test.php index 74ee6ec..927bb9f 100644 --- a/tests/classes/ArchiveJob_test.php +++ b/tests/classes/ArchiveJob_test.php @@ -204,12 +204,17 @@ public function test_delete_archive_job(): void { * @return void */ public function test_multiple_jobs_retrieval_and_metadata(): void { + global $DB; + $this->resetAfterTest(); + // Generate data $mocks = []; $jobs = []; + $artifacts = []; for ($quizIdx= 0; $quizIdx < 3; $quizIdx++) { $mocks[$quizIdx] = $this->generateMockQuiz(); for ($jobIdx = 0; $jobIdx < 3; $jobIdx++) { + // Create job $jobs[$quizIdx][$jobIdx] = ArchiveJob::create( '30000000-1234-5678-abcd-'.$quizIdx.'0000000000'.$jobIdx, $mocks[$quizIdx]->course->id, @@ -221,6 +226,27 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $mocks[$quizIdx]->attempts, $mocks[$quizIdx]->settings ); + + // Attach artifact + $artifacts[$quizIdx][$jobIdx] = $this->generateArtifactFile( + $mocks[$quizIdx]->course->id, + $mocks[$quizIdx]->quiz->cmid, + $mocks[$quizIdx]->quiz->id, + 'test'.$quizIdx.'-'.$jobIdx.'.tar.gz' + ); + $jobs[$quizIdx][$jobIdx]->link_artifact( + $artifacts[$quizIdx][$jobIdx]->get_id(), + hash('sha256', 'foo bar baz') + ); + + // Generate mock TSP data + $DB->insert_record(TSPManager::TSP_TABLE_NAME, [ + 'jobid' => $jobs[$quizIdx][$jobIdx]->get_id(), + 'timecreated' => time(), + 'server' => 'localhost', + 'timestampquery' => 'tspquery', + 'timestampreply' => 'tspreply', + ]); } } @@ -269,6 +295,21 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $this->assertSame($expectedJob->is_autodelete_enabled(), $actualJob['autodelete'], 'Autodelete was not detected as enabled'); $this->assertArrayHasKey('autodelete_str', $actualJob, 'Autodelete string was not generated correctly'); $this->assertSameSize($expectedJob->get_settings(), $actualJob['settings'], 'Settings were not returned correctly'); + + // Check that the artifact file metadata was returned correctly + $this->assertArrayHasKey('artifactfile', $actualJob, 'Artifact file metadata was not returned'); + $this->assertEquals($artifacts[$quizIdx][$jobIdx]->get_filename(), $actualJob['artifactfile']['name'], 'Artifact filename was not returned correctly'); + $this->assertEquals($artifacts[$quizIdx][$jobIdx]->get_filesize(), $actualJob['artifactfile']['size'], 'Artifact size was not returned correctly'); + $this->assertNotEmpty($actualJob['artifactfile']['downloadurl'], 'Artifact download URL was not returned'); + $this->assertNotEmpty($actualJob['artifactfile']['size_human'], 'Artifact size in human readable format was not returned'); + $this->assertEquals(hash('sha256', 'foo bar baz'), $actualJob['artifactfile']['checksum'], 'Artifact checksum was not returned correctly'); + + // Check that the TSP data was returned correctly + $this->assertArrayHasKey('tsp', $actualJob, 'TSP data was not returned'); + $this->assertEquals('localhost', $actualJob['tsp']['server'], 'TSP server was not returned correctly'); + $this->assertNotEmpty($actualJob['tsp']['timecreated'], 'TSP creation time was not returned'); + $this->assertNotEmpty($actualJob['tsp']['queryfiledownloadurl'], 'TSP queryfile download URL was not returned'); + $this->assertNotEmpty($actualJob['tsp']['replyfiledownloadurl'], 'TSP replyfile download URL was not returned'); } } } @@ -404,6 +445,44 @@ public function test_delete_webservice_token(): void { $this->assertEmpty($DB->get_record('external_tokens', ['token' => $wstoken]), 'Webservice token was not deleted correctly'); } + /** + * Test job timeout + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_job_timeout(): void { + // Prepare job + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '12300000-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + 1, + 'TEST-WS-TOKEN', + $mocks->attempts, + $mocks->settings, + ArchiveJob::STATUS_RUNNING, + ); + + // Not timed out job should not he set to timed out + $this->assertFalse($job->timeout_if_overdue(60), 'Job seems to have been set to timed out before timeout'); + $this->assertSame(ArchiveJob::STATUS_RUNNING, $job->get_status(), 'Job status was changed to timed out before timeout'); + + // Time out job + sleep(1); // Ensure that at least one second has passed + $this->assertTrue($job->timeout_if_overdue(0), 'Job seems to have not been set to timed out after timeout'); + $this->assertSame(ArchiveJob::STATUS_TIMEOUT, $job->get_status(), 'Job status was not changed to timed out after timeout'); + + // Do not timeout a finished job + $job->set_status(ArchiveJob::STATUS_FINISHED); + $this->assertFalse($job->timeout_if_overdue(0), 'Finished job seems to have been set to timed out'); + $this->assertSame(ArchiveJob::STATUS_FINISHED, $job->get_status(), 'Finished job was changed to timed out'); + } + /** * Tests the linking of an artifact file to a job * From 445449889885e1094f4afe6119cf51500ed2801c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 13:48:31 +0200 Subject: [PATCH 048/185] Check TSPManager::wants_tsp_timestamp during tests --- tests/classes/TSPManager_test.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/classes/TSPManager_test.php b/tests/classes/TSPManager_test.php index 5c5d76c..e07d254 100644 --- a/tests/classes/TSPManager_test.php +++ b/tests/classes/TSPManager_test.php @@ -162,6 +162,9 @@ public function test_tsp_timestamp(): void { // Ensure that artifact was not yet signed $this->assertFalse($job->TSPManager()->has_tsp_timestamp(), 'Artifact was detected as signed without it being signed'); + // Ensure that the artifact wants to be signed + $this->assertTrue($job->TSPManager()->wants_tsp_timestamp(), 'Artifact was not detected as wanting to be signed'); + // Try signing the artifact using TSP $tspManager = $this->createMockTSPManager($job); $tspManager->timestamp(); @@ -171,6 +174,9 @@ public function test_tsp_timestamp(): void { $this->assertEquals('tsp-dummy-query', $tspManager->get_tsp_data()->query, 'TSP query was not stored correctly'); $this->assertEquals('tsp-dummy-reply-0123456789abcdef', $tspManager->get_tsp_data()->reply, 'TSP reply was not stored correctly'); $this->assertEquals('localhost', $tspManager->get_tsp_data()->server, 'TSP server URL was not stored correctly'); + + // Ensure that the artifact does not want to be signed again + $this->assertFalse($job->TSPManager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed after it was signed'); } /** @@ -283,6 +289,9 @@ public function test_signing_disabled(): void { $sha256sum = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256sum); + // Check that the artifact does not want to be signed + $this->assertFalse($job->TSPManager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed while TSP is disabled'); + // Try signing the artifact using TSP $this->expectException(\Exception::class); $this->expectExceptionMessage(get_string('archive_signing_failed_tsp_disabled', 'quiz_archiver')); From 76fe303e55d7eda3a448405f329fd2dc04c7461a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 28 May 2024 14:26:09 +0200 Subject: [PATCH 049/185] Create tests for RemoteArchiveWorker and TimeStampProtocolClient classes --- tests/classes/RemoteArchiveWorker_test.php | 55 +++++++++++ .../classes/TimeStampProtocolClient_test.php | 92 +++++++++++++++++++ 2 files changed, 147 insertions(+) create mode 100644 tests/classes/RemoteArchiveWorker_test.php create mode 100644 tests/classes/TimeStampProtocolClient_test.php diff --git a/tests/classes/RemoteArchiveWorker_test.php b/tests/classes/RemoteArchiveWorker_test.php new file mode 100644 index 0000000..c3e8b49 --- /dev/null +++ b/tests/classes/RemoteArchiveWorker_test.php @@ -0,0 +1,55 @@ +. + +/** + * Tests for the RemoteArchiveWorker class + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver; + + +/** + * Tests for the RemoteArchiveWorker class + */ +class RemoteArchiveWorker_test extends \advanced_testcase { + + /** + * Test creation of request and interaction with the Moodle curl wrapper + * + * @return void + * @throws \dml_exception + */ + public function test_enqueue_archive_job_stub(): void { + $worker = new RemoteArchiveWorker('http://localhost:12345', 1, 1); + + $this->expectException(\UnexpectedValueException::class); + $this->expectExceptionMessageMatches('/archive worker response failed/'); + $worker->enqueue_archive_job( + 'invalid-wstoken', + -1, + -1, + -1, + [], + [], + [] + ); + } + +} \ No newline at end of file diff --git a/tests/classes/TimeStampProtocolClient_test.php b/tests/classes/TimeStampProtocolClient_test.php new file mode 100644 index 0000000..1f0ddd3 --- /dev/null +++ b/tests/classes/TimeStampProtocolClient_test.php @@ -0,0 +1,92 @@ +. + +/** + * Tests for the TimeStampProtocolClient class + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver; + + +/** + * Tests for the TimeStampProtocolClient class + */ +class TimeStampProtocolClient_test extends \advanced_testcase { + + /** + * Tests the creation of a TimeStampProtocolClient instance + * + * @return void + */ + public function test_creation(): void { + $client = new TimeStampProtocolClient('http://localhost:12345'); + $this->assertInstanceOf(TimeStampProtocolClient::class, $client); + $this->assertEquals('http://localhost:12345', $client->get_server_url()); + } + + /** + * Tests the generation of a nonce + * + * @return void + * @throws \Exception + */ + public function test_generate_nonce(): void { + $nonce = TimeStampProtocolClient::generateNonce(); + $this->assertNotEmpty($nonce, 'Nonce is empty'); + $this->assertSame(16, strlen($nonce), 'Nonce length is not 16 bytes'); + + for ($i = 0; $i < 100; $i++) { + $this->assertNotEquals( + $nonce, + TimeStampProtocolClient::generateNonce(), + 'Repeated calls to generate_nonce() return the same nonce' + ); + } + } + + /** + * Tests the generation of a TSP request from valid data + * + * @return void + * @throws \coding_exception + */ + public function test_signing_valid_data(): void { + $client = new TimeStampProtocolClient('http://localhost:12345'); + + $this->expectException(\Exception::class); + $this->expectExceptionMessageMatches('/'.get_string('tsp_client_error_curl', 'quiz_archiver', '').'/'); + $client->sign('6e82908cfa04dbf1706aa938e32f27e6a1d5f096df5c472795a93f8ab9de4c72'); + } + + /** + * Test the generation of a TSP request from invalid data + * + * @return void + * @throws \Exception + */ + public function test_signing_invalid_data(): void { + $client = new TimeStampProtocolClient('http://localhost:12345'); + + $this->expectException(\ValueError::class); + $this->expectExceptionMessageMatches('/Invalid hexadecimal SHA256 hash/'); + $client->sign('invalid-data'); + } + +} \ No newline at end of file From e54281a1149dc91ec15b1ff9950c5aa53e97df08 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 12:02:47 +0200 Subject: [PATCH 050/185] Create extensive FileManager tests --- classes/FileManager.php | 18 +- tests/classes/FileManager_test.php | 669 +++++++++++++++++++ tests/fixtures/referencequiz-artifact.tar.gz | Bin 0 -> 28376 bytes 3 files changed, 682 insertions(+), 5 deletions(-) create mode 100644 tests/classes/FileManager_test.php create mode 100644 tests/fixtures/referencequiz-artifact.tar.gz diff --git a/classes/FileManager.php b/classes/FileManager.php index 33355c5..5e3c0f8 100644 --- a/classes/FileManager.php +++ b/classes/FileManager.php @@ -272,8 +272,9 @@ protected function send_virtual_file_tsp(string $relativepath): void { } // Get requested data from DB - $job = ArchiveJob::get_by_id($jobid); - if (!$job) { + try { + $job = ArchiveJob::get_by_id($jobid); + } catch (\dml_exception $e) { throw new \InvalidArgumentException("Job with ID {$jobid} not found"); } @@ -313,6 +314,12 @@ protected function send_virtual_file_tsp(string $relativepath): void { header('Content-Length: '.strlen($filecontents)); echo $filecontents; ob_flush(); + + // Do not kill tests + if (PHPUNIT_TEST === true) { + return; + } + die; } @@ -369,12 +376,13 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in // All files must be given explicitly to tgz_packer::extract_to_pathname(). Wildcards // are unsupported. Therefore, we list the contents and filter the index. This reduces // space and time complexity compared to extracting the whole archive at once. - $attemptfiles = array_map( + $attemptfiles = array_unique(array_values(array_map( fn($file): string => $file->pathname, - array_filter($packer->list_files($artifactfile), function($file) use ($attemptpath) { + array_filter($packer->list_files($artifactfile), function ($file) use ($attemptpath) { return strpos($file->pathname, ltrim($attemptpath, '/')) === 0; }) - ); + ))); + if (!$packer->extract_to_pathname($artifactfile, $workdir."/attemptdata", $attemptfiles)) { throw new \moodle_exception('Failed to extract attempt data from artifact archive'); } diff --git a/tests/classes/FileManager_test.php b/tests/classes/FileManager_test.php new file mode 100644 index 0000000..d51618c --- /dev/null +++ b/tests/classes/FileManager_test.php @@ -0,0 +1,669 @@ +. + +/** + * Tests for the FileManager class + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver; + + +use context_user; + +/** + * Tests for the FileManager class + */ +class FileManager_test extends \advanced_testcase { + + /** + * Generates a mock quiz to use in the tests + * + * @return \stdClass Created mock objects + */ + protected function generateMockQuiz(): \stdClass { + // Create course, course module and quiz + $this->resetAfterTest(); + + // Prepare user and course + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $quiz = $this->getDataGenerator()->create_module('quiz', [ + 'course' => $course->id, + 'grade' => 100.0, + 'sumgrades' => 100 + ]); + + return (object) [ + 'user' => $user, + 'course' => $course, + 'quiz' => $quiz, + 'attempts' => [ + (object) ['userid' => 1, 'attemptid' => 1], + (object) ['userid' => 2, 'attemptid' => 42], + (object) ['userid' => 3, 'attemptid' => 1337], + ], + ]; + } + + /** + * Imports the reference quiz artifact from the test fixtures directory into + * the a Moodle stored_file residing inside a users draft filearea. + * + * @return \stored_file + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + protected function importReferenceQuizArtifact(): \stored_file { + $this->resetAfterTest(); + $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); + + return get_file_storage()->create_file_from_pathname([ + 'contextid' => $ctx->id, + 'component' => 'user', + 'filearea' => 'draft', + 'itemid' => 0, + 'filepath' => "/", + 'filename' => 'reference_quiz_artifact.tar.gz', + 'timecreated' => time(), + 'timemodified' => time(), + ], __DIR__.'/../fixtures/referencequiz-artifact.tar.gz'); + } + + /** + * Generates a dummy draft file, stored in the draft filearea of a user. + * + * @param string $filename Name of the file to create + * @param string $filearea Filearea to store the file in + * @return \stored_file The created file handle + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + protected function generateDraftFile(string $filename, string $filearea = 'draft'): \stored_file { + $this->resetAfterTest(); + $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); + + return get_file_storage()->create_file_from_string( + [ + 'contextid' => $ctx->id, + 'component' => 'user', + 'filearea' => $filearea, + 'itemid' => 0, + 'filepath' => "/", + 'filename' => $filename, + 'timecreated' => time(), + 'timemodified' => time(), + ], + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' + ); + } + + /** + * Generates a dummy file inside the temp filearea of this plugin. + * + * @param string $filename + * @param int $expiry + * @return \stored_file + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + protected function generateTempFile(string $filename, int $expiry): \stored_file { + $this->resetAfterTest(); + $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); + + return get_file_storage()->create_file_from_string( + [ + 'contextid' => $ctx->id, + 'component' => FileManager::COMPONENT_NAME, + 'filearea' => FileManager::TEMP_FILEAREA_NAME, + 'itemid' => 0, + 'filepath' => '/'.$expiry.'/', + 'filename' => $filename, + 'timecreated' => time(), + 'timemodified' => time(), + ], + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' + ); + } + + /** + * Tests the generation of file paths based on context data + * + * @dataProvider file_path_generator_data_provider + * + * @param int $courseid + * @param int $cmid + * @param int $quizid + * @param string $expectedPath + * @return void + */ + public function test_file_path_generator(int $courseid, int $cmid, int $quizid, string $expectedPath): void { + $this->assertEquals($expectedPath, FileManager::get_file_path($courseid, $cmid, $quizid)); + + } + + /** + * Data provider for test_file_path_generator + * + * @return array Test data for test_file_path_generator + */ + public function file_path_generator_data_provider(): array { + return [ + 'Full valid path' => [ + 1, + 2, + 3, + '/1/2/3/' + ], + 'Empty path' => [ + 0, + 0, + 0, + '/' + ], + 'Only course' => [ + 1, + 0, + 0, + '/1/' + ], + 'Only course and cm' => [ + 1, + 2, + 0, + '/1/2/' + ], + 'Only course and quiz' => [ + 1, + 0, + 3, + '/1/' + ], + 'Only cm' => [ + 0, + 2, + 0, + '/' + ], + 'Only cm and quiz' => [ + 0, + 2, + 3, + '/' + ], + 'Only quiz' => [ + 0, + 0, + 3, + '/' + ], + ]; + } + + /** + * Test artifact storing and retrieval + * + * @return void + * @throws \coding_exception + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_artifact_storing(): void { + $mocks = $this->generateMockQuiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $draftfile = $this->generateDraftFile('testfile.tar.gz'); + $draftfilehash = $draftfile->get_contenthash(); + + // Store draftfile as artifact + $storedfile = $fm->store_uploaded_artifact($draftfile); + $this->assertInstanceOf(\stored_file::class, $storedfile, 'Invalid storage handle returned'); + $this->assertEquals($draftfilehash, $storedfile->get_contenthash(), 'Stored file hash does not match draft file hash'); + $this->assertEmpty(get_file_storage()->get_file_by_id($draftfile->get_id()), 'Draft file was deleted'); + + // Retrieve artifact + $storedfiles = $fm->get_stored_artifacts(); + $this->assertEquals($storedfile, array_shift($storedfiles), 'Stored file handle does not match retrieved file handle'); + } + + /** + * Test that only uploaded draftfiles are stored and others are rejected + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_artifact_storing_invalid_file(): void { + $mocks = $this->generateMockQuiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $invalidFile = $this->generateDraftFile('invalidfile.tar.gz', 'invalidarea'); + + $this->expectException(\file_exception::class); + $this->expectExceptionMessageMatches('/draftfile/'); + $fm->store_uploaded_artifact($invalidFile); + } + + /** + * Tests the hash generation for a valid stored_file + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_hash_valid_file(): void { + $file = $this->generateDraftFile('testartifact.tar.gz'); + $defaulthash = FileManager::hash_file($file); + $this->assertNotEmpty($defaulthash, 'Default hash is empty'); + $this->assertSame(64, strlen($defaulthash), 'Default hash length is not 64 bytes, as expected from SHA256'); + + $sha256hash = FileManager::hash_file($file, 'sha256'); + $this->assertEquals($defaulthash, $sha256hash, 'Explicitly as SHA256 selected hash does not match default hash'); + } + + /** + * Tests hash generation using an invalid hash algorithm + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_hash_file_invalid_algorithm(): void { + $file = $this->generateDraftFile('testartifact.tar.gz'); + $this->assertNull(FileManager::hash_file($file, 'invalid-algorithm'), 'Invalid algorithm did not return null'); + } + + /** + * Tests sending a TSP query as a virtual file + * + * @runInSeparateProcess + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_send_virtual_file_tsp_query(): void { + global $DB; + + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '00000000000000000000000001', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_FINISHED + ); + + // Generate mock TSP data + $DB->insert_record(TSPManager::TSP_TABLE_NAME, [ + 'jobid' => $job->get_id(), + 'timecreated' => time(), + 'server' => 'localhost', + 'timestampquery' => 'tspquery1', + 'timestampreply' => 'tspreply1', + ]); + + // Try to send file + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $fm->send_virtual_file( + FileManager::TSP_DATA_FILEAREA_NAME, + "/{$mocks->course->id}/{$mocks->quiz->cmid}/{$mocks->quiz->id}/{$job->get_id()}/".FileManager::TSP_DATA_QUERY_FILENAME + ); + } + + /** + * Tests sending a TSP reply as a virtual file + * + * @runInSeparateProcess + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_send_virtual_file_tsp_reply(): void { + global $DB; + + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '00000000000000000000000002', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_FINISHED + ); + + // Generate mock TSP data + $DB->insert_record(TSPManager::TSP_TABLE_NAME, [ + 'jobid' => $job->get_id(), + 'timecreated' => time(), + 'server' => 'localhost', + 'timestampquery' => 'tspquery2', + 'timestampreply' => 'tspreply2', + ]); + + // Try to send file + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $fm->send_virtual_file( + FileManager::TSP_DATA_FILEAREA_NAME, + "/{$mocks->course->id}/{$mocks->quiz->cmid}/{$mocks->quiz->id}/{$job->get_id()}/".FileManager::TSP_DATA_REPLY_FILENAME + ); + } + + /** + * Tests sending a virtual TSP file for a relativepath that does not match + * the information of the respective job. + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_send_virtual_files_tsp_invalid_job(): void { + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '00000000000000000000000003', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_UNKNOWN + ); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Test invalid job + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/resource id/'); + $fm->send_virtual_file( + FileManager::TSP_DATA_FILEAREA_NAME, + "/{$mocks->course->id}/{$mocks->quiz->cmid}/0/{$job->get_id()}/".FileManager::TSP_DATA_REPLY_FILENAME + ); + } + + /** + * Tests sending a virtual TSP file for a job that has no TSP data. + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_send_virtual_files_tsp_unsigned_job(): void { + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '00000000000000000000000004', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_FINISHED + ); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Test unsigned job + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/No TSP data found/'); + $fm->send_virtual_file( + FileManager::TSP_DATA_FILEAREA_NAME, + "/{$mocks->course->id}/{$mocks->quiz->cmid}/{$mocks->quiz->id}/{$job->get_id()}/".FileManager::TSP_DATA_REPLY_FILENAME + ); + } + + /** + * Tests sending virtual file from invalid filearea. + * + * @return void + * @throws \dml_exception + */ + public function test_send_virtual_files_invalid_filearea(): void { + $mocks = $this->generateMockQuiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Test invalid filearea + $this->expectException(\InvalidArgumentException::class); + $fm->send_virtual_file('invalid', '/invalid'); + } + + /** + * Tests sending virtual file from invalid path. + * + * @return void + * @throws \dml_exception + */ + public function test_send_virtual_files_invalid_path(): void { + $mocks = $this->generateMockQuiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Test invalid path + $this->expectException(\InvalidArgumentException::class); + $fm->send_virtual_file(FileManager::TSP_DATA_FILEAREA_NAME, '../../42/secrets'); + } + + /** + * Tests sending virtual file with invalid jobid. + * + * @return void + * @throws \dml_exception + */ + public function test_send_virtual_files_invalid_jobid(): void { + $mocks = $this->generateMockQuiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Test invalid job-id + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/jobid/'); + $fm->send_virtual_file( + FileManager::TSP_DATA_FILEAREA_NAME, + '/0/0/0/invalidjobid/'.FileManager::TSP_DATA_REPLY_FILENAME + ); + } + + /** + * Tests sending virtual file for non-existing job. + * + * @return void + * @throws \dml_exception + */ + public function test_send_virtual_files_missing_job(): void { + $mocks = $this->generateMockQuiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Test missing job + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/not found/'); + $fm->send_virtual_file( + FileManager::TSP_DATA_FILEAREA_NAME, + '/1/2/3/9999999/'.FileManager::TSP_DATA_REPLY_FILENAME + ); + } + + /** + * Tests sending virtual file with invalid filename. + * + * @return void + * @throws \dml_exception + */ + public function test_send_virtual_files_invalid_filename(): void { + $mocks = $this->generateMockQuiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Test missing job + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessageMatches('/Invalid filename/'); + $fm->send_virtual_file(FileManager::TSP_DATA_FILEAREA_NAME, '/0/0/0/0/secrets'); + } + + /** + * Test extracting the data of a single attempt from a job artifact file. + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \file_exception + * @throws \moodle_exception + * @throws \stored_file_creation_exception + */ + public function test_extract_attempt_data_from_artifact(): void { + // Prepare a finished archive job that has a valid artifact file + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '00000000000000000000000042', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_FINISHED + ); + + $draftArtifact = $this->importReferenceQuizArtifact(); + $attemptid = 13775; + + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $fm->store_uploaded_artifact($draftArtifact); + $storedArtifacts = $fm->get_stored_artifacts(); + $storedArtifact = array_shift($storedArtifacts); + + // Extract userdata from artifact into temporary stored_file + $tempfile = $fm->extract_attempt_data_from_artifact($storedArtifact, $job->get_id(), $attemptid); + $this->assertNotEmpty($tempfile, 'No temp file was returned'); + $this->assertNotEmpty($tempfile->get_contenthash(), 'Temp file has no valid content hash'); + $this->assertTrue($tempfile->get_filesize() > 1024, 'Temp file is too small to be valid'); + } + + /** + * Test extracting a non-existing attempt from an artifact file. + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \file_exception + * @throws \moodle_exception + * @throws \stored_file_creation_exception + */ + public function test_extract_attempt_data_for_nonexisting_attemptid(): void { + // Prepare a finished archive job that has a valid artifact file + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '00000000000000000000000021', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_FINISHED + ); + $draftArtifact = $this->importReferenceQuizArtifact(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $fm->store_uploaded_artifact($draftArtifact); + $storedArtifacts = $fm->get_stored_artifacts(); + $storedArtifact = array_shift($storedArtifacts); + + // Extract userdata from artifact into temporary stored_file + $this->expectException(\moodle_exception::class); + $this->expectExceptionMessageMatches('/Attempt not found/'); + $fm->extract_attempt_data_from_artifact($storedArtifact, $job->get_id(), 0); + } + + /** + * Test extracting userdata from an invalid artifact file. + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \file_exception + * @throws \moodle_exception + * @throws \stored_file_creation_exception + */ + public function test_extract_attempt_data_from_invalid_artifact(): void { + // Prepare an unfinished archive job that has no artifact file + $mocks = $this->generateMockQuiz(); + $job = ArchiveJob::create( + '00000000000000000000000043', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_RUNNING + ); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + + // Attempt to extract data from nonexisting artifact + $this->expectException(\moodle_exception::class); + $this->expectExceptionMessageMatches('/Error processing archive file/'); + $fm->extract_attempt_data_from_artifact($this->generateDraftFile('not-an-artifact.tar.gz'), $job->get_id(), 1337); + } + + /** + * Tests cleanup of temporary files produced by the attempt data extraction routine. + * + * @return void + * @throws \dml_exception + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_cleanup_temp_files(): void { + // Prepare tempfiles + $overdueTempfiles = [ + $this->generateTempFile('tempfile1.tar.gz', 0), + $this->generateTempFile('tempfile2.tar.gz', 0), + $this->generateTempFile('tempfile3.tar.gz', 0), + ]; + $activeTempfiles = [ + $this->generateTempFile('tempfile4.tar.gz', time() + 3600), + $this->generateTempFile('tempfile5.tar.gz', time() + 3600), + $this->generateTempFile('tempfile6.tar.gz', time() + 3600), + ]; + + // Perform cleanup + FileManager::cleanup_temp_files(); + + foreach ($overdueTempfiles as $file) { + $this->assertEmpty(get_file_storage()->get_file_by_id($file->get_id()), 'Temp file was not deleted'); + } + + foreach ($activeTempfiles as $file) { + $this->assertNotEmpty(get_file_storage()->get_file_by_id($file->get_id()), 'Active temp file was falsely deleted'); + } + } + +} \ No newline at end of file diff --git a/tests/fixtures/referencequiz-artifact.tar.gz b/tests/fixtures/referencequiz-artifact.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..f8b63dcbe16e23a9c0d872101c2cf5f4ec985d46 GIT binary patch literal 28376 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 literal 0 HcmV?d00001 From 2edf5f405e8abd4eb48c2397a9114fa04a72d894 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 12:03:02 +0200 Subject: [PATCH 051/185] Create extensive BackupManager tests --- classes/BackupManager.php | 18 ++ tests/classes/BackupManager_test.php | 370 +++++++++++++++++++++++++++ 2 files changed, 388 insertions(+) create mode 100644 tests/classes/BackupManager_test.php diff --git a/classes/BackupManager.php b/classes/BackupManager.php index b1de358..8bfec2c 100644 --- a/classes/BackupManager.php +++ b/classes/BackupManager.php @@ -113,6 +113,15 @@ public function get_status(): int { return $DB->get_record('backup_controllers', ['id' => $this->backup_metadata->id], 'status')->status; } + /** + * Retrieves the backupid of this instance + * + * @return string Backup ID + */ + public function get_backupid(): string { + return $this->backup_metadata->backupid; + } + /** * Retrieves the type of this backup controller * @@ -122,6 +131,15 @@ public function get_type(): string { return $this->backup_metadata->type; } + /** + * Retrieves the ID of the user that initiated this backup + * + * @return int User-ID of the backup initiator + */ + public function get_userid(): int { + return $this->backup_metadata->userid; + } + /** * Determines if this BackupManager is associated with the given ArchiveJob * diff --git a/tests/classes/BackupManager_test.php b/tests/classes/BackupManager_test.php new file mode 100644 index 0000000..4c0a4a2 --- /dev/null +++ b/tests/classes/BackupManager_test.php @@ -0,0 +1,370 @@ +. + +/** + * Tests for the BackupManager class + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver; + + +use backup; +use context_course; +use context_module; + +/** + * Tests for the BackupManager class + */ +class BackupManager_test extends \advanced_testcase { + + /** + * Generates a mock quiz to use in the tests + * + * @return \stdClass Created mock objects + */ + protected function generateMockQuiz(): \stdClass { + // Create course, course module and quiz + $this->resetAfterTest(); + + // Prepare user and course + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $quiz = $this->getDataGenerator()->create_module('quiz', [ + 'course' => $course->id, + 'grade' => 100.0, + 'sumgrades' => 100 + ]); + + return (object) [ + 'user' => $user, + 'course' => $course, + 'quiz' => $quiz, + 'attempts' => [ + (object) ['userid' => 1, 'attemptid' => 1], + (object) ['userid' => 2, 'attemptid' => 42], + (object) ['userid' => 3, 'attemptid' => 1337], + ], + 'settings' => [ + 'num_attempts' => 3, + 'export_attempts' => 1, + 'export_report_section_header' => 1, + 'export_report_section_quiz_feedback' => 1, + 'export_report_section_question' => 1, + 'export_report_section_question_feedback' => 0, + 'export_report_section_general_feedback' => 1, + 'export_report_section_rightanswer' => 0, + 'export_report_section_history' => 1, + 'export_report_section_attachments' => 1, + 'export_quiz_backup' => 1, + 'export_course_backup' => 0, + 'archive_autodelete' => 1, + 'archive_retention_time' => '42w', + ], + ]; + } + + /** + * Tests the backup of a course + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_course_backup(): void { + // Initiate a mock course backup + $this->setAdminUser(); + $mock = $this->generateMockQuiz(); + $mock->user = get_admin(); + $backup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + + // Check if the backup was created correctly + $this->assertNotEmpty($backup, 'Backup was not created'); + $this->assertNotEmpty($backup->backupid, 'Backup ID was not set'); + $this->assertEquals($mock->user->id, $backup->userid, 'User ID was not set correctly'); + $this->assertSame(context_course::instance($mock->course->id)->id, $backup->context, 'Context ID was not set correctly'); + $this->assertSame('backup', $backup->component, 'Component was not set correctly'); + $this->assertSame(backup::TYPE_1COURSE, $backup->filearea, 'File area was not set correctly'); + $this->assertNotEmpty($backup->filepath, 'File path was not set'); + $this->assertStringEndsWith('.mbz', $backup->filename, 'File name was not set'); + $this->assertNotEmpty($backup->pathnamehash, 'Path name hash was not set'); + $this->assertStringStartsWith('http', $backup->file_download_url, 'Download URL was not set'); + } + + /** + * Tests the backup of a quiz + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_quiz_backup(): void { + // Initiate a mock course backup + $this->setAdminUser(); + $mock = $this->generateMockQuiz(); + $mock->user = get_admin(); + $backup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + + // Check if the backup was created correctly + $this->assertNotEmpty($backup, 'Backup was not created'); + $this->assertNotEmpty($backup->backupid, 'Backup ID was not set'); + $this->assertEquals($mock->user->id, $backup->userid, 'User ID was not set correctly'); + $this->assertSame(context_module::instance($mock->quiz->cmid)->id, $backup->context, 'Context ID was not set correctly'); + $this->assertSame('backup', $backup->component, 'Component was not set correctly'); + $this->assertSame(backup::TYPE_1ACTIVITY, $backup->filearea, 'File area was not set correctly'); + $this->assertNotEmpty($backup->filepath, 'File path was not set'); + $this->assertStringEndsWith('.mbz', $backup->filename, 'File name was not set'); + $this->assertNotEmpty($backup->pathnamehash, 'Path name hash was not set'); + $this->assertStringStartsWith('http', $backup->file_download_url, 'Download URL was not set'); + } + + /** + * Tests the backup of a non-existing course + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_backup_missing_course(): void { + $this->resetAfterTest(); + $this->setAdminUser(); + + $this->expectException(\dml_exception::class); + BackupManager::initiate_course_backup(-1, get_admin()->id); + } + + /** + * Tests the backup of a non-existing quiz + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_backup_missing_quiz(): void { + $this->resetAfterTest(); + $this->setAdminUser(); + + $this->expectException(\dml_exception::class); + BackupManager::initiate_quiz_backup(-1, get_admin()->id); + } + + /** + * Tests backing up a course without the required privileges + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_backup_course_without_privileges(): void { + $mocks = $this->generateMockQuiz(); + + $this->expectException(\backup_controller_exception::class); + $this->expectExceptionMessageMatches('/backup_user_missing_capability/'); + BackupManager::initiate_course_backup($mocks->course->id, $mocks->user->id); + } + + /** + * Tests backing up a quiz without the required privileges + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_backup_quiz_without_privileges(): void { + $mocks = $this->generateMockQuiz(); + + $this->expectException(\backup_controller_exception::class); + $this->expectExceptionMessageMatches('/backup_user_missing_capability/'); + BackupManager::initiate_quiz_backup($mocks->quiz->cmid, $mocks->user->id); + } + + /** + * Tests the download URL generation with an explicitly given internal_wwwroot + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_backup_download_url_generation_with_internal_wwwroot(): void { + $this->setAdminUser(); + $mock = $this->generateMockQuiz(); + $mock->user = get_admin(); + set_config('internal_wwwroot', 'http://my-internal-hostname', 'quiz_archiver'); + + $backup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $this->assertStringContainsString( + 'http://my-internal-hostname', + $backup->file_download_url, + 'Download URL was not generated correctly when using internal_wwwroot config' + ); + } + + /** + * Tests BackupManager instantiation by backupid + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_initialization_by_existing_backupid(): void { + // Prepare a course and a quiz backup + $this->setAdminUser(); + $mock = $this->generateMockQuiz(); + $mock->user = get_admin(); + $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + + // Course backup + $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); + $this->assertNotEmpty($actualCourseBackup, 'Course backup was not created correctly from backup ID'); + $this->assertEquals($expectedCourseBackup->backupid, $actualCourseBackup->get_backupid(), 'Course backup ID was not set correctly'); + $this->assertEquals($expectedCourseBackup->userid, $actualCourseBackup->get_userid(), 'Course user ID was not set correctly'); + $this->assertSame(backup::TYPE_1COURSE, $actualCourseBackup->get_type(), 'Course backup type was not set correctly'); + + // Quiz backup + $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); + $this->assertNotEmpty($actualQuizBackup, 'Quiz backup was not created correctly from backup ID'); + $this->assertEquals($expectedQuizBackup->backupid, $actualQuizBackup->get_backupid(), 'Quiz backup ID was not set correctly'); + $this->assertEquals($expectedQuizBackup->userid, $actualQuizBackup->get_userid(), 'Quiz user ID was not set correctly'); + $this->assertSame(backup::TYPE_1ACTIVITY, $actualQuizBackup->get_type(), 'Quiz backup type was not set correctly'); + } + + /** + * Tests BackupManager instantiation by non-existing backupid + * + * @return void + * @throws \dml_exception + */ + public function test_initialization_by_non_existing_backupid(): void { + $this->expectException(\dml_exception::class); + new BackupManager(-1); + } + + /** + * Tests access to backup status values + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + */ + public function test_backup_status(): void { + // Prepare a course and a quiz backup + $this->setAdminUser(); + $mock = $this->generateMockQuiz(); + $mock->user = get_admin(); + $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + + // Course backup + $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); + $this->assertSame(backup::TYPE_1COURSE, $actualCourseBackup->get_type(), 'Course backup type was not retrieved correctly'); + $actualCourseBackup->is_finished_successfully(); + $actualCourseBackup->is_failed(); + + // Quiz backup + $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); + $this->assertSame(backup::TYPE_1ACTIVITY, $actualQuizBackup->get_type(), 'Quiz backup type was not retrieved correctly'); + $actualQuizBackup->is_finished_successfully(); + $actualQuizBackup->is_failed(); + } + + /** + * Tests backup to job association detection + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_backup_job_association(): void { + // Prepare a course and a quiz backup + $this->setAdminUser(); + $mock = $this->generateMockQuiz(); + $mock->user = get_admin(); + $job = ArchiveJob::create( + '90000000-1234-5678-abcd-ef4242424242', + $mock->course->id, + $mock->quiz->cmid, + $mock->quiz->id, + $mock->user->id, + null, + 'TEST-WS-TOKEN-1', + $mock->attempts, + $mock->settings + ); + $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + + // Course backup + $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); + $this->assertTrue($actualCourseBackup->is_associated_with_job($job), 'Course backup was not detected as associated with the given job'); + + // Quiz backup + $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); + $this->assertTrue($actualQuizBackup->is_associated_with_job($job), 'Quiz backup was not detected as associated with the given job'); + } + + /** + * Tests backup to job association detection with an invalid job + * + * @return void + * @throws \base_setting_exception + * @throws \base_task_exception + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_backup_invalid_job_association(): void { + // Prepare a course and a quiz backup + $this->setAdminUser(); + $mock = $this->generateMockQuiz(); + $mock->user = get_admin(); + $job = ArchiveJob::create( + '10000000-1234-5678-abcd-ef4242424242', + $mock->course->id + 1, + $mock->quiz->cmid + 1, + $mock->quiz->id + 1, + $mock->user->id, + null, + 'TEST-WS-TOKEN-2', + $mock->attempts, + $mock->settings + ); + $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + + // Course backup + $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); + $this->assertFalse($actualCourseBackup->is_associated_with_job($job), 'Course backup was detected as associated with an unrelated job'); + + // Quiz backup + $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); + $this->assertFalse($actualQuizBackup->is_associated_with_job($job), 'Quiz backup was detected as associated with an unrelated job'); + } + +} \ No newline at end of file From 2b1a4149360ca7939a1705cbbd0c23bb739fd5a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 13:00:44 +0200 Subject: [PATCH 052/185] Add tests for archive filename generation and job status value conversion --- tests/classes/ArchiveJob_test.php | 138 ++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) diff --git a/tests/classes/ArchiveJob_test.php b/tests/classes/ArchiveJob_test.php index 927bb9f..5c1257c 100644 --- a/tests/classes/ArchiveJob_test.php +++ b/tests/classes/ArchiveJob_test.php @@ -25,6 +25,7 @@ namespace quiz_archiver; use context_course; +use context_module; use context_system; /** @@ -832,4 +833,141 @@ function ($carry, $item) { ]; } + /** + * Test generation of valid archive filenames + * + * @return void + * @throws \coding_exception + * @throws \invalid_parameter_exception + */ + public function test_generate_archive_filename(): void { + // Generate data + $mocks = $this->generateMockQuiz(); + $cm = context_module::instance($mocks->quiz->cmid); + + // Full pattern + $fullPattern = 'archive'; + foreach (ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES as $var) { + $fullPattern .= '-${'.$var.'}'; + } + $filename = ArchiveJob::generate_archive_filename( + $mocks->course, + $cm, + $mocks->quiz, + $fullPattern + ); + $this->assertStringContainsString($mocks->course->id, $filename, 'Course ID was not found in filename'); + $this->assertStringContainsString($cm->id, $filename, 'Course module ID was not found in filename'); + $this->assertStringContainsString($mocks->quiz->id, $filename, 'Quiz ID was not found in filename'); + $this->assertStringContainsString($mocks->course->fullname, $filename, 'Course name was not found in filename'); + $this->assertStringContainsString($mocks->course->shortname, $filename, 'Course shortname was not found in filename'); + $this->assertStringContainsString($mocks->quiz->name, $filename, 'Quiz name was not found in filename'); + } + + /** + * Test generation of archive filenames without variables + * + * @return void + * @throws \coding_exception + * @throws \invalid_parameter_exception + */ + public function test_generate_archive_filename_without_variables(): void { + // Generate data + $mocks = $this->generateMockQuiz(); + $cm = context_module::instance($mocks->quiz->cmid); + + // Full pattern + $filename = ArchiveJob::generate_archive_filename( + $mocks->course, + $cm, + $mocks->quiz, + 'archive' + ); + $this->assertSame('archive', $filename, 'Filename was not generated correctly'); + } + + /** + * Test generation of archive filenames with invalid patterns + * + * @return void + * @throws \coding_exception + * @throws \invalid_parameter_exception + */ + public function test_generate_archive_filename_invalid_pattern(): void { + // Generate data + $mocks = $this->generateMockQuiz(); + $cm = context_module::instance($mocks->quiz->cmid); + + // Test filename generation + $this->expectException(\invalid_parameter_exception::class); + ArchiveJob::generate_archive_filename( + $mocks->course, + $cm, + $mocks->quiz, + '.' + ); + } + + /** + * Test generation of archive filenames with invalid variables + * + * @return void + * @throws \coding_exception + * @throws \invalid_parameter_exception + */ + public function test_generate_archive_filename_invalid_variables(): void { + // Generate data + $mocks = $this->generateMockQuiz(); + $cm = context_module::instance($mocks->quiz->cmid); + + // Test filename generation + $this->expectException(\invalid_parameter_exception::class); + $filename = ArchiveJob::generate_archive_filename( + $mocks->course, + $cm, + $mocks->quiz, + 'archive-${foo}${bar}${baz}${courseid}' + ); + } + + /** + * Test retrieval of human-readable job status + * + * @dataProvider status_display_args_data_provider + * + * @param string $status + * @return void + * @throws \coding_exception + */ + public function test_status_display_args(string $status): void { + $res = ArchiveJob::get_status_display_args($status); + $this->assertSame( + get_string('job_status_'.$status, 'quiz_archiver'), + $res['text'], + 'Status display args were not returned correctly for status: '.$status + ); + $this->assertNotEmpty( + $res['color'], + 'Status display args did not contain a color for status: '.$status + ); + } + + /** + * Data provider for test_status_display_args() + * + * @return array List of job status values to test + */ + public function status_display_args_data_provider(): array { + return [ + ArchiveJob::STATUS_UNKNOWN => ['status' => ArchiveJob::STATUS_UNKNOWN], + ArchiveJob::STATUS_UNINITIALIZED => ['status' => ArchiveJob::STATUS_UNINITIALIZED], + ArchiveJob::STATUS_AWAITING_PROCESSING => ['status' => ArchiveJob::STATUS_AWAITING_PROCESSING], + ArchiveJob::STATUS_RUNNING => ['status' => ArchiveJob::STATUS_RUNNING], + ArchiveJob::STATUS_FINISHED => ['status' => ArchiveJob::STATUS_FINISHED], + ArchiveJob::STATUS_FAILED => ['status' => ArchiveJob::STATUS_FAILED], + ArchiveJob::STATUS_TIMEOUT => ['status' => ArchiveJob::STATUS_TIMEOUT], + ArchiveJob::STATUS_DELETED => ['status' => ArchiveJob::STATUS_DELETED], + ]; + } + } \ No newline at end of file From bf9af87cce7bcbaa5684395ee238b9d5187b11d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 14:08:34 +0200 Subject: [PATCH 053/185] Fix autoinstall admin UI form for Moodle 4.1 (LTS) --- adminui/autoinstall.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index 49e8fc6..5f38dab 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -57,8 +57,8 @@ if ($form->is_cancelled()) { // Cancelled - echo $OUTPUT->paragraph(get_string('autoinstall_cancelled', 'quiz_archiver')); - echo $OUTPUT->paragraph($returnlink); + echo '

'.get_string('autoinstall_cancelled', 'quiz_archiver').'

'; + echo '

'.$returnlink.'

'; } else if ($data = $form->get_data()) { // Perform autoinstall list($success, $log) = autoinstall::execute( @@ -69,25 +69,25 @@ ); // Show result - echo $OUTPUT->paragraph(get_string('autoinstall_started', 'quiz_archiver')); - echo $OUTPUT->paragraph(get_string('logs')); + echo '

'.get_string('autoinstall_started', 'quiz_archiver').'

'; + echo '

'.get_string('logs').'

'; echo "
{$log}

"; if ($success) { - echo $OUTPUT->paragraph(get_string('autoinstall_success', 'quiz_archiver')); + echo '

'.get_string('autoinstall_success', 'quiz_archiver').'

'; } else { - echo $OUTPUT->paragraph(get_string('autoinstall_failure', 'quiz_archiver')); + echo '

'.get_string('autoinstall_failure', 'quiz_archiver').'

'; } - echo $OUTPUT->paragraph($returnlink); + echo '

'.$returnlink.'

'; } else { - echo $OUTPUT->paragraph(get_string('autoinstall_explanation', 'quiz_archiver')); - echo $OUTPUT->paragraph(get_string('autoinstall_explanation_details', 'quiz_archiver')); + echo '

'.get_string('autoinstall_explanation', 'quiz_archiver').'

'; + echo '

'.get_string('autoinstall_explanation_details', 'quiz_archiver').'

'; $form->display(); } } else { - echo $OUTPUT->paragraph(get_string('autoinstall_already_configured_long', 'quiz_archiver')); - echo $OUTPUT->paragraph($returnlink); + echo '

'.get_string('autoinstall_already_configured_long', 'quiz_archiver').'

'; + echo '

'.$returnlink.'

'; } // End page From d1803873761d03c211002b6849fdff692a2b24ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 14:09:32 +0200 Subject: [PATCH 054/185] Adjust tests to be compatible with older PHPUnit versions and Moodle 4.1 (LTS) --- TESTING.md | 2 +- classes/Report.php | 3 +++ tests/classes/FileManager_test.php | 12 ++++++++++-- tests/classes/Report_test.php | 21 ++++++++++++--------- tests/fixtures/referencequiz.mbz | Bin 17789 -> 16769 bytes 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/TESTING.md b/TESTING.md index e2d8716..b2b5014 100644 --- a/TESTING.md +++ b/TESTING.md @@ -26,7 +26,7 @@ See: https://moodledev.io/general/development/tools/phpunit ``` 4. Bootstrap test environment: ```bash - php admin/tool/phpunit/cli/init.php + php admin/tool/phpunit/cli/init.php --disable-composer ``` diff --git a/classes/Report.php b/classes/Report.php index ec8948b..cfb1a48 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -29,6 +29,9 @@ defined('MOODLE_INTERNAL') || die(); +// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); + require_once("$CFG->dirroot/mod/quiz/locallib.php"); // Required for legacy mod_quiz functions ... diff --git a/tests/classes/FileManager_test.php b/tests/classes/FileManager_test.php index d51618c..eb683ad 100644 --- a/tests/classes/FileManager_test.php +++ b/tests/classes/FileManager_test.php @@ -297,7 +297,11 @@ public function test_hash_file_invalid_algorithm(): void { * @throws \moodle_exception */ public function test_send_virtual_file_tsp_query(): void { - global $DB; + global $CFG, $DB; + + if ($CFG->branch < 404) { + $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); + } $mocks = $this->generateMockQuiz(); $job = ArchiveJob::create( @@ -340,7 +344,11 @@ public function test_send_virtual_file_tsp_query(): void { * @throws \moodle_exception */ public function test_send_virtual_file_tsp_reply(): void { - global $DB; + global $CFG, $DB; + + if ($CFG->branch < 404) { + $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); + } $mocks = $this->generateMockQuiz(); $job = ArchiveJob::create( diff --git a/tests/classes/Report_test.php b/tests/classes/Report_test.php index 2b0163a..b503b4a 100644 --- a/tests/classes/Report_test.php +++ b/tests/classes/Report_test.php @@ -26,6 +26,8 @@ global $CFG; +use backup; + require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php'); @@ -92,6 +94,7 @@ protected function prepareReferenceCourse(): \stdClass { $this->assertTrue($rc->execute_precheck()); $rc->execute_plan(); + $this->assertSame(backup::STATUS_FINISHED_OK, $rc->get_status(), 'Restore of reference course failed.'); // 2024-05-14: Do not destroy restore_controller. This will drop temptables without removing them from // $DB->temptables properly, causing DB reset to fail in subsequent tests due to missing tables. Destroying the @@ -493,15 +496,15 @@ public function test_get_attempts_metadata() { $this->assertCount(count($rc->attemptids), $attempts, 'Incorrect number of attempts found without filters set'); $attempt = array_shift($attempts); - $this->assertObjectHasProperty('attemptid', $attempt, 'Attempt metadata does not contain attemptid'); - $this->assertObjectHasProperty('userid', $attempt, 'Attempt metadata does not contain userid'); - $this->assertObjectHasProperty('attempt', $attempt, 'Attempt metadata does not contain attempt'); - $this->assertObjectHasProperty('state', $attempt, 'Attempt metadata does not contain state'); - $this->assertObjectHasProperty('timestart', $attempt, 'Attempt metadata does not contain timestart'); - $this->assertObjectHasProperty('timefinish', $attempt, 'Attempt metadata does not contain timefinish'); - $this->assertObjectHasProperty('username', $attempt, 'Attempt metadata does not contain username'); - $this->assertObjectHasProperty('firstname', $attempt, 'Attempt metadata does not contain firstname'); - $this->assertObjectHasProperty('lastname', $attempt, 'Attempt metadata does not contain lastname'); + $this->assertNotEmpty($attempt->attemptid, 'Attempt metadata does not contain attemptid'); + $this->assertNotEmpty($attempt->userid, 'Attempt metadata does not contain userid'); + $this->assertNotEmpty($attempt->attempt, 'Attempt metadata does not contain attempt'); + $this->assertNotEmpty($attempt->state, 'Attempt metadata does not contain state'); + $this->assertNotEmpty($attempt->timestart, 'Attempt metadata does not contain timestart'); + $this->assertNotEmpty($attempt->timefinish, 'Attempt metadata does not contain timefinish'); + $this->assertNotEmpty($attempt->username, 'Attempt metadata does not contain username'); + $this->assertNotEmpty($attempt->firstname, 'Attempt metadata does not contain firstname'); + $this->assertNotEmpty($attempt->lastname, 'Attempt metadata does not contain lastname'); // Test filtered $attempts_filtered_existing = $report->get_attempts_metadata($rc->attemptids); diff --git a/tests/fixtures/referencequiz.mbz b/tests/fixtures/referencequiz.mbz index a322717375c9b39a7e5b44376e4b7f1b7f66c122..baa04cd9c096ea5d3240d63c5cc497f4c44c5ff7 100644 GIT binary patch literal 16769 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 IaR77z0M#=rqyPW_ literal 17789 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 From 7532610cc47870508dd70faed10f54c63f14e3d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 14:38:54 +0200 Subject: [PATCH 055/185] Move Report test includes to test class --- TESTING.md | 2 +- classes/Report.php | 3 --- tests/classes/Report_test.php | 1 + 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/TESTING.md b/TESTING.md index b2b5014..3080943 100644 --- a/TESTING.md +++ b/TESTING.md @@ -38,7 +38,7 @@ See: https://moodledev.io/general/development/tools/phpunit ``` - Run all tests for a single component: ```bash - vendor/bin/phpunit --colors --testdox --filter quiz_archiver + vendor/bin/phpunit --colors --testdox --filter quiz_archiver/* ``` - Run a single test suite: ```bash diff --git a/classes/Report.php b/classes/Report.php index cfb1a48..ec8948b 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -29,9 +29,6 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 -require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); - require_once("$CFG->dirroot/mod/quiz/locallib.php"); // Required for legacy mod_quiz functions ... diff --git a/tests/classes/Report_test.php b/tests/classes/Report_test.php index b503b4a..43e5f0f 100644 --- a/tests/classes/Report_test.php +++ b/tests/classes/Report_test.php @@ -28,6 +28,7 @@ use backup; +require_once($CFG->dirroot . '/mod/quiz/report/archiver/patch_401_class_renames.php'); require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php'); From 30d00c7b20acea2814c82c51da544b4187fee371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 14:55:44 +0200 Subject: [PATCH 056/185] Flatten tests directory --- tests/{classes => }/ArchiveJob_test.php | 0 tests/{classes => }/BackupManager_test.php | 0 tests/{classes => }/FileManager_test.php | 2 +- tests/{classes => }/RemoteArchiveWorker_test.php | 0 tests/{classes => }/Report_test.php | 4 ++-- tests/{classes => }/TSPManager_test.php | 0 tests/{classes => }/TimeStampProtocolClient_test.php | 0 tests/{classes => }/external/generate_attempt_report_test.php | 0 tests/{classes => }/external/get_attempts_metadata_test.php | 0 tests/{classes => }/external/get_backup_status_test.php | 0 .../{classes => }/external/process_uploaded_artifact_test.php | 0 tests/{classes => }/external/update_job_status_test.php | 0 tests/{classes => }/local/autoinstall_test.php | 0 13 files changed, 3 insertions(+), 3 deletions(-) rename tests/{classes => }/ArchiveJob_test.php (100%) rename tests/{classes => }/BackupManager_test.php (100%) rename tests/{classes => }/FileManager_test.php (99%) rename tests/{classes => }/RemoteArchiveWorker_test.php (100%) rename tests/{classes => }/Report_test.php (99%) rename tests/{classes => }/TSPManager_test.php (100%) rename tests/{classes => }/TimeStampProtocolClient_test.php (100%) rename tests/{classes => }/external/generate_attempt_report_test.php (100%) rename tests/{classes => }/external/get_attempts_metadata_test.php (100%) rename tests/{classes => }/external/get_backup_status_test.php (100%) rename tests/{classes => }/external/process_uploaded_artifact_test.php (100%) rename tests/{classes => }/external/update_job_status_test.php (100%) rename tests/{classes => }/local/autoinstall_test.php (100%) diff --git a/tests/classes/ArchiveJob_test.php b/tests/ArchiveJob_test.php similarity index 100% rename from tests/classes/ArchiveJob_test.php rename to tests/ArchiveJob_test.php diff --git a/tests/classes/BackupManager_test.php b/tests/BackupManager_test.php similarity index 100% rename from tests/classes/BackupManager_test.php rename to tests/BackupManager_test.php diff --git a/tests/classes/FileManager_test.php b/tests/FileManager_test.php similarity index 99% rename from tests/classes/FileManager_test.php rename to tests/FileManager_test.php index eb683ad..e42d672 100644 --- a/tests/classes/FileManager_test.php +++ b/tests/FileManager_test.php @@ -83,7 +83,7 @@ protected function importReferenceQuizArtifact(): \stored_file { 'filename' => 'reference_quiz_artifact.tar.gz', 'timecreated' => time(), 'timemodified' => time(), - ], __DIR__.'/../fixtures/referencequiz-artifact.tar.gz'); + ], __DIR__.'/fixtures/referencequiz-artifact.tar.gz'); } /** diff --git a/tests/classes/RemoteArchiveWorker_test.php b/tests/RemoteArchiveWorker_test.php similarity index 100% rename from tests/classes/RemoteArchiveWorker_test.php rename to tests/RemoteArchiveWorker_test.php diff --git a/tests/classes/Report_test.php b/tests/Report_test.php similarity index 99% rename from tests/classes/Report_test.php rename to tests/Report_test.php index 43e5f0f..0d61ff3 100644 --- a/tests/classes/Report_test.php +++ b/tests/Report_test.php @@ -77,7 +77,7 @@ protected function prepareReferenceCourse(): \stdClass { $backupid = 'referencequiz'; $backuppath = make_backup_temp_directory($backupid); get_file_packer('application/vnd.moodle.backup')->extract_to_pathname( - __DIR__ . "/../fixtures/referencequiz.mbz", + __DIR__ . "/fixtures/referencequiz.mbz", $backuppath ); @@ -459,7 +459,7 @@ public function test_get_attempt_attachments_metadata() { $this->assertNotEmpty($cake->contenthash, 'Attachment contenthash not set'); $this->assertNotEmpty($cake->downloadurl, 'Attachment downloadurl not set'); - $this->assertEquals(sha1_file(__DIR__.'/../fixtures/cake.md'), $cake->contenthash, 'Attachment contenthash (SHA1) does not match'); + $this->assertEquals(sha1_file(__DIR__.'/fixtures/cake.md'), $cake->contenthash, 'Attachment contenthash (SHA1) does not match'); } /** diff --git a/tests/classes/TSPManager_test.php b/tests/TSPManager_test.php similarity index 100% rename from tests/classes/TSPManager_test.php rename to tests/TSPManager_test.php diff --git a/tests/classes/TimeStampProtocolClient_test.php b/tests/TimeStampProtocolClient_test.php similarity index 100% rename from tests/classes/TimeStampProtocolClient_test.php rename to tests/TimeStampProtocolClient_test.php diff --git a/tests/classes/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php similarity index 100% rename from tests/classes/external/generate_attempt_report_test.php rename to tests/external/generate_attempt_report_test.php diff --git a/tests/classes/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php similarity index 100% rename from tests/classes/external/get_attempts_metadata_test.php rename to tests/external/get_attempts_metadata_test.php diff --git a/tests/classes/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php similarity index 100% rename from tests/classes/external/get_backup_status_test.php rename to tests/external/get_backup_status_test.php diff --git a/tests/classes/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php similarity index 100% rename from tests/classes/external/process_uploaded_artifact_test.php rename to tests/external/process_uploaded_artifact_test.php diff --git a/tests/classes/external/update_job_status_test.php b/tests/external/update_job_status_test.php similarity index 100% rename from tests/classes/external/update_job_status_test.php rename to tests/external/update_job_status_test.php diff --git a/tests/classes/local/autoinstall_test.php b/tests/local/autoinstall_test.php similarity index 100% rename from tests/classes/local/autoinstall_test.php rename to tests/local/autoinstall_test.php From 9a0d77198521a94f9af29747f02c0a04dd6ed635 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 15:15:59 +0200 Subject: [PATCH 057/185] Always require externallib before patching Moodle 4.1 (LTS) legacy external api classes --- patch_401_class_renames.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/patch_401_class_renames.php b/patch_401_class_renames.php index d273f78..d1c30bb 100644 --- a/patch_401_class_renames.php +++ b/patch_401_class_renames.php @@ -24,8 +24,11 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +global $CFG; + if ($CFG->branch <= 401) { - require_once($CFG->dirroot . '/mod/quiz/locallib.php'); + require_once($CFG->dirroot.'/mod/quiz/locallib.php'); + require_once($CFG->dirroot.'/lib/external/externallib.php'); // Patch renamed classes foreach ([ From 9c00182336427c5578c271b09b4f427329286da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 15:29:33 +0200 Subject: [PATCH 058/185] Update testing docs --- TESTING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TESTING.md b/TESTING.md index 3080943..27030a8 100644 --- a/TESTING.md +++ b/TESTING.md @@ -42,7 +42,7 @@ See: https://moodledev.io/general/development/tools/phpunit ``` - Run a single test suite: ```bash - vendor/bin/phpunit --colors --testdox mod/quiz/report/archiver/tests/classes/Report_test.php + vendor/bin/phpunit --colors --testdox mod/quiz/report/archiver/tests/Report_test.php ``` ### Automatic test execution for all supported software configurations @@ -59,7 +59,7 @@ reports!** 1. Run PHPUnit with coverage report: ```bash - XDEBUG_MODE=coverage vendor/bin/phpunit --colors --testdox --coverage-html /tmp/coverage --filter quiz_archiver + XDEBUG_MODE=coverage vendor/bin/phpunit --colors --testdox --coverage-html /tmp/coverage --filter quiz_archiver/* ``` 2. Copy the generated report to your machin: ```bash From 85f580c6b8de1d4d28cae55d2c2d2a7436280248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 15:39:52 +0200 Subject: [PATCH 059/185] Fix FileManager invalid attempt during artifact extraction test case on PHP 7.4 --- classes/FileManager.php | 2 +- tests/FileManager_test.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/FileManager.php b/classes/FileManager.php index 5e3c0f8..fbcc216 100644 --- a/classes/FileManager.php +++ b/classes/FileManager.php @@ -362,7 +362,7 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in // Search for attempt path $attemptpath = null; foreach ($metadata as $row) { - if ($row[0] == $attemptid) { + if (intval($row[0]) === $attemptid) { $attemptpath = $row[9]; break; } diff --git a/tests/FileManager_test.php b/tests/FileManager_test.php index e42d672..110dae5 100644 --- a/tests/FileManager_test.php +++ b/tests/FileManager_test.php @@ -605,7 +605,7 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { // Extract userdata from artifact into temporary stored_file $this->expectException(\moodle_exception::class); $this->expectExceptionMessageMatches('/Attempt not found/'); - $fm->extract_attempt_data_from_artifact($storedArtifact, $job->get_id(), 0); + $fm->extract_attempt_data_from_artifact($storedArtifact, $job->get_id(), 9999999); } /** From 8310497bf8c6b36a877edb25f5a3d5c1e013c472 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 16:05:43 +0200 Subject: [PATCH 060/185] Fix webservice token generation on Moodle 4.1 (LTS) --- report.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/report.php b/report.php index 7576386..7ddff99 100644 --- a/report.php +++ b/report.php @@ -343,7 +343,7 @@ protected function initiate_archive_job( string $attempts_filename_pattern, ?int $retention_seconds = null ): ?ArchiveJob { - global $USER; + global $CFG, $USER; // Check permissions. require_capability('mod/quiz_archiver:create', $this->context); @@ -354,7 +354,7 @@ protected function initiate_archive_job( } // Create temporary webservice token - if (class_exists('core_external\util')) { + if ($CFG->branch > 401 && class_exists('core_external\util')) { // Moodle 4.2 and above $wstoken = core_external\util::generate_token( EXTERNAL_TOKEN_PERMANENT, From bd46b3a198b4570c17d167935c71a4bd26c64bde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 29 May 2024 16:19:28 +0200 Subject: [PATCH 061/185] Release version 1.2.8 (2024052900) --- CHANGELOG.md | 18 ++++++++++++++++++ version.php | 4 ++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee9cd09..46a24e5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## Version 1.2.8 (2024052900) + +- Fix autoinstall admin UI form for Moodle 4.1 (LTS) +- Fix edge case during GDPR exports via the Moodle privacy API when using PHP 7.4 +- Fix webservice token generation on Moodle 4.1 (LTS) +- Largely extend the test coverage. Now almost everything is tested automatically + for all combinations of: + - Moodle version: 4.1 - 4.4 + - PHP versions: 7.4 - 8.3 + - Database backends: mariadb, pgsql +- Cleanup attempt report generation code +- Provide documentation how to run tests locally +- Fix typos + +_Note: Keep in mind to update your +[Quiz Archive Worker](https://github.com/ngandrass/moodle-quiz-archive-worker) too!_ + + ## Version 1.2.7 (2024051300) - Fix inlining of images with filenames that contains URL encoded characters (e.g., `image (1).jpg`) diff --git a/version.php b/version.php index ebdb293..68a0cd9 100644 --- a/version.php +++ b/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.7'; -$plugin->version = 2024051300; +$plugin->release = '1.2.8'; +$plugin->version = 2024052900; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; //$plugin->incompatible = 402; From 4dc47d39011d4626d1869d75d88c7adbe8569ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 4 Jul 2024 14:29:37 +0200 Subject: [PATCH 062/185] Synchronize default job timeout setting with quiz archive worker and add hint about the additional timeout inside the archive worker config --- lang/de/quiz_archiver.php | 3 +-- lang/en/quiz_archiver.php | 2 +- settings.php | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 70cdb99..9dd600d 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -175,8 +175,7 @@ $string['setting_internal_wwwroot'] = 'Eigene Moodle Basis-URL'; $string['setting_internal_wwwroot_desc'] = 'Überschreibt die Moodle Basis-URL ($CFG->wwwroot) in den erzeugten Versuchs-Berichten. Dies kann nützlich sein, wenn der Archive Worker Service innerhalb eines privaten Netzwerks (z.B. Docker) läuft und er über das private Netzwerk auf Moodle zugreifen soll.
Beispiel: http://moodle/'; $string['setting_job_timeout_min'] = 'Auftrags Zeitlimit (Minuten)'; -$string['setting_job_timeout_min_desc'] = 'The number of minutes a single archive job is allowed to run before it is aborted by Moodle. Job web service access tokens become invalid after this timeout.'; -$string['setting_job_timeout_min_desc'] = 'Die maximale Laufzeit eines einzelnen Archivierungsauftrags in Minuten, bevor er durch Moodle abgebrochen wird. Das Webservice Zugriffstoken des Auftrags wird nach diesem Zeitlimit invalidiert.'; +$string['setting_job_timeout_min_desc'] = 'Die maximale Laufzeit eines einzelnen Archivierungsauftrags in Minuten, bevor er durch Moodle abgebrochen wird. Das Webservice Zugriffstoken des Auftrags wird nach diesem Zeitlimit invalidiert.
Hinweis: Dieses Zeitlimit kann das im Archive Worker Service konfigurierte Zeitlimit nicht überschreiten. Das kürzere Zeitlimit hat stets Vorrang.'; $string['setting_tsp_automatic_signing'] = 'Testarchive automatisch signieren'; $string['setting_tsp_automatic_signing_desc'] = 'Testarchive automatisch bei der Erstellung signieren.'; $string['setting_tsp_enable'] = 'Signierung aktivieren'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 37c6d84..cb3048d 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -174,7 +174,7 @@ $string['setting_internal_wwwroot'] = 'Custom Moodle base URL'; $string['setting_internal_wwwroot_desc'] = 'Overwrites the default Moodle base URL ($CFG->wwwroot) inside generated reports. This can be useful if you are running the archive worker service inside a private network (e.g., Docker) and want it to access Moodle directly.
Example: http://moodle/'; $string['setting_job_timeout_min'] = 'Job timeout (minutes)'; -$string['setting_job_timeout_min_desc'] = 'The number of minutes a single archive job is allowed to run before it is aborted by Moodle. Job web service access tokens become invalid after this timeout.'; +$string['setting_job_timeout_min_desc'] = 'The number of minutes a single archive job is allowed to run before it is aborted by Moodle. Job web service access tokens become invalid after this timeout.
Note: This timeout can not exceed the timeout configured within the archive worker service. The shorter timeout always takes precedence.'; $string['setting_tsp_automatic_signing'] = 'Automatically sign quiz archives'; $string['setting_tsp_automatic_signing_desc'] = 'Automatically sign quiz archives when they are created.'; $string['setting_tsp_enable'] = 'Enable quiz archive signing'; diff --git a/settings.php b/settings.php index 39a33bd..6550b51 100644 --- a/settings.php +++ b/settings.php @@ -90,7 +90,7 @@ $settings->add(new admin_setting_configtext('quiz_archiver/job_timeout_min', get_string('setting_job_timeout_min', 'quiz_archiver'), get_string('setting_job_timeout_min_desc', 'quiz_archiver'), - '120', + '60', PARAM_INT )); From 1b1992dded066951a6474e45b6da93a66dcade2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 4 Jul 2024 14:36:41 +0200 Subject: [PATCH 063/185] Describe different job timeout settings inside the README --- CHANGELOG.md | 7 +++++++ README.md | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 46a24e5..bfd1350 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Version 1.2.9 (XXXXXXXXXX) + +- Synchronize default job timeout setting with quiz archive worker and add hint about the additional timeout inside the + archive worker config +- Describe different job timeout settings inside the "Known Pitfalls" section of + the README file. + ## Version 1.2.8 (2024052900) - Fix autoinstall admin UI form for Moodle 4.1 (LTS) diff --git a/README.md b/README.md index 2646bc7..85158cf 100644 --- a/README.md +++ b/README.md @@ -315,6 +315,12 @@ Options: ### Known Pitfalls +- **Job timeout prior to configured value** + - Be aware that there is a configurable job timeout within the Moodle plugin + settings (`quiz_archiver | job_timeout_min`) as well as one within the quiz + archive worker service (`QUIZ_ARCHIVER_REQUEST_TIMEOUT_SEC`). Since the + shortest timeout always takes precedence, make sure to adjust both settings + as required. - **Access to (some) webservice functions fails** - Ensure that webservices and the REST protocol are enabled globally. - Ensure that all required webservice functions are enabled for the From fd86130fbdaaa61b5607ac5dfd7e9944356beea6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 13:06:51 +0200 Subject: [PATCH 064/185] Fix display of variables in archive / report names help texts in Moodle <= 4.2 --- CHANGELOG.md | 2 ++ classes/form/archive_quiz_form.php | 44 +++++++++++++++++++----------- lang/de/quiz_archiver.php | 7 ++++- lang/en/quiz_archiver.php | 6 ++++ 4 files changed, 42 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfd1350..98c6ef3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ archive worker config - Describe different job timeout settings inside the "Known Pitfalls" section of the README file. +- Fix display of variables in archive / report names help texts in Moodle <= 4.2 + ## Version 1.2.8 (2024052900) diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index 13c6ba4..ae7033f 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -61,6 +61,8 @@ public function __construct(string $quiz_name, int $num_attempts) { * @throws \coding_exception */ public function definition() { + global $CFG; + $config = get_config('quiz_archiver'); $mform = $this->_form; @@ -160,14 +162,19 @@ public function definition() { get_string('archive_filename_pattern', 'quiz_archiver'), $config->job_preset_archive_filename_pattern_locked ? 'disabled' : null ); - $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern', 'quiz_archiver', '', false, [ - 'variables' => array_reduce( - ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES, - fn ($res, $varname) => $res . "
  • \${".$varname."}: ".get_string('archive_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • ", - "" - ), - 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), - ]); + if ($CFG->branch > 402) { + $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern', 'quiz_archiver', '', false, [ + 'variables' => array_reduce( + ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES, + fn($res, $varname) => $res . "
  • \${" . $varname . "}: " . get_string('archive_filename_pattern_variable_' . $varname, 'quiz_archiver') . "
  • ", + "" + ), + 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), + ]); + } else { + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 + $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern_moodle42', 'quiz_archiver'); + } $mform->setType('archive_filename_pattern', PARAM_TEXT); $mform->setDefault('archive_filename_pattern', $config->job_preset_archive_filename_pattern); $mform->addRule('archive_filename_pattern', null, 'maxlength', 255, 'client'); @@ -178,14 +185,19 @@ public function definition() { get_string('export_attempts_filename_pattern', 'quiz_archiver'), $config->job_preset_export_attempts_filename_pattern_locked ? 'disabled' : null ); - $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern', 'quiz_archiver', '', false, [ - 'variables' => array_reduce( - ArchiveJob::ATTEMPT_FILENAME_PATTERN_VARIABLES, - fn ($res, $varname) => $res . "
  • \${".$varname."}: ".get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • ", - "" - ), - 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), - ]); + if ($CFG->branch > 402) { + $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern', 'quiz_archiver', '', false, [ + 'variables' => array_reduce( + ArchiveJob::ATTEMPT_FILENAME_PATTERN_VARIABLES, + fn($res, $varname) => $res . "
  • \${" . $varname . "}: " . get_string('export_attempts_filename_pattern_variable_' . $varname, 'quiz_archiver') . "
  • ", + "" + ), + 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), + ]); + } else { + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 + $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern_moodle42', 'quiz_archiver'); + } $mform->setType('export_attempts_filename_pattern', PARAM_TEXT); $mform->setDefault('export_attempts_filename_pattern', $config->job_preset_export_attempts_filename_pattern); $mform->addRule('export_attempts_filename_pattern', null, 'maxlength', 255, 'client'); diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 9dd600d..4fa1bb2 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -91,6 +91,9 @@ // Job creation form: Filename pattern $string['archive_filename_pattern'] = 'Archivname'; $string['archive_filename_pattern_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +$string['archive_filename_pattern_moodle42'] = 'Archivname'; +$string['archive_filename_pattern_moodle42_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['archive_filename_pattern_variable_courseid'] = 'Kurs-ID'; $string['archive_filename_pattern_variable_coursename'] = 'Kursname'; $string['archive_filename_pattern_variable_courseshortname'] = 'Kurzer Kursname'; @@ -101,9 +104,11 @@ $string['archive_filename_pattern_variable_time'] = 'Aktuelle Uhrzeit (HH-MM-SS)'; $string['archive_filename_pattern_variable_timestamp'] = 'Aktueller Unix Timestamp'; $string['error_invalid_archive_filename_pattern'] = 'Ungültiger Archivname. Bitte korrigieren Sie Ihre Eingabe und versuchen Sie es erneut.'; - $string['export_attempts_filename_pattern'] = 'Versuchsname'; $string['export_attempts_filename_pattern_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +$string['export_attempts_filename_pattern_moodle42'] = 'Versuchsname'; +$string['export_attempts_filename_pattern_moodle42_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${attemptid}: Versuchs-ID
    • ${username}: Nutzer Anmeldename
    • ${firstname}: Nutzer Vorname
    • ${lastname}: Nutzer Nachname
    • ${timestart}: Versuchsstart (Unix Timestamp)
    • ${timefinish}: Versuchsende (Unix Timestamp)
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Kurs-ID'; $string['export_attempts_filename_pattern_variable_coursename'] = 'Kursname'; $string['export_attempts_filename_pattern_variable_courseshortname'] = 'Kurzer Kursname'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index cb3048d..42895fd 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -91,6 +91,9 @@ // Job creation form: Filename pattern $string['archive_filename_pattern'] = 'Archive name'; $string['archive_filename_pattern_help'] = 'Name of the generated quiz archive. Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
      {$a->variables}
    Forbidden characters: {$a->forbiddenchars}'; +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +$string['archive_filename_pattern_moodle42'] = 'Archive name'; +$string['archive_filename_pattern_moodle42_help'] = 'Name of the generated quiz archive. Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
    • ${courseid}: Course ID
    • ${coursename}: Course name
    • ${courseshortname}: Course short name
    • ${cmid}: Course module ID
    • ${quizid}: Quiz ID
    • ${quizname}: Quiz name
    • ${date}: Current date (YYYY-MM-DD)
    • ${time}: Current time (HH-MM-SS)
    • ${timestamp}: Current unix timestamp
    Forbidden characters: \/.:;*?!"<>|'; $string['archive_filename_pattern_variable_courseid'] = 'Course ID'; $string['archive_filename_pattern_variable_coursename'] = 'Course name'; $string['archive_filename_pattern_variable_courseshortname'] = 'Course short name'; @@ -103,6 +106,9 @@ $string['error_invalid_archive_filename_pattern'] = 'Invalid archive filename pattern. Please correct your input and try again.'; $string['export_attempts_filename_pattern'] = 'Report name'; $string['export_attempts_filename_pattern_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
      {$a->variables}
    Forbidden characters: {$a->forbiddenchars}'; +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +$string['export_attempts_filename_pattern_moodle42'] = 'Report name'; +$string['export_attempts_filename_pattern_moodle42_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
    • ${courseid}: Course ID
    • ${coursename}: Course name
    • ${courseshortname}: Course short name
    • ${cmid}: Course module ID
    • ${quizid}: Quiz ID
    • ${quizname}: Quiz name
    • ${attemptid}: Attempt ID
    • ${username}: Student username
    • ${firstname}: Student first name
    • ${lastname}: Student last name
    • ${timestart}: Attempt start unix timestamp
    • ${timefinish}: Attempt finish unix timestamp
    • ${date}: Current date (YYYY-MM-DD)
    • ${time}: Current time (HH-MM-SS)
    • ${timestamp}: Current unix timestamp
    Forbidden characters: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Course ID'; $string['export_attempts_filename_pattern_variable_coursename'] = 'Course name'; $string['export_attempts_filename_pattern_variable_courseshortname'] = 'Course short name'; From be6f4425f2c6fe99565caef742b3612010544954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 13:10:39 +0200 Subject: [PATCH 065/185] Release version 1.2.9 (2024070800) --- CHANGELOG.md | 5 ++++- version.php | 4 ++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98c6ef3..12359ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Version 1.2.9 (XXXXXXXXXX) +## Version 1.2.9 (2024070800) - Synchronize default job timeout setting with quiz archive worker and add hint about the additional timeout inside the archive worker config @@ -8,6 +8,9 @@ the README file. - Fix display of variables in archive / report names help texts in Moodle <= 4.2 +_Note: Keep in mind to update your +[Quiz Archive Worker](https://github.com/ngandrass/moodle-quiz-archive-worker) too!_ + ## Version 1.2.8 (2024052900) diff --git a/version.php b/version.php index 68a0cd9..14c4e61 100644 --- a/version.php +++ b/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.8'; -$plugin->version = 2024052900; +$plugin->release = '1.2.9'; +$plugin->version = 2024070800; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; //$plugin->incompatible = 402; From 662177d94f9852a14361f4762a28cb356d810864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 13:58:21 +0200 Subject: [PATCH 066/185] adminui/autoinstall: Fix modification of NO_OUTPUT_BUFFERING constant before loading of config.php --- adminui/autoinstall.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index 5f38dab..93421bb 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -22,9 +22,6 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late */ -/** @var bool Disables output buffering */ -const NO_OUTPUT_BUFFERING = true; - require_once(__DIR__.'/../../../../../config.php'); require_once("{$CFG->libdir}/moodlelib.php"); require_once("{$CFG->dirroot}/mod/quiz/report/archiver/classes/form/autoinstall_form.php"); @@ -32,6 +29,9 @@ use quiz_archiver\form\autoinstall_form; use quiz_archiver\local\autoinstall; +/** @var bool Disables output buffering */ +const NO_OUTPUT_BUFFERING = true; + // Ensure user has permissions require_login(); $ctx = context_system::instance(); From 9f44e9ca13e8387ea1ff6d612345b1422163b9c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 17:10:16 +0200 Subject: [PATCH 067/185] Fix codestyle errors in db files --- db/install.php | 8 +++----- db/tasks.php | 4 +++- db/uninstall.php | 1 - db/upgrade.php | 9 ++++----- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/db/install.php b/db/install.php index 482b0a2..036ad44 100644 --- a/db/install.php +++ b/db/install.php @@ -29,18 +29,16 @@ * Custom code to be run on installing the plugin. */ function xmldb_quiz_archiver_install() { - // Print welcome message - $autoinstall_url = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); - $pluginsettings_url = new moodle_url('/admin/settings.php', ['section' => 'quiz_archiver_settings']); + $autoinstallurl = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); + $pluginsettingsurl = new moodle_url('/admin/settings.php', ['section' => 'quiz_archiver_settings']); echo ''; - return true; } diff --git a/db/tasks.php b/db/tasks.php index 053300e..9bf2220 100644 --- a/db/tasks.php +++ b/db/tasks.php @@ -22,6 +22,8 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +defined('MOODLE_INTERNAL') || die(); + $tasks = [ [ 'classname' => 'quiz_archiver\task\cleanup_temp_files', @@ -41,4 +43,4 @@ 'month' => '*', 'dayofweek' => '*', ], -]; \ No newline at end of file +]; diff --git a/db/uninstall.php b/db/uninstall.php index 049f5b6..202e6e4 100644 --- a/db/uninstall.php +++ b/db/uninstall.php @@ -29,6 +29,5 @@ * Custom uninstallation procedure. */ function xmldb_quiz_archiver_uninstall() { - return true; } diff --git a/db/upgrade.php b/db/upgrade.php index b3be3d8..2d384f8 100644 --- a/db/upgrade.php +++ b/db/upgrade.php @@ -74,12 +74,12 @@ function xmldb_quiz_archiver_upgrade($oldversion) { if ($oldversion < 2023072700) { // Replace foreign-unique key with simple foreign key for userid in quiz_report_archiver_jobs. $table = new xmldb_table('quiz_report_archiver_jobs'); - $old_key = new xmldb_key('userid', XMLDB_KEY_FOREIGN_UNIQUE, ['userid'], 'user', ['id']); - $new_key = new xmldb_key('userid', XMLDB_KEY_FOREIGN, ['userid'], 'user', ['id']); + $oldkey = new xmldb_key('userid', XMLDB_KEY_FOREIGN_UNIQUE, ['userid'], 'user', ['id']); + $newkey = new xmldb_key('userid', XMLDB_KEY_FOREIGN, ['userid'], 'user', ['id']); // Perform key exchange. - $dbman->drop_key($table, $old_key); - $dbman->add_key($table, $new_key); + $dbman->drop_key($table, $oldkey); + $dbman->add_key($table, $newkey); // Archiver savepoint reached. upgrade_plugin_savepoint(true, 2023072700, 'quiz', 'archiver'); @@ -212,6 +212,5 @@ function xmldb_quiz_archiver_upgrade($oldversion) { upgrade_plugin_savepoint(true, 2024011000, 'quiz', 'archiver'); } - return true; } From 9413d1e12854f5dd6468072075b280c0e18cdbaa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 17:11:06 +0200 Subject: [PATCH 068/185] Refactor code to conform with Moodle coding style (errors first) --- classes/ArchiveJob.php | 250 +++++++++--------- classes/BackupManager.php | 55 ++-- classes/FileManager.php | 78 +++--- classes/RemoteArchiveWorker.php | 60 ++--- classes/Report.php | 209 ++++++++------- classes/TSPManager.php | 12 +- classes/TimeStampProtocolClient.php | 39 ++- classes/external/generate_attempt_report.php | 48 ++-- classes/external/get_attempts_metadata.php | 30 +-- classes/external/get_backup_status.php | 18 +- .../external/process_uploaded_artifact.php | 68 ++--- classes/external/update_job_status.php | 18 +- classes/form/archive_quiz_form.php | 28 +- classes/form/artifact_delete_form.php | 24 +- classes/form/job_delete_form.php | 20 +- classes/form/job_sign_form.php | 12 +- ...admin_setting_archive_filename_pattern.php | 2 + ...admin_setting_attempt_filename_pattern.php | 2 + ...dmin_setting_configcheckbox_alwaystrue.php | 1 + classes/local/autoinstall.php | 8 +- classes/local/util.php | 4 +- classes/output/job_overview_table.php | 9 +- classes/privacy/provider.php | 28 +- classes/task/autodelete_job_artifacts.php | 6 +- classes/task/cleanup_temp_files.php | 6 +- cli/autoinstall.php | 18 +- patch_401_class_renames.php | 2 + report.php | 198 +++++++------- settings.php | 14 +- version.php | 2 +- 30 files changed, 647 insertions(+), 622 deletions(-) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index c6a7fd7..66619ab 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -39,13 +39,13 @@ class ArchiveJob { /** @var string UUID of the job, as assigned by the archive worker */ protected string $jobid; /** @var int ID of the course this job is associated with */ - protected int $course_id; + protected int $courseid; /** @var int ID of the course module this job is associated with */ - protected int $cm_id; + protected int $cmid; /** @var int ID of the quiz this job is associated with */ - protected int $quiz_id; + protected int $quizid; /** @var int ID of the user that owns this job */ - protected int $user_id; + protected int $userid; /** @var int Unix timestamp of job creation */ protected int $timecreated; /** @var int|null Unix timestamp after which this jobs artifacts will be deleted automatically. Null indicates no deletion.*/ @@ -54,7 +54,7 @@ class ArchiveJob { protected string $wstoken; /** @var ?TSPManager A Time-Stamp Protocol (TSP) manager associated with this class */ - protected ?TSPManager $tspManager; + protected ?TSPManager $tspmanager; /** @var string Name of the job status table */ const JOB_TABLE_NAME = 'quiz_archiver_jobs'; @@ -123,36 +123,36 @@ class ArchiveJob { * * @param int $id ID of the job inside the database * @param string $jobid UUID of the job, as assigned by the archive worker - * @param int $course_id ID of the course this job is associated with - * @param int $cm_id ID of the course module this job is associated with - * @param int $quiz_id ID of the quiz this job is associated with - * @param int $user_id ID of the user that owns this job + * @param int $courseid ID of the course this job is associated with + * @param int $cmid ID of the course module this job is associated with + * @param int $quizid ID of the quiz this job is associated with + * @param int $userid ID of the user that owns this job * @param int $timecreated Unix timestamp of job creation * @param ?int $retentiontime Unix timestamp after which this jobs * artifacts will be deleted automatically. Null indicates no deletion. * @param string $wstoken The webservice token that is allowed to write to this job via API */ protected function __construct( - int $id, + int $id, string $jobid, - int $course_id, - int $cm_id, - int $quiz_id, - int $user_id, - int $timecreated, - ?int $retentiontime, + int $courseid, + int $cmid, + int $quizid, + int $userid, + int $timecreated, + ?int $retentiontime, string $wstoken ) { $this->id = $id; $this->jobid = $jobid; - $this->course_id = $course_id; - $this->cm_id = $cm_id; - $this->quiz_id = $quiz_id; - $this->user_id = $user_id; + $this->courseid = $courseid; + $this->cmid = $cmid; + $this->quizid = $quizid; + $this->userid = $userid; $this->timecreated = $timecreated; $this->retentiontime = $retentiontime; $this->wstoken = $wstoken; - $this->tspManager = null; // Lazy initialization + $this->tspmanager = null; // Lazy initialization } /** @@ -161,23 +161,23 @@ protected function __construct( * @return TSPManager The TSPManager for this ArchiveJob * @throws \dml_exception If the plugin config could not be loaded */ - public function TSPManager(): TSPManager { - if ($this->tspManager == null) { - $this->tspManager = new TSPManager($this); + public function tspmanager(): TSPManager { + if ($this->tspmanager == null) { + $this->tspmanager = new TSPManager($this); } - return $this->tspManager; + return $this->tspmanager; } /** * Creates a new job inside the database * * @param string $jobid UUID of the job, as assigned by the archive worker - * @param int $course_id ID of the course this job is associated with - * @param int $cm_id ID of the course module this job is associated with - * @param int $quiz_id ID of the quiz this job is associated with - * @param int $user_id ID of the user that initiated this job - * @param ?int $retention_seconds Number of seconds to retain this jobs + * @param int $courseid ID of the course this job is associated with + * @param int $cmid ID of the course module this job is associated with + * @param int $quizid ID of the quiz this job is associated with + * @param int $userid ID of the user that initiated this job + * @param ?int $retentionseconds Number of seconds to retain this jobs * artifact after job creation. Null indicates no deletion. * @param string $wstoken The webservice token that is allowed to write to this job via API * @param array $attempts List of quiz attempts to archive, each consisting of an attemptid and a userid @@ -190,14 +190,14 @@ public function TSPManager(): TSPManager { */ public static function create( string $jobid, - int $course_id, - int $cm_id, - int $quiz_id, - int $user_id, - ?int $retention_seconds, + int $courseid, + int $cmid, + int $quizid, + int $userid, + ?int $retentionseconds, string $wstoken, - array $attempts, - array $settings, + array $attempts, + array $settings, string $status = self::STATUS_UNKNOWN ): ArchiveJob { global $DB; @@ -209,18 +209,18 @@ public static function create( // Create database entry and return ArchiveJob object to represent it $now = time(); - $retentiontime = $retention_seconds ? $now + $retention_seconds : null; + $retentiontime = $retentionseconds ? $now + $retentionseconds : null; $id = $DB->insert_record(self::JOB_TABLE_NAME, [ 'jobid' => $jobid, - 'courseid' => $course_id, - 'cmid' => $cm_id, - 'quizid' => $quiz_id, - 'userid' => $user_id, + 'courseid' => $courseid, + 'cmid' => $cmid, + 'quizid' => $quizid, + 'userid' => $userid, 'status' => $status, 'timecreated' => $now, 'timemodified' => $now, 'retentiontime' => $retentiontime, - 'wstoken' => $wstoken + 'wstoken' => $wstoken, ]); // Store job settings @@ -228,7 +228,7 @@ public static function create( return [ 'jobid' => $id, 'settingkey' => strval($key), - 'settingvalue' => $value === null ? null : strval($value) + 'settingvalue' => $value === null ? null : strval($value), ]; }, array_keys($settings), $settings)); @@ -237,11 +237,11 @@ public static function create( return [ 'jobid' => $id, 'userid' => $data->userid, - 'attemptid' => $data->attemptid + 'attemptid' => $data->attemptid, ]; }, $attempts)); - return new ArchiveJob($id, $jobid, $course_id, $cm_id, $quiz_id, $user_id, $now, $retentiontime, $wstoken); + return new ArchiveJob($id, $jobid, $courseid, $cmid, $quizid, $userid, $now, $retentiontime, $wstoken); } /** @@ -308,18 +308,18 @@ protected static function exists_in_db(string $jobid): bool { /** * Returns all ArchiveJobs that match given selectors. * - * @param int $course_id - * @param int $cm_id - * @param int $quiz_id - * @return array - * @throws \dml_exception + * @param int $courseid ID of the course to query for + * @param int $cmid ID of the course module to query for + * @param int $quizid ID of the quiz to query for + * @return array List of ArchiveJobs that match the given selectors + * @throws \dml_exception if the database query fails */ - public static function get_jobs(int $course_id, int $cm_id, int $quiz_id): array { + public static function get_jobs(int $courseid, int $cmid, int $quizid): array { global $DB; $records = $DB->get_records(self::JOB_TABLE_NAME, [ - 'courseid' => $course_id, - 'cmid' => $cm_id, - 'quizid' => $quiz_id + 'courseid' => $courseid, + 'cmid' => $cmid, + 'quizid' => $quizid, ]); return array_map(fn($dbdata): ArchiveJob => new ArchiveJob( @@ -342,14 +342,14 @@ public static function get_jobs(int $course_id, int $cm_id, int $quiz_id): array * This is the preferred way to access status of ALL jobs, instead of using * ArchiveJob::get_jobs() and call get_status() on each job individually! * - * @param int $course_id - * @param int $cm_id - * @param int $quiz_id + * @param int $courseid + * @param int $cmid + * @param int $quizid * @return array * @throws \dml_exception * @throws \coding_exception */ - public static function get_metadata_for_jobs(int $course_id, int $cm_id, int $quiz_id): array { + public static function get_metadata_for_jobs(int $courseid, int $cmid, int $quizid): array { global $DB; $records = $DB->get_records_sql( 'SELECT '. @@ -358,8 +358,8 @@ public static function get_metadata_for_jobs(int $course_id, int $cm_id, int $qu ' u.firstname AS userfirstname, u.lastname AS userlastname, u.username, '. ' c.fullname AS coursename, '. ' q.name as quizname '. - 'FROM {quiz_archiver_jobs} AS j '. - ' LEFT JOIN {quiz_archiver_tsp} AS tsp ON j.id = tsp.jobid '. + 'FROM {quiz_archiver_jobs} j '. + ' LEFT JOIN {quiz_archiver_tsp} tsp ON j.id = tsp.jobid '. ' LEFT JOIN {user} u ON j.userid = u.id '. ' LEFT JOIN {course} c ON j.courseid = c.id '. ' LEFT JOIN {quiz} q ON j.quizid = q.id '. @@ -368,15 +368,15 @@ public static function get_metadata_for_jobs(int $course_id, int $cm_id, int $qu ' j.cmid = :cmid AND '. ' j.quizid = :quizid ', [ - 'courseid' => $course_id, - 'cmid' => $cm_id, - 'quizid' => $quiz_id + 'courseid' => $courseid, + 'cmid' => $cmid, + 'quizid' => $quizid, ] ); return array_values(array_map(function($j): array { // Get artifactfile metadata if available - $artifactfile_metadata = null; + $artifactfilemetadata = null; if ($j->artifactfileid) { $artifactfile = get_file_storage()->get_file_by_id($j->artifactfileid); if ($artifactfile) { @@ -390,12 +390,12 @@ public static function get_metadata_for_jobs(int $course_id, int $cm_id, int $qu true ); - $artifactfile_metadata = [ + $artifactfilemetadata = [ 'name' => $artifactfile->get_filename(), 'downloadurl' => $artifactfileurl->out(), 'size' => $artifactfile->get_filesize(), 'size_human' => display_size($artifactfile->get_filesize()), - 'checksum' => $j->artifactfilechecksum + 'checksum' => $j->artifactfilechecksum, ]; } } @@ -423,26 +423,26 @@ public static function get_metadata_for_jobs(int $course_id, int $cm_id, int $qu $artifactfile->get_filepath()."{$j->id}/", FileManager::TSP_DATA_REPLY_FILENAME, true - )->out() + )->out(), ]; } // Calculate autodelete metadata if ($j->retentiontime !== null) { if ($j->status == self::STATUS_DELETED) { - $autodelete_str = get_string('archive_deleted', 'quiz_archiver'); - } elseif ($j->retentiontime <= time()) { - $autodelete_str = get_string('archive_autodelete_now', 'quiz_archiver'); + $autodeletestr = get_string('archive_deleted', 'quiz_archiver'); + } else if ($j->retentiontime <= time()) { + $autodeletestr = get_string('archive_autodelete_now', 'quiz_archiver'); } else { - $autodelete_str = get_string( + $autodeletestr = get_string( 'archive_autodelete_in', 'quiz_archiver', util::duration_to_human_readable($j->retentiontime - time()) ); - $autodelete_str .= ' ('.userdate($j->retentiontime, get_string('strftimedatetime', 'core_langconfig')).')'; + $autodeletestr .= ' ('.userdate($j->retentiontime, get_string('strftimedatetime', 'core_langconfig')).')'; } } else { - $autodelete_str = get_string('archive_autodelete_disabled', 'quiz_archiver'); + $autodeletestr = get_string('archive_autodelete_disabled', 'quiz_archiver'); } // Build job metadata array @@ -456,23 +456,23 @@ public static function get_metadata_for_jobs(int $course_id, int $cm_id, int $qu 'retentiontime' => $j->retentiontime, 'autodelete' => $j->retentiontime !== null, 'autodelete_done' => $j->status == self::STATUS_DELETED ? true : null, - 'autodelete_str' => $autodelete_str, + 'autodelete_str' => $autodeletestr, 'user' => [ 'id' => $j->userid, 'firstname' => $j->userfirstname, 'lastname' => $j->userlastname, - 'username' => $j->username + 'username' => $j->username, ], 'course' => [ 'id' => $j->courseid, - 'name' => $j->coursename + 'name' => $j->coursename, ], 'quiz' => [ 'id' => $j->quizid, 'cmid' => $j->cmid, - 'name' => $j->quizname + 'name' => $j->quizname, ], - 'artifactfile' => $artifactfile_metadata, + 'artifactfile' => $artifactfilemetadata, 'tsp' => $tspdata, 'settings' => self::convert_archive_settings_for_display( (new self($j->id, '', -1, -1, -1, -1, -1, null, ''))->get_settings() @@ -515,14 +515,14 @@ public static function delete_expired_artifacts(): int { 'id' ); - $files_deleted = 0; + $numfilesdeleted = 0; foreach ($records as $record) { $job = self::get_by_id($record->id); $job->delete_artifact(); - $files_deleted++; + $numfilesdeleted++; } - return $files_deleted; + return $numfilesdeleted; } /** @@ -548,27 +548,27 @@ public function delete(): void { // Invalidate self $this->id = -1; $this->jobid = ''; - $this->course_id = -1; - $this->cm_id = -1; - $this->quiz_id = -1; - $this->user_id = -1; + $this->courseid = -1; + $this->cmid = -1; + $this->quizid = -1; + $this->userid = -1; $this->wstoken = ''; } /** * Marks this job as timeouted if it is overdue * - * @param int $timeout_min Minutes until a job is considered as timeouted after creation + * @param int $timeoutmin Minutes until a job is considered as timeouted after creation * @return bool True if the job was overdue * @throws \dml_exception */ - public function timeout_if_overdue(int $timeout_min): bool { + public function timeout_if_overdue(int $timeoutmin): bool { if ($this->is_complete()) { return false; } // Check if job is overdue - if ($this->timecreated < (time() - ($timeout_min * 60))) { + if ($this->timecreated < (time() - ($timeoutmin * 60))) { $this->set_status(self::STATUS_TIMEOUT); return true; } else { @@ -639,8 +639,8 @@ public function get_jobid(): string { * * @return int ID of the course this job is associated with */ - public function get_course_id(): int { - return $this->course_id; + public function get_courseid(): int { + return $this->courseid; } /** @@ -648,8 +648,8 @@ public function get_course_id(): int { * * @return int ID of the course module this job is associated with */ - public function get_cm_id(): int { - return $this->cm_id; + public function get_cmid(): int { + return $this->cmid; } /** @@ -657,8 +657,8 @@ public function get_cm_id(): int { * * @return int ID of the quiz this job is associated with */ - public function get_quiz_id(): int { - return $this->quiz_id; + public function get_quizid(): int { + return $this->quizid; } /** @@ -666,8 +666,8 @@ public function get_quiz_id(): int { * * @return int ID of the user that owns this job */ - public function get_user_id(): int { - return $this->user_id; + public function get_userid(): int { + return $this->userid; } /** @@ -684,17 +684,17 @@ public function get_retentiontime(): ?int { * Updates the status of this ArchiveJob * * @param string $status New job status - * @param bool $delete_wstoken_if_completed If true, delete associated wstoken + * @param bool $deletewstokenifcompleted If true, delete associated wstoken * if this status change completed the job - * @param bool $delete_temporary_files_if_completed If true, all linked + * @param bool $deletetemporaryfilesifcompleted If true, all linked * temporary files will be deleted if this status change completed the job * @return void * @throws \dml_exception on failure */ public function set_status( string $status, - bool $delete_wstoken_if_completed = true, - bool $delete_temporary_files_if_completed = true + bool $deletewstokenifcompleted = true, + bool $deletetemporaryfilesifcompleted = true ): void { global $DB; $DB->update_record(self::JOB_TABLE_NAME, (object) [ @@ -704,11 +704,11 @@ public function set_status( ]); if ($this->is_complete()) { - if ($delete_wstoken_if_completed) { + if ($deletewstokenifcompleted) { $this->delete_webservice_token(); } - if ($delete_temporary_files_if_completed) { + if ($deletetemporaryfilesifcompleted) { $this->delete_temporary_files(); } } @@ -788,11 +788,13 @@ public function get_artifact(): ?\stored_file { global $DB; try { $file = $DB->get_record_sql( - 'SELECT pathnamehash FROM {files} AS files JOIN {'.self::JOB_TABLE_NAME.'} AS jobs ON files.id = jobs.artifactfileid WHERE jobs.id = :id', + 'SELECT pathnamehash FROM {files} files JOIN {'.self::JOB_TABLE_NAME.'} AS jobs ON files.id = jobs.artifactfileid WHERE jobs.id = :id', ['id' => $this->id] ); - if (!$file) return null; + if (!$file) { + return null; + } return get_file_storage()->get_file_by_hash($file->pathnamehash); } catch (\Exception $e) { @@ -831,7 +833,7 @@ public function has_artifact(): bool { /** * Links the moodle file with the given ID to this job as the artifact * - * @param int $file_id ID of the file from {files} to link to this + * @param int $fileid ID of the file from {files} to link to this * job as the artifact * @param string $checksum Hash of the artifact file contents to store in * the database @@ -839,16 +841,18 @@ public function has_artifact(): bool { * @return bool True on success * @throws \dml_exception */ - public function link_artifact(int $file_id, string $checksum): bool { + public function link_artifact(int $fileid, string $checksum): bool { global $DB; - if ($file_id < 1) return false; + if ($fileid < 1) { + return false; + } $DB->update_record(self::JOB_TABLE_NAME, (object) [ 'id' => $this->id, - 'artifactfileid' => $file_id, + 'artifactfileid' => $fileid, 'artifactfilechecksum' => $checksum, - 'timemodified' => time() + 'timemodified' => time(), ]); return true; @@ -865,13 +869,13 @@ public function delete_artifact(): void { if ($artifact = $this->get_artifact()) { $artifact->delete(); - $this->tspManager()->delete_tsp_data(); + $this->tspmanager()->delete_tsp_data(); $DB->update_record(self::JOB_TABLE_NAME, (object) [ 'id' => $this->id, 'artifactfileid' => null, 'artifactfilechecksum' => null, - 'timemodified' => time() + 'timemodified' => time(), ]); $this->set_status(self::STATUS_DELETED); @@ -900,7 +904,7 @@ public function link_temporary_file(string $pathnamehash): void { $DB->insert_record(self::FILES_TABLE_NAME, [ 'jobid' => $this->id, - 'pathnamehash' => $pathnamehash + 'pathnamehash' => $pathnamehash, ]); } @@ -914,18 +918,18 @@ public function delete_temporary_files(): int { global $DB; $fs = get_file_storage(); - $num_deleted_files = 0; + $numdeletedfiles = 0; $tempfiles = $DB->get_records(self::FILES_TABLE_NAME, ['jobid' => $this->id]); foreach ($tempfiles as $tempfile) { $f = $fs->get_file_by_hash($tempfile->pathnamehash); if ($f) { $f->delete(); $DB->delete_records(self::FILES_TABLE_NAME, ['jobid' => $this->id, 'pathnamehash' => $tempfile->pathnamehash]); - $num_deleted_files++; + $numdeletedfiles++; } } - return $num_deleted_files; + return $numdeletedfiles; } /** @@ -938,11 +942,11 @@ public function get_temporary_files(): array { global $DB; $fs = get_file_storage(); - $fileEntries = $DB->get_records(self::FILES_TABLE_NAME, ['jobid' => $this->id]); + $fileentries = $DB->get_records(self::FILES_TABLE_NAME, ['jobid' => $this->id]); $files = []; - foreach ($fileEntries as $fileEntry) { - $f = $fs->get_file_by_hash($fileEntry->pathnamehash); + foreach ($fileentries as $fileentry) { + $f = $fs->get_file_by_hash($fileentry->pathnamehash); if ($f !== false) { $files[$f->get_id()] = $f; } @@ -967,17 +971,17 @@ public function delete_webservice_token(): void { * and no orphaned dollar signs * * @param string $pattern Filename pattern to test - * @param array $allowed_variables List of allowed variables + * @param array $allowedvariables List of allowed variables * @return bool True if the pattern is valid */ - protected static function is_valid_filename_pattern(string $pattern, array $allowed_variables): bool { + protected static function is_valid_filename_pattern(string $pattern, array $allowedvariables): bool { // Check for minimal length if (strlen($pattern) < 1) { return false; } // Check for variables - $residue = preg_replace('/\$\{\s*('.implode('|', $allowed_variables).')\s*\}/m', '', $pattern); + $residue = preg_replace('/\$\{\s*('.implode('|', $allowedvariables).')\s*\}/m', '', $pattern); if (strpos($residue, '$') !== false) { return false; } @@ -1056,7 +1060,7 @@ public static function generate_archive_filename($course, $cm, $quiz, string $pa 'quizname' => $quiz->name, 'timestamp' => time(), 'date' => date('Y-m-d'), - 'time' => date('H-i-s') + 'time' => date('H-i-s'), ]; // Substitute variables diff --git a/classes/BackupManager.php b/classes/BackupManager.php index 8bfec2c..05cc61b 100644 --- a/classes/BackupManager.php +++ b/classes/BackupManager.php @@ -39,7 +39,7 @@ class BackupManager { /** @var \stdClass Backup controller metadata from DB */ - protected \stdClass $backup_metadata; + protected \stdClass $backupmetadata; /** @var array Define what to include and exclude in backups */ const BACKUP_SETTINGS = [ @@ -71,13 +71,13 @@ class BackupManager { public function __construct(string $backupid) { global $DB; - $this->backup_metadata = $DB->get_record( + $this->backupmetadata = $DB->get_record( 'backup_controllers', ['backupid' => $backupid], 'id, backupid, operation, type, itemid, userid', MUST_EXIST ); - if ($this->backup_metadata->operation != 'backup') { + if ($this->backupmetadata->operation != 'backup') { throw new \ValueError('Only backup operations are supported.'); } } @@ -110,7 +110,7 @@ public function is_failed(): bool { */ public function get_status(): int { global $DB; - return $DB->get_record('backup_controllers', ['id' => $this->backup_metadata->id], 'status')->status; + return $DB->get_record('backup_controllers', ['id' => $this->backupmetadata->id], 'status')->status; } /** @@ -119,7 +119,7 @@ public function get_status(): int { * @return string Backup ID */ public function get_backupid(): string { - return $this->backup_metadata->backupid; + return $this->backupmetadata->backupid; } /** @@ -128,7 +128,7 @@ public function get_backupid(): string { * @return string Type of this backup controller (e.g. course, activity) */ public function get_type(): string { - return $this->backup_metadata->type; + return $this->backupmetadata->type; } /** @@ -137,7 +137,7 @@ public function get_type(): string { * @return int User-ID of the backup initiator */ public function get_userid(): int { - return $this->backup_metadata->userid; + return $this->backupmetadata->userid; } /** @@ -149,9 +149,9 @@ public function get_userid(): int { public function is_associated_with_job(ArchiveJob $job): bool { switch ($this->get_type()) { case backup::TYPE_1ACTIVITY: - return $this->backup_metadata->itemid == $job->get_cm_id(); + return $this->backupmetadata->itemid == $job->get_cmid(); case backup::TYPE_1COURSE: - return $this->backup_metadata->itemid == $job->get_course_id(); + return $this->backupmetadata->itemid == $job->get_courseid(); default: return false; } @@ -162,13 +162,13 @@ public function is_associated_with_job(ArchiveJob $job): bool { * * @param string $type Type of the backup, based on backup::TYPE_* * @param int $id ID of the backup object - * @param int $user_id User-ID to associate this backup with + * @param int $userid User-ID to associate this backup with * @return object Backup metadata object * @throws \base_setting_exception * @throws \base_task_exception * @throws \dml_exception */ - protected static function initiate_backup(string $type, int $id, int $user_id): object { + protected static function initiate_backup(string $type, int $id, int $userid): object { global $CFG; // Validate type and set variables accordingly @@ -190,7 +190,7 @@ protected static function initiate_backup(string $type, int $id, int $user_id): backup::FORMAT_MOODLE, backup::INTERACTIVE_NO, backup::MODE_ASYNC, - $user_id, + $userid, backup::RELEASESESSION_YES ); $backupid = $bc->get_backupid(); @@ -202,8 +202,8 @@ protected static function initiate_backup(string $type, int $id, int $user_id): if ($task instanceof \backup_root_task) { $task->get_setting('filename')->set_value($filename); - foreach (self::BACKUP_SETTINGS as $setting_name => $setting_value) { - $task->get_setting($setting_name)->set_value($setting_value); + foreach (self::BACKUP_SETTINGS as $name => $value) { + $task->get_setting($name)->set_value($value); } } } @@ -212,7 +212,7 @@ protected static function initiate_backup(string $type, int $id, int $user_id): $bc->set_status(backup::STATUS_AWAITING); $asynctask = new \core\task\asynchronous_backup_task(); $asynctask->set_custom_data(['backupid' => $backupid]); - $asynctask->set_userid($user_id); + $asynctask->set_userid($userid); \core\task\manager::queue_adhoc_task($asynctask); // Generate backup file url @@ -225,14 +225,14 @@ protected static function initiate_backup(string $type, int $id, int $user_id): $filename )); - $internal_wwwroot = get_config('quiz_archiver')->internal_wwwroot; - if ($internal_wwwroot) { - $url = str_replace(rtrim($CFG->wwwroot, '/'), rtrim($internal_wwwroot, '/'), $url); + $internalwwwroot = get_config('quiz_archiver')->internal_wwwroot; + if ($internalwwwroot) { + $url = str_replace(rtrim($CFG->wwwroot, '/'), rtrim($internalwwwroot, '/'), $url); } return (object) [ 'backupid' => $backupid, - 'userid' => $user_id, + 'userid' => $userid, 'context' => $contextid, 'component' => 'backup', 'filearea' => $type, @@ -244,33 +244,32 @@ protected static function initiate_backup(string $type, int $id, int $user_id): ]; } - /** * Initiates a new quiz backup * - * @param int $cm_id ID of the course module for the quiz - * @param int $user_id User-ID to associate this backup with + * @param int $cmid ID of the course module for the quiz + * @param int $userid User-ID to associate this backup with * @return object Backup metadata object * @throws \base_setting_exception * @throws \base_task_exception * @throws \dml_exception */ - public static function initiate_quiz_backup(int $cm_id, int $user_id): object { - return self::initiate_backup(backup::TYPE_1ACTIVITY, $cm_id, $user_id); + public static function initiate_quiz_backup(int $cmid, int $userid): object { + return self::initiate_backup(backup::TYPE_1ACTIVITY, $cmid, $userid); } /** * Initiates a new course backup * - * @param int $course_id ID of the course module for the quiz - * @param int $user_id User-ID to associate this backup with + * @param int $courseid ID of the course module for the quiz + * @param int $userid User-ID to associate this backup with * @return object Backup metadata object * @throws \base_setting_exception * @throws \base_task_exception * @throws \dml_exception */ - public static function initiate_course_backup(int $course_id, int $user_id): object { - return self::initiate_backup(backup::TYPE_1COURSE, $course_id, $user_id); + public static function initiate_course_backup(int $courseid, int $userid): object { + return self::initiate_backup(backup::TYPE_1COURSE, $courseid, $userid); } } diff --git a/classes/FileManager.php b/classes/FileManager.php index fbcc216..e312384 100644 --- a/classes/FileManager.php +++ b/classes/FileManager.php @@ -55,11 +55,11 @@ class FileManager { const ARTIFACT_EXPORT_TEMPFILE_LIFETIME_SECONDS = 86400; /** @var int ID of the course this FileManager is associated with */ - protected int $course_id; + protected int $courseid; /** @var int ID of the course module this FileManager is associated with */ - protected int $cm_id; + protected int $cmid; /** @var int ID of the quiz this FileManager is associated with */ - protected int $quiz_id; + protected int $quizid; /** @var context_course Context of the course this FileManager is associated with */ protected context_course $context; @@ -67,37 +67,37 @@ class FileManager { * Creates a new FileManager instance that is associated with the given quiz, * living inside a course module of a course. * - * @param int $course_id ID of the course - * @param int $cm_id ID of the course module - * @param int $quiz_id ID of the quiz + * @param int $courseid ID of the course + * @param int $cmid ID of the course module + * @param int $quizid ID of the quiz */ - public function __construct(int $course_id, int $cm_id, int $quiz_id) { - $this->course_id = $course_id; - $this->cm_id = $cm_id; - $this->quiz_id = $quiz_id; - $this->context = context_course::instance($course_id); + public function __construct(int $courseid, int $cmid, int $quizid) { + $this->courseid = $courseid; + $this->cmid = $cmid; + $this->quizid = $quizid; + $this->context = context_course::instance($courseid); } /** * Generates a file path based on course, course module, and quiz. If any * part is left empty, the respective partial path is returned. * - * @param int $course_id ID of the course - * @param int $cm_id ID of the course module - * @param int $quiz_id ID of the quiz + * @param int $courseid ID of the course + * @param int $cmid ID of the course module + * @param int $quizid ID of the quiz * @return string Path according to passed IDs */ - public static function get_file_path(int $course_id = -1, int $cm_id = -1, int $quiz_id = -1): string { + public static function get_file_path(int $courseid = -1, int $cmid = -1, int $quizid = -1): string { $path = ''; - if ($course_id > 0) { - $path .= "/$course_id"; + if ($courseid > 0) { + $path .= "/$courseid"; - if ($cm_id > 0) { - $path .= "/$cm_id"; + if ($cmid > 0) { + $path .= "/$cmid"; - if ($quiz_id > 0) { - $path .= "/$quiz_id"; + if ($quizid > 0) { + $path .= "/$quizid"; } } } @@ -110,8 +110,8 @@ public static function get_file_path(int $course_id = -1, int $cm_id = -1, int $ * * @return string Filepath for this FileManager instance */ - protected function get_own_file_path() { - return self::get_file_path($this->course_id, $this->cm_id, $this->quiz_id); + protected function get_own_file_path(): string { + return self::get_file_path($this->courseid, $this->cmid, $this->quizid); } /** @@ -196,12 +196,12 @@ public static function hash_file(stored_file $file, string $algo = 'sha256'): ?s // Calculate file hash chunk-wise $fh = $file->get_content_file_handle(stored_file::FILE_HANDLE_FOPEN); - $hash_ctx = hash_init($algo); + $hashctx = hash_init($algo); while (!feof($fh)) { - hash_update($hash_ctx, fgets($fh, 4096)); + hash_update($hashctx, fgets($fh, 4096)); } - return hash_final($hash_ctx); + return hash_final($hashctx); } /** @@ -278,11 +278,11 @@ protected function send_virtual_file_tsp(string $relativepath): void { throw new \InvalidArgumentException("Job with ID {$jobid} not found"); } - if ($courseid != $job->get_course_id() || $cmid != $job->get_cm_id() || $quizid != $job->get_quiz_id()) { + if ($courseid != $job->get_courseid() || $cmid != $job->get_cmid() || $quizid != $job->get_quizid()) { throw new \InvalidArgumentException("Invalid resource id in {$relativepath}"); } - $tspdata = $job->TSPManager()->get_tsp_data(); + $tspdata = $job->tspmanager()->get_tsp_data(); if (!$tspdata) { throw new \InvalidArgumentException("No TSP data found for job with ID {$jobid}"); } @@ -340,7 +340,7 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in // Prepare $packer = get_file_packer('application/x-gzip'); - $workdir = "{$CFG->tempdir}/quiz_archiver/jid{$jobid}_cid{$this->course_id}_cmid{$this->cm_id}_qid{$this->quiz_id}_aid{$attemptid}"; + $workdir = "{$CFG->tempdir}/quiz_archiver/jid{$jobid}_cid{$this->courseid}_cmid{$this->cmid}_qid{$this->quizid}_aid{$attemptid}"; // Wrap in try-catch to ensure cleanup on exit try { @@ -388,24 +388,24 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in } // Create new archive from extracted attempt data into temp filearea - $export_expiry = time() + self::ARTIFACT_EXPORT_TEMPFILE_LIFETIME_SECONDS; - $export_file = $packer->archive_to_storage( + $exportexpiry = time() + self::ARTIFACT_EXPORT_TEMPFILE_LIFETIME_SECONDS; + $exportfile = $packer->archive_to_storage( [ - $workdir."/attemptdata" + $workdir."/attemptdata", ], $this->context->id, self::COMPONENT_NAME, self::TEMP_FILEAREA_NAME, 0, - "/{$export_expiry}/", - "attempt_export_jid{$jobid}_cid{$this->course_id}_cmid{$this->cm_id}_qid{$this->quiz_id}_aid{$attemptid}.tar.gz", + "/{$exportexpiry}/", + "attempt_export_jid{$jobid}_cid{$this->courseid}_cmid{$this->cmid}_qid{$this->quizid}_aid{$attemptid}.tar.gz", ); - if (!$export_file) { + if (!$exportfile) { throw new \moodle_exception('Failed to create attempt data archive'); } - return $export_file; + return $exportfile; } catch (\Exception $e) { // Ignore skipped archives but always execute cleanup code! if (!($e instanceof \invalid_state_exception)) { @@ -435,7 +435,7 @@ public static function cleanup_temp_files(): int { // Prepare $fs = get_file_storage(); $now = time(); - $files_deleted = 0; + $numfilesdeleted = 0; // Query using raw SQL to get temp files independent of contextid to speed this up a LOT $tempfilerecords = $DB->get_records_sql(" @@ -453,13 +453,13 @@ public static function cleanup_temp_files(): int { if ($expiry < $now) { $fs->get_file_by_id($f->id)->delete(); if ($f->filesize > 0) { - $files_deleted++; + $numfilesdeleted++; } } } } - return $files_deleted; + return $numfilesdeleted; } } diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index 049714f..5a0ca73 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -35,11 +35,11 @@ class RemoteArchiveWorker { /** @var string URL of the remote Quiz Archive Worker instance */ - protected string $server_url; + protected string $serverurl; /** @var int Seconds to wait until a connection can be established before aborting */ - protected int $connection_timeout; + protected int $connectiontimeout; /** @var int Seconds to wait for the request to complete before aborting */ - protected int $request_timeout; + protected int $requesttimeout; /** @var \stdClass Moodle config object for this plugin */ protected \stdClass $config; @@ -49,15 +49,15 @@ class RemoteArchiveWorker { /** * RemoteArchiveWorker constructor * - * @param string $server_url URL of the remote Archive Worker instance - * @param int $connection_timeout Seconds to wait until a connection can be established before aborting - * @param int $request_timeout Seconds to wait for the request to complete before aborting + * @param string $serverurl URL of the remote Archive Worker instance + * @param int $connectiontimeout Seconds to wait until a connection can be established before aborting + * @param int $requesttimeout Seconds to wait for the request to complete before aborting * @throws \dml_exception If retrieving of the plugin config failed */ - public function __construct(string $server_url, int $connection_timeout, int $request_timeout) { - $this->server_url = $server_url; - $this->connection_timeout = $connection_timeout; - $this->request_timeout = $request_timeout; + public function __construct(string $serverurl, int $connectiontimeout, int $requesttimeout) { + $this->serverurl = $serverurl; + $this->connectiontimeout = $connectiontimeout; + $this->requesttimeout = $requesttimeout; $this->config = get_config('quiz_archiver'); } @@ -68,10 +68,10 @@ public function __construct(string $server_url, int $connection_timeout, int $re * @param int $courseid Moodle course id * @param int $cmid Moodle course module id * @param int $quizid Moodle quiz id - * @param array $job_options Associative array containing global job options - * @param mixed $task_archive_quiz_attempts Array containing payload data for + * @param array $joboptions Associative array containing global job options + * @param mixed $taskarchivequizattempts Array containing payload data for * the archive quiz attempts task, or null if it should not be executed - * @param mixed $task_moodle_backups Array containing payload data for + * @param mixed $taskmoodlebackups Array containing payload data for * the moodle backups task, or null if it should not be executed * * @return mixed Job information returned from the archive worker on success @@ -79,46 +79,46 @@ public function __construct(string $server_url, int $connection_timeout, int $re * service or decoding of the response failed * @throws \RuntimeException if the archive worker service reported an error */ - public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, int $quizid, array $job_options, $task_archive_quiz_attempts, $task_moodle_backups) { + public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, int $quizid, array $joboptions, $taskarchivequizattempts, $taskmoodlebackups) { global $CFG; - $moodle_url_base = rtrim($this->config->internal_wwwroot ?: $CFG->wwwroot, '/'); + $moodleurlbase = rtrim($this->config->internal_wwwroot ?: $CFG->wwwroot, '/'); // Prepare request payload - $request_payload = json_encode(array_merge( + $payload = json_encode(array_merge( [ "api_version" => self::API_VERSION, - "moodle_base_url" => $moodle_url_base, - "moodle_ws_url" => $moodle_url_base.'/webservice/rest/server.php', - "moodle_upload_url" => $moodle_url_base.'/webservice/upload.php', + "moodle_base_url" => $moodleurlbase, + "moodle_ws_url" => $moodleurlbase.'/webservice/rest/server.php', + "moodle_upload_url" => $moodleurlbase.'/webservice/upload.php', "wstoken" => $wstoken, "courseid" => $courseid, "cmid" => $cmid, "quizid" => $quizid, - "task_archive_quiz_attempts" => $task_archive_quiz_attempts, - "task_moodle_backups" => $task_moodle_backups, + "task_archive_quiz_attempts" => $taskarchivequizattempts, + "task_moodle_backups" => $taskmoodlebackups, ], - $job_options + $joboptions )); // Execute request // Moodle curl wrapper automatically closes curl handle after requests. No need to call curl_close() manually. $c = new curl(['ignoresecurity' => true]); // Ignore URL filter since we require custom ports and the URL is only configurable by admins - $result = $c->post($this->server_url, $request_payload, [ - 'CURLOPT_CONNECTTIMEOUT' => $this->connection_timeout, - 'CURLOPT_TIMEOUT' => $this->request_timeout, + $result = $c->post($this->serverurl, $payload, [ + 'CURLOPT_CONNECTTIMEOUT' => $this->connectiontimeout, + 'CURLOPT_TIMEOUT' => $this->requesttimeout, 'CURLOPT_HTTPHEADER' => [ 'Content-Type: application/json', - 'Content-Length: '.strlen($request_payload), - ] + 'Content-Length: '.strlen($payload), + ], ]); - $http_status = $c->get_info()['http_code']; // Invalid PHPDoc in Moodle curl wrapper. Array returned instead of string + $httpstatus = $c->get_info()['http_code']; // Invalid PHPDoc in Moodle curl wrapper. Array returned instead of string $data = json_decode($result); // Handle errors - if ($http_status != 200) { + if ($httpstatus != 200) { if ($data === null) { - throw new \UnexpectedValueException("Decoding of the archive worker response failed. HTTP status code $http_status"); + throw new \UnexpectedValueException("Decoding of the archive worker response failed. HTTP status code $httpstatus"); } throw new \RuntimeException($data->error); } else { diff --git a/classes/Report.php b/classes/Report.php index ec8948b..7cb2e8f 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -107,7 +107,7 @@ public function has_access(string $wstoken): bool { 'courseid' => $this->course->id, 'cmid' => $this->cm->id, 'quizid' => $this->quiz->id, - 'wstoken' => $wstoken + 'wstoken' => $wstoken, ], 'status, timecreated', MUST_EXIST); // Completed / aborted jobs invalidate access @@ -150,27 +150,27 @@ public function get_attempts(): array { /** * Gets the metadata of all attempts made inside this quiz, excluding previews. * - * @param array|null $filter_attemptids If given, only attempts with the given + * @param array|null $filterattemptids If given, only attempts with the given * IDs will be returned. * * @return array * @throws \dml_exception */ - public function get_attempts_metadata(array $filter_attemptids = null): array { + public function get_attempts_metadata(array $filterattemptids = null): array { global $DB; // Handle attempt ID filter - if ($filter_attemptids) { - $filter_where_clause = "AND qa.id IN (".implode(', ', array_map(fn ($v): string => intval($v), $filter_attemptids)). ")"; + if ($filterattemptids) { + $filterwhereclause = "AND qa.id IN (".implode(', ', array_map(fn ($v): string => intval($v), $filterattemptids)). ")"; } // Get all requested attempts return $DB->get_records_sql( "SELECT qa.id AS attemptid, qa.userid, qa.attempt, qa.state, qa.timestart, qa.timefinish, u.username, u.firstname, u.lastname ". "FROM {quiz_attempts} qa LEFT JOIN {user} u ON qa.userid = u.id ". - "WHERE qa.preview = 0 AND qa.quiz = :quizid " . ($filter_where_clause ?? ''), + "WHERE qa.preview = 0 AND qa.quiz = :quizid " . ($filterwhereclause ?? ''), [ - "quizid" => $this->quiz->id + "quizid" => $this->quiz->id, ] ); } @@ -220,7 +220,7 @@ public function get_latest_attempt_for_user($userid): ?int { "LIMIT 1", [ "quizid" => $this->quiz->id, - "userid" => $userid + "userid" => $userid, ] ); @@ -251,26 +251,26 @@ public function attempt_exists(int $attemptid): bool { * Builds the section selection array based on the given archive quiz form * data. * - * @param object $archive_quiz_form_data Data object from a submitted archive_quiz_form + * @param object $archivequizformdata Data object from a submitted archive_quiz_form * @return array Associative array containing the selected sections for export */ - public static function build_report_sections_from_formdata(object $archive_quiz_form_data): array { + public static function build_report_sections_from_formdata(object $archivequizformdata): array { // Extract section settings from form data object - $report_sections = []; + $reportsections = []; foreach (self::SECTIONS as $section) { - $report_sections[$section] = $archive_quiz_form_data->{'export_report_section_'.$section}; + $reportsections[$section] = $archivequizformdata->{'export_report_section_'.$section}; } // Disable all sections that depend on a disabled section foreach (self::SECTION_DEPENDENCIES as $section => $dependencies) { foreach ($dependencies as $dependency) { - if (!$report_sections[$dependency]) { - $report_sections[$section] = 0; + if (!$reportsections[$dependency]) { + $reportsections[$section] = 0; } } } - return $report_sections; + return $reportsections; } /** @@ -293,13 +293,13 @@ public function get_attempt_attachments(int $attemptid): array { // Get all files from all questions inside this attempt foreach ($attemptobj->get_slots() as $slot) { $qa = $attemptobj->get_question_attempt($slot); - $qa_files = $qa->get_last_qt_files('attachments', $ctx->id); + $qafiles = $qa->get_last_qt_files('attachments', $ctx->id); - foreach ($qa_files as $qa_file) { + foreach ($qafiles as $qafile) { $files[] = [ 'usageid' => $qa->get_usage_id(), 'slot' => $slot, - 'file' => $qa_file, + 'file' => $qafile, ]; } } @@ -326,7 +326,9 @@ public function get_attempt_attachments_metadata(int $attemptid): array { $attachment['file']->get_contextid(), $attachment['file']->get_component(), $attachment['file']->get_filearea(), - "{$attachment['usageid']}/{$attachment['slot']}/{$attachment['file']->get_itemid()}", # YES, this is the abomination of a non-numeric itemid that question_attempt::get_response_file_url() creates and while eating innocent programmers for breakfast ... + "{$attachment['usageid']}/{$attachment['slot']}/{$attachment['file']->get_itemid()}", + // ^-- YES, this is the abomination of a non-numeric itemid that question_attempt::get_response_file_url() + // creates while eating innocent programmers for breakfast ... $attachment['file']->get_filepath(), $attachment['file']->get_filename() )); @@ -389,53 +391,53 @@ public function generate(int $attemptid, array $sections): string { // ##### Section: Quiz header ##### if ($sections['header']) { - $quiz_header_data = []; - $attempt_user = $DB->get_record('user', ['id' => $attemptobj->get_userid()]); - $userpicture = new \user_picture($attempt_user); + $quizheaderdata = []; + $attemptuser = $DB->get_record('user', ['id' => $attemptobj->get_userid()]); + $userpicture = new \user_picture($attemptuser); $userpicture->courseid = $attemptobj->get_courseid(); - $quiz_header_data['user'] = [ + $quizheaderdata['user'] = [ 'title' => $userpicture, 'content' => new \action_link( - new \moodle_url('/user/view.php', ['id' => $attempt_user->id, 'course' => $attemptobj->get_courseid()]), - fullname($attempt_user, true) + new \moodle_url('/user/view.php', ['id' => $attemptuser->id, 'course' => $attemptobj->get_courseid()]), + fullname($attemptuser, true) ), ]; // Quiz metadata - $quiz_header_data['course'] = [ + $quizheaderdata['course'] = [ 'title' => get_string('course'), - 'content' => $this->course->fullname . ' (Course-ID: ' . $this->course->id . ')' + 'content' => $this->course->fullname . ' (Course-ID: ' . $this->course->id . ')', ]; - $quiz_header_data['quiz'] = [ + $quizheaderdata['quiz'] = [ 'title' => get_string('modulename', 'quiz'), - 'content' => $this->quiz->name . ' (Quiz-ID: ' . $this->quiz->id . ')' + 'content' => $this->quiz->name . ' (Quiz-ID: ' . $this->quiz->id . ')', ]; // Timing information. - $quiz_header_data['startedon'] = [ + $quizheaderdata['startedon'] = [ 'title' => get_string('startedon', 'quiz'), 'content' => userdate($attempt->timestart), ]; - $quiz_header_data['state'] = [ + $quizheaderdata['state'] = [ 'title' => get_string('attemptstate', 'quiz'), 'content' => quiz_attempt::state_name($attempt->state), ]; if ($attempt->state == quiz_attempt::FINISHED) { - $quiz_header_data['completedon'] = [ + $quizheaderdata['completedon'] = [ 'title' => get_string('completedon', 'quiz'), 'content' => userdate($attempt->timefinish), ]; - $quiz_header_data['timetaken'] = [ + $quizheaderdata['timetaken'] = [ 'title' => get_string('attemptduration', 'quiz'), 'content' => $timetaken, ]; } if (!empty($overtime)) { - $quiz_header_data['overdue'] = [ + $quizheaderdata['overdue'] = [ 'title' => get_string('overdue', 'quiz'), 'content' => $overtime, ]; @@ -445,7 +447,7 @@ public function generate(int $attemptid, array $sections): string { $grade = quiz_rescale_grade($attempt->sumgrades, $quiz, false); if ($options->marks >= \question_display_options::MARK_AND_MAX && quiz_has_grades($quiz)) { if (is_null($grade)) { - $quiz_header_data['grade'] = [ + $quizheaderdata['grade'] = [ 'title' => get_string('gradenoun'), 'content' => quiz_format_grade($quiz, $grade), ]; @@ -457,7 +459,7 @@ public function generate(int $attemptid, array $sections): string { $a = new \stdClass(); $a->grade = quiz_format_grade($quiz, $attempt->sumgrades); $a->maxgrade = quiz_format_grade($quiz, $quiz->sumgrades); - $quiz_header_data['marks'] = [ + $quizheaderdata['marks'] = [ 'title' => get_string('marks', 'quiz'), 'content' => get_string('outofshort', 'quiz', $a), ]; @@ -474,7 +476,7 @@ public function generate(int $attemptid, array $sections): string { } else { $formattedgrade = get_string('outof', 'quiz', $a); } - $quiz_header_data['grade'] = [ + $quizheaderdata['grade'] = [ 'title' => get_string('gradenoun'), 'content' => $formattedgrade, ]; @@ -482,19 +484,19 @@ public function generate(int $attemptid, array $sections): string { } // Any additional summary data from the behaviour. - $quiz_header_data = array_merge($quiz_header_data, $attemptobj->get_additional_summary_data($options)); + $quizheaderdata = array_merge($quizheaderdata, $attemptobj->get_additional_summary_data($options)); // Feedback if there is any, and the user is allowed to see it now. if ($sections['quiz_feedback']) { $feedback = $attemptobj->get_overall_feedback($grade); - $quiz_header_data['feedback'] = [ + $quizheaderdata['feedback'] = [ 'title' => get_string('feedback', 'quiz'), 'content' => $feedback, ]; } // Add export date - $quiz_header_data['exportdate'] = [ + $quizheaderdata['exportdate'] = [ 'title' => get_string('archived', 'quiz_archiver'), 'content' => userdate(time()), ]; @@ -502,11 +504,11 @@ public function generate(int $attemptid, array $sections): string { // Add summary table to the html if ($CFG->branch <= 403) { // FIXME: Remove after Moodle 4.1 (LTS) support ends on 2025-12-08 - $html .= $renderer->review_summary_table($quiz_header_data, 0); + $html .= $renderer->review_summary_table($quizheaderdata, 0); } else { // TODO: Rework into proper use of new 4.4 API but create appropriate test cases first. $html .= $renderer->review_attempt_summary( - \mod_quiz\output\attempt_summary_information::create_from_legacy_array($quiz_header_data), + \mod_quiz\output\attempt_summary_information::create_from_legacy_array($quizheaderdata), 0 ); } @@ -550,11 +552,11 @@ public function generate(int $attemptid, array $sections): string { * * @param int $attemptid ID of the attempt this report is for * @param array $sections Array of self::SECTIONS to include in the report - * @param bool $fix_relative_urls If true, all relative URLs will be + * @param bool $fixrelativeurls If true, all relative URLs will be * forcefully mapped to the Moodle base URL * @param bool $minimal If true, unneccessary elements (e.g. navbar) are * stripped from the generated HTML DOM - * @param bool $inline_images If true, all images will be inlined as base64 + * @param bool $inlineimages If true, all images will be inlined as base64 * to prevent rendering issues on user side * * @return string HTML DOM of the rendered quiz attempt report @@ -564,7 +566,7 @@ public function generate(int $attemptid, array $sections): string { * @throws \moodle_exception * @throws \DOMException */ - public function generate_full_page(int $attemptid, array $sections, bool $fix_relative_urls = true, bool $minimal = true, bool $inline_images = true): string { + public function generate_full_page(int $attemptid, array $sections, bool $fixrelativeurls = true, bool $minimal = true, bool $inlineimages = true): string { global $CFG, $OUTPUT; // Build HTML tree @@ -580,45 +582,45 @@ public function generate_full_page(int $attemptid, array $sections, bool $fix_re libxml_clear_errors(); // Patch relative URLs - if ($fix_relative_urls) { - $baseNode = $dom->createElement("base"); - $baseNode->setAttribute("href", $CFG->wwwroot); - $dom->getElementsByTagName('head')[0]->appendChild($baseNode); + if ($fixrelativeurls) { + $basenode = $dom->createElement("base"); + $basenode->setAttribute("href", $CFG->wwwroot); + $dom->getElementsByTagName('head')[0]->appendChild($basenode); } // Cleanup DOM if desired if ($minimal) { // We need to inject custom CSS to hide elements since the DOM generated by // Moodle can be corrupt which causes the PHP DOMDocument parser to die... - $cssHacksNode = $dom->createElement("style", " + $csshacksnode = $dom->createElement("style", " nav.navbar { display: none !important; } - + footer { display: none !important; } - + div#page { margin-top: 0 !important; padding-left: 0 !important; padding-right: 0 !important; height: initial !important; } - + div#page-wrapper { height: initial !important; } - + .stackinputerror { display: none !important; } "); - $dom->getElementsByTagName('head')[0]->appendChild($cssHacksNode); + $dom->getElementsByTagName('head')[0]->appendChild($csshacksnode); } // Convert all local images to base64 if desired - if ($inline_images) { + if ($inlineimages) { foreach ($dom->getElementsByTagName('img') as $img) { if (!$this->convert_image_to_base64($img)) { $img->setAttribute('x-debug-inlining-failed', 'true'); @@ -633,9 +635,11 @@ public function generate_full_page(int $attemptid, array $sections, bool $fix_re const REGEX_MOODLE_URL_STACKPLOT = '/^(?Phttps?:\/\/.+)?(\/question\/type\/stack\/plot\.php\/)(?P[^\/\#\?\&]+\.(png|svg))$/m'; /** @var string Regex for Moodle file API URLs */ + // @codingStandardsIgnoreLine const REGEX_MOODLE_URL_PLUGINFILE = '/^(?Phttps?:\/\/.+)?(\/pluginfile\.php)(?P\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)(\/(?P\d+))?\/(?P.*)?\/(?P[^\/\?\&\#]+))$/m'; /** @var string Regex for Moodle file API URLs of specific types: component=(question|qtype_.*) */ + // @codingStandardsIgnoreLine const REGEX_MOODLE_URL_PLUGINFILE_QUESTION_AND_QTYPE = '/^(?Phttps?:\/\/.+)?(\/pluginfile\.php)(?P\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)\/(?P\d+)\/(?P[^\/\?\&\#]+))$/m'; /** @var string Regex for Moodle theme image files */ @@ -651,7 +655,7 @@ public function generate_full_page(int $attemptid, array $sections, bool $fix_re 'webp' => 'image/webp', 'bmp' => 'image/bmp', 'ico' => 'image/x-icon', - 'tiff' => 'image/tiff' + 'tiff' => 'image/tiff', ]; /** @@ -674,94 +678,94 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } // Remove any parameters and anchors from URL - $img_src = preg_replace('/^([^\?\&\#]+).*$/', '${1}', $img->getAttribute('src')); + $imgsrc = preg_replace('/^([^\?\&\#]+).*$/', '${1}', $img->getAttribute('src')); // Convert relative URLs to absolute URLs $config = get_config('quiz_archiver'); - $moodle_baseurl = rtrim($config->internal_wwwroot ?: $CFG->wwwroot, '/').'/'; + $moodlebaseurl = rtrim($config->internal_wwwroot ?: $CFG->wwwroot, '/').'/'; if ($config->internal_wwwroot) { - $img_src = str_replace(rtrim($CFG->wwwroot, '/'), rtrim($config->internal_wwwroot, '/'), $img_src); + $imgsrc = str_replace(rtrim($CFG->wwwroot, '/'), rtrim($config->internal_wwwroot, '/'), $imgsrc); } - $img_src_url = $this->ensure_absolute_url($img_src, $moodle_baseurl); + $imgsrcurl = $this->ensure_absolute_url($imgsrc, $moodlebaseurl); - # Make sure to only process web URLs and nothing that somehow remained a valid local filepath - if (!substr($img_src_url, 0, 4) === "http") { // Yes, this includes https as well ;) + // Make sure to only process web URLs and nothing that somehow remained a valid local filepath + if (!substr($imgsrcurl, 0, 4) === "http") { // Yes, this includes https as well ;) $img->setAttribute('x-debug-notice', 'not a web URL'); return false; } // Only process allowed image types - $img_ext = pathinfo($img_src_url, PATHINFO_EXTENSION); - if (!array_key_exists($img_ext, self::ALLOWED_IMAGE_TYPES)) { + $imgext = pathinfo($imgsrcurl, PATHINFO_EXTENSION); + if (!array_key_exists($imgext, self::ALLOWED_IMAGE_TYPES)) { // Edge case: Moodle theme images must not always contain extensions - if (!preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $img_src_url)) { + if (!preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $imgsrcurl)) { $img->setAttribute('x-debug-notice', 'image type not allowed'); return false; } } // Try to get image content based on link type - $regex_matches = null; - $img_data = null; - $img_mime = array_key_exists($img_ext, self::ALLOWED_IMAGE_TYPES) ? self::ALLOWED_IMAGE_TYPES[$img_ext] : null; + $regexmatches = null; + $imgdata = null; + $imgmime = array_key_exists($imgext, self::ALLOWED_IMAGE_TYPES) ? self::ALLOWED_IMAGE_TYPES[$imgext] : null; // Handle special internal URLs first - $is_internal_url = substr($img_src_url, 0, strlen($moodle_baseurl)) === $moodle_baseurl; - if ($is_internal_url) { - if (preg_match(self::REGEX_MOODLE_URL_PLUGINFILE, $img_src_url, $regex_matches)) { + $isinternalurl = substr($imgsrcurl, 0, strlen($moodlebaseurl)) === $moodlebaseurl; + if ($isinternalurl) { + if (preg_match(self::REGEX_MOODLE_URL_PLUGINFILE, $imgsrcurl, $regexmatches)) { // ### Link type: Moodle pluginfile URL ### $img->setAttribute('x-url-type', 'MOODLE_URL_PLUGINFILE'); // Edge case detection: question / qtype files follow another pattern, inserting questionbank_id and question_slot after filearea ... - if ($regex_matches['component'] == 'question' || strpos($regex_matches['component'], 'qtype_') === 0) { - $regex_matches = null; - if (!preg_match(self::REGEX_MOODLE_URL_PLUGINFILE_QUESTION_AND_QTYPE, $img_src_url, $regex_matches)) { + if ($regexmatches['component'] == 'question' || strpos($regexmatches['component'], 'qtype_') === 0) { + $regexmatches = null; + if (!preg_match(self::REGEX_MOODLE_URL_PLUGINFILE_QUESTION_AND_QTYPE, $imgsrcurl, $regexmatches)) { $img->setAttribute('x-url-type', 'MOODLE_URL_PLUGINFILE_QUESTION_AND_QTYPE'); return false; } } // Decode RFC 3986 URL escaped sequences - $regex_matches['filename'] = urldecode($regex_matches['filename']); + $regexmatches['filename'] = urldecode($regexmatches['filename']); // Get file content via Moodle File API $fs = get_file_storage(); $file = $fs->get_file( - $regex_matches['contextid'], - $regex_matches['component'], - $regex_matches['filearea'], - !empty($regex_matches['itemid']) ? $regex_matches['itemid'] : 0, + $regexmatches['contextid'], + $regexmatches['component'], + $regexmatches['filearea'], + !empty($regexmatches['itemid']) ? $regexmatches['itemid'] : 0, '/', // Dirty simplification but works for now *sigh* - $regex_matches['filename'] + $regexmatches['filename'], ); if (!$file) { $img->setAttribute('x-debug-notice', 'moodledata file not found'); return false; } - $img_data = $file->get_content(); - } else if (preg_match(self::REGEX_MOODLE_URL_STACKPLOT, $img_src_url, $regex_matches)) { + $imgdata = $file->get_content(); + } else if (preg_match(self::REGEX_MOODLE_URL_STACKPLOT, $imgsrcurl, $regexmatches)) { // ### Link type: qtype_stack plotfile ### $img->setAttribute('x-url-type', 'MOODLE_URL_STACKPLOT'); // Decode RFC 3986 URL escaped sequences - $regex_matches['filename'] = urldecode($regex_matches['filename']); + $regexmatches['filename'] = urldecode($regexmatches['filename']); // Get STACK plot file from disk - $filename = $CFG->dataroot . '/stack/plots/' . clean_filename($regex_matches['filename']); + $filename = $CFG->dataroot . '/stack/plots/' . clean_filename($regexmatches['filename']); if (!is_readable($filename)) { $img->setAttribute('x-debug-notice', 'stack plot file not readable'); return false; } - $img_data = file_get_contents($filename); + $imgdata = file_get_contents($filename); } else { $img->setAttribute('x-debug-internal-url-without-handler', ''); } } // Fall back to generic URL handling if image data not already set by internal handling routines - if ($img_data === null) { - if (preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $img_src_url)) { + if ($imgdata === null) { + if (preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $imgsrcurl)) { // ### Link type: Moodle theme image ### // We should be able to download there images using a simple HTTP request // Accessing them directly from disk is a little more complicated due to caching and other logic (see: /theme/image.php). @@ -773,18 +777,18 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } // No special local file access. Try to download via HTTP request - $c = new curl(['ignoresecurity' => $is_internal_url]); - $img_data = $c->get($img_src_url); // Curl handle automatically closed - if ($c->get_info()['http_code'] !== 200 || $img_data === false) { - $img->setAttribute('x-debug-more', $img_data); + $c = new curl(['ignoresecurity' => $isinternalurl]); + $imgdata = $c->get($imgsrcurl); // Curl handle automatically closed + if ($c->get_info()['http_code'] !== 200 || $imgdata === false) { + $img->setAttribute('x-debug-more', $imgdata); $img->setAttribute('x-debug-notice', 'HTTP request failed'); return false; } // Check if we need to detect mime type from response headers - if (!$img_mime) { - $img_mime = $c->get_info()['content_type']; - if (!in_array($img_mime, self::ALLOWED_IMAGE_TYPES)) { + if (!$imgmime) { + $imgmime = $c->get_info()['content_type']; + if (!in_array($imgmime, self::ALLOWED_IMAGE_TYPES)) { $img->setAttribute('x-debug-notice', 'image type from response header is not allowed'); return false; } @@ -792,12 +796,12 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } // Encode and replace image if present - if (!$img_data) { + if (!$imgdata) { $img->setAttribute('x-debug-notice', 'no image data'); return false; } - $img_base64 = base64_encode($img_data); - $img->setAttribute('src', 'data:'.$img_mime.';base64,'.$img_base64); + $imgbase64 = base64_encode($imgdata); + $img->setAttribute('src', 'data:'.$imgmime.';base64,'.$imgbase64); return true; } @@ -823,7 +827,10 @@ protected static function ensure_absolute_url(string $url, string $base): string } /* parse base URL and convert to local variables: $scheme, $host, $path */ - extract(parse_url($base)); + $urlparsed = parse_url($base); + $scheme = $urlparsed['scheme']; + $host = $urlparsed['host']; + $path = $urlparsed['path']; /* remove non-directory element from path */ $path = preg_replace('#/[^/]*$#', '', $path); @@ -838,7 +845,9 @@ protected static function ensure_absolute_url(string $url, string $base): string /* replace '//' or '/./' or '/foo/../' with '/' */ $re = ['#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#']; - for ($n = 1; $n > 0; $abs = preg_replace($re, '/', $abs, -1, $n)) {} + for ($n = 1; $n > 0; $abs = preg_replace($re, '/', $abs, -1, $n)) { + continue; + } /* absolute URL is ready! */ return $scheme.'://'.$abs; diff --git a/classes/TSPManager.php b/classes/TSPManager.php index c87de8a..d6a15b3 100644 --- a/classes/TSPManager.php +++ b/classes/TSPManager.php @@ -55,7 +55,7 @@ public function __construct(ArchiveJob $job) { * * @return TimeStampProtocolClient A fresh TimeStampProtocolClient instance */ - protected function getTimestampProtocolClient(): TimeStampProtocolClient { + protected function get_timestampprotocolclient(): TimeStampProtocolClient { return new TimeStampProtocolClient($this->config->tsp_server_url); } @@ -86,11 +86,11 @@ public function wants_tsp_timestamp(): bool { public function has_tsp_timestamp(): bool { global $DB; - $num_tsp_records = $DB->count_records(self::TSP_TABLE_NAME, [ - 'jobid' => $this->job->get_id() + $numtsprecords = $DB->count_records(self::TSP_TABLE_NAME, [ + 'jobid' => $this->job->get_id(), ]); - return $num_tsp_records > 0; + return $numtsprecords > 0; } /** @@ -152,14 +152,14 @@ public function timestamp(): void { } // Issue TSP timestamp - $tspclient = $this->getTimestampProtocolClient(); + $tspclient = $this->get_timestampprotocolclient(); $tspdata = $tspclient->sign($artifactchecksum); // Store TSP data $DB->insert_record(self::TSP_TABLE_NAME, [ 'jobid' => $this->job->get_id(), 'timecreated' => time(), - 'server' => $tspclient->get_server_url(), + 'server' => $tspclient->get_serverurl(), 'timestampquery' => $tspdata['query'], 'timestampreply' => $tspdata['reply'], ]); diff --git a/classes/TimeStampProtocolClient.php b/classes/TimeStampProtocolClient.php index ad3b71d..f5734b2 100644 --- a/classes/TimeStampProtocolClient.php +++ b/classes/TimeStampProtocolClient.php @@ -36,7 +36,7 @@ class TimeStampProtocolClient { /** @var string URL of the TSP server */ - private string $server_url; + private string $serverurl; /** @var string Content-Type header for TimeStampQuery */ const CONTENT_TYPE_TIMESTAMP_QUERY = 'application/timestamp-query'; @@ -47,10 +47,10 @@ class TimeStampProtocolClient { /** * Creates a new TimeStampProtocolClient instance. * - * @param string $server_url URL of the TSP server + * @param string $serverurl URL of the TSP server */ - public function __construct(string $server_url) { - $this->server_url = $server_url; + public function __construct(string $serverurl) { + $this->serverurl = $serverurl; } /** @@ -58,8 +58,8 @@ public function __construct(string $server_url) { * * @return string URL of the TSP server */ - public function get_server_url() { - return $this->server_url; + public function get_serverurl() { + return $this->serverurl; } /** @@ -73,12 +73,12 @@ public function get_server_url() { */ public function sign(string $sha256hash): array { // Prepare TimeStampRequest - $nonce = self::generateNonce(); - $tsreq = self::createTimeStampReq($sha256hash, $nonce); + $nonce = self::generate_nonce(); + $tsreq = self::create_timestamp_request($sha256hash, $nonce); // Send TimeStampRequest to TSP server $c = new curl(); - $tsresp = $c->post($this->server_url, $tsreq, [ + $tsresp = $c->post($this->serverurl, $tsreq, [ 'CURLOPT_SSL_VERIFYPEER' => true, 'CURLOPT_CONNECTTIMEOUT' => 15, 'CURLOPT_TIMEOUT' => 15, @@ -86,28 +86,27 @@ public function sign(string $sha256hash): array { 'Content-Type: ' . self::CONTENT_TYPE_TIMESTAMP_QUERY, 'Content-Length: ' . strlen($tsreq), ], - ]); // Error handling if ($c->error) { // Moodle curl wrapper provides no getter for curl error message throw new \Exception(get_string('tsp_client_error_curl', 'quiz_archiver', $c->error)); } else { - $curl_info = $c->get_info(); + $curlinfo = $c->get_info(); } - if ($curl_info['http_code'] !== 200) { - throw new \Exception(get_string('tsp_client_error_http_code', 'quiz_archiver', $curl_info['http_code'])); + if ($curlinfo['http_code'] !== 200) { + throw new \Exception(get_string('tsp_client_error_http_code', 'quiz_archiver', $curlinfo['http_code'])); } - if ($curl_info['content_type'] !== self::CONTENT_TYPE_TIMESTAMP_REPLY) { - throw new \Exception(get_string('tsp_client_error_content_type', 'quiz_archiver', $curl_info['content_type'])); + if ($curlinfo['content_type'] !== self::CONTENT_TYPE_TIMESTAMP_REPLY) { + throw new \Exception(get_string('tsp_client_error_content_type', 'quiz_archiver', $curlinfo['content_type'])); } // Success return [ 'query' => $tsreq, - 'reply' => $tsresp + 'reply' => $tsresp, ]; } @@ -117,7 +116,7 @@ public function sign(string $sha256hash): array { * @return string 128-bit nonce * @throws \Exception If an appropriate source of randomness cannot be found. */ - public static function generateNonce(): string { + public static function generate_nonce(): string { return random_bytes(16); } @@ -129,11 +128,11 @@ public static function generateNonce(): string { * * @param string $sha256hash Hexadecimal SHA256 hash of the data to be signed * @param string $nonce 128-bit nonce to be used in the TimeStampReq - * @param bool $requestTSAPublicKey Whether to request the TSA's public key + * @param bool $requesttsapublickey Whether to request the TSA's public key * @return string ASN.1 encoded TimeStampReq * @throws \ValueError If the SHA256 hash or nonce are invalid */ - protected static function createTimeStampReq(string $sha256hash, string $nonce, bool $requestTSAPublicKey = false): string { + protected static function create_timestamp_request(string $sha256hash, string $nonce, bool $requesttsapublickey = false): string { // Validate input if (strlen($sha256hash) !== 64) { throw new \ValueError('Invalid hexadecimal SHA256 hash'); @@ -167,7 +166,7 @@ protected static function createTimeStampReq(string $sha256hash, string $nonce, $asn1[] = chr(0x02) . chr(0x10) . $nonce; // INTEGER + Length (16 bytes) + nonce value // -> certReq - if ($requestTSAPublicKey) { + if ($requesttsapublickey) { $asn1[] = chr(0x01) . chr(0x01) . chr(0xff); // BOOLEAN + Length + True } diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index aacca04..b26ffa6 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -24,6 +24,8 @@ namespace quiz_archiver\external; +defined('MOODLE_INTERNAL') || die(); + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); @@ -35,8 +37,6 @@ use quiz_archiver\ArchiveJob; use quiz_archiver\Report; -defined('MOODLE_INTERNAL') || die(); - /** * API endpoint to generate a quiz attempt report */ @@ -64,7 +64,7 @@ public static function execute_parameters(): external_function_parameters { 'Sections to include in the report', VALUE_REQUIRED ), - 'attachments' => new external_value(PARAM_BOOL, 'Whether to check for attempts and include metadata if present', VALUE_REQUIRED) + 'attachments' => new external_value(PARAM_BOOL, 'Whether to check for attempts and include metadata if present', VALUE_REQUIRED), ]); } @@ -99,13 +99,13 @@ public static function execute_returns(): external_single_structure { /** * Generate an quiz attempt report as HTML DOM * - * @param int $courseid_raw ID of the course - * @param int $cmid_raw ID of the course module - * @param int $quizid_raw ID of the quiz - * @param int $attemptid_raw ID of the quiz attempt - * @param string $filenamepattern_raw Filename pattern to use for report name generation - * @param array $sections_raw Sections to include in the report - * @param bool $attachments_raw Whether to check for attempts and include metadata if present + * @param int $courseidraw ID of the course + * @param int $cmidraw ID of the course module + * @param int $quizidraw ID of the quiz + * @param int $attemptidraw ID of the quiz attempt + * @param string $filenamepatternraw Filename pattern to use for report name generation + * @param array $sectionsraw Sections to include in the report + * @param bool $attachmentsraw Whether to check for attempts and include metadata if present * * @return array According to execute_returns() * @@ -115,25 +115,25 @@ public static function execute_returns(): external_single_structure { * @throws \DOMException */ public static function execute( - int $courseid_raw, - int $cmid_raw, - int $quizid_raw, - int $attemptid_raw, - string $filenamepattern_raw, - array $sections_raw, - bool $attachments_raw + int $courseidraw, + int $cmidraw, + int $quizidraw, + int $attemptidraw, + string $filenamepatternraw, + array $sectionsraw, + bool $attachmentsraw ): array { global $DB, $PAGE; // Validate request $params = self::validate_parameters(self::execute_parameters(), [ - 'courseid' => $courseid_raw, - 'cmid' => $cmid_raw, - 'quizid' => $quizid_raw, - 'attemptid' => $attemptid_raw, - 'filenamepattern' => $filenamepattern_raw, - 'sections' => $sections_raw, - 'attachments' => $attachments_raw, + 'courseid' => $courseidraw, + 'cmid' => $cmidraw, + 'quizid' => $quizidraw, + 'attemptid' => $attemptidraw, + 'filenamepattern' => $filenamepatternraw, + 'sections' => $sectionsraw, + 'attachments' => $attachmentsraw, ]); // Check capabilities diff --git a/classes/external/get_attempts_metadata.php b/classes/external/get_attempts_metadata.php index 409f2b7..d0d4679 100644 --- a/classes/external/get_attempts_metadata.php +++ b/classes/external/get_attempts_metadata.php @@ -24,6 +24,8 @@ namespace quiz_archiver\external; +defined('MOODLE_INTERNAL') || die(); + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); @@ -34,8 +36,6 @@ use core_external\external_value; use quiz_archiver\Report; -defined('MOODLE_INTERNAL') || die(); - /** * API endpoint to access quiz attempt metadata */ @@ -85,10 +85,10 @@ public static function execute_returns(): external_single_structure { /** * Generate an quiz attempt report as HTML DOM * - * @param int $courseid_raw ID of the course - * @param int $cmid_raw ID of the course module - * @param int $quizid_raw ID of the quiz - * @param array $attemptids_raw IDs of the quiz attempts + * @param int $courseidraw ID of the course + * @param int $cmidraw ID of the course module + * @param int $quizidraw ID of the quiz + * @param array $attemptidsraw IDs of the quiz attempts * * @return array According to execute_returns() * @@ -96,15 +96,15 @@ public static function execute_returns(): external_single_structure { * @throws \dml_transaction_exception * @throws \moodle_exception */ - public static function execute(int $courseid_raw, int $cmid_raw, int $quizid_raw, array $attemptids_raw): array { + public static function execute(int $courseidraw, int $cmidraw, int $quizidraw, array $attemptidsraw): array { global $DB; // Validate request $params = self::validate_parameters(self::execute_parameters(), [ - 'courseid' => $courseid_raw, - 'cmid' => $cmid_raw, - 'quizid' => $quizid_raw, - 'attemptids' => $attemptids_raw + 'courseid' => $courseidraw, + 'cmid' => $cmidraw, + 'quizid' => $quizidraw, + 'attemptids' => $attemptidsraw, ]); // Check capabilities @@ -126,17 +126,17 @@ public static function execute(int $courseid_raw, int $cmid_raw, int $quizid_raw $report = new Report($course, $cm, $quiz); if (!$report->has_access(optional_param('wstoken', null, PARAM_TEXT))) { return [ - 'status' => 'E_ACCESS_DENIED' + 'status' => 'E_ACCESS_DENIED', ]; } - $attempt_metadata = $report->get_attempts_metadata($params['attemptids']); + $attemptmetadata = $report->get_attempts_metadata($params['attemptids']); return [ 'courseid' => $params['courseid'], 'cmid' => $params['cmid'], 'quizid' => $params['quizid'], - 'attempts' => $attempt_metadata, - 'status' => 'OK' + 'attempts' => $attemptmetadata, + 'status' => 'OK', ]; } diff --git a/classes/external/get_backup_status.php b/classes/external/get_backup_status.php index 7e6859f..d4622ab 100644 --- a/classes/external/get_backup_status.php +++ b/classes/external/get_backup_status.php @@ -24,6 +24,8 @@ namespace quiz_archiver\external; +defined('MOODLE_INTERNAL') || die(); + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); @@ -34,8 +36,6 @@ use quiz_archiver\ArchiveJob; use quiz_archiver\BackupManager; -defined('MOODLE_INTERNAL') || die(); - /** * API endpoint to get the status of a Moodle backup */ @@ -65,8 +65,8 @@ public static function execute_returns(): external_single_structure { /** * Execute the webservice function * - * @param string $jobid_raw - * @param string $backupid_raw + * @param string $jobidraw + * @param string $backupidraw * @return array * @throws \coding_exception * @throws \dml_exception @@ -74,13 +74,13 @@ public static function execute_returns(): external_single_structure { * @throws \required_capability_exception */ public static function execute( - string $jobid_raw, - string $backupid_raw + string $jobidraw, + string $backupidraw ): array { // Validate request $params = self::validate_parameters(self::execute_parameters(), [ - 'jobid' => $jobid_raw, - 'backupid' => $backupid_raw, + 'jobid' => $jobidraw, + 'backupid' => $backupidraw, ]); // Validate that the jobid exists @@ -96,7 +96,7 @@ public static function execute( } // Check capabilities - $context = \context_module::instance($job->get_cm_id()); + $context = \context_module::instance($job->get_cmid()); require_capability('mod/quiz_archiver:use_webservice', $context); // Get backup diff --git a/classes/external/process_uploaded_artifact.php b/classes/external/process_uploaded_artifact.php index bc729aa..2f1a043 100644 --- a/classes/external/process_uploaded_artifact.php +++ b/classes/external/process_uploaded_artifact.php @@ -24,6 +24,8 @@ namespace quiz_archiver\external; +defined('MOODLE_INTERNAL') || die(); + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); @@ -34,8 +36,6 @@ use quiz_archiver\ArchiveJob; use quiz_archiver\FileManager; -defined('MOODLE_INTERNAL') || die(); - /** * API endpoint to process an artifact that was uploaded by the quiz archiver worker service */ @@ -72,15 +72,15 @@ public static function execute_returns(): external_single_structure { /** * Execute the webservice function * - * @param string $jobid_raw - * @param string $artifact_component_raw - * @param int $artifact_contextid_raw - * @param int $artifact_userid_raw - * @param string $artifact_filearea_raw - * @param string $artifact_filename_raw - * @param string $artifact_filepath_raw - * @param int $artifact_itemid_raw - * @param string $artifact_sha256sum_raw + * @param string $jobidraw + * @param string $artifactcomponentraw + * @param int $artifactcontextidraw + * @param int $artifactuseridraw + * @param string $artifactfilearearaw + * @param string $artifactfilenameraw + * @param string $artifactfilepathraw + * @param int $artifactitemidraw + * @param string $artifactsha256sumraw * @return array * @throws \coding_exception * @throws \dml_exception @@ -88,27 +88,27 @@ public static function execute_returns(): external_single_structure { * @throws \required_capability_exception */ public static function execute( - string $jobid_raw, - string $artifact_component_raw, - int $artifact_contextid_raw, - int $artifact_userid_raw, - string $artifact_filearea_raw, - string $artifact_filename_raw, - string $artifact_filepath_raw, - int $artifact_itemid_raw, - string $artifact_sha256sum_raw + string $jobidraw, + string $artifactcomponentraw, + int $artifactcontextidraw, + int $artifactuseridraw, + string $artifactfilearearaw, + string $artifactfilenameraw, + string $artifactfilepathraw, + int $artifactitemidraw, + string $artifactsha256sumraw ): array { // Validate request $params = self::validate_parameters(self::execute_parameters(), [ - 'jobid' => $jobid_raw, - 'artifact_component' => $artifact_component_raw, - 'artifact_contextid' => $artifact_contextid_raw, - 'artifact_userid' => $artifact_userid_raw, - 'artifact_filearea' => $artifact_filearea_raw, - 'artifact_filename' => $artifact_filename_raw, - 'artifact_filepath' => $artifact_filepath_raw, - 'artifact_itemid' => $artifact_itemid_raw, - 'artifact_sha256sum' => $artifact_sha256sum_raw, + 'jobid' => $jobidraw, + 'artifact_component' => $artifactcomponentraw, + 'artifact_contextid' => $artifactcontextidraw, + 'artifact_userid' => $artifactuseridraw, + 'artifact_filearea' => $artifactfilearearaw, + 'artifact_filename' => $artifactfilenameraw, + 'artifact_filepath' => $artifactfilepathraw, + 'artifact_itemid' => $artifactitemidraw, + 'artifact_sha256sum' => $artifactsha256sumraw, ]); // Validate that the jobid exists and no artifact was uploaded previously @@ -133,7 +133,7 @@ public static function execute( } // Check capabilities - $context = \context_module::instance($job->get_cm_id()); + $context = \context_module::instance($job->get_cmid()); require_capability('mod/quiz_archiver:use_webservice', $context); // Validate uploaded file @@ -161,7 +161,7 @@ public static function execute( } // Store uploaded file - $fm = new FileManager($job->get_course_id(), $job->get_cm_id(), $job->get_quiz_id()); + $fm = new FileManager($job->get_courseid(), $job->get_cmid(), $job->get_quizid()); try { $artifact = $fm->store_uploaded_artifact($draftfile); $job->link_artifact($artifact->get_id(), $params['artifact_sha256sum']); @@ -173,9 +173,10 @@ public static function execute( } // Timestamp artifact file using TSP - if ($job->TSPManager()->wants_tsp_timestamp()) { + if ($job->tspmanager()->wants_tsp_timestamp()) { try { - $job->TSPManager()->timestamp(); + $job->tspmanager()->timestamp(); + // @codingStandardsIgnoreStart } catch (\Exception $e) { // TODO: Fail silently for now ... // $job->set_status(ArchiveJob::STATUS_FAILED); @@ -183,6 +184,7 @@ public static function execute( // 'status' => 'E_TSP_TIMESTAMP_FAILED' // ]; } + // @codingStandardsIgnoreEnd } // Report success diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index fe522ad..e6cfd24 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -24,6 +24,8 @@ namespace quiz_archiver\external; +defined('MOODLE_INTERNAL') || die(); + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); @@ -33,8 +35,6 @@ use core_external\external_value; use quiz_archiver\ArchiveJob; -defined('MOODLE_INTERNAL') || die(); - /** * API endpoint to update the status of a quiz archiver job */ @@ -64,28 +64,28 @@ public static function execute_returns(): external_single_structure { /** * Execute the webservice function * - * @param string $jobid_raw - * @param string $status_raw + * @param string $jobidraw + * @param string $statusraw * @return array * @throws \invalid_parameter_exception * @throws \required_capability_exception * @throws \coding_exception */ public static function execute( - string $jobid_raw, - string $status_raw + string $jobidraw, + string $statusraw ): array { // Validate request $params = self::validate_parameters(self::execute_parameters(), [ - 'jobid' => $jobid_raw, - 'status' => $status_raw, + 'jobid' => $jobidraw, + 'status' => $statusraw, ]); try { $job = ArchiveJob::get_by_jobid($params['jobid']); // Check capabilities - $context = \context_module::instance($job->get_cm_id()); + $context = \context_module::instance($job->get_cmid()); require_capability('mod/quiz_archiver:use_webservice', $context); if ($job->is_complete()) { diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index ae7033f..d99ff22 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -38,20 +38,20 @@ */ class archive_quiz_form extends \moodleform { - /** @var string Name of the quiz to be exportet */ - protected string $quiz_name; + /** @var string Name of the quiz to be exported */ + protected string $quizname; /** @var int Number of attempts to be exported */ - protected int $num_attempts; + protected int $numattempts; /** * Creates a new archive_quiz_form instance * - * @param string $quiz_name Name of the quiz to be exported - * @param int $num_attempts Number of attempts to be exported + * @param string $quizname Name of the quiz to be exported + * @param int $numattempts Number of attempts to be exported */ - public function __construct(string $quiz_name, int $num_attempts) { - $this->quiz_name = $quiz_name; - $this->num_attempts = $num_attempts; + public function __construct(string $quizname, int $numattempts) { + $this->quizname = $quizname; + $this->numattempts = $numattempts; parent::__construct(); } @@ -80,14 +80,14 @@ public function definition() { $mform->addElement('header', 'header_settings', get_string('settings')); // Options: Test - $mform->addElement('static', 'quiz_name', get_string('modulename', 'mod_quiz'), $this->quiz_name); + $mform->addElement('static', 'quiz_name', get_string('modulename', 'mod_quiz'), $this->quizname); // Options: Attempts $mform->addElement( 'advcheckbox', 'export_attempts', get_string('attempts', 'mod_quiz'), - get_string('export_attempts_num', 'quiz_archiver', $this->num_attempts), + get_string('export_attempts_num', 'quiz_archiver', $this->numattempts), ['disabled' => 'disabled'], ['1', '1'] ); @@ -166,7 +166,7 @@ public function definition() { $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern', 'quiz_archiver', '', false, [ 'variables' => array_reduce( ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES, - fn($res, $varname) => $res . "
  • \${" . $varname . "}: " . get_string('archive_filename_pattern_variable_' . $varname, 'quiz_archiver') . "
  • ", + fn($res, $varname) => $res."
  • \${".$varname."}: ".get_string('archive_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • ", "" ), 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), @@ -189,7 +189,7 @@ public function definition() { $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern', 'quiz_archiver', '', false, [ 'variables' => array_reduce( ArchiveJob::ATTEMPT_FILENAME_PATTERN_VARIABLES, - fn($res, $varname) => $res . "
  • \${" . $varname . "}: " . get_string('export_attempts_filename_pattern_variable_' . $varname, 'quiz_archiver') . "
  • ", + fn($res, $varname) => $res."
  • \${".$varname."}: ".get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • ", "" ), 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), @@ -248,7 +248,7 @@ public function definition() { * @return array Associative array with error messages for invalid fields * @throws \coding_exception */ - function validation($data, $files) { + public function validation($data, $files) { $errors = parent::validation($data, $files); // Validate filename pattern @@ -269,7 +269,7 @@ function validation($data, $files) { * @return \stdClass Cleared, submitted form data * @throws \dml_exception */ - public function get_data():\stdClass { + public function get_data(): \stdClass { $data = parent::get_data(); $config = get_config('quiz_archiver'); diff --git a/classes/form/artifact_delete_form.php b/classes/form/artifact_delete_form.php index 35e864e..5cb8b5f 100644 --- a/classes/form/artifact_delete_form.php +++ b/classes/form/artifact_delete_form.php @@ -50,19 +50,19 @@ public function definition() { $artifactfile = $job->get_artifact(); // Generic warning message - $warn_head = get_string('delete_artifact', 'quiz_archiver'); + $warnhead = get_string('delete_artifact', 'quiz_archiver'); if ($artifactfile) { - $warn_msg = get_string('delete_artifact_warning', 'quiz_archiver'); - $warn_details = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); - $warn_details .= '
    '; - $warn_details .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; + $warnmsg = get_string('delete_artifact_warning', 'quiz_archiver'); + $warndetails = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); + $warndetails .= '
    '; + $warndetails .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; // Warn additionally if job is scheduled for automatic deletion if ($job->is_autodelete_enabled()) { if ($job->get_status() === ArchiveJob::STATUS_FINISHED) { - $warn_msg .= '

    '; - $warn_msg .= get_string( + $warnmsg .= '

    '; + $warnmsg .= get_string( 'delete_job_warning_retention', 'quiz_archiver', userdate($job->get_retentiontime(), get_string('strftimedatetime', 'langconfig')) @@ -70,17 +70,17 @@ public function definition() { } } } else { - $warn_msg = get_string('error').': '.get_string('quiz_archive_not_found', 'quiz_archiver', $job->get_jobid()); - $warn_details = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); + $warnmsg = get_string('error').': '.get_string('quiz_archive_not_found', 'quiz_archiver', $job->get_jobid()); + $warndetails = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); } // Print warning element $mform->addElement('html', << -

    $warn_head

    - $warn_msg +

    $warnhead

    + $warnmsg
    - $warn_details + $warndetails
    EOD); diff --git a/classes/form/job_delete_form.php b/classes/form/job_delete_form.php index 5ca71fd..e26f9ed 100644 --- a/classes/form/job_delete_form.php +++ b/classes/form/job_delete_form.php @@ -50,21 +50,21 @@ public function definition() { $artifactfile = $job->get_artifact(); // Generic warning message - $warn_head = get_string('delete_job', 'quiz_archiver'); - $warn_msg = get_string('delete_job_warning', 'quiz_archiver'); - $warn_details = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); + $warnhead = get_string('delete_job', 'quiz_archiver'); + $warnmsg = get_string('delete_job_warning', 'quiz_archiver'); + $warndetails = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); // Add artifact details if available if ($artifactfile) { - $warn_details .= '
    '; - $warn_details .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; + $warndetails .= '
    '; + $warndetails .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; } // Warn additionally if job is scheduled for automatic deletion if ($job->is_autodelete_enabled()) { if ($job->get_status() === ArchiveJob::STATUS_FINISHED) { - $warn_msg .= '

    '; - $warn_msg .= get_string( + $warnmsg .= '

    '; + $warnmsg .= get_string( 'delete_job_warning_retention', 'quiz_archiver', userdate($job->get_retentiontime(), get_string('strftimedatetime', 'langconfig')) @@ -75,10 +75,10 @@ public function definition() { // Print warning element $mform->addElement('html', << -

    $warn_head

    - $warn_msg +

    $warnhead

    + $warnmsg
    - $warn_details + $warndetails
    EOD); diff --git a/classes/form/job_sign_form.php b/classes/form/job_sign_form.php index 33aea4a..0d23244 100644 --- a/classes/form/job_sign_form.php +++ b/classes/form/job_sign_form.php @@ -43,15 +43,15 @@ public function definition() { $mform = $this->_form; // Warning message - $warn_head = get_string('areyousure', 'moodle'); - $warn_msg = get_string('sign_archive_warning', 'quiz_archiver', $this->optional_param('jobid', null, PARAM_TEXT)); - $warn_details = get_string('jobid', 'quiz_archiver').': '.$this->optional_param('jobid', null, PARAM_TEXT); + $warnhead = get_string('areyousure', 'moodle'); + $warnmsg = get_string('sign_archive_warning', 'quiz_archiver', $this->optional_param('jobid', null, PARAM_TEXT)); + $warndetails = get_string('jobid', 'quiz_archiver').': '.$this->optional_param('jobid', null, PARAM_TEXT); $mform->addElement('html', << -

    $warn_head

    - $warn_msg +

    $warnhead

    + $warnmsg
    - $warn_details + $warndetails
    EOD); diff --git a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php index bd93766..d638be6 100644 --- a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php @@ -18,6 +18,8 @@ use quiz_archiver\ArchiveJob; +defined('MOODLE_INTERNAL') || die(); + /** * Custom admin setting for archive filename pattern input fields * diff --git a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php index 67e4039..6abd844 100644 --- a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php @@ -18,6 +18,8 @@ use quiz_archiver\ArchiveJob; +defined('MOODLE_INTERNAL') || die(); + /** * Custom admin setting for attempt filename pattern input fields * diff --git a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php index 3e47f44..863e38f 100644 --- a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php +++ b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php @@ -16,6 +16,7 @@ namespace quiz_archiver\local\admin\setting; +defined('MOODLE_INTERNAL') || die(); /** * Custom read-only admin setting checkbox that is always checked diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 28b2923..01d0ea6 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -16,6 +16,8 @@ namespace quiz_archiver\local; +defined('MOODLE_INTERNAL') || die(); + require_once("{$CFG->dirroot}/user/lib.php"); require_once("{$CFG->dirroot}/webservice/lib.php"); require_once("{$CFG->dirroot}/lib/adminlib.php"); @@ -203,7 +205,7 @@ public static function execute( throw new \RuntimeException(); } - foreach (self::WS_ROLECAPS as $cap){ + foreach (self::WS_ROLECAPS as $cap) { try { assign_capability($cap, CAP_ALLOW, $wsroleid, $systemcontext->id, true); $log[] = " -> Capability {$cap} assigned to role '{$rolename}'."; @@ -249,7 +251,7 @@ public static function execute( 'uploadfiles' => true, ]); - if(!$serviceid){ + if (!$serviceid) { $log[] = "Error: Service {$wsname} could not be created."; throw new \RuntimeException(); } else { @@ -265,7 +267,7 @@ public static function execute( // Authorise the user to use the service. $webservicemanager->add_ws_authorised_user((object) [ 'externalserviceid' => $serviceid, - 'userid' => $webserviceuser->id + 'userid' => $webserviceuser->id, ]); $service = $webservicemanager->get_external_service_by_id($serviceid); diff --git a/classes/local/util.php b/classes/local/util.php index 9a07e97..7e8a5ea 100644 --- a/classes/local/util.php +++ b/classes/local/util.php @@ -16,6 +16,8 @@ namespace quiz_archiver\local; +defined('MOODLE_INTERNAL') || die(); + /** * Custom util functions * @@ -88,4 +90,4 @@ public static function duration_to_unit(int $duration): array { return [$duration, get_string('seconds')]; } -} \ No newline at end of file +} diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index fe2e84f..39c1300 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -70,7 +70,7 @@ public function __construct(string $uniqueid, int $courseid, int $cmid, int $qui $this->set_sql( 'j.jobid, j.userid, j.timecreated, j.timemodified, j.status, j.retentiontime, j.artifactfilechecksum, f.pathnamehash, f.filesize, u.username', - '{'.ArchiveJob::JOB_TABLE_NAME.'} AS j JOIN {user} AS u ON j.userid = u.id LEFT JOIN {files} AS f ON j.artifactfileid = f.id', + '{'.ArchiveJob::JOB_TABLE_NAME.'} j JOIN {user} u ON j.userid = u.id LEFT JOIN {files} f ON j.artifactfileid = f.id', 'j.courseid = :courseid AND j.cmid = :cmid AND j.quizid = :quizid', [ 'courseid' => $courseid, @@ -141,6 +141,7 @@ public function col_actions($values) { $html = ''; // Action: Show details + // @codingStandardsIgnoreLine $html .= ''; // Action: Download @@ -156,9 +157,11 @@ public function col_actions($values) { true, ); - $download_title = get_string('download').': '.$artifactfile->get_filename().' ('.get_string('size').': '.display_size($artifactfile->get_filesize()).')'; - $html .= ''; + $downloadtitle = get_string('download').': '.$artifactfile->get_filename().' ('.get_string('size').': '.display_size($artifactfile->get_filesize()).')'; + // @codingStandardsIgnoreLine + $html .= ''; } else { + // @codingStandardsIgnoreLine $html .= ''; } diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php index 6067029..1fcb36b 100644 --- a/classes/privacy/provider.php +++ b/classes/privacy/provider.php @@ -90,7 +90,7 @@ public static function get_contexts_for_userid(int $userid): contextlist { // Get all contexts where the user has a quiz archiver job // Note: The context stays the same across all entries for a single - // archive job. Hence, we only query the main job table. + // archive job. Hence, we only query the main job table. $contextlist->add_from_sql(" SELECT DISTINCT c.id FROM {context} c @@ -142,10 +142,8 @@ public static function export_user_data(approved_contextlist $contextlist) { $userid = $contextlist->get_user()->id; // Process all contexts - $subCtxBase = get_string('pluginname', 'quiz_archiver'); + $subctxbase = get_string('pluginname', 'quiz_archiver'); foreach ($contextlist->get_contexts() as $ctx) { - $ctxData = []; - // Get existing jobs for current context $jobs = $DB->get_records_sql(" SELECT * @@ -166,10 +164,10 @@ public static function export_user_data(approved_contextlist $contextlist) { // Export each job foreach ($jobs as $job) { // Set correct subcontext for the job - $subCtx = [$subCtxBase, "Job: {$job->jobid}"]; + $subctx = [$subctxbase, "Job: {$job->jobid}"]; // Get job settings - $job_settings = $DB->get_records( + $jobsettings = $DB->get_records( ArchiveJob::JOB_SETTINGS_TABLE_NAME, ['jobid' => $job->id], '', @@ -177,7 +175,7 @@ public static function export_user_data(approved_contextlist $contextlist) { ); // Get TSP data - $tsp_data = $DB->get_record( + $tspdata = $DB->get_record( TSPManager::TSP_TABLE_NAME, ['jobid' => $job->id], 'timecreated, server, timestampquery, timestampreply', @@ -185,26 +183,26 @@ public static function export_user_data(approved_contextlist $contextlist) { ); // Encode TSP data as base64 if present - if ($tsp_data) { - $tsp_data->timestampquery = base64_encode($tsp_data->timestampquery); - $tsp_data->timestampreply = base64_encode($tsp_data->timestampreply); + if ($tspdata) { + $tspdata->timestampquery = base64_encode($tspdata->timestampquery); + $tspdata->timestampreply = base64_encode($tspdata->timestampreply); } // Add job data to current context - writer::with_context($ctx)->export_data($subCtx, (object) [ + writer::with_context($ctx)->export_data($subctx, (object) [ 'courseid' => $job->courseid, 'cmid' => $job->cmid, 'quizid' => $job->quizid, 'userid' => $job->userid, 'timecreated' => $job->timecreated, 'timemodified' => $job->timemodified, - 'settings' => $job_settings, - 'tsp' => $tsp_data, + 'settings' => $jobsettings, + 'tsp' => $tspdata, ]); if ($job->artifactfileid) { writer::with_context($ctx)->export_file( - $subCtx, + $subctx, get_file_storage()->get_file_by_id($job->artifactfileid) ); } @@ -234,7 +232,7 @@ public static function export_user_data(approved_contextlist $contextlist) { $archive = $fm->extract_attempt_data_from_artifact($artifact, $row->jobid, $row->attemptid); if ($archive) { - writer::with_context($ctx)->export_file([$subCtxBase, "Attempts"], $archive); + writer::with_context($ctx)->export_file([$subctxbase, "Attempts"], $archive); } } } diff --git a/classes/task/autodelete_job_artifacts.php b/classes/task/autodelete_job_artifacts.php index cc6e1ac..3add849 100644 --- a/classes/task/autodelete_job_artifacts.php +++ b/classes/task/autodelete_job_artifacts.php @@ -52,8 +52,8 @@ public function get_name(): string { */ public function execute(): void { echo get_string('task_autodelete_job_artifacts_start', 'quiz_archiver') . "\n"; - $files_deleted = ArchiveJob::delete_expired_artifacts(); - echo get_string('task_autodelete_job_artifacts_report', 'quiz_archiver', $files_deleted) . "\n"; + $numfilesdeleted = ArchiveJob::delete_expired_artifacts(); + echo get_string('task_autodelete_job_artifacts_report', 'quiz_archiver', $numfilesdeleted) . "\n"; } -} \ No newline at end of file +} diff --git a/classes/task/cleanup_temp_files.php b/classes/task/cleanup_temp_files.php index 5dd4b20..157ce53 100644 --- a/classes/task/cleanup_temp_files.php +++ b/classes/task/cleanup_temp_files.php @@ -51,8 +51,8 @@ public function get_name(): string { */ public function execute(): void { echo get_string('task_cleanup_temp_files_start', 'quiz_archiver') . "\n"; - $files_deleted = FileManager::cleanup_temp_files(); - echo get_string('task_cleanup_temp_files_report', 'quiz_archiver', $files_deleted) . "\n"; + $numfilesdeleted = FileManager::cleanup_temp_files(); + echo get_string('task_cleanup_temp_files_report', 'quiz_archiver', $numfilesdeleted) . "\n"; } -} \ No newline at end of file +} diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 9c5f024..9aa5979 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -23,18 +23,18 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -/** @var bool Identifies this script as a CLI script */ -const CLI_SCRIPT = true; - require_once(__DIR__ . '/../../../../../config.php'); require_once("{$CFG->libdir}/clilib.php"); require_once("{$CFG->dirroot}/mod/quiz/report/archiver/classes/local/autoinstall.php"); use quiz_archiver\local\autoinstall; -####################### -# CLI options parsing # -####################### +/** @var bool Identifies this script as a CLI script */ +const CLI_SCRIPT = true; + +// ####################### +// # CLI options parsing # +// ####################### list($options, $unrecognised) = cli_get_params( [ @@ -84,9 +84,9 @@ exit(2); } -################################ -# Begin of autoinstall routine # -################################ +// ################################ +// # Begin of autoinstall routine # +// ################################ // Set admin user. $USER = get_admin(); diff --git a/patch_401_class_renames.php b/patch_401_class_renames.php index d1c30bb..024b11d 100644 --- a/patch_401_class_renames.php +++ b/patch_401_class_renames.php @@ -24,6 +24,8 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +defined('MOODLE_INTERNAL') || die(); + global $CFG; if ($CFG->branch <= 401) { diff --git a/report.php b/report.php index 7ddff99..f3119f5 100644 --- a/report.php +++ b/report.php @@ -22,6 +22,8 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +defined('MOODLE_INTERNAL') || die(); + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); @@ -38,8 +40,6 @@ use quiz_archiver\form\job_sign_form; use quiz_archiver\output\job_overview_table; -defined('MOODLE_INTERNAL') || die(); - /** * The quiz archiver report class. */ @@ -91,109 +91,109 @@ public function display($quiz, $cm, $course): bool { // Start output. $this->print_header_and_tabs($cm, $course, $quiz, 'archiver'); - $tplCtx = [ + $tplctx = [ 'baseurl' => $this->base_url(), 'jobOverviewTable' => "", ]; // Handle job delete form if (optional_param('action', null, PARAM_TEXT) === 'delete_job') { - $job_delete_form = new job_delete_form(); + $jobdeleteform = new job_delete_form(); - if ($job_delete_form->is_cancelled()) { + if ($jobdeleteform->is_cancelled()) { redirect($this->base_url()); } - if ($job_delete_form->is_submitted()) { + if ($jobdeleteform->is_submitted()) { // Check permissions. require_capability('mod/quiz_archiver:delete', $this->context); // Execute deletion - $formdata = $job_delete_form->get_data(); + $formdata = $jobdeleteform->get_data(); ArchiveJob::get_by_jobid($formdata->jobid)->delete(); } else { - $job_delete_form->display(); + $jobdeleteform->display(); return true; } } // Handle artifact delete form if (optional_param('action', null, PARAM_TEXT) === 'delete_artifact') { - $arfifact_delete_form = new artifact_delete_form(); + $arfifactdeleteform = new artifact_delete_form(); - if ($arfifact_delete_form->is_cancelled()) { + if ($arfifactdeleteform->is_cancelled()) { redirect($this->base_url()); } - if ($arfifact_delete_form->is_submitted()) { + if ($arfifactdeleteform->is_submitted()) { // Check permissions. require_capability('mod/quiz_archiver:delete', $this->context); // Execute deletion - $formdata = $arfifact_delete_form->get_data(); + $formdata = $arfifactdeleteform->get_data(); ArchiveJob::get_by_jobid($formdata->jobid)->delete_artifact(); } else { - $arfifact_delete_form->display(); + $arfifactdeleteform->display(); return true; } } // Handle job sign form if (optional_param('action', null, PARAM_TEXT) === 'sign_job') { - $job_sign_form = new job_sign_form(); + $jobsignform = new job_sign_form(); - if ($job_sign_form->is_cancelled()) { + if ($jobsignform->is_cancelled()) { redirect($this->base_url()); } - if ($job_sign_form->is_submitted()) { + if ($jobsignform->is_submitted()) { // Check permissions. require_capability('mod/quiz_archiver:create', $this->context); // Execute signing - $formdata = $job_sign_form->get_data(); - $tspManager = ArchiveJob::get_by_jobid($formdata->jobid)->TSPManager(); - $jobid_log_str = ' ('.get_string('jobid', 'quiz_archiver').': '.$formdata->jobid.')'; - if ($tspManager->has_tsp_timestamp()) { - $tplCtx['jobInitiationStatusAlert'] = [ + $formdata = $jobsignform->get_data(); + $tspmanager = ArchiveJob::get_by_jobid($formdata->jobid)->tspmanager(); + $jobidlogstr = ' ('.get_string('jobid', 'quiz_archiver').': '.$formdata->jobid.')'; + if ($tspmanager->has_tsp_timestamp()) { + $tplctx['jobInitiationStatusAlert'] = [ "color" => "danger", "dismissible" => true, - "message" => get_string('archive_already_signed', 'quiz_archiver').$jobid_log_str, + "message" => get_string('archive_already_signed', 'quiz_archiver').$jobidlogstr, ]; } else { try { - $tspManager->timestamp(); - $tplCtx['jobInitiationStatusAlert'] = [ + $tspmanager->timestamp(); + $tplctx['jobInitiationStatusAlert'] = [ "color" => "success", "dismissible" => true, - "message" => get_string('archive_signed_successfully', 'quiz_archiver').$jobid_log_str, + "message" => get_string('archive_signed_successfully', 'quiz_archiver').$jobidlogstr, ]; } catch (RuntimeException $e) { - $tplCtx['jobInitiationStatusAlert'] = [ + $tplctx['jobInitiationStatusAlert'] = [ "color" => "danger", "dismissible" => true, - "message" => get_string('archive_signing_failed_no_artifact', 'quiz_archiver').$jobid_log_str, + "message" => get_string('archive_signing_failed_no_artifact', 'quiz_archiver').$jobidlogstr, ]; } catch (Exception $e) { - $tplCtx['jobInitiationStatusAlert'] = [ + $tplctx['jobInitiationStatusAlert'] = [ "color" => "danger", "dismissible" => true, - "message" => get_string('archive_signing_failed', 'quiz_archiver').': '.$e->getMessage().$jobid_log_str, + "message" => get_string('archive_signing_failed', 'quiz_archiver').': '.$e->getMessage().$jobidlogstr, ]; } } } else { - $job_sign_form->display(); + $jobsignform->display(); return true; } } // Determine page to display if (!quiz_has_questions($quiz->id)) { - $tplCtx['quizMissingSomethingWarning'] = quiz_no_questions_message($quiz, $cm, $this->context); + $tplctx['quizMissingSomethingWarning'] = quiz_no_questions_message($quiz, $cm, $this->context); } else { if (!quiz_has_attempts($quiz->id)) { - $tplCtx['quizMissingSomethingWarning'] = $OUTPUT->notification( + $tplctx['quizMissingSomethingWarning'] = $OUTPUT->notification( get_string('noattempts', 'quiz'), \core\output\notification::NOTIFY_ERROR, false @@ -202,19 +202,19 @@ public function display($quiz, $cm, $course): bool { } // Archive quiz form - if (!array_key_exists('quizMissingSomethingWarning', $tplCtx)) { - $archive_quiz_form = new archive_quiz_form( + if (!array_key_exists('quizMissingSomethingWarning', $tplctx)) { + $archivequizform = new archive_quiz_form( $this->quiz->name, count($this->report->get_attempts()) ); - if ($archive_quiz_form->is_submitted()) { + if ($archivequizform->is_submitted()) { $job = null; try { - if (!$archive_quiz_form->is_validated()) { + if (!$archivequizform->is_validated()) { throw new RuntimeException(get_string('error_archive_quiz_form_validation_failed', 'quiz_archiver')); } - $formdata = $archive_quiz_form->get_data(); + $formdata = $archivequizform->get_data(); $job = $this->initiate_archive_job( $formdata->export_attempts, Report::build_report_sections_from_formdata($formdata), @@ -226,13 +226,13 @@ public function display($quiz, $cm, $course): bool { $formdata->export_attempts_filename_pattern, $formdata->archive_autodelete ? $formdata->archive_retention_time : null, ); - $tplCtx['jobInitiationStatusAlert'] = [ + $tplctx['jobInitiationStatusAlert'] = [ "color" => "success", "message" => get_string('job_created_successfully', 'quiz_archiver', $job->get_jobid()), "returnMessage" => get_string('continue'), ]; } catch (RuntimeException $e) { - $tplCtx['jobInitiationStatusAlert'] = [ + $tplctx['jobInitiationStatusAlert'] = [ "color" => "danger", "message" => $e->getMessage(), "returnMessage" => get_string('retry'), @@ -241,26 +241,26 @@ public function display($quiz, $cm, $course): bool { // Do not print job overview table if job creation failed if ($job == null) { - unset($tplCtx['jobOverviewTable']); + unset($tplctx['jobOverviewTable']); } } else { - $tplCtx['jobInitiationForm'] = $archive_quiz_form->render(); + $tplctx['jobInitiationForm'] = $archivequizform->render(); } } // Job overview table - if (array_key_exists('jobOverviewTable', $tplCtx)) { + if (array_key_exists('jobOverviewTable', $tplctx)) { // Generate table $jobtbl = new job_overview_table('job_overview_table', $this->course->id, $this->cm->id, $this->quiz->id); $jobtbl->define_baseurl($this->base_url()); ob_start(); $jobtbl->out(10, true); - $jobtbl_html = ob_get_contents(); + $jobtblhtml = ob_get_contents(); ob_end_clean(); - $tplCtx['jobOverviewTable'] = $jobtbl_html; + $tplctx['jobOverviewTable'] = $jobtblhtml; // Prepare job metadata for job detail modals - $tplCtx['jobs'] = array_map(function($jm): array { + $tplctx['jobs'] = array_map(function($jm): array { // Generate action URLs $jm['action_urls'] = [ 'delete_job' => (new moodle_url($this->base_url(), [ @@ -308,7 +308,7 @@ public function display($quiz, $cm, $course): bool { } // Render output - echo $OUTPUT->render_from_template('quiz_archiver/overview', $tplCtx); + echo $OUTPUT->render_from_template('quiz_archiver/overview', $tplctx); return true; } @@ -316,16 +316,16 @@ public function display($quiz, $cm, $course): bool { /** * Initiates a new archive job for this quiz * - * @param bool $export_attempts Quiz attempts will be archives if true - * @param array $report_sections Sections to export during attempt report generation - * @param bool $report_keep_html_files If true, HTML files are kept alongside PDFs + * @param bool $exportattempts Quiz attempts will be archives if true + * @param array $reportsections Sections to export during attempt report generation + * @param bool $reportkeephtmlfiles If true, HTML files are kept alongside PDFs * within the created archive - * @param string $paper_format Paper format to use for attempt report generation - * @param bool $export_quiz_backup Complete quiz backup will be archived if true - * @param bool $export_course_backup Complete course backup will be archived if true - * @param string $archive_filename_pattern Filename pattern to use for archive generation - * @param string $attempts_filename_pattern Filename pattern to use for attempt report generation - * @param int|null $retention_seconds If set, the archive will be deleted automatically this many seconds after creation + * @param string $paperformat Paper format to use for attempt report generation + * @param bool $exportquizbackup Complete quiz backup will be archived if true + * @param bool $exportcoursebackup Complete course backup will be archived if true + * @param string $archivefilenamepattern Filename pattern to use for archive generation + * @param string $attemptsfilenamepattern Filename pattern to use for attempt report generation + * @param int|null $retentionseconds If set, the archive will be deleted automatically this many seconds after creation * @return ArchiveJob|null Created ArchiveJob on success * @throws coding_exception Handled by Moodle * @throws dml_exception Handled by Moodle @@ -333,15 +333,15 @@ public function display($quiz, $cm, $course): bool { * @throws RuntimeException Used to signal a soft failure to calling context */ protected function initiate_archive_job( - bool $export_attempts, - array $report_sections, - bool $report_keep_html_files, - string $paper_format, - bool $export_quiz_backup, - bool $export_course_backup, - string $archive_filename_pattern, - string $attempts_filename_pattern, - ?int $retention_seconds = null + bool $exportattempts, + array $reportsections, + bool $reportkeephtmlfiles, + string $paperformat, + bool $exportquizbackup, + bool $exportcoursebackup, + string $archivefilenamepattern, + string $attemptsfilenamepattern, + ?int $retentionseconds = null ): ?ArchiveJob { global $CFG, $USER; @@ -381,80 +381,80 @@ protected function initiate_archive_job( $attempts = $this->report->get_attempts(); // Prepare task: Export quiz attempts - $task_archive_quiz_attempts = null; - if ($export_attempts) { - $task_archive_quiz_attempts = [ + $taskarchivequizattempts = null; + if ($exportattempts) { + $taskarchivequizattempts = [ 'attemptids' => array_values(array_keys($attempts)), 'fetch_metadata' => true, - 'sections' => $report_sections, - 'paper_format' => $paper_format, - 'keep_html_files' => $report_keep_html_files, - 'filename_pattern' => $attempts_filename_pattern, + 'sections' => $reportsections, + 'paper_format' => $paperformat, + 'keep_html_files' => $reportkeephtmlfiles, + 'filename_pattern' => $attemptsfilenamepattern, ]; } // Prepare task: Moodle backups - $task_moodle_backups = null; - if ($export_quiz_backup || $export_course_backup) { - $task_moodle_backups = []; + $taskmoodlebackups = null; + if ($exportquizbackup || $exportcoursebackup) { + $taskmoodlebackups = []; - if ($export_quiz_backup) { - $task_moodle_backups[] = BackupManager::initiate_quiz_backup($this->cm->id, $this->config->webservice_userid); + if ($exportquizbackup) { + $taskmoodlebackups[] = BackupManager::initiate_quiz_backup($this->cm->id, $this->config->webservice_userid); } - if ($export_course_backup) { - $task_moodle_backups[] = BackupManager::initiate_course_backup($this->course->id, $this->config->webservice_userid); + if ($exportcoursebackup) { + $taskmoodlebackups[] = BackupManager::initiate_course_backup($this->course->id, $this->config->webservice_userid); } } // Generate job settings array - $job_settings = []; - $job_settings['num_attempts'] = count($attempts); - $job_settings['export_attempts'] = $export_attempts; - if ($export_attempts) { - foreach ($report_sections as $section_name => $section_value) { - $job_settings["export_report_section_$section_name"] = $section_value; + $jobsettings = []; + $jobsettings['num_attempts'] = count($attempts); + $jobsettings['export_attempts'] = $exportattempts; + if ($exportattempts) { + foreach ($reportsections as $name => $value) { + $jobsettings["export_report_section_$name"] = $value; } } - $job_settings['export_quiz_backup'] = $export_quiz_backup ? '1' : '0'; - $job_settings['export_course_backup'] = $export_course_backup ? '1' : '0'; - $job_settings['archive_autodelete'] = $retention_seconds ? '1' : '0'; - if ($retention_seconds) { - $job_settings['archive_retention_time'] = util::duration_to_human_readable($retention_seconds); + $jobsettings['export_quiz_backup'] = $exportquizbackup ? '1' : '0'; + $jobsettings['export_course_backup'] = $exportcoursebackup ? '1' : '0'; + $jobsettings['archive_autodelete'] = $retentionseconds ? '1' : '0'; + if ($retentionseconds) { + $jobsettings['archive_retention_time'] = util::duration_to_human_readable($retentionseconds); } // Request archive worker $worker = new RemoteArchiveWorker(rtrim($this->config->worker_url, '/').'/archive', 10, 20); try { - $job_metadata = $worker->enqueue_archive_job( + $jobmetadata = $worker->enqueue_archive_job( $wstoken, $this->course->id, $this->cm->id, $this->quiz->id, [ - 'archive_filename' => ArchiveJob::generate_archive_filename($this->course, $this->cm, $this->quiz, $archive_filename_pattern), + 'archive_filename' => ArchiveJob::generate_archive_filename($this->course, $this->cm, $this->quiz, $archivefilenamepattern), ], - $task_archive_quiz_attempts, - $task_moodle_backups, + $taskarchivequizattempts, + $taskmoodlebackups, ); // Persist job in database $job = ArchiveJob::create( - $job_metadata->jobid, + $jobmetadata->jobid, $this->course->id, $this->cm->id, $this->quiz->id, $USER->id, - $retention_seconds, + $retentionseconds, $wstoken, $attempts, - $job_settings, - $job_metadata->status + $jobsettings, + $jobmetadata->status ); // Link all temporary files to be created, if present - if ($task_moodle_backups) { - foreach ($task_moodle_backups as $task) { + if ($taskmoodlebackups) { + foreach ($taskmoodlebackups as $task) { $job->link_temporary_file($task->pathnamehash); } } diff --git a/settings.php b/settings.php index 6550b51..b2e1fee 100644 --- a/settings.php +++ b/settings.php @@ -23,6 +23,8 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +defined('MOODLE_INTERNAL') || die(); + require_once(__DIR__ . '/classes/local/autoinstall.php'); use quiz_archiver\ArchiveJob; @@ -32,8 +34,6 @@ use quiz_archiver\local\autoinstall; use quiz_archiver\Report; -defined('MOODLE_INTERNAL') || die(); - global $DB; if ($hassiteconfig) { @@ -49,15 +49,15 @@ // Autoinstall if (autoinstall::plugin_is_unconfigured()) { - $autoinstall_url = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); - $autoinstall_desc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; - $autoinstall_desc .= "

    ".get_string('autoinstall_explanation', 'quiz_archiver')."

    "; + $autoinstallurl = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); + $autoinstalldesc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; + $autoinstalldesc .= "

    ".get_string('autoinstall_explanation', 'quiz_archiver')."

    "; } else { - $autoinstall_desc = get_string('autoinstall_already_configured', 'quiz_archiver'); + $autoinstalldesc = get_string('autoinstall_already_configured', 'quiz_archiver'); } $settings->add(new admin_setting_description('quiz_archiver/autoinstall', get_string('setting_autoconfigure', 'quiz_archiver'), - $autoinstall_desc + $autoinstalldesc )); // Generic settings diff --git a/version.php b/version.php index 14c4e61..9feed67 100644 --- a/version.php +++ b/version.php @@ -29,5 +29,5 @@ $plugin->version = 2024070800; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; -//$plugin->incompatible = 402; +// $plugin->incompatible = 402; $plugin->maturity = MATURITY_STABLE; From 0f89054aa0f3f1622f806a768715c72010f4f1d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 17:11:27 +0200 Subject: [PATCH 069/185] Refactor unit tests to reflect new APIs due to codestyle refactoring --- tests/ArchiveJob_test.php | 216 +++++++++--------- tests/BackupManager_test.php | 93 ++++---- tests/FileManager_test.php | 116 +++++----- tests/RemoteArchiveWorker_test.php | 3 +- tests/Report_test.php | 210 ++++++++++------- tests/TSPManager_test.php | 93 ++++---- tests/TimeStampProtocolClient_test.php | 9 +- .../external/generate_attempt_report_test.php | 32 +-- tests/external/get_attempts_metadata_test.php | 31 +-- tests/external/get_backup_status_test.php | 27 ++- .../process_uploaded_artifact_test.php | 90 ++++---- tests/external/update_job_status_test.php | 130 ++++++++--- 12 files changed, 577 insertions(+), 473 deletions(-) diff --git a/tests/ArchiveJob_test.php b/tests/ArchiveJob_test.php index 5c1257c..cf1d872 100644 --- a/tests/ArchiveJob_test.php +++ b/tests/ArchiveJob_test.php @@ -38,7 +38,7 @@ class ArchiveJob_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -48,7 +48,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object) [ @@ -90,7 +90,7 @@ protected function generateMockQuiz(): \stdClass { * @throws \file_exception * @throws \stored_file_creation_exception */ - protected function generateArtifactFile(int $courseid, int $cmid, int $quizid, string $filename): \stored_file { + protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, string $filename): \stored_file { $this->resetAfterTest(); $ctx = context_course::instance($courseid); @@ -119,7 +119,7 @@ public function test_create_archive_job(): void { global $DB; // Create new archive job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -161,7 +161,7 @@ public function test_delete_archive_job(): void { global $DB; // Create new archive job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -212,37 +212,37 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $mocks = []; $jobs = []; $artifacts = []; - for ($quizIdx= 0; $quizIdx < 3; $quizIdx++) { - $mocks[$quizIdx] = $this->generateMockQuiz(); - for ($jobIdx = 0; $jobIdx < 3; $jobIdx++) { + for ($quizidx = 0; $quizidx < 3; $quizidx++) { + $mocks[$quizidx] = $this->generate_mock_quiz(); + for ($jobidx = 0; $jobidx < 3; $jobidx++) { // Create job - $jobs[$quizIdx][$jobIdx] = ArchiveJob::create( - '30000000-1234-5678-abcd-'.$quizIdx.'0000000000'.$jobIdx, - $mocks[$quizIdx]->course->id, - $mocks[$quizIdx]->quiz->cmid, - $mocks[$quizIdx]->quiz->id, - $mocks[$quizIdx]->user->id, - 3600 + $jobIdx * $quizIdx * 100, + $jobs[$quizidx][$jobidx] = ArchiveJob::create( + '30000000-1234-5678-abcd-'.$quizidx.'0000000000'.$jobidx, + $mocks[$quizidx]->course->id, + $mocks[$quizidx]->quiz->cmid, + $mocks[$quizidx]->quiz->id, + $mocks[$quizidx]->user->id, + 3600 + $jobidx * $quizidx * 100, 'TEST-WS-TOKEN', - $mocks[$quizIdx]->attempts, - $mocks[$quizIdx]->settings + $mocks[$quizidx]->attempts, + $mocks[$quizidx]->settings ); // Attach artifact - $artifacts[$quizIdx][$jobIdx] = $this->generateArtifactFile( - $mocks[$quizIdx]->course->id, - $mocks[$quizIdx]->quiz->cmid, - $mocks[$quizIdx]->quiz->id, - 'test'.$quizIdx.'-'.$jobIdx.'.tar.gz' + $artifacts[$quizidx][$jobidx] = $this->generate_artifact_file( + $mocks[$quizidx]->course->id, + $mocks[$quizidx]->quiz->cmid, + $mocks[$quizidx]->quiz->id, + 'test'.$quizidx.'-'.$jobidx.'.tar.gz' ); - $jobs[$quizIdx][$jobIdx]->link_artifact( - $artifacts[$quizIdx][$jobIdx]->get_id(), + $jobs[$quizidx][$jobidx]->link_artifact( + $artifacts[$quizidx][$jobidx]->get_id(), hash('sha256', 'foo bar baz') ); // Generate mock TSP data $DB->insert_record(TSPManager::TSP_TABLE_NAME, [ - 'jobid' => $jobs[$quizIdx][$jobIdx]->get_id(), + 'jobid' => $jobs[$quizidx][$jobidx]->get_id(), 'timecreated' => time(), 'server' => 'localhost', 'timestampquery' => 'tspquery', @@ -252,65 +252,65 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { } // Find jobs in database - foreach ($mocks as $quizIdx => $mock) { + foreach ($mocks as $quizidx => $mock) { $this->assertEqualsCanonicalizing( - array_values($jobs[$quizIdx]), + array_values($jobs[$quizidx]), array_values(ArchiveJob::get_jobs($mock->course->id, $mock->quiz->cmid, $mock->quiz->id)), - 'Jobs for quiz '.$quizIdx.' were not returned properly by get_jobs()' + 'Jobs for quiz '.$quizidx.' were not returned properly by get_jobs()' ); } // Test metadata retrieval - foreach ($mocks as $quizIdx => $mock) { + foreach ($mocks as $quizidx => $mock) { $metadata = ArchiveJob::get_metadata_for_jobs($mock->course->id, $mock->quiz->cmid, $mock->quiz->id); // Check that the metadata array contains the correct number of jobs $this->assertSameSize( - $jobs[$quizIdx], + $jobs[$quizidx], $metadata, - 'Metadata for quiz '.$quizIdx.' does not contain the correct number of jobs' + 'Metadata for quiz '.$quizidx.' does not contain the correct number of jobs' ); // Check that the metadata array contains the correct data - foreach ($jobs[$quizIdx] as $jobIdx => $expectedJob) { + foreach ($jobs[$quizidx] as $jobidx => $expectedjob) { // Find job in metadata array - $actualJobs = array_filter($metadata, function ($metadata) use ($expectedJob) { - return $metadata['id'] == $expectedJob->get_id(); + $actualjobs = array_filter($metadata, function ($metadata) use ($expectedjob) { + return $metadata['id'] == $expectedjob->get_id(); }); // Assure that job was found $this->assertCount( 1, - $actualJobs, - 'Metadata for job '.$jobIdx.' of quiz '.$quizIdx.' could not uniquely be identified' + $actualjobs, + 'Metadata for job '.$jobidx.' of quiz '.$quizidx.' could not uniquely be identified' ); // Probe that the metadata contains the correct data - $actualJob = array_pop($actualJobs); - $this->assertEquals($expectedJob->get_jobid(), $actualJob['jobid'], 'Jobid was not returned correctly'); - $this->assertEquals($expectedJob->get_course_id(), $actualJob['course']['id'], 'Courseid was not returned correctly'); - $this->assertEquals($expectedJob->get_cm_id(), $actualJob['quiz']['cmid'], 'Course module id was not returned correctly'); - $this->assertEquals($expectedJob->get_quiz_id(), $actualJob['quiz']['id'], 'Quiz id was not returned correctly'); - $this->assertEquals($expectedJob->get_user_id(), $actualJob['user']['id'], 'User id was not returned correctly'); - $this->assertEquals($expectedJob->get_retentiontime(), $actualJob['retentiontime'], 'Retentiontime was not returned correctly'); - $this->assertSame($expectedJob->is_autodelete_enabled(), $actualJob['autodelete'], 'Autodelete was not detected as enabled'); - $this->assertArrayHasKey('autodelete_str', $actualJob, 'Autodelete string was not generated correctly'); - $this->assertSameSize($expectedJob->get_settings(), $actualJob['settings'], 'Settings were not returned correctly'); + $actualjob = array_pop($actualjobs); + $this->assertEquals($expectedjob->get_jobid(), $actualjob['jobid'], 'Jobid was not returned correctly'); + $this->assertEquals($expectedjob->get_courseid(), $actualjob['course']['id'], 'Courseid was not returned correctly'); + $this->assertEquals($expectedjob->get_cmid(), $actualjob['quiz']['cmid'], 'Course module id was not returned correctly'); + $this->assertEquals($expectedjob->get_quizid(), $actualjob['quiz']['id'], 'Quiz id was not returned correctly'); + $this->assertEquals($expectedjob->get_userid(), $actualjob['user']['id'], 'User id was not returned correctly'); + $this->assertEquals($expectedjob->get_retentiontime(), $actualjob['retentiontime'], 'Retentiontime was not returned correctly'); + $this->assertSame($expectedjob->is_autodelete_enabled(), $actualjob['autodelete'], 'Autodelete was not detected as enabled'); + $this->assertArrayHasKey('autodelete_str', $actualjob, 'Autodelete string was not generated correctly'); + $this->assertSameSize($expectedjob->get_settings(), $actualjob['settings'], 'Settings were not returned correctly'); // Check that the artifact file metadata was returned correctly - $this->assertArrayHasKey('artifactfile', $actualJob, 'Artifact file metadata was not returned'); - $this->assertEquals($artifacts[$quizIdx][$jobIdx]->get_filename(), $actualJob['artifactfile']['name'], 'Artifact filename was not returned correctly'); - $this->assertEquals($artifacts[$quizIdx][$jobIdx]->get_filesize(), $actualJob['artifactfile']['size'], 'Artifact size was not returned correctly'); - $this->assertNotEmpty($actualJob['artifactfile']['downloadurl'], 'Artifact download URL was not returned'); - $this->assertNotEmpty($actualJob['artifactfile']['size_human'], 'Artifact size in human readable format was not returned'); - $this->assertEquals(hash('sha256', 'foo bar baz'), $actualJob['artifactfile']['checksum'], 'Artifact checksum was not returned correctly'); + $this->assertArrayHasKey('artifactfile', $actualjob, 'Artifact file metadata was not returned'); + $this->assertEquals($artifacts[$quizidx][$jobidx]->get_filename(), $actualjob['artifactfile']['name'], 'Artifact filename was not returned correctly'); + $this->assertEquals($artifacts[$quizidx][$jobidx]->get_filesize(), $actualjob['artifactfile']['size'], 'Artifact size was not returned correctly'); + $this->assertNotEmpty($actualjob['artifactfile']['downloadurl'], 'Artifact download URL was not returned'); + $this->assertNotEmpty($actualjob['artifactfile']['size_human'], 'Artifact size in human readable format was not returned'); + $this->assertEquals(hash('sha256', 'foo bar baz'), $actualjob['artifactfile']['checksum'], 'Artifact checksum was not returned correctly'); // Check that the TSP data was returned correctly - $this->assertArrayHasKey('tsp', $actualJob, 'TSP data was not returned'); - $this->assertEquals('localhost', $actualJob['tsp']['server'], 'TSP server was not returned correctly'); - $this->assertNotEmpty($actualJob['tsp']['timecreated'], 'TSP creation time was not returned'); - $this->assertNotEmpty($actualJob['tsp']['queryfiledownloadurl'], 'TSP queryfile download URL was not returned'); - $this->assertNotEmpty($actualJob['tsp']['replyfiledownloadurl'], 'TSP replyfile download URL was not returned'); + $this->assertArrayHasKey('tsp', $actualjob, 'TSP data was not returned'); + $this->assertEquals('localhost', $actualjob['tsp']['server'], 'TSP server was not returned correctly'); + $this->assertNotEmpty($actualjob['tsp']['timecreated'], 'TSP creation time was not returned'); + $this->assertNotEmpty($actualjob['tsp']['queryfiledownloadurl'], 'TSP queryfile download URL was not returned'); + $this->assertNotEmpty($actualjob['tsp']['replyfiledownloadurl'], 'TSP replyfile download URL was not returned'); } } } @@ -324,7 +324,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { */ public function test_set_job_status(): void { // Job statuses to test and whether they should be considered completed - $statuses_and_completion = [ + $statusesandcompletion = [ ArchiveJob::STATUS_UNKNOWN => false, ArchiveJob::STATUS_UNINITIALIZED => false, ArchiveJob::STATUS_AWAITING_PROCESSING => false, @@ -336,8 +336,8 @@ public function test_set_job_status(): void { ]; // Create test job - $mocks = $this->generateMockQuiz(); - $expectedJob = ArchiveJob::create( + $mocks = $this->generate_mock_quiz(); + $expectedjob = ArchiveJob::create( '40000000-1234-5678-abcd-ef4242424242', $mocks->course->id, $mocks->quiz->cmid, @@ -358,11 +358,11 @@ public function test_set_job_status(): void { ); // Test status changes - foreach ($statuses_and_completion as $status => $completion) { - $expectedJob->set_status($status); - $actualJob = ArchiveJob::get_by_jobid('40000000-1234-5678-abcd-ef4242424242'); - $this->assertEquals($status, $actualJob->get_status(),'Job status was not set correctly to '.$status); - $this->assertEquals($completion, $actualJob->is_complete(), 'Job completion was not detected correctly'); + foreach ($statusesandcompletion as $status => $completion) { + $expectedjob->set_status($status); + $actualjob = ArchiveJob::get_by_jobid('40000000-1234-5678-abcd-ef4242424242'); + $this->assertEquals($status, $actualjob->get_status(), 'Job status was not set correctly to '.$status); + $this->assertEquals($completion, $actualjob->is_complete(), 'Job completion was not detected correctly'); } } @@ -382,7 +382,7 @@ public function test_wstoken_access_checks(): void { md5('TEST-WS-TOKEN-4'), md5('TEST-WS-TOKEN-5'), ]; - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); // Create jobs and test all tokens against each job foreach ($wstokens as $wstoken) { @@ -428,7 +428,7 @@ public function test_delete_webservice_token(): void { } // Create job and test token access - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( 'xxx-'.$wstoken, $mocks->course->id, @@ -455,7 +455,7 @@ public function test_delete_webservice_token(): void { */ public function test_job_timeout(): void { // Prepare job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '12300000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -495,7 +495,7 @@ public function test_job_timeout(): void { */ public function test_artifact_linking(): void { // Create test job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '60000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -511,7 +511,7 @@ public function test_artifact_linking(): void { $this->assertFalse($job->has_artifact(), 'New job believes that it has an artifact file'); // Create and link artifact file - $artifact = $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); @@ -532,8 +532,8 @@ public function test_artifact_linking(): void { */ public function test_artifact_deletion(): void { // Create test job and link dummy artifact file - $mocks = $this->generateMockQuiz(); - $artifact = $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $mocks = $this->generate_mock_quiz(); + $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $job = ArchiveJob::create( '70000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -566,8 +566,8 @@ public function test_artifact_deletion(): void { */ public function test_delete_expired_artifacts(): void { // Create test job that instantly expires and link dummy artifact file - $mocks = $this->generateMockQuiz(); - $artifact = $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $mocks = $this->generate_mock_quiz(); + $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $job = ArchiveJob::create( '80000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -597,7 +597,7 @@ public function test_delete_expired_artifacts(): void { */ public function test_artifact_checksum_non_existing(): void { // Generate data - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '99000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -625,11 +625,11 @@ public function test_artifact_checksum_non_existing(): void { */ public function test_temporary_file_linking(): void { // Generate data - $mocks = $this->generateMockQuiz(); - $tmpFiles = [ - $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), - $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test2.tar.gz'), - $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), + $mocks = $this->generate_mock_quiz(); + $tmpfiles = [ + $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), + $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test2.tar.gz'), + $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), ]; // Create job @@ -649,13 +649,13 @@ public function test_temporary_file_linking(): void { $this->assertEmpty($job->get_temporary_files(), 'Job returned temporary files before linking'); // Link files and check that they were linked correctly - foreach ($tmpFiles as $tmpFile) { - $job->link_temporary_file($tmpFile->get_pathnamehash()); + foreach ($tmpfiles as $tmpfile) { + $job->link_temporary_file($tmpfile->get_pathnamehash()); } - $actualTempFiles = $job->get_temporary_files(); - foreach ($tmpFiles as $tmpFile) { - $this->assertEquals($tmpFile, $actualTempFiles[$tmpFile->get_id()], 'Temporary file was not linked correctly'); + $actualtempfiles = $job->get_temporary_files(); + foreach ($tmpfiles as $tmpfile) { + $this->assertEquals($tmpfile, $actualtempfiles[$tmpfile->get_id()], 'Temporary file was not linked correctly'); } } @@ -670,11 +670,11 @@ public function test_temporary_file_linking(): void { */ public function test_temporary_file_deletion(): void { // Generate data - $mocks = $this->generateMockQuiz(); - $tmpFiles = [ - $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), - $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test2.tar.gz'), - $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), + $mocks = $this->generate_mock_quiz(); + $tmpfiles = [ + $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), + $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test2.tar.gz'), + $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), ]; // Create job and link files @@ -689,8 +689,8 @@ public function test_temporary_file_deletion(): void { $mocks->attempts, $mocks->settings ); - foreach ($tmpFiles as $tmpFile) { - $job->link_temporary_file($tmpFile->get_pathnamehash()); + foreach ($tmpfiles as $tmpfile) { + $job->link_temporary_file($tmpfile->get_pathnamehash()); } // Ensure link state, delete and check @@ -698,8 +698,8 @@ public function test_temporary_file_deletion(): void { $job->delete_temporary_files(); $this->assertEmpty($job->get_temporary_files(), 'Job still has temporary files after deletion'); - foreach ($tmpFiles as $tmpFile) { - $this->assertFalse(get_file_storage()->get_file_by_id($tmpFile->get_id()), 'Temporary file was not deleted from file storage'); + foreach ($tmpfiles as $tmpfile) { + $this->assertFalse(get_file_storage()->get_file_by_id($tmpfile->get_id()), 'Temporary file was not deleted from file storage'); } } @@ -709,12 +709,12 @@ public function test_temporary_file_deletion(): void { * @dataProvider archive_filename_pattern_data_provider * * @param string $pattern Pattern to test - * @param bool $isValid Expected result + * @param bool $isvalid Expected result * @return void */ - public function test_archive_filename_pattern_validation(string $pattern, bool $isValid): void { + public function test_archive_filename_pattern_validation(string $pattern, bool $isvalid): void { $this->assertSame( - $isValid, + $isvalid, ArchiveJob::is_valid_archive_filename_pattern($pattern), 'Archive filename pattern validation failed for pattern "'.$pattern.'"' ); @@ -774,12 +774,12 @@ function ($carry, $item) { * @dataProvider attempt_filename_pattern_data_provider * * @param string $pattern Pattern to test - * @param bool $isValid Expected result + * @param bool $isvalid Expected result * @return void */ - public function test_attempt_filename_pattern_validation(string $pattern, bool $isValid): void { + public function test_attempt_filename_pattern_validation(string $pattern, bool $isvalid): void { $this->assertSame( - $isValid, + $isvalid, ArchiveJob::is_valid_attempt_filename_pattern($pattern), 'Attempt filename pattern validation failed for pattern "'.$pattern.'"' ); @@ -842,19 +842,19 @@ function ($carry, $item) { */ public function test_generate_archive_filename(): void { // Generate data - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Full pattern - $fullPattern = 'archive'; + $fullpattern = 'archive'; foreach (ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES as $var) { - $fullPattern .= '-${'.$var.'}'; + $fullpattern .= '-${'.$var.'}'; } $filename = ArchiveJob::generate_archive_filename( $mocks->course, $cm, $mocks->quiz, - $fullPattern + $fullpattern ); $this->assertStringContainsString($mocks->course->id, $filename, 'Course ID was not found in filename'); $this->assertStringContainsString($cm->id, $filename, 'Course module ID was not found in filename'); @@ -873,7 +873,7 @@ public function test_generate_archive_filename(): void { */ public function test_generate_archive_filename_without_variables(): void { // Generate data - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Full pattern @@ -895,7 +895,7 @@ public function test_generate_archive_filename_without_variables(): void { */ public function test_generate_archive_filename_invalid_pattern(): void { // Generate data - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Test filename generation @@ -917,7 +917,7 @@ public function test_generate_archive_filename_invalid_pattern(): void { */ public function test_generate_archive_filename_invalid_variables(): void { // Generate data - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Test filename generation @@ -970,4 +970,4 @@ public function status_display_args_data_provider(): array { ]; } -} \ No newline at end of file +} diff --git a/tests/BackupManager_test.php b/tests/BackupManager_test.php index 4c0a4a2..e995b1f 100644 --- a/tests/BackupManager_test.php +++ b/tests/BackupManager_test.php @@ -24,7 +24,6 @@ namespace quiz_archiver; - use backup; use context_course; use context_module; @@ -39,7 +38,7 @@ class BackupManager_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -49,7 +48,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object) [ @@ -91,7 +90,7 @@ protected function generateMockQuiz(): \stdClass { public function test_course_backup(): void { // Initiate a mock course backup $this->setAdminUser(); - $mock = $this->generateMockQuiz(); + $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $backup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); @@ -119,7 +118,7 @@ public function test_course_backup(): void { public function test_quiz_backup(): void { // Initiate a mock course backup $this->setAdminUser(); - $mock = $this->generateMockQuiz(); + $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $backup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); @@ -177,7 +176,7 @@ public function test_backup_missing_quiz(): void { * @throws \dml_exception */ public function test_backup_course_without_privileges(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $this->expectException(\backup_controller_exception::class); $this->expectExceptionMessageMatches('/backup_user_missing_capability/'); @@ -193,7 +192,7 @@ public function test_backup_course_without_privileges(): void { * @throws \dml_exception */ public function test_backup_quiz_without_privileges(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $this->expectException(\backup_controller_exception::class); $this->expectExceptionMessageMatches('/backup_user_missing_capability/'); @@ -210,7 +209,7 @@ public function test_backup_quiz_without_privileges(): void { */ public function test_backup_download_url_generation_with_internal_wwwroot(): void { $this->setAdminUser(); - $mock = $this->generateMockQuiz(); + $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); set_config('internal_wwwroot', 'http://my-internal-hostname', 'quiz_archiver'); @@ -233,24 +232,24 @@ public function test_backup_download_url_generation_with_internal_wwwroot(): voi public function test_initialization_by_existing_backupid(): void { // Prepare a course and a quiz backup $this->setAdminUser(); - $mock = $this->generateMockQuiz(); + $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); - $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); - $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); // Course backup - $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); - $this->assertNotEmpty($actualCourseBackup, 'Course backup was not created correctly from backup ID'); - $this->assertEquals($expectedCourseBackup->backupid, $actualCourseBackup->get_backupid(), 'Course backup ID was not set correctly'); - $this->assertEquals($expectedCourseBackup->userid, $actualCourseBackup->get_userid(), 'Course user ID was not set correctly'); - $this->assertSame(backup::TYPE_1COURSE, $actualCourseBackup->get_type(), 'Course backup type was not set correctly'); + $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); + $this->assertNotEmpty($actualcoursebackup, 'Course backup was not created correctly from backup ID'); + $this->assertEquals($expectedcoursebackup->backupid, $actualcoursebackup->get_backupid(), 'Course backup ID was not set correctly'); + $this->assertEquals($expectedcoursebackup->userid, $actualcoursebackup->get_userid(), 'Course user ID was not set correctly'); + $this->assertSame(backup::TYPE_1COURSE, $actualcoursebackup->get_type(), 'Course backup type was not set correctly'); // Quiz backup - $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); - $this->assertNotEmpty($actualQuizBackup, 'Quiz backup was not created correctly from backup ID'); - $this->assertEquals($expectedQuizBackup->backupid, $actualQuizBackup->get_backupid(), 'Quiz backup ID was not set correctly'); - $this->assertEquals($expectedQuizBackup->userid, $actualQuizBackup->get_userid(), 'Quiz user ID was not set correctly'); - $this->assertSame(backup::TYPE_1ACTIVITY, $actualQuizBackup->get_type(), 'Quiz backup type was not set correctly'); + $actualquizbackup = new BackupManager($expectedquizbackup->backupid); + $this->assertNotEmpty($actualquizbackup, 'Quiz backup was not created correctly from backup ID'); + $this->assertEquals($expectedquizbackup->backupid, $actualquizbackup->get_backupid(), 'Quiz backup ID was not set correctly'); + $this->assertEquals($expectedquizbackup->userid, $actualquizbackup->get_userid(), 'Quiz user ID was not set correctly'); + $this->assertSame(backup::TYPE_1ACTIVITY, $actualquizbackup->get_type(), 'Quiz backup type was not set correctly'); } /** @@ -275,22 +274,22 @@ public function test_initialization_by_non_existing_backupid(): void { public function test_backup_status(): void { // Prepare a course and a quiz backup $this->setAdminUser(); - $mock = $this->generateMockQuiz(); + $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); - $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); - $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); // Course backup - $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); - $this->assertSame(backup::TYPE_1COURSE, $actualCourseBackup->get_type(), 'Course backup type was not retrieved correctly'); - $actualCourseBackup->is_finished_successfully(); - $actualCourseBackup->is_failed(); + $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); + $this->assertSame(backup::TYPE_1COURSE, $actualcoursebackup->get_type(), 'Course backup type was not retrieved correctly'); + $actualcoursebackup->is_finished_successfully(); + $actualcoursebackup->is_failed(); // Quiz backup - $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); - $this->assertSame(backup::TYPE_1ACTIVITY, $actualQuizBackup->get_type(), 'Quiz backup type was not retrieved correctly'); - $actualQuizBackup->is_finished_successfully(); - $actualQuizBackup->is_failed(); + $actualquizbackup = new BackupManager($expectedquizbackup->backupid); + $this->assertSame(backup::TYPE_1ACTIVITY, $actualquizbackup->get_type(), 'Quiz backup type was not retrieved correctly'); + $actualquizbackup->is_finished_successfully(); + $actualquizbackup->is_failed(); } /** @@ -305,7 +304,7 @@ public function test_backup_status(): void { public function test_backup_job_association(): void { // Prepare a course and a quiz backup $this->setAdminUser(); - $mock = $this->generateMockQuiz(); + $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $job = ArchiveJob::create( '90000000-1234-5678-abcd-ef4242424242', @@ -318,16 +317,16 @@ public function test_backup_job_association(): void { $mock->attempts, $mock->settings ); - $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); - $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); // Course backup - $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); - $this->assertTrue($actualCourseBackup->is_associated_with_job($job), 'Course backup was not detected as associated with the given job'); + $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); + $this->assertTrue($actualcoursebackup->is_associated_with_job($job), 'Course backup was not detected as associated with the given job'); // Quiz backup - $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); - $this->assertTrue($actualQuizBackup->is_associated_with_job($job), 'Quiz backup was not detected as associated with the given job'); + $actualquizbackup = new BackupManager($expectedquizbackup->backupid); + $this->assertTrue($actualquizbackup->is_associated_with_job($job), 'Quiz backup was not detected as associated with the given job'); } /** @@ -342,7 +341,7 @@ public function test_backup_job_association(): void { public function test_backup_invalid_job_association(): void { // Prepare a course and a quiz backup $this->setAdminUser(); - $mock = $this->generateMockQuiz(); + $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', @@ -355,16 +354,16 @@ public function test_backup_invalid_job_association(): void { $mock->attempts, $mock->settings ); - $expectedCourseBackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); - $expectedQuizBackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); + $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); + $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); // Course backup - $actualCourseBackup = new BackupManager($expectedCourseBackup->backupid); - $this->assertFalse($actualCourseBackup->is_associated_with_job($job), 'Course backup was detected as associated with an unrelated job'); + $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); + $this->assertFalse($actualcoursebackup->is_associated_with_job($job), 'Course backup was detected as associated with an unrelated job'); // Quiz backup - $actualQuizBackup = new BackupManager($expectedQuizBackup->backupid); - $this->assertFalse($actualQuizBackup->is_associated_with_job($job), 'Quiz backup was detected as associated with an unrelated job'); + $actualquizbackup = new BackupManager($expectedquizbackup->backupid); + $this->assertFalse($actualquizbackup->is_associated_with_job($job), 'Quiz backup was detected as associated with an unrelated job'); } -} \ No newline at end of file +} diff --git a/tests/FileManager_test.php b/tests/FileManager_test.php index 110dae5..af0b3fc 100644 --- a/tests/FileManager_test.php +++ b/tests/FileManager_test.php @@ -24,7 +24,6 @@ namespace quiz_archiver; - use context_user; /** @@ -37,7 +36,7 @@ class FileManager_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -47,7 +46,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object) [ @@ -70,7 +69,7 @@ protected function generateMockQuiz(): \stdClass { * @throws \file_exception * @throws \stored_file_creation_exception */ - protected function importReferenceQuizArtifact(): \stored_file { + protected function import_reference_quiz_artifact(): \stored_file { $this->resetAfterTest(); $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); @@ -95,7 +94,7 @@ protected function importReferenceQuizArtifact(): \stored_file { * @throws \file_exception * @throws \stored_file_creation_exception */ - protected function generateDraftFile(string $filename, string $filearea = 'draft'): \stored_file { + protected function generate_draft_file(string $filename, string $filearea = 'draft'): \stored_file { $this->resetAfterTest(); $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); @@ -123,7 +122,7 @@ protected function generateDraftFile(string $filename, string $filearea = 'draft * @throws \file_exception * @throws \stored_file_creation_exception */ - protected function generateTempFile(string $filename, int $expiry): \stored_file { + protected function generate_temp_file(string $filename, int $expiry): \stored_file { $this->resetAfterTest(); $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); @@ -150,12 +149,11 @@ protected function generateTempFile(string $filename, int $expiry): \stored_file * @param int $courseid * @param int $cmid * @param int $quizid - * @param string $expectedPath + * @param string $expectedpath * @return void */ - public function test_file_path_generator(int $courseid, int $cmid, int $quizid, string $expectedPath): void { - $this->assertEquals($expectedPath, FileManager::get_file_path($courseid, $cmid, $quizid)); - + public function test_file_path_generator(int $courseid, int $cmid, int $quizid, string $expectedpath): void { + $this->assertEquals($expectedpath, FileManager::get_file_path($courseid, $cmid, $quizid)); } /** @@ -169,49 +167,49 @@ public function file_path_generator_data_provider(): array { 1, 2, 3, - '/1/2/3/' + '/1/2/3/', ], 'Empty path' => [ 0, 0, 0, - '/' + '/', ], 'Only course' => [ 1, 0, 0, - '/1/' + '/1/', ], 'Only course and cm' => [ 1, 2, 0, - '/1/2/' + '/1/2/', ], 'Only course and quiz' => [ 1, 0, 3, - '/1/' + '/1/', ], 'Only cm' => [ 0, 2, 0, - '/' + '/', ], 'Only cm and quiz' => [ 0, 2, 3, - '/' + '/', ], 'Only quiz' => [ 0, 0, 3, - '/' + '/', ], ]; } @@ -225,9 +223,9 @@ public function file_path_generator_data_provider(): array { * @throws \stored_file_creation_exception */ public function test_artifact_storing(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - $draftfile = $this->generateDraftFile('testfile.tar.gz'); + $draftfile = $this->generate_draft_file('testfile.tar.gz'); $draftfilehash = $draftfile->get_contenthash(); // Store draftfile as artifact @@ -249,13 +247,13 @@ public function test_artifact_storing(): void { * @throws \stored_file_creation_exception */ public function test_artifact_storing_invalid_file(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - $invalidFile = $this->generateDraftFile('invalidfile.tar.gz', 'invalidarea'); + $invalidfile = $this->generate_draft_file('invalidfile.tar.gz', 'invalidarea'); $this->expectException(\file_exception::class); $this->expectExceptionMessageMatches('/draftfile/'); - $fm->store_uploaded_artifact($invalidFile); + $fm->store_uploaded_artifact($invalidfile); } /** @@ -266,7 +264,7 @@ public function test_artifact_storing_invalid_file(): void { * @throws \stored_file_creation_exception */ public function test_hash_valid_file(): void { - $file = $this->generateDraftFile('testartifact.tar.gz'); + $file = $this->generate_draft_file('testartifact.tar.gz'); $defaulthash = FileManager::hash_file($file); $this->assertNotEmpty($defaulthash, 'Default hash is empty'); $this->assertSame(64, strlen($defaulthash), 'Default hash length is not 64 bytes, as expected from SHA256'); @@ -283,7 +281,7 @@ public function test_hash_valid_file(): void { * @throws \stored_file_creation_exception */ public function test_hash_file_invalid_algorithm(): void { - $file = $this->generateDraftFile('testartifact.tar.gz'); + $file = $this->generate_draft_file('testartifact.tar.gz'); $this->assertNull(FileManager::hash_file($file, 'invalid-algorithm'), 'Invalid algorithm did not return null'); } @@ -303,7 +301,7 @@ public function test_send_virtual_file_tsp_query(): void { $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); } - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000001', $mocks->course->id, @@ -350,7 +348,7 @@ public function test_send_virtual_file_tsp_reply(): void { $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); } - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000002', $mocks->course->id, @@ -390,7 +388,7 @@ public function test_send_virtual_file_tsp_reply(): void { * @throws \moodle_exception */ public function test_send_virtual_files_tsp_invalid_job(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000003', $mocks->course->id, @@ -422,7 +420,7 @@ public function test_send_virtual_files_tsp_invalid_job(): void { * @throws \moodle_exception */ public function test_send_virtual_files_tsp_unsigned_job(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000004', $mocks->course->id, @@ -453,7 +451,7 @@ public function test_send_virtual_files_tsp_unsigned_job(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_filearea(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test invalid filearea @@ -468,7 +466,7 @@ public function test_send_virtual_files_invalid_filearea(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_path(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test invalid path @@ -483,7 +481,7 @@ public function test_send_virtual_files_invalid_path(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_jobid(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test invalid job-id @@ -502,7 +500,7 @@ public function test_send_virtual_files_invalid_jobid(): void { * @throws \dml_exception */ public function test_send_virtual_files_missing_job(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test missing job @@ -521,7 +519,7 @@ public function test_send_virtual_files_missing_job(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_filename(): void { - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test missing job @@ -542,7 +540,7 @@ public function test_send_virtual_files_invalid_filename(): void { */ public function test_extract_attempt_data_from_artifact(): void { // Prepare a finished archive job that has a valid artifact file - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000042', $mocks->course->id, @@ -556,16 +554,16 @@ public function test_extract_attempt_data_from_artifact(): void { ArchiveJob::STATUS_FINISHED ); - $draftArtifact = $this->importReferenceQuizArtifact(); + $draftartifact = $this->import_reference_quiz_artifact(); $attemptid = 13775; $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - $fm->store_uploaded_artifact($draftArtifact); - $storedArtifacts = $fm->get_stored_artifacts(); - $storedArtifact = array_shift($storedArtifacts); + $fm->store_uploaded_artifact($draftartifact); + $storedartifacts = $fm->get_stored_artifacts(); + $storedartifact = array_shift($storedartifacts); // Extract userdata from artifact into temporary stored_file - $tempfile = $fm->extract_attempt_data_from_artifact($storedArtifact, $job->get_id(), $attemptid); + $tempfile = $fm->extract_attempt_data_from_artifact($storedartifact, $job->get_id(), $attemptid); $this->assertNotEmpty($tempfile, 'No temp file was returned'); $this->assertNotEmpty($tempfile->get_contenthash(), 'Temp file has no valid content hash'); $this->assertTrue($tempfile->get_filesize() > 1024, 'Temp file is too small to be valid'); @@ -583,7 +581,7 @@ public function test_extract_attempt_data_from_artifact(): void { */ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { // Prepare a finished archive job that has a valid artifact file - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000021', $mocks->course->id, @@ -596,16 +594,16 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { [], ArchiveJob::STATUS_FINISHED ); - $draftArtifact = $this->importReferenceQuizArtifact(); + $draftartifact = $this->import_reference_quiz_artifact(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - $fm->store_uploaded_artifact($draftArtifact); - $storedArtifacts = $fm->get_stored_artifacts(); - $storedArtifact = array_shift($storedArtifacts); + $fm->store_uploaded_artifact($draftartifact); + $storedartifacts = $fm->get_stored_artifacts(); + $storedartifact = array_shift($storedartifacts); // Extract userdata from artifact into temporary stored_file $this->expectException(\moodle_exception::class); $this->expectExceptionMessageMatches('/Attempt not found/'); - $fm->extract_attempt_data_from_artifact($storedArtifact, $job->get_id(), 9999999); + $fm->extract_attempt_data_from_artifact($storedartifact, $job->get_id(), 9999999); } /** @@ -620,7 +618,7 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { */ public function test_extract_attempt_data_from_invalid_artifact(): void { // Prepare an unfinished archive job that has no artifact file - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000043', $mocks->course->id, @@ -638,7 +636,7 @@ public function test_extract_attempt_data_from_invalid_artifact(): void { // Attempt to extract data from nonexisting artifact $this->expectException(\moodle_exception::class); $this->expectExceptionMessageMatches('/Error processing archive file/'); - $fm->extract_attempt_data_from_artifact($this->generateDraftFile('not-an-artifact.tar.gz'), $job->get_id(), 1337); + $fm->extract_attempt_data_from_artifact($this->generate_draft_file('not-an-artifact.tar.gz'), $job->get_id(), 1337); } /** @@ -651,27 +649,27 @@ public function test_extract_attempt_data_from_invalid_artifact(): void { */ public function test_cleanup_temp_files(): void { // Prepare tempfiles - $overdueTempfiles = [ - $this->generateTempFile('tempfile1.tar.gz', 0), - $this->generateTempFile('tempfile2.tar.gz', 0), - $this->generateTempFile('tempfile3.tar.gz', 0), + $overduetempfiles = [ + $this->generate_temp_file('tempfile1.tar.gz', 0), + $this->generate_temp_file('tempfile2.tar.gz', 0), + $this->generate_temp_file('tempfile3.tar.gz', 0), ]; - $activeTempfiles = [ - $this->generateTempFile('tempfile4.tar.gz', time() + 3600), - $this->generateTempFile('tempfile5.tar.gz', time() + 3600), - $this->generateTempFile('tempfile6.tar.gz', time() + 3600), + $activetempfiles = [ + $this->generate_temp_file('tempfile4.tar.gz', time() + 3600), + $this->generate_temp_file('tempfile5.tar.gz', time() + 3600), + $this->generate_temp_file('tempfile6.tar.gz', time() + 3600), ]; // Perform cleanup FileManager::cleanup_temp_files(); - foreach ($overdueTempfiles as $file) { + foreach ($overduetempfiles as $file) { $this->assertEmpty(get_file_storage()->get_file_by_id($file->get_id()), 'Temp file was not deleted'); } - foreach ($activeTempfiles as $file) { + foreach ($activetempfiles as $file) { $this->assertNotEmpty(get_file_storage()->get_file_by_id($file->get_id()), 'Active temp file was falsely deleted'); } } -} \ No newline at end of file +} diff --git a/tests/RemoteArchiveWorker_test.php b/tests/RemoteArchiveWorker_test.php index c3e8b49..23c902d 100644 --- a/tests/RemoteArchiveWorker_test.php +++ b/tests/RemoteArchiveWorker_test.php @@ -24,7 +24,6 @@ namespace quiz_archiver; - /** * Tests for the RemoteArchiveWorker class */ @@ -52,4 +51,4 @@ public function test_enqueue_archive_job_stub(): void { ); } -} \ No newline at end of file +} diff --git a/tests/Report_test.php b/tests/Report_test.php index 0d61ff3..a3ffbba 100644 --- a/tests/Report_test.php +++ b/tests/Report_test.php @@ -24,14 +24,14 @@ namespace quiz_archiver; -global $CFG; - use backup; +// @codingStandardsIgnoreLine +global $CFG; + require_once($CFG->dirroot . '/mod/quiz/report/archiver/patch_401_class_renames.php'); require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php'); - /** * Tests for the Report class */ @@ -68,7 +68,7 @@ class Report_test extends \advanced_testcase { * attempt ids inside the reference quiz), 'userids' (array of all user ids * with attempts in the reference quiz) */ - protected function prepareReferenceCourse(): \stdClass { + protected function prepare_reference_course(): \stdClass { global $DB, $USER; $this->resetAfterTest(); $this->setAdminUser(); @@ -100,16 +100,16 @@ protected function prepareReferenceCourse(): \stdClass { // 2024-05-14: Do not destroy restore_controller. This will drop temptables without removing them from // $DB->temptables properly, causing DB reset to fail in subsequent tests due to missing tables. Destroying the // restore_controller is optional and not necessary for this test. - //$rc->destroy(); + // $rc->destroy(); // Get course and find the reference quiz $course = get_course($rc->get_courseid()); $modinfo = get_fast_modinfo($course); $cms = $modinfo->get_cms(); $cm = null; - foreach ($cms as $curCm) { - if ($curCm->modname == 'quiz' && strpos($curCm->name, 'Reference Quiz') === 0) { - $cm = $curCm; + foreach ($cms as $curcm) { + if ($curcm->modname == 'quiz' && strpos($curcm->name, 'Reference Quiz') === 0) { + $cm = $curcm; break; } } @@ -134,9 +134,11 @@ protected function prepareReferenceCourse(): \stdClass { } /** + * Generates an report section settings array with all sections enabled + * * @return array To pass to Report::generate(), with all report sections enabled */ - protected static function getAllReportSectionsEnabled(): array { + protected static function get_all_report_sections_enabled(): array { $sections = []; foreach (Report::SECTIONS as $section) { $sections[$section] = true; @@ -145,9 +147,11 @@ protected static function getAllReportSectionsEnabled(): array { } /** + * Generates an archive_form formdata object with all report sections enabled + * * @return \stdClass That emulates the data received from the archive_form */ - protected static function getFormdataAllReportsSectionsEnabled(): object { + protected static function get_formdata_all_reports_sections_enabled(): object { $formdata = new \stdClass(); foreach (Report::SECTIONS as $section) { $formdata->{'export_report_section_'.$section} = 1; @@ -164,10 +168,10 @@ protected static function getFormdataAllReportsSectionsEnabled(): object { * @throws \restore_controller_exception */ public function test_webservice_token_access_validation() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); - $validToken = md5("VALID-TEST-TOKEN"); - $invalidToken = md5("INVALID-TEST-TOKEN"); + $validtoken = md5("VALID-TEST-TOKEN"); + $invalidtoken = md5("INVALID-TEST-TOKEN"); $job = ArchiveJob::create( 'test-job', $rc->course->id, @@ -175,21 +179,21 @@ public function test_webservice_token_access_validation() { $rc->quiz->id, 2, null, - $validToken, + $validtoken, [], [], ); - $this->assertTrue($report->has_access($validToken), 'Valid token rejected'); - $this->assertFalse($report->has_access($invalidToken), 'Invalid token accepted'); + $this->assertTrue($report->has_access($validtoken), 'Valid token rejected'); + $this->assertFalse($report->has_access($invalidtoken), 'Invalid token accepted'); $job->set_status(ArchiveJob::STATUS_FINISHED); - $this->assertFalse($report->has_access($validToken), 'Valid token accepted for finished job'); - $this->assertFalse($report->has_access($invalidToken), 'Invalid token accepted for finished job'); + $this->assertFalse($report->has_access($validtoken), 'Valid token accepted for finished job'); + $this->assertFalse($report->has_access($invalidtoken), 'Invalid token accepted for finished job'); } /** - * Test generation of a full page report with all sections + * Test generation of a full attempt report with all sections * * @return void * @throws \DOMException @@ -197,47 +201,61 @@ public function test_webservice_token_access_validation() { * @throws \dml_exception * @throws \moodle_exception */ - public function test_generate_full_report() { - $rc = $this->prepareReferenceCourse(); + public function test_generate_full_report() { + $rc = $this->prepare_reference_course(); - // Generate full report with all sections - $report = new Report($rc->course, $rc->cm, $rc->quiz); - $html = $report->generate($rc->attemptids[0], self::getAllReportSectionsEnabled()); - $this->assertNotEmpty($html, 'Generated report is empty'); - - // Verify quiz header - $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); - $this->assertMatchesRegularExpression('/]*>'.preg_quote($rc->course->fullname, '/').'[^<>]+<\/td>/', $html, 'Course name not found'); - $this->assertMatchesRegularExpression('/]*>'.preg_quote($rc->quiz->name, '/').'[^<>]+<\/td>/', $html, 'Quiz name not found'); - - // Verify overall quiz feedback - // TODO: Add proper overall feedback to reference quiz and check its contents - $this->assertMatchesRegularExpression('/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', $html, 'Overall feedback header not found'); + // Generate full report with all sections + $report = new Report($rc->course, $rc->cm, $rc->quiz); + $html = $report->generate($rc->attemptids[0], self::get_all_report_sections_enabled()); + $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify questions - foreach (self::QUESTION_TYPES_IN_REFERENCE_QUIZ as $qtype) { - $this->assertMatchesRegularExpression('/<[^<>]*class="[^\"<>]*que[^\"<>]*'.preg_quote($qtype, '/').'[^\"<>]*"[^<>]*>/', $html, 'Question of type '.$qtype.' not found'); - } + // Verify quiz header + $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); + $this->assertMatchesRegularExpression('/]*>' . preg_quote($rc->course->fullname, '/') . '[^<>]+<\/td>/', $html, 'Course name not found'); + $this->assertMatchesRegularExpression('/]*>' . preg_quote($rc->quiz->name, '/') . '[^<>]+<\/td>/', $html, 'Quiz name not found'); + + // Verify overall quiz feedback + // TODO: Add proper overall feedback to reference quiz and check its contents + $this->assertMatchesRegularExpression('/]*>\s*' . preg_quote(get_string('feedback', 'quiz'), '/') . '\s*<\/th>/', $html, 'Overall feedback header not found'); + + // Verify questions + foreach (self::QUESTION_TYPES_IN_REFERENCE_QUIZ as $qtype) { + $this->assertMatchesRegularExpression( + '/<[^<>]*class="[^\"<>]*que[^\"<>]*'.preg_quote($qtype, '/').'[^\"<>]*"[^<>]*>/', + $html, + 'Question of type '.$qtype.' not found' + ); + } - // Verify individual question feedback - $this->assertMatchesRegularExpression('/
    /', $html, 'Individual question feedback not found'); + // Verify individual question feedback + $this->assertMatchesRegularExpression('/
    /', $html, 'Individual question feedback not found'); - // Verify general question feedback - $this->assertMatchesRegularExpression('/
    /', $html, 'General question feedback not found'); + // Verify general question feedback + $this->assertMatchesRegularExpression('/
    /', $html, 'General question feedback not found'); - // Verify correct answers - $this->assertMatchesRegularExpression('/
    /', $html, 'Correct question answers not found'); + // Verify correct answers + $this->assertMatchesRegularExpression('/
    /', $html, 'Correct question answers not found'); - // Verify answer history - $this->assertMatchesRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history not found'); + // Verify answer history + $this->assertMatchesRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history not found'); } + /** + * Tests generation of a full page report with all sections + * + * @return void + * @throws \DOMException + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ public function test_generate_full_page_stub() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $html = $report->generate_full_page( $rc->attemptids[0], - self::getAllReportSectionsEnabled(), + self::get_all_report_sections_enabled(), false, // We need to disable this since $OUTPUT->header() is not working during tests false, // We need to disable this since $OUTPUT->header() is not working during tests true @@ -254,20 +272,28 @@ public function test_generate_full_page_stub() { * @throws \moodle_exception */ public function test_generate_report_no_header() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); // Generate report without a header $report = new Report($rc->course, $rc->cm, $rc->quiz); - $sections = self::getAllReportSectionsEnabled(); + $sections = self::get_all_report_sections_enabled(); $sections['header'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that quiz header is absent - $this->assertDoesNotMatchRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table found when it should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/]*quizreviewsummary[^<>]*>/', + $html, + 'Quiz header table found when it should be absent' + ); // If the quiz header is disabled, the quiz feedback should also be absent - $this->assertDoesNotMatchRegularExpression('/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', $html, 'Overall feedback header found when it should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', + $html, + 'Overall feedback header found when it should be absent' + ); } /** @@ -280,19 +306,27 @@ public function test_generate_report_no_header() { * @throws \restore_controller_exception */ public function test_generate_report_no_quiz_feedback() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); // Generate report without quiz feedback $report = new Report($rc->course, $rc->cm, $rc->quiz); - $sections = self::getAllReportSectionsEnabled(); + $sections = self::get_all_report_sections_enabled(); $sections['quiz_feedback'] = false; $sections['questions'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that quiz feedback is absent - $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); - $this->assertDoesNotMatchRegularExpression('/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', $html, 'Overall feedback header found when it should be absent'); + $this->assertMatchesRegularExpression( + '/]*quizreviewsummary[^<>]*>/', + $html, + 'Quiz header table not found' + ); + $this->assertDoesNotMatchRegularExpression( + '/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', + $html, + 'Overall feedback header found when it should be absent' + ); } /** @@ -305,11 +339,11 @@ public function test_generate_report_no_quiz_feedback() { * @throws \restore_controller_exception */ public function test_generate_report_no_questions() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); // Generate report without questions $report = new Report($rc->course, $rc->cm, $rc->quiz); - $sections = self::getAllReportSectionsEnabled(); + $sections = self::get_all_report_sections_enabled(); $sections['question'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); @@ -334,11 +368,11 @@ public function test_generate_report_no_questions() { * @throws \restore_controller_exception */ public function test_generate_report_no_question_feedback() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); // Generate report without question feedback $report = new Report($rc->course, $rc->cm, $rc->quiz); - $sections = self::getAllReportSectionsEnabled(); + $sections = self::get_all_report_sections_enabled(); $sections['question_feedback'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); @@ -357,11 +391,11 @@ public function test_generate_report_no_question_feedback() { * @throws \restore_controller_exception */ public function test_generate_report_no_general_feedback() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); // Generate report without general feedback $report = new Report($rc->course, $rc->cm, $rc->quiz); - $sections = self::getAllReportSectionsEnabled(); + $sections = self::get_all_report_sections_enabled(); $sections['general_feedback'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); @@ -380,11 +414,11 @@ public function test_generate_report_no_general_feedback() { * @throws \restore_controller_exception */ public function test_generate_report_no_rightanswers() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); // Generate report without right answers $report = new Report($rc->course, $rc->cm, $rc->quiz); - $sections = self::getAllReportSectionsEnabled(); + $sections = self::get_all_report_sections_enabled(); $sections['rightanswer'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); @@ -403,11 +437,11 @@ public function test_generate_report_no_rightanswers() { * @throws \restore_controller_exception */ public function test_generate_report_no_history() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); // Generate report without answer history $report = new Report($rc->course, $rc->cm, $rc->quiz); - $sections = self::getAllReportSectionsEnabled(); + $sections = self::get_all_report_sections_enabled(); $sections['history'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); @@ -425,7 +459,7 @@ public function test_generate_report_no_history() { * @throws \restore_controller_exception */ public function test_get_attempt_attachments() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attachments = $report->get_attempt_attachments($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); @@ -443,7 +477,7 @@ public function test_get_attempt_attachments() { * @throws \restore_controller_exception */ public function test_get_attempt_attachments_metadata() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attachments = $report->get_attempt_attachments_metadata($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); @@ -471,7 +505,7 @@ public function test_get_attempt_attachments_metadata() { * @throws \restore_controller_exception */ public function test_get_attempts() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attempts = $report->get_attempts(); @@ -488,7 +522,7 @@ public function test_get_attempts() { * @throws \restore_controller_exception */ public function test_get_attempts_metadata() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); // Test without filters @@ -508,12 +542,12 @@ public function test_get_attempts_metadata() { $this->assertNotEmpty($attempt->lastname, 'Attempt metadata does not contain lastname'); // Test filtered - $attempts_filtered_existing = $report->get_attempts_metadata($rc->attemptids); - $this->assertNotEmpty($attempts_filtered_existing, 'No attempts found with existing attempt ids'); - $this->assertCount(count($rc->attemptids), $attempts_filtered_existing, 'Incorrect number of attempts found with existing attempt ids'); + $attemptsfilteredexisting = $report->get_attempts_metadata($rc->attemptids); + $this->assertNotEmpty($attemptsfilteredexisting, 'No attempts found with existing attempt ids'); + $this->assertCount(count($rc->attemptids), $attemptsfilteredexisting, 'Incorrect number of attempts found with existing attempt ids'); - $attempts_filtered_nonexisting = $report->get_attempts_metadata([-1, -2, -3]); - $this->assertEmpty($attempts_filtered_nonexisting, 'Attempts found for non-existing attempt ids'); + $attemptsfilterednonexisting = $report->get_attempts_metadata([-1, -2, -3]); + $this->assertEmpty($attemptsfilterednonexisting, 'Attempts found for non-existing attempt ids'); } /** @@ -524,7 +558,7 @@ public function test_get_attempts_metadata() { * @throws \restore_controller_exception */ public function test_get_users_with_attempts() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $users = $report->get_users_with_attempts(); @@ -541,14 +575,14 @@ public function test_get_users_with_attempts() { * @throws \restore_controller_exception */ public function test_get_latest_attempt_for_user() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); - $latest_attempt = $report->get_latest_attempt_for_user($rc->userids[0]); - $this->assertNotEmpty($latest_attempt, 'No latest attempt found for user'); + $latestattempt = $report->get_latest_attempt_for_user($rc->userids[0]); + $this->assertNotEmpty($latestattempt, 'No latest attempt found for user'); - $latest_attempt_missing = $report->get_latest_attempt_for_user(-1); - $this->assertEmpty($latest_attempt_missing, 'Latest attempt found for non-existing user'); + $latestattemptmissing = $report->get_latest_attempt_for_user(-1); + $this->assertEmpty($latestattemptmissing, 'Latest attempt found for non-existing user'); } /** @@ -560,7 +594,7 @@ public function test_get_latest_attempt_for_user() { * @throws \restore_controller_exception */ public function test_attempt_exists() { - $rc = $this->prepareReferenceCourse(); + $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $this->assertTrue($report->attempt_exists($rc->attemptids[0]), 'Existing attempt not found'); @@ -574,12 +608,12 @@ public function test_attempt_exists() { */ public function test_build_report_sections_from_formdata() { // Test all sections enabled - $formdata = self::getFormdataAllReportsSectionsEnabled(); + $formdata = self::get_formdata_all_reports_sections_enabled(); $sections = Report::build_report_sections_from_formdata($formdata); - $this->assertEquals(self::getAllReportSectionsEnabled(), $sections, 'Full formdata not correctly converted to report sections'); + $this->assertEquals(self::get_all_report_sections_enabled(), $sections, 'Full formdata not correctly converted to report sections'); // Test removal of dependent sections - $formdata = self::getFormdataAllReportsSectionsEnabled(); + $formdata = self::get_formdata_all_reports_sections_enabled(); $formdata->export_report_section_question = 0; $sections = Report::build_report_sections_from_formdata($formdata); $this->assertEmpty($sections['question'], 'Root section not removed correctly'); @@ -590,10 +624,10 @@ public function test_build_report_sections_from_formdata() { $this->assertEmpty($sections['attachments'], 'Dependent section attachments not removed correctly'); // Test removal of superfluous sections - $formdata = self::getFormdataAllReportsSectionsEnabled(); + $formdata = self::get_formdata_all_reports_sections_enabled(); $formdata->export_report_section_superfluous = 1; $sections = Report::build_report_sections_from_formdata($formdata); - $this->assertEquals(self::getAllReportSectionsEnabled(), $sections, 'Superfluous section not removed correctly'); + $this->assertEquals(self::get_all_report_sections_enabled(), $sections, 'Superfluous section not removed correctly'); } -} \ No newline at end of file +} diff --git a/tests/TSPManager_test.php b/tests/TSPManager_test.php index e07d254..e31d895 100644 --- a/tests/TSPManager_test.php +++ b/tests/TSPManager_test.php @@ -24,7 +24,6 @@ namespace quiz_archiver; - use context_course; /** @@ -37,7 +36,7 @@ class TSPManager_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -47,7 +46,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object) [ @@ -68,7 +67,7 @@ protected function generateMockQuiz(): \stdClass { * @throws \file_exception * @throws \stored_file_creation_exception */ - protected function generateArtifactFile(int $courseid, int $cmid, int $quizid, string $filename): \stored_file { + protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, string $filename): \stored_file { $this->resetAfterTest(); $ctx = context_course::instance($courseid); @@ -91,39 +90,39 @@ protected function generateArtifactFile(int $courseid, int $cmid, int $quizid, s * Creates a TSPManager that uses a mocked TimeStampProtocolClient * * @param ArchiveJob $job Job to create the TSPManager for - * @param string $dummy_server Dummy TSP server URL - * @param string $dummy_query Dummy TSP query data - * @param string $dummy_reply Dummy TSP reply data + * @param string $dummyserver Dummy TSP server URL + * @param string $dummyquery Dummy TSP query data + * @param string $dummyreply Dummy TSP reply data * @return TSPManager */ - protected function createMockTSPManager( + protected function create_mock_tspmanager( ArchiveJob $job, - string $dummy_server = 'localhost', - string $dummy_query = 'tsp-dummy-query', - string $dummy_reply = 'tsp-dummy-reply-0123456789abcdef' + string $dummyserver = 'localhost', + string $dummyquery = 'tsp-dummy-query', + string $dummyreply = 'tsp-dummy-reply-0123456789abcdef' ): TSPManager { // Prepare TimeStampProtocolClient that returns dummy data - $tspClientMock = $this->getMockBuilder(TimeStampProtocolClient::class) + $tspclientmock = $this->getMockBuilder(TimeStampProtocolClient::class) ->onlyMethods(['sign']) - ->setConstructorArgs([$dummy_server]) + ->setConstructorArgs([$dummyserver]) ->getMock(); - $tspClientMock->expects($this->any()) + $tspclientmock->expects($this->any()) ->method('sign') ->willReturn([ - 'query' => $dummy_query, - 'reply' => $dummy_reply, + 'query' => $dummyquery, + 'reply' => $dummyreply, ]); // Create TSPManager that uses the mocked TimeStampProtocolClient - $tspManager = $this->getMockBuilder(TSPManager::class) - ->onlyMethods(['getTimestampProtocolClient']) + $tspmanager = $this->getMockBuilder(TSPManager::class) + ->onlyMethods(['get_timestampprotocolclient']) ->setConstructorArgs([$job]) ->getMock(); - $tspManager->expects($this->any()) - ->method('getTimestampProtocolClient') - ->willReturn($tspClientMock); + $tspmanager->expects($this->any()) + ->method('get_timestampprotocolclient') + ->willReturn($tspclientmock); - return $tspManager; + return $tspmanager; } /** @@ -141,7 +140,7 @@ public function test_tsp_timestamp(): void { set_config('tsp_enable', true, 'quiz_archiver'); // Generate job with artifact - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -155,28 +154,28 @@ public function test_tsp_timestamp(): void { ArchiveJob::STATUS_FINISHED ); - $artifact = $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); // Ensure that artifact was not yet signed - $this->assertFalse($job->TSPManager()->has_tsp_timestamp(), 'Artifact was detected as signed without it being signed'); + $this->assertFalse($job->tspmanager()->has_tsp_timestamp(), 'Artifact was detected as signed without it being signed'); // Ensure that the artifact wants to be signed - $this->assertTrue($job->TSPManager()->wants_tsp_timestamp(), 'Artifact was not detected as wanting to be signed'); + $this->assertTrue($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was not detected as wanting to be signed'); // Try signing the artifact using TSP - $tspManager = $this->createMockTSPManager($job); - $tspManager->timestamp(); - $this->assertTrue($tspManager->has_tsp_timestamp(), 'Artifact was not detected as signed after signing it'); + $tspmanager = $this->create_mock_tspmanager($job); + $tspmanager->timestamp(); + $this->assertTrue($tspmanager->has_tsp_timestamp(), 'Artifact was not detected as signed after signing it'); // Ensure that the TSP data was stored correctly - $this->assertEquals('tsp-dummy-query', $tspManager->get_tsp_data()->query, 'TSP query was not stored correctly'); - $this->assertEquals('tsp-dummy-reply-0123456789abcdef', $tspManager->get_tsp_data()->reply, 'TSP reply was not stored correctly'); - $this->assertEquals('localhost', $tspManager->get_tsp_data()->server, 'TSP server URL was not stored correctly'); + $this->assertEquals('tsp-dummy-query', $tspmanager->get_tsp_data()->query, 'TSP query was not stored correctly'); + $this->assertEquals('tsp-dummy-reply-0123456789abcdef', $tspmanager->get_tsp_data()->reply, 'TSP reply was not stored correctly'); + $this->assertEquals('localhost', $tspmanager->get_tsp_data()->server, 'TSP server URL was not stored correctly'); // Ensure that the artifact does not want to be signed again - $this->assertFalse($job->TSPManager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed after it was signed'); + $this->assertFalse($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed after it was signed'); } /** @@ -194,7 +193,7 @@ public function test_delete_tsp_data(): void { set_config('tsp_enable', true, 'quiz_archiver'); // Generate job with artifact - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -208,18 +207,18 @@ public function test_delete_tsp_data(): void { ArchiveJob::STATUS_FINISHED ); - $artifact = $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); // Sign the artifact using TSP - $tspManager = $this->createMockTSPManager($job); - $tspManager->timestamp(); - $this->assertTrue($tspManager->has_tsp_timestamp(), 'Artifact was not detected as signed after signing it'); + $tspmanager = $this->create_mock_tspmanager($job); + $tspmanager->timestamp(); + $this->assertTrue($tspmanager->has_tsp_timestamp(), 'Artifact was not detected as signed after signing it'); // Delete the TSP data - $tspManager->delete_tsp_data(); - $this->assertFalse($tspManager->has_tsp_timestamp(), 'Artifact was detected as signed after deleting the TSP data'); + $tspmanager->delete_tsp_data(); + $this->assertFalse($tspmanager->has_tsp_timestamp(), 'Artifact was detected as signed after deleting the TSP data'); } /** @@ -236,7 +235,7 @@ public function test_signing_invalid_artifact(): void { set_config('tsp_enable', true, 'quiz_archiver'); // Generate job without artifact - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -253,7 +252,7 @@ public function test_signing_invalid_artifact(): void { // Try signing the artifact using TSP $this->expectException(\RuntimeException::class); $this->expectExceptionMessage(get_string('archive_signing_failed_no_artifact', 'quiz_archiver')); - $this->createMockTSPManager($job)->timestamp(); + $this->create_mock_tspmanager($job)->timestamp(); } /** @@ -271,7 +270,7 @@ public function test_signing_disabled(): void { set_config('tsp_enable', false, 'quiz_archiver'); // Generate job with artifact - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '40000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -285,17 +284,17 @@ public function test_signing_disabled(): void { ArchiveJob::STATUS_FINISHED ); - $artifact = $this->generateArtifactFile($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $sha256sum = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256sum); // Check that the artifact does not want to be signed - $this->assertFalse($job->TSPManager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed while TSP is disabled'); + $this->assertFalse($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed while TSP is disabled'); // Try signing the artifact using TSP $this->expectException(\Exception::class); $this->expectExceptionMessage(get_string('archive_signing_failed_tsp_disabled', 'quiz_archiver')); - $this->createMockTSPManager($job)->timestamp(); + $this->create_mock_tspmanager($job)->timestamp(); } -} \ No newline at end of file +} diff --git a/tests/TimeStampProtocolClient_test.php b/tests/TimeStampProtocolClient_test.php index 1f0ddd3..c74f6de 100644 --- a/tests/TimeStampProtocolClient_test.php +++ b/tests/TimeStampProtocolClient_test.php @@ -24,7 +24,6 @@ namespace quiz_archiver; - /** * Tests for the TimeStampProtocolClient class */ @@ -38,7 +37,7 @@ class TimeStampProtocolClient_test extends \advanced_testcase { public function test_creation(): void { $client = new TimeStampProtocolClient('http://localhost:12345'); $this->assertInstanceOf(TimeStampProtocolClient::class, $client); - $this->assertEquals('http://localhost:12345', $client->get_server_url()); + $this->assertEquals('http://localhost:12345', $client->get_serverurl()); } /** @@ -48,14 +47,14 @@ public function test_creation(): void { * @throws \Exception */ public function test_generate_nonce(): void { - $nonce = TimeStampProtocolClient::generateNonce(); + $nonce = TimeStampProtocolClient::generate_nonce(); $this->assertNotEmpty($nonce, 'Nonce is empty'); $this->assertSame(16, strlen($nonce), 'Nonce length is not 16 bytes'); for ($i = 0; $i < 100; $i++) { $this->assertNotEquals( $nonce, - TimeStampProtocolClient::generateNonce(), + TimeStampProtocolClient::generate_nonce(), 'Repeated calls to generate_nonce() return the same nonce' ); } @@ -89,4 +88,4 @@ public function test_signing_invalid_data(): void { $client->sign('invalid-data'); } -} \ No newline at end of file +} diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index 7d35143..97badea 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -24,7 +24,6 @@ namespace quiz_archiver\external; - use quiz_archiver\Report; /** @@ -37,7 +36,7 @@ class generate_attempt_report_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -47,7 +46,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object)[ @@ -66,7 +65,7 @@ protected function generateMockQuiz(): \stdClass { * @param int $attemptid Attempt ID * @return array Valid request parameters */ - protected function generateValidRequest(int $courseid, int $cmid, int $quizid, int $attemptid): array { + protected function generate_valid_request(int $courseid, int $cmid, int $quizid, int $attemptid): array { return [ 'courseid' => $courseid, 'cmid' => $cmid, @@ -91,8 +90,8 @@ public function test_capability_requirement(): void { $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); - $mocks = $this->generateMockQuiz(); - $r = $this->generateValidRequest($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + $mocks = $this->generate_mock_quiz(); + $r = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); generate_attempt_report::execute( $r['courseid'], $r['cmid'], @@ -116,7 +115,7 @@ public function test_capability_requirement(): void { * @param string $filenamepattern Filename pattern * @param array $sections Sections settings array * @param bool $attachments Whether to include attachments - * @param bool $shouldFail Whether a failure is expected + * @param bool $shouldfail Whether a failure is expected * @return void * @throws \DOMException * @throws \moodle_exception @@ -129,15 +128,18 @@ public function test_parameter_validation( string $filenamepattern, array $sections, bool $attachments, - bool $shouldFail + bool $shouldfail ): void { - if ($shouldFail) { + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } try { generate_attempt_report::execute($courseid, $cmid, $quizid, $attemptid, $filenamepattern, $sections, $attachments); - } catch (\dml_missing_record_exception $e) {} + // @codingStandardsIgnoreLine + } catch (\dml_missing_record_exception $e) { + // Ignore + } } /** @@ -146,12 +148,12 @@ public function test_parameter_validation( * @return array[] Test data */ public function parameter_data_provider(): array { - $mocks = $this->generateMockQuiz(); - $base = $this->generateValidRequest($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + $mocks = $this->generate_mock_quiz(); + $base = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); return [ - 'Valid' => array_merge($base, ['shouldFail' => false]), - 'Invalid filenamepattern' => array_merge($base, ['filenamepattern' => 'Foo', 'shouldFail' => true]), - 'Invalid sections' => array_merge($base, ['sections' => ['foo' => true], 'shouldFail' => true]), + 'Valid' => array_merge($base, ['shouldfail' => false]), + 'Invalid filenamepattern' => array_merge($base, ['filenamepattern' => 'Foo', 'shouldfail' => true]), + 'Invalid sections' => array_merge($base, ['sections' => ['foo' => true], 'shouldfail' => true]), ]; } diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index b103788..bc3b512 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -34,7 +34,7 @@ class get_attempts_metadata_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -44,7 +44,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object)[ @@ -62,7 +62,7 @@ protected function generateMockQuiz(): \stdClass { * @param int $quizid Quiz ID * @return array Valid request parameters */ - protected function generateValidRequest(int $courseid, int $cmid, int $quizid): array { + protected function generate_valid_request(int $courseid, int $cmid, int $quizid): array { return [ 'courseid' => $courseid, 'cmid' => $cmid, @@ -83,8 +83,8 @@ public function test_capability_requirement(): void { $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); - $mocks = $this->generateMockQuiz(); - $r = $this->generateValidRequest($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $mocks = $this->generate_mock_quiz(); + $r = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); get_attempts_metadata::execute( $r['courseid'], $r['cmid'], @@ -102,7 +102,7 @@ public function test_capability_requirement(): void { * @param int $cmid Course module ID * @param int $quizid Quiz ID * @param array $attemptids Array of attempt IDs - * @param bool $shouldFail Whether a failure is expected + * @param bool $shouldfail Whether a failure is expected * @return void * @throws \moodle_exception */ @@ -111,15 +111,18 @@ public function test_parameter_validation( int $cmid, int $quizid, array $attemptids, - bool $shouldFail + bool $shouldfail ): void { - if ($shouldFail) { + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } try { get_attempts_metadata::execute($courseid, $cmid, $quizid, $attemptids); - } catch (\dml_exception $e) {} + // @codingStandardsIgnoreLine + } catch (\dml_exception $e) { + // Ignore + } } /** @@ -128,12 +131,12 @@ public function test_parameter_validation( * @return array[] Test data */ public function parameter_data_provider(): array { - $mocks = $this->generateMockQuiz(); - $base = $this->generateValidRequest($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + $mocks = $this->generate_mock_quiz(); + $base = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); return [ - 'Valid' => array_merge($base, ['shouldFail' => false]), - 'Invalid attemptids (simple)' => array_merge($base, ['attemptids' => ['a'], 'shouldFail' => true]), - 'Invalid attemptids (mixed)' => array_merge($base, ['attemptids' => [1, 2, 3, 4, 5, 'a'], 'shouldFail' => true]), + 'Valid' => array_merge($base, ['shouldfail' => false]), + 'Invalid attemptids (simple)' => array_merge($base, ['attemptids' => ['a'], 'shouldfail' => true]), + 'Invalid attemptids (mixed)' => array_merge($base, ['attemptids' => [1, 2, 3, 4, 5, 'a'], 'shouldfail' => true]), ]; } diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index bc3328a..2f4e0bd 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -37,7 +37,7 @@ class get_backup_status_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -47,7 +47,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object)[ @@ -67,7 +67,7 @@ protected function generateMockQuiz(): \stdClass { */ public function test_capability_requirement(): void { // Create job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -95,7 +95,7 @@ public function test_capability_requirement(): void { * * @param string $jobid Job ID * @param string $backupid Backup ID - * @param bool $shouldFail Whether a failure is expected + * @param bool $shouldfail Whether a failure is expected * @return void * @throws \coding_exception * @throws \invalid_parameter_exception @@ -104,15 +104,18 @@ public function test_capability_requirement(): void { public function test_parameter_validation( string $jobid, string $backupid, - bool $shouldFail + bool $shouldfail ): void { - if ($shouldFail) { + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } try { get_backup_status::execute($jobid, $backupid); - } catch (\dml_exception $e) {} + // @codingStandardsIgnoreLine + } catch (\dml_exception $e) { + // Ignore + } } /** @@ -124,7 +127,7 @@ public function test_parameter_validation( */ public function parameter_data_provider(): array { // Create job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -142,9 +145,9 @@ public function parameter_data_provider(): array { ]; return [ - 'Valid' => array_merge($base, ['shouldFail' => false]), - 'Invalid jobid' => array_merge($base, ['jobid' => 'Foo', 'shouldFail' => true]), - 'Invalid backupid' => array_merge($base, ['backupid' => 'Bar', 'shouldFail' => true]), + 'Valid' => array_merge($base, ['shouldfail' => false]), + 'Invalid jobid' => array_merge($base, ['jobid' => 'Foo', 'shouldfail' => true]), + 'Invalid backupid' => array_merge($base, ['backupid' => 'Bar', 'shouldfail' => true]), ]; } @@ -163,7 +166,7 @@ public function test_wstoken_access_check(): void { $this->setAdminUser(); // Create job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', $mocks->course->id, diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 13379bb..c141738 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -38,7 +38,7 @@ class process_uploaded_artifact_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -48,7 +48,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object)[ @@ -66,7 +66,7 @@ protected function generateMockQuiz(): \stdClass { * @param int $userid User ID * @return array Valid request parameters */ - protected function generateValidRequest(string $jobid, int $cmid, int $userid): array { + protected function generate_valid_request(string $jobid, int $cmid, int $userid): array { return [ 'jobid' => $jobid, 'artifact_component' => FileManager::COMPONENT_NAME, @@ -93,7 +93,7 @@ public function test_capability_requirement(): void { $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); // Create job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -108,7 +108,7 @@ public function test_capability_requirement(): void { // Execute test call $_GET['wstoken'] = 'TEST-WS-TOKEN'; - $r = $this->generateValidRequest($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); + $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); process_uploaded_artifact::execute( $r['jobid'], $r['artifact_component'], @@ -128,15 +128,15 @@ public function test_capability_requirement(): void { * @dataProvider parameter_data_provider * * @param string $jobid Job ID - * @param string $artifact_component Component name - * @param int $artifact_contextid Context ID - * @param int $artifact_userid User ID - * @param string $artifact_filearea File area name - * @param string $artifact_filename File name - * @param string $artifact_filepath File path - * @param int $artifact_itemid Item ID - * @param string $artifact_sha256sum SHA256 checksum - * @param bool $shouldFail Whether a failure is expected + * @param string $artifactcomponent Component name + * @param int $artifactcontextid Context ID + * @param int $artifactuserid User ID + * @param string $artifactfilearea File area name + * @param string $artifactfilename File name + * @param string $artifactfilepath File path + * @param int $artifactitemid Item ID + * @param string $artifactsha256sum SHA256 checksum + * @param bool $shouldfail Whether a failure is expected * @return void * @throws \coding_exception * @throws \dml_exception @@ -145,30 +145,30 @@ public function test_capability_requirement(): void { */ public function test_parameter_validation( string $jobid, - string $artifact_component, - int $artifact_contextid, - int $artifact_userid, - string $artifact_filearea, - string $artifact_filename, - string $artifact_filepath, - int $artifact_itemid, - string $artifact_sha256sum, - bool $shouldFail + string $artifactcomponent, + int $artifactcontextid, + int $artifactuserid, + string $artifactfilearea, + string $artifactfilename, + string $artifactfilepath, + int $artifactitemid, + string $artifactsha256sum, + bool $shouldfail ): void { - if ($shouldFail) { + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } process_uploaded_artifact::execute( $jobid, - $artifact_component, - $artifact_contextid, - $artifact_userid, - $artifact_filearea, - $artifact_filename, - $artifact_filepath, - $artifact_itemid, - $artifact_sha256sum + $artifactcomponent, + $artifactcontextid, + $artifactuserid, + $artifactfilearea, + $artifactfilename, + $artifactfilepath, + $artifactitemid, + $artifactsha256sum ); } @@ -178,16 +178,16 @@ public function test_parameter_validation( * @return array[] Test data */ public function parameter_data_provider(): array { - $mocks = $this->generateMockQuiz(); - $base = $this->generateValidRequest('xxx', $mocks->quiz->cmid, $mocks->user->id); + $mocks = $this->generate_mock_quiz(); + $base = $this->generate_valid_request('xxx', $mocks->quiz->cmid, $mocks->user->id); return [ - 'Valid' => array_merge($base, ['shouldFail' => false]), - 'Invalid jobid' => array_merge($base, ['jobid' => 'Foo', 'shouldFail' => true]), - 'Invalid artifact_component' => array_merge($base, ['artifact_component' => 'Foo', 'shouldFail' => true]), - 'Invalid artifact_filearea' => array_merge($base, ['artifact_filearea' => 'Foo', 'shouldFail' => true]), - 'Invalid artifact_filename' => array_merge($base, ['artifact_filename' => 'Foo', 'shouldFail' => true]), - 'Invalid artifact_filepath' => array_merge($base, ['artifact_filepath' => 'Foo', 'shouldFail' => true]), - 'Invalid artifact_sha256sum' => array_merge($base, ['artifact_sha256sum' => 'Foo', 'shouldFail' => true]), + 'Valid' => array_merge($base, ['shouldfail' => false]), + 'Invalid jobid' => array_merge($base, ['jobid' => 'Foo', 'shouldfail' => true]), + 'Invalid artifact_component' => array_merge($base, ['artifact_component' => 'Foo', 'shouldfail' => true]), + 'Invalid artifact_filearea' => array_merge($base, ['artifact_filearea' => 'Foo', 'shouldfail' => true]), + 'Invalid artifact_filename' => array_merge($base, ['artifact_filename' => 'Foo', 'shouldfail' => true]), + 'Invalid artifact_filepath' => array_merge($base, ['artifact_filepath' => 'Foo', 'shouldfail' => true]), + 'Invalid artifact_sha256sum' => array_merge($base, ['artifact_sha256sum' => 'Foo', 'shouldfail' => true]), ]; } @@ -203,7 +203,7 @@ public function parameter_data_provider(): array { */ public function test_rejection_of_artifacts_for_complete_jobs(): void { // Create job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -219,7 +219,7 @@ public function test_rejection_of_artifacts_for_complete_jobs(): void { // Execute test call $_GET['wstoken'] = 'TEST-WS-TOKEN'; - $r = $this->generateValidRequest($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); + $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); $this->assertSame(['status' => 'E_NO_ARTIFACT_UPLOAD_EXPECTED'], process_uploaded_artifact::execute( $r['jobid'], $r['artifact_component'], @@ -245,7 +245,7 @@ public function test_rejection_of_artifacts_for_complete_jobs(): void { */ public function test_invalid_file_metadata(): void { // Create job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -263,7 +263,7 @@ public function test_invalid_file_metadata(): void { $this->setAdminUser(); // Execute test call - $r = $this->generateValidRequest($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); + $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); $this->assertSame(['status' => 'E_UPLOADED_ARTIFACT_NOT_FOUND'], process_uploaded_artifact::execute( $r['jobid'], $r['artifact_component'], diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index debcfc1..ee97d02 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -37,7 +37,7 @@ class update_job_status_test extends \advanced_testcase { * * @return \stdClass Created mock objects */ - protected function generateMockQuiz(): \stdClass { + protected function generate_mock_quiz(): \stdClass { // Create course, course module and quiz $this->resetAfterTest(); @@ -47,7 +47,7 @@ protected function generateMockQuiz(): \stdClass { $quiz = $this->getDataGenerator()->create_module('quiz', [ 'course' => $course->id, 'grade' => 100.0, - 'sumgrades' => 100 + 'sumgrades' => 100, ]); return (object)[ @@ -66,7 +66,7 @@ protected function generateMockQuiz(): \stdClass { */ public function test_capability_requirement(): void { // Create mock quiz and job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -101,7 +101,7 @@ public function test_wstoken_validation(): void { $this->setAdminUser(); // Create mock quiz and job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -138,14 +138,14 @@ public function test_wstoken_validation(): void { * * @param string $jobid Raw jobid parameter * @param string $status Raw status parameter - * @param bool $shouldFail Whether a failure is expected + * @param bool $shouldfail Whether a failure is expected * @return void * @throws \coding_exception * @throws \invalid_parameter_exception * @throws \required_capability_exception */ - public function test_parameter_validation(string $jobid, string $status, bool $shouldFail): void { - if ($shouldFail) { + public function test_parameter_validation(string $jobid, string $status, bool $shouldfail): void { + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } @@ -159,10 +159,26 @@ public function test_parameter_validation(string $jobid, string $status, bool $s */ public function parameter_data_provider(): array { return [ - 'Valid' => ['jobid' => '00000000-1234-5678-abcd-ef4242424242', 'status' => ArchiveJob::STATUS_UNINITIALIZED, 'shouldFail' => false], - 'Invalid jobid' => ['jobid' => 'Foo', 'status' => ArchiveJob::STATUS_UNINITIALIZED, 'shouldFail' => true], - 'Invalid status' => ['jobid' => '00000000-1234-5678-abcd-ef4242424242', 'status' => 'Bar', 'shouldFail' => true], - 'Invalid jobid and status' => ['jobid' => 'Foo', 'status' => 'Bar', 'shouldFail' => true], + 'Valid' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_UNINITIALIZED, + 'shouldfail' => false, + ], + 'Invalid jobid' => [ + 'jobid' => 'Foo', + 'status' => ArchiveJob::STATUS_UNINITIALIZED, + 'shouldfail' => true, + ], + 'Invalid status' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => 'Bar', + 'shouldfail' => true, + ], + 'Invalid jobid and status' => [ + 'jobid' => 'Foo', + 'status' => 'Bar', + 'shouldfail' => true, + ], ]; } @@ -171,8 +187,8 @@ public function parameter_data_provider(): array { * * @dataProvider job_status_data_provider * - * @param string $originStatus Status to transition from - * @param string $targetStatus Status to transition to + * @param string $originstatus Status to transition from + * @param string $targetstatus Status to transition to * @param array $expected Expected result * @return void * @throws \coding_exception @@ -181,13 +197,13 @@ public function parameter_data_provider(): array { * @throws \moodle_exception * @throws \required_capability_exception */ - public function test_update_job_status(string $originStatus, string $targetStatus, array $expected) { + public function test_update_job_status(string $originstatus, string $targetstatus, array $expected) { // Gain privileges $this->setAdminUser(); $_GET['wstoken'] = 'TEST-WS-TOKEN'; // Create mock quiz and job - $mocks = $this->generateMockQuiz(); + $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -198,16 +214,16 @@ public function test_update_job_status(string $originStatus, string $targetStatu 'TEST-WS-TOKEN', [], [], - $originStatus + $originstatus ); // Ensure job is in the expected state - $this->assertSame($originStatus, $job->get_status()); + $this->assertSame($originstatus, $job->get_status()); // Execute the external function and check the result $result = update_job_status::execute( $job->get_jobid(), - $targetStatus + $targetstatus ); $this->assertSame($expected, $result, 'Invalid webservice answer'); } @@ -219,19 +235,71 @@ public function test_update_job_status(string $originStatus, string $targetStatu */ public function job_status_data_provider(): array { return [ - 'Status: UNKNOWN -> UNINITIALIZED' => ['originStatus' => ArchiveJob::STATUS_UNKNOWN, 'targetStatus' => ArchiveJob::STATUS_UNINITIALIZED, 'expected' => ['status' => 'OK']], - 'Status: UNINITIALIZED -> AWAITING_PROCESSING' => ['originStatus' => ArchiveJob::STATUS_UNINITIALIZED, 'targetStatus' => ArchiveJob::STATUS_AWAITING_PROCESSING, 'expected' => ['status' => 'OK']], - 'Status: UNINITIALIZED -> FINISHED' => ['originStatus' => ArchiveJob::STATUS_UNINITIALIZED, 'targetStatus' => ArchiveJob::STATUS_FINISHED, 'expected' => ['status' => 'OK']], - 'Status: AWAITING_PROCESSING -> RUNNING' => ['originStatus' => ArchiveJob::STATUS_AWAITING_PROCESSING, 'targetStatus' => ArchiveJob::STATUS_RUNNING, 'expected' => ['status' => 'OK']], - 'Status: RUNNING -> FINISHED' => ['originStatus' => ArchiveJob::STATUS_RUNNING, 'targetStatus' => ArchiveJob::STATUS_FINISHED, 'expected' => ['status' => 'OK']], - 'Status: RUNNING -> FAILED' => ['originStatus' => ArchiveJob::STATUS_RUNNING, 'targetStatus' => ArchiveJob::STATUS_FAILED, 'expected' => ['status' => 'OK']], - 'Status: RUNNING -> TIMEOUT' => ['originStatus' => ArchiveJob::STATUS_RUNNING, 'targetStatus' => ArchiveJob::STATUS_TIMEOUT, 'expected' => ['status' => 'OK']], - 'Status: FINISHED -> DELETED' => ['originStatus' => ArchiveJob::STATUS_FINISHED, 'targetStatus' => ArchiveJob::STATUS_DELETED, 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED']], - 'Status: FINISHED -> RUNNING' => ['originStatus' => ArchiveJob::STATUS_FINISHED, 'targetStatus' => ArchiveJob::STATUS_RUNNING, 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED']], - 'Status: FINISHED -> FAILED' => ['originStatus' => ArchiveJob::STATUS_FINISHED, 'targetStatus' => ArchiveJob::STATUS_FAILED, 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED']], - 'Status: FINISHED -> TIMEOUT' => ['originStatus' => ArchiveJob::STATUS_FINISHED, 'targetStatus' => ArchiveJob::STATUS_TIMEOUT, 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED']], - 'Status: FINISHED -> UNINITIALIZED' => ['originStatus' => ArchiveJob::STATUS_FINISHED, 'targetStatus' => ArchiveJob::STATUS_UNINITIALIZED, 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED']], - 'Status: FAILED -> DELETED' => ['originStatus' => ArchiveJob::STATUS_FAILED, 'targetStatus' => ArchiveJob::STATUS_DELETED, 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED']], + 'Status: UNKNOWN -> UNINITIALIZED' => [ + 'originstatus' => ArchiveJob::STATUS_UNKNOWN, + 'targetstatus' => ArchiveJob::STATUS_UNINITIALIZED, + 'expected' => ['status' => 'OK'], + ], + 'Status: UNINITIALIZED -> AWAITING_PROCESSING' => [ + 'originstatus' => ArchiveJob::STATUS_UNINITIALIZED, + 'targetstatus' => ArchiveJob::STATUS_AWAITING_PROCESSING, + 'expected' => ['status' => 'OK'], + ], + 'Status: UNINITIALIZED -> FINISHED' => [ + 'originstatus' => ArchiveJob::STATUS_UNINITIALIZED, + 'targetstatus' => ArchiveJob::STATUS_FINISHED, + 'expected' => ['status' => 'OK'], + ], + 'Status: AWAITING_PROCESSING -> RUNNING' => [ + 'originstatus' => ArchiveJob::STATUS_AWAITING_PROCESSING, + 'targetstatus' => ArchiveJob::STATUS_RUNNING, + 'expected' => ['status' => 'OK'], + ], + 'Status: RUNNING -> FINISHED' => [ + 'originstatus' => ArchiveJob::STATUS_RUNNING, + 'targetstatus' => ArchiveJob::STATUS_FINISHED, + 'expected' => ['status' => 'OK'], + ], + 'Status: RUNNING -> FAILED' => [ + 'originstatus' => ArchiveJob::STATUS_RUNNING, + 'targetstatus' => ArchiveJob::STATUS_FAILED, + 'expected' => ['status' => 'OK'], + ], + 'Status: RUNNING -> TIMEOUT' => [ + 'originstatus' => ArchiveJob::STATUS_RUNNING, + 'targetstatus' => ArchiveJob::STATUS_TIMEOUT, + 'expected' => ['status' => 'OK'], + ], + 'Status: FINISHED -> DELETED' => [ + 'originstatus' => ArchiveJob::STATUS_FINISHED, + 'targetstatus' => ArchiveJob::STATUS_DELETED, + 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED'], + ], + 'Status: FINISHED -> RUNNING' => [ + 'originstatus' => ArchiveJob::STATUS_FINISHED, + 'targetstatus' => ArchiveJob::STATUS_RUNNING, + 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED'], + ], + 'Status: FINISHED -> FAILED' => [ + 'originstatus' => ArchiveJob::STATUS_FINISHED, + 'targetstatus' => ArchiveJob::STATUS_FAILED, + 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED'], + ], + 'Status: FINISHED -> TIMEOUT' => [ + 'originstatus' => ArchiveJob::STATUS_FINISHED, + 'targetstatus' => ArchiveJob::STATUS_TIMEOUT, + 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED'], + ], + 'Status: FINISHED -> UNINITIALIZED' => [ + 'originstatus' => ArchiveJob::STATUS_FINISHED, + 'targetstatus' => ArchiveJob::STATUS_UNINITIALIZED, + 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED'], + ], + 'Status: FAILED -> DELETED' => [ + 'originstatus' => ArchiveJob::STATUS_FAILED, + 'targetstatus' => ArchiveJob::STATUS_DELETED, + 'expected' => ['status' => 'E_JOB_ALREADY_COMPLETED'], + ], ]; } From 1a151c7e172f5523d0b7849a61319fee681a40e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 17:14:43 +0200 Subject: [PATCH 070/185] Re-enable Moodle code checker for CI runs --- .github/workflows/moodle-plugin-ci.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/moodle-plugin-ci.yml b/.github/workflows/moodle-plugin-ci.yml index 51a7f51..7c6fab0 100644 --- a/.github/workflows/moodle-plugin-ci.yml +++ b/.github/workflows/moodle-plugin-ci.yml @@ -106,10 +106,9 @@ jobs: if: ${{ !cancelled() }} run: moodle-plugin-ci phpmd - # FIXME: Re-enable this step - #- name: Moodle Code Checker - # if: ${{ !cancelled() }} - # run: moodle-plugin-ci phpcs --max-warnings 0 + - name: Moodle Code Checker + if: ${{ !cancelled() }} + run: moodle-plugin-ci phpcs --max-warnings 0 - name: Moodle PHPDoc Checker if: ${{ !cancelled() }} From 5e8c22ddc52a6635ce720059159dfb7806e6be8f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 17:24:48 +0200 Subject: [PATCH 071/185] Fix missing characters in @license PHPDoc of some files --- adminui/autoinstall.php | 2 +- .../admin/setting/admin_setting_archive_filename_pattern.php | 2 +- .../admin/setting/admin_setting_attempt_filename_pattern.php | 2 +- .../admin/setting/admin_setting_configcheckbox_alwaystrue.php | 2 +- classes/local/autoinstall.php | 2 +- classes/local/util.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index 93421bb..74a6896 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -19,7 +19,7 @@ * * @package quiz_archiver * @copyright 2024 Niels Gandraß - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ require_once(__DIR__.'/../../../../../config.php'); diff --git a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php index d638be6..efce7e4 100644 --- a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php @@ -25,7 +25,7 @@ * * @package quiz_archiver * @copyright 2024 Niels Gandraß - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class admin_setting_archive_filename_pattern extends \admin_setting_configtext { diff --git a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php index 6abd844..1d87776 100644 --- a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php @@ -25,7 +25,7 @@ * * @package quiz_archiver * @copyright 2024 Niels Gandraß - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class admin_setting_attempt_filename_pattern extends \admin_setting_configtext { diff --git a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php index 863e38f..09b47bd 100644 --- a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php +++ b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php @@ -23,7 +23,7 @@ * * @package quiz_archiver * @copyright 2024 Niels Gandraß - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class admin_setting_configcheckbox_alwaystrue extends \admin_setting_configcheckbox { diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 01d0ea6..c65f3ac 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -33,7 +33,7 @@ * @package quiz_archiver * @copyright 2024 Niels Gandraß * 2024 Melanie Treitinger, Ruhr-Universität Bochum - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class autoinstall { diff --git a/classes/local/util.php b/classes/local/util.php index 7e8a5ea..1c5fa21 100644 --- a/classes/local/util.php +++ b/classes/local/util.php @@ -23,7 +23,7 @@ * * @package quiz_archiver * @copyright 2024 Niels Gandraß - * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or late + * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class util { From e9acd8f0421d406945eab4b10454ed3246a0c6fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 8 Jul 2024 17:56:52 +0200 Subject: [PATCH 072/185] End all inline comments with a dot --- adminui/autoinstall.php | 14 +- classes/ArchiveJob.php | 46 +++---- classes/BackupManager.php | 10 +- classes/FileManager.php | 42 +++--- classes/RemoteArchiveWorker.php | 12 +- classes/Report.php | 118 ++++++++-------- classes/TSPManager.php | 8 +- classes/TimeStampProtocolClient.php | 70 +++++----- classes/external/generate_attempt_report.php | 22 +-- classes/external/get_attempts_metadata.php | 10 +- classes/external/get_backup_status.php | 14 +- .../external/process_uploaded_artifact.php | 30 +++-- classes/external/update_job_status.php | 8 +- classes/form/archive_quiz_form.php | 24 ++-- classes/form/artifact_delete_form.php | 14 +- classes/form/autoinstall_form.php | 4 +- classes/form/job_delete_form.php | 16 +-- classes/form/job_sign_form.php | 8 +- ...admin_setting_archive_filename_pattern.php | 4 +- ...admin_setting_attempt_filename_pattern.php | 4 +- classes/local/autoinstall.php | 14 +- classes/local/util.php | 4 +- classes/output/job_overview_table.php | 6 +- classes/privacy/provider.php | 36 ++--- cli/autoinstall.php | 8 +- db/install.php | 2 +- db/upgrade.php | 6 +- lang/de/quiz_archiver.php | 28 ++-- lang/en/quiz_archiver.php | 28 ++-- lib.php | 8 +- patch_401_class_renames.php | 6 +- report.php | 58 ++++---- settings.php | 10 +- tests/ArchiveJob_test.php | 126 +++++++++--------- tests/BackupManager_test.php | 36 ++--- tests/FileManager_test.php | 46 +++---- tests/Report_test.php | 74 +++++----- tests/TSPManager_test.php | 44 +++--- .../external/generate_attempt_report_test.php | 8 +- tests/external/get_attempts_metadata_test.php | 8 +- tests/external/get_backup_status_test.php | 20 +-- .../process_uploaded_artifact_test.php | 20 +-- tests/external/update_job_status_test.php | 24 ++-- tests/local/autoinstall_test.php | 28 ++-- version.php | 1 - 45 files changed, 562 insertions(+), 565 deletions(-) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index 74a6896..a820eb3 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -32,12 +32,12 @@ /** @var bool Disables output buffering */ const NO_OUTPUT_BUFFERING = true; -// Ensure user has permissions +// Ensure user has permissions. require_login(); $ctx = context_system::instance(); require_capability('moodle/site:config', $ctx); -// Setup page +// Setup page. $PAGE->set_context($ctx); $PAGE->set_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); $title = get_string('autoinstall_plugin', 'quiz_archiver'); @@ -51,16 +51,16 @@ echo $OUTPUT->header(); echo $OUTPUT->heading($title); -// Content +// Content. if (autoinstall::plugin_is_unconfigured()) { $form = new autoinstall_form(); if ($form->is_cancelled()) { - // Cancelled + // Cancelled. echo '

    '.get_string('autoinstall_cancelled', 'quiz_archiver').'

    '; echo '

    '.$returnlink.'

    '; } else if ($data = $form->get_data()) { - // Perform autoinstall + // Perform autoinstall. list($success, $log) = autoinstall::execute( $data->workerurl, $data->wsname, @@ -68,7 +68,7 @@ $data->username ); - // Show result + // Show result. echo '

    '.get_string('autoinstall_started', 'quiz_archiver').'

    '; echo '

    '.get_string('logs').'

    '; echo "
    {$log}

    "; @@ -90,5 +90,5 @@ echo '

    '.$returnlink.'

    '; } -// End page +// End page. echo $OUTPUT->footer(); diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index 66619ab..0c3d2af 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -65,7 +65,7 @@ class ArchiveJob { /** @var string Name of the table to store attemptids and userids */ const ATTEMPTS_TABLE_NAME = 'quiz_archiver_attempts'; - // Job status values + // Job status values. /** @var string Job status: Unknown */ const STATUS_UNKNOWN = 'UNKNOWN'; /** @var string Job status: Uninitialized */ @@ -152,7 +152,7 @@ protected function __construct( $this->timecreated = $timecreated; $this->retentiontime = $retentiontime; $this->wstoken = $wstoken; - $this->tspmanager = null; // Lazy initialization + $this->tspmanager = null; // Lazy initialization. } /** @@ -207,7 +207,7 @@ public static function create( throw new \moodle_exception('encryption_keyalreadyexists'); } - // Create database entry and return ArchiveJob object to represent it + // Create database entry and return ArchiveJob object to represent it. $now = time(); $retentiontime = $retentionseconds ? $now + $retentionseconds : null; $id = $DB->insert_record(self::JOB_TABLE_NAME, [ @@ -223,7 +223,7 @@ public static function create( 'wstoken' => $wstoken, ]); - // Store job settings + // Store job settings. $DB->insert_records(self::JOB_SETTINGS_TABLE_NAME, array_map(function($key, $value) use ($id): array { return [ 'jobid' => $id, @@ -232,7 +232,7 @@ public static function create( ]; }, array_keys($settings), $settings)); - // Remember attempts associated with this archive + // Remember attempts associated with this archive. $DB->insert_records(self::ATTEMPTS_TABLE_NAME, array_map(function($data) use ($id): array { return [ 'jobid' => $id, @@ -375,7 +375,7 @@ public static function get_metadata_for_jobs(int $courseid, int $cmid, int $quiz ); return array_values(array_map(function($j): array { - // Get artifactfile metadata if available + // Get artifactfile metadata if available. $artifactfilemetadata = null; if ($j->artifactfileid) { $artifactfile = get_file_storage()->get_file_by_id($j->artifactfileid); @@ -400,7 +400,7 @@ public static function get_metadata_for_jobs(int $courseid, int $cmid, int $quiz } } - // Prepate TSP data + // Prepate TSP data. $tspdata = null; if ($j->tsp_timecreated && $j->artifactfileid) { $tspdata = [ @@ -427,7 +427,7 @@ public static function get_metadata_for_jobs(int $courseid, int $cmid, int $quiz ]; } - // Calculate autodelete metadata + // Calculate autodelete metadata. if ($j->retentiontime !== null) { if ($j->status == self::STATUS_DELETED) { $autodeletestr = get_string('archive_deleted', 'quiz_archiver'); @@ -445,7 +445,7 @@ public static function get_metadata_for_jobs(int $courseid, int $cmid, int $quiz $autodeletestr = get_string('archive_autodelete_disabled', 'quiz_archiver'); } - // Build job metadata array + // Build job metadata array. return [ 'id' => $j->id, 'jobid' => $j->jobid, @@ -534,7 +534,7 @@ public static function delete_expired_artifacts(): int { public function delete(): void { global $DB; - // Delete additional data + // Delete additional data. $this->delete_webservice_token(); $this->delete_temporary_files(); $this->delete_artifact(); @@ -542,10 +542,10 @@ public function delete(): void { $DB->delete_records(self::JOB_SETTINGS_TABLE_NAME, ['jobid' => $this->id]); $DB->delete_records(self::ATTEMPTS_TABLE_NAME, ['jobid' => $this->id]); - // Delete job from DB + // Delete job from DB. $DB->delete_records(self::JOB_TABLE_NAME, ['id' => $this->id]); - // Invalidate self + // Invalidate self. $this->id = -1; $this->jobid = ''; $this->courseid = -1; @@ -567,7 +567,7 @@ public function timeout_if_overdue(int $timeoutmin): bool { return false; } - // Check if job is overdue + // Check if job is overdue. if ($this->timecreated < (time() - ($timeoutmin * 60))) { $this->set_status(self::STATUS_TIMEOUT); return true; @@ -975,18 +975,18 @@ public function delete_webservice_token(): void { * @return bool True if the pattern is valid */ protected static function is_valid_filename_pattern(string $pattern, array $allowedvariables): bool { - // Check for minimal length + // Check for minimal length. if (strlen($pattern) < 1) { return false; } - // Check for variables + // Check for variables. $residue = preg_replace('/\$\{\s*('.implode('|', $allowedvariables).')\s*\}/m', '', $pattern); if (strpos($residue, '$') !== false) { return false; } - // Check for forbidden characters + // Check for forbidden characters. foreach (self::FILENAME_FORBIDDEN_CHARACTERS as $char) { if (strpos($pattern, $char) !== false) { return false; @@ -1045,12 +1045,12 @@ protected static function sanitize_filename(string $filename): string { * @throws \coding_exception */ public static function generate_archive_filename($course, $cm, $quiz, string $pattern): string { - // Validate pattern + // Validate pattern. if (!self::is_valid_archive_filename_pattern($pattern)) { throw new \invalid_parameter_exception(get_string('error_invalid_archive_filename_pattern', 'quiz_archiver')); } - // Prepare data + // Prepare data. $data = [ 'courseid' => $course->id, 'cmid' => $cm->id, @@ -1063,7 +1063,7 @@ public static function generate_archive_filename($course, $cm, $quiz, string $pa 'time' => date('H-i-s'), ]; - // Substitute variables + // Substitute variables. $filename = $pattern; foreach ($data as $key => $value) { $filename = preg_replace('/\$\{\s*'.$key.'\s*\}/m', $value, $filename); @@ -1088,13 +1088,13 @@ public static function generate_archive_filename($course, $cm, $quiz, string $pa public static function generate_attempt_filename($course, $cm, $quiz, int $attemptid, string $pattern): string { global $DB; - // Validate pattern + // Validate pattern. if (!self::is_valid_attempt_filename_pattern($pattern)) { throw new \invalid_parameter_exception(get_string('error_invalid_attempt_filename_pattern', 'quiz_archiver')); } - // Prepare data - // We query the DB directly to prevent a full question_attempt object from being created + // Prepare data. + // We query the DB directly to prevent a full question_attempt object from being created. $attemptinfo = $DB->get_record('quiz_attempts', ['id' => $attemptid], '*', MUST_EXIST); $userinfo = $DB->get_record('user', ['id' => $attemptinfo->userid], '*', MUST_EXIST); $data = [ @@ -1115,7 +1115,7 @@ public static function generate_attempt_filename($course, $cm, $quiz, int $attem 'lastname' => $userinfo->lastname, ]; - // Substitute variables + // Substitute variables. $filename = $pattern; foreach ($data as $key => $value) { $filename = preg_replace('/\$\{\s*'.$key.'\s*\}/m', $value, $filename); diff --git a/classes/BackupManager.php b/classes/BackupManager.php index 05cc61b..6ff2a1d 100644 --- a/classes/BackupManager.php +++ b/classes/BackupManager.php @@ -171,7 +171,7 @@ public function is_associated_with_job(ArchiveJob $job): bool { protected static function initiate_backup(string $type, int $id, int $userid): object { global $CFG; - // Validate type and set variables accordingly + // Validate type and set variables accordingly. switch ($type) { case backup::TYPE_1COURSE: $contextid = context_course::instance($id)->id; @@ -183,7 +183,7 @@ protected static function initiate_backup(string $type, int $id, int $userid): o throw new \ValueError("Backup type not supported"); } - // Initialize backup + // Initialize backup. $bc = new backup_controller( $type, $id, @@ -196,7 +196,7 @@ protected static function initiate_backup(string $type, int $id, int $userid): o $backupid = $bc->get_backupid(); $filename = 'quiz_archiver-'.$type.'-backup-'.$id.'-'.date("Ymd-His").'.mbz'; - // Configure backup + // Configure backup. $tasks = $bc->get_plan()->get_tasks(); foreach ($tasks as $task) { if ($task instanceof \backup_root_task) { @@ -208,14 +208,14 @@ protected static function initiate_backup(string $type, int $id, int $userid): o } } - // Enqueue as adhoc task + // Enqueue as adhoc task. $bc->set_status(backup::STATUS_AWAITING); $asynctask = new \core\task\asynchronous_backup_task(); $asynctask->set_custom_data(['backupid' => $backupid]); $asynctask->set_userid($userid); \core\task\manager::queue_adhoc_task($asynctask); - // Generate backup file url + // Generate backup file url. $url = strval(\moodle_url::make_webservice_pluginfile_url( $contextid, 'backup', diff --git a/classes/FileManager.php b/classes/FileManager.php index e312384..528bc40 100644 --- a/classes/FileManager.php +++ b/classes/FileManager.php @@ -127,12 +127,12 @@ protected function get_own_file_path(): string { * @throws \stored_file_creation_exception */ public function store_uploaded_artifact(stored_file $draftfile): ?stored_file { - // Check draftfile + // Check draftfile. if ($draftfile->get_filearea() != "draft" || $draftfile->get_component() != "user") { throw new \file_exception('Passed draftfile does not reside inside the draft area of the webservice user. Aborting'); } - // Create the final stored archive file from draft file + // Create the final stored archive file from draft file. $fs = get_file_storage(); $artifactfile = $fs->create_file_from_storedfile([ 'contextid' => $this->context->id, @@ -145,7 +145,7 @@ public function store_uploaded_artifact(stored_file $draftfile): ?stored_file { 'timemodified' => time(), ], $draftfile); - // Unlink old draft file + // Unlink old draft file. $draftfile->delete(); return $artifactfile; @@ -189,12 +189,12 @@ public static function get_draft_file(int $contextid, int $itemid, string $filep * @return string|null Hexadecimal hash */ public static function hash_file(stored_file $file, string $algo = 'sha256'): ?string { - // Validate requested hash algorithm + // Validate requested hash algorithm. if (!array_search($algo, hash_algos())) { return null; } - // Calculate file hash chunk-wise + // Calculate file hash chunk-wise. $fh = $file->get_content_file_handle(stored_file::FILE_HANDLE_FOPEN); $hashctx = hash_init($algo); while (!feof($fh)) { @@ -251,7 +251,7 @@ public function send_virtual_file(string $filearea, string $relativepath): void * @throws \dml_exception On database error */ protected function send_virtual_file_tsp(string $relativepath): void { - // Validate relativepath + // Validate relativepath. $args = explode('/', $relativepath); if (count($args) !== 6) { throw new \InvalidArgumentException("Invalid relativepath {$relativepath}"); @@ -271,7 +271,7 @@ protected function send_virtual_file_tsp(string $relativepath): void { throw new \InvalidArgumentException("Invalid filename {$filename}"); } - // Get requested data from DB + // Get requested data from DB. try { $job = ArchiveJob::get_by_id($jobid); } catch (\dml_exception $e) { @@ -287,7 +287,7 @@ protected function send_virtual_file_tsp(string $relativepath): void { throw new \InvalidArgumentException("No TSP data found for job with ID {$jobid}"); } - // Get requested file contents + // Get requested file contents. switch ($filename) { case self::TSP_DATA_QUERY_FILENAME: $filecontents = $tspdata->query; @@ -301,7 +301,7 @@ protected function send_virtual_file_tsp(string $relativepath): void { throw new \InvalidArgumentException("Invalid filename {$filename}"); } - // Send file to the client + // Send file to the client. \core\session\manager::write_close(); // Unlock session during file serving. ob_clean(); header('Content-Description: File Transfer'); @@ -315,7 +315,7 @@ protected function send_virtual_file_tsp(string $relativepath): void { echo $filecontents; ob_flush(); - // Do not kill tests + // Do not kill tests. if (PHPUNIT_TEST === true) { return; } @@ -338,20 +338,20 @@ protected function send_virtual_file_tsp(string $relativepath): void { public function extract_attempt_data_from_artifact(stored_file $artifactfile, int $jobid, int $attemptid): ?stored_file { global $CFG; - // Prepare + // Prepare. $packer = get_file_packer('application/x-gzip'); $workdir = "{$CFG->tempdir}/quiz_archiver/jid{$jobid}_cid{$this->courseid}_cmid{$this->cmid}_qid{$this->quizid}_aid{$attemptid}"; - // Wrap in try-catch to ensure cleanup on exit + // Wrap in try-catch to ensure cleanup on exit. try { - // Extract metadata file from artifact and find relevant path information + // Extract metadata file from artifact and find relevant path information. $packer->extract_to_pathname($artifactfile, $workdir, [ self::ARTIFACT_METADATA_FILE, ]); $metadata = array_map('str_getcsv', file($workdir."/".self::ARTIFACT_METADATA_FILE)); if ($metadata[0][0] !== 'attemptid' || $metadata[0][9] !== 'path') { - // Fail silently for old archives for now + // Fail silently for old archives for now. if ($metadata[0][9] === 'report_filename') { throw new \invalid_state_exception('Old artifact format is skipped'); } else { @@ -359,7 +359,7 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in } } - // Search for attempt path + // Search for attempt path. $attemptpath = null; foreach ($metadata as $row) { if (intval($row[0]) === $attemptid) { @@ -372,7 +372,7 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in throw new \moodle_exception('Attempt not found in metadata file'); } - // Extract attempt data from artifact + // Extract attempt data from artifact. // All files must be given explicitly to tgz_packer::extract_to_pathname(). Wildcards // are unsupported. Therefore, we list the contents and filter the index. This reduces // space and time complexity compared to extracting the whole archive at once. @@ -387,7 +387,7 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in throw new \moodle_exception('Failed to extract attempt data from artifact archive'); } - // Create new archive from extracted attempt data into temp filearea + // Create new archive from extracted attempt data into temp filearea. $exportexpiry = time() + self::ARTIFACT_EXPORT_TEMPFILE_LIFETIME_SECONDS; $exportfile = $packer->archive_to_storage( [ @@ -412,7 +412,7 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in throw $e; } } finally { - // Cleanup + // Cleanup. remove_dir($workdir); } @@ -432,12 +432,12 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in public static function cleanup_temp_files(): int { global $DB; - // Prepare + // Prepare. $fs = get_file_storage(); $now = time(); $numfilesdeleted = 0; - // Query using raw SQL to get temp files independent of contextid to speed this up a LOT + // Query using raw SQL to get temp files independent of contextid to speed this up a LOT. $tempfilerecords = $DB->get_records_sql(" SELECT id, filepath, filesize FROM {files} WHERE component = '".self::COMPONENT_NAME."' @@ -445,7 +445,7 @@ public static function cleanup_temp_files(): int { AND filepath != '/'; "); - // Delete files that are expired (expiry date in path is smaller than now) + // Delete files that are expired (expiry date in path is smaller than now). foreach ($tempfilerecords as $f) { $match = preg_match('/^\/(?P\d+)\/.*$/m', $f->filepath, $matches); if ($match) { diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index 5a0ca73..7d709ac 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -83,7 +83,7 @@ public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, i global $CFG; $moodleurlbase = rtrim($this->config->internal_wwwroot ?: $CFG->wwwroot, '/'); - // Prepare request payload + // Prepare request payload. $payload = json_encode(array_merge( [ "api_version" => self::API_VERSION, @@ -100,9 +100,9 @@ public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, i $joboptions )); - // Execute request + // Execute request. // Moodle curl wrapper automatically closes curl handle after requests. No need to call curl_close() manually. - $c = new curl(['ignoresecurity' => true]); // Ignore URL filter since we require custom ports and the URL is only configurable by admins + $c = new curl(['ignoresecurity' => true]); // Ignore URL filter since we require custom ports and the URL is only configurable by admins. $result = $c->post($this->serverurl, $payload, [ 'CURLOPT_CONNECTTIMEOUT' => $this->connectiontimeout, 'CURLOPT_TIMEOUT' => $this->requesttimeout, @@ -112,10 +112,10 @@ public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, i ], ]); - $httpstatus = $c->get_info()['http_code']; // Invalid PHPDoc in Moodle curl wrapper. Array returned instead of string + $httpstatus = $c->get_info()['http_code']; // Invalid PHPDoc in Moodle curl wrapper. Array returned instead of string. $data = json_decode($result); - // Handle errors + // Handle errors. if ($httpstatus != 200) { if ($data === null) { throw new \UnexpectedValueException("Decoding of the archive worker response failed. HTTP status code $httpstatus"); @@ -127,7 +127,7 @@ public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, i } } - // Decoded JSON data containing jobid and job_status returned on success + // Decoded JSON data containing jobid and job_status returned on success. return $data; } diff --git a/classes/Report.php b/classes/Report.php index 7cb2e8f..fd9deb6 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -102,7 +102,7 @@ public function has_access(string $wstoken): bool { global $DB; try { - // Check if job with given wstoken exists for this quiz + // Check if job with given wstoken exists for this quiz. $jobdata = $DB->get_record(ArchiveJob::JOB_TABLE_NAME, [ 'courseid' => $this->course->id, 'cmid' => $this->cm->id, @@ -110,12 +110,12 @@ public function has_access(string $wstoken): bool { 'wstoken' => $wstoken, ], 'status, timecreated', MUST_EXIST); - // Completed / aborted jobs invalidate access + // Completed / aborted jobs invalidate access. if ($jobdata->status == ArchiveJob::STATUS_FINISHED || $jobdata->status == ArchiveJob::STATUS_FAILED) { return false; } - // Job must still be valid + // Job must still be valid. if (($jobdata->timecreated + ($this->config->job_timeout_min * 60)) > time()) { return true; } @@ -159,12 +159,12 @@ public function get_attempts(): array { public function get_attempts_metadata(array $filterattemptids = null): array { global $DB; - // Handle attempt ID filter + // Handle attempt ID filter. if ($filterattemptids) { $filterwhereclause = "AND qa.id IN (".implode(', ', array_map(fn ($v): string => intval($v), $filterattemptids)). ")"; } - // Get all requested attempts + // Get all requested attempts. return $DB->get_records_sql( "SELECT qa.id AS attemptid, qa.userid, qa.attempt, qa.state, qa.timestart, qa.timefinish, u.username, u.firstname, u.lastname ". "FROM {quiz_attempts} qa LEFT JOIN {user} u ON qa.userid = u.id ". @@ -255,13 +255,13 @@ public function attempt_exists(int $attemptid): bool { * @return array Associative array containing the selected sections for export */ public static function build_report_sections_from_formdata(object $archivequizformdata): array { - // Extract section settings from form data object + // Extract section settings from form data object. $reportsections = []; foreach (self::SECTIONS as $section) { $reportsections[$section] = $archivequizformdata->{'export_report_section_'.$section}; } - // Disable all sections that depend on a disabled section + // Disable all sections that depend on a disabled section. foreach (self::SECTION_DEPENDENCIES as $section => $dependencies) { foreach ($dependencies as $dependency) { if (!$reportsections[$dependency]) { @@ -285,12 +285,12 @@ public static function build_report_sections_from_formdata(object $archivequizfo * @throws \moodle_exception */ public function get_attempt_attachments(int $attemptid): array { - // Prepare + // Prepare. $files = []; $ctx = \context_module::instance($this->cm->id); $attemptobj = quiz_create_attempt_handling_errors($attemptid, $this->cm->id); - // Get all files from all questions inside this attempt + // Get all files from all questions inside this attempt. foreach ($attemptobj->get_slots() as $slot) { $qa = $attemptobj->get_question_attempt($slot); $qafiles = $qa->get_last_qt_files('attachments', $ctx->id); @@ -327,8 +327,8 @@ public function get_attempt_attachments_metadata(int $attemptid): array { $attachment['file']->get_component(), $attachment['file']->get_filearea(), "{$attachment['usageid']}/{$attachment['slot']}/{$attachment['file']->get_itemid()}", - // ^-- YES, this is the abomination of a non-numeric itemid that question_attempt::get_response_file_url() - // creates while eating innocent programmers for breakfast ... + /* ^-- YES, this is the abomination of a non-numeric itemid that question_attempt::get_response_file_url() + creates while eating innocent programmers for breakfast ... */ $attachment['file']->get_filepath(), $attachment['file']->get_filename() )); @@ -364,7 +364,7 @@ public function generate(int $attemptid, array $sections): string { $renderer = $PAGE->get_renderer('mod_quiz'); $html = ''; - // Get quiz data and determine state / elapsed time + // Get quiz data and determine state / elapsed time. $attemptobj = quiz_create_attempt_handling_errors($attemptid, $this->cm->id); $attempt = $attemptobj->get_attempt(); $quiz = $attemptobj->get_quiz(); @@ -388,7 +388,7 @@ public function generate(int $attemptid, array $sections): string { $timetaken = get_string('unfinished', 'quiz'); } - // ##### Section: Quiz header ##### + // Section: Quiz header. if ($sections['header']) { $quizheaderdata = []; @@ -403,7 +403,7 @@ public function generate(int $attemptid, array $sections): string { ), ]; - // Quiz metadata + // Quiz metadata. $quizheaderdata['course'] = [ 'title' => get_string('course'), 'content' => $this->course->fullname . ' (Course-ID: ' . $this->course->id . ')', @@ -443,7 +443,7 @@ public function generate(int $attemptid, array $sections): string { ]; } - // Grades + // Grades. $grade = quiz_rescale_grade($attempt->sumgrades, $quiz, false); if ($options->marks >= \question_display_options::MARK_AND_MAX && quiz_has_grades($quiz)) { if (is_null($grade)) { @@ -495,15 +495,15 @@ public function generate(int $attemptid, array $sections): string { ]; } - // Add export date + // Add export date. $quizheaderdata['exportdate'] = [ 'title' => get_string('archived', 'quiz_archiver'), 'content' => userdate(time()), ]; - // Add summary table to the html + // Add summary table to the html. if ($CFG->branch <= 403) { - // FIXME: Remove after Moodle 4.1 (LTS) support ends on 2025-12-08 + // FIXME: Remove after Moodle 4.1 (LTS) support ends on 2025-12-08. $html .= $renderer->review_summary_table($quizheaderdata, 0); } else { // TODO: Rework into proper use of new 4.4 API but create appropriate test cases first. @@ -514,11 +514,11 @@ public function generate(int $attemptid, array $sections): string { } } - // ##### Section: Quiz questions ##### + // Section: Quiz questions. if ($sections['question']) { $slots = $attemptobj->get_slots(); foreach ($slots as $slot) { - // Define display options for this question + // Define display options for this question. $originalslot = $attemptobj->get_original_slot($slot); $number = $attemptobj->get_question_number($originalslot); $displayoptions = $attemptobj->get_display_options_with_edit_link(true, $slot, ""); @@ -534,7 +534,7 @@ public function generate(int $attemptid, array $sections): string { $displayoptions->flags = 1; $displayoptions->manualcommentlink = 0; - // Render question as HTML + // Render question as HTML. if ($slot != $originalslot) { $attemptobj->get_question_attempt($slot)->set_max_mark( $attemptobj->get_question_attempt($originalslot)->get_max_mark()); @@ -569,28 +569,28 @@ public function generate(int $attemptid, array $sections): string { public function generate_full_page(int $attemptid, array $sections, bool $fixrelativeurls = true, bool $minimal = true, bool $inlineimages = true): string { global $CFG, $OUTPUT; - // Build HTML tree + // Build HTML tree. $html = ""; $html .= $OUTPUT->header(); $html .= self::generate($attemptid, $sections); $html .= $OUTPUT->footer(); - // Parse HTML as DOMDocument but supress consistency check warnings + // Parse HTML as DOMDocument but supress consistency check warnings. libxml_use_internal_errors(true); $dom = new \DOMDocument(); $dom->loadHTML($html); libxml_clear_errors(); - // Patch relative URLs + // Patch relative URLs. if ($fixrelativeurls) { $basenode = $dom->createElement("base"); $basenode->setAttribute("href", $CFG->wwwroot); $dom->getElementsByTagName('head')[0]->appendChild($basenode); } - // Cleanup DOM if desired + // Cleanup DOM if desired. if ($minimal) { - // We need to inject custom CSS to hide elements since the DOM generated by + // We need to inject custom CSS to hide elements since the DOM generated by. // Moodle can be corrupt which causes the PHP DOMDocument parser to die... $csshacksnode = $dom->createElement("style", " nav.navbar { @@ -619,7 +619,7 @@ public function generate_full_page(int $attemptid, array $sections, bool $fixrel $dom->getElementsByTagName('head')[0]->appendChild($csshacksnode); } - // Convert all local images to base64 if desired + // Convert all local images to base64 if desired. if ($inlineimages) { foreach ($dom->getElementsByTagName('img') as $img) { if (!$this->convert_image_to_base64($img)) { @@ -669,7 +669,7 @@ public function generate_full_page(int $attemptid, array $sections, bool $fixrel protected function convert_image_to_base64(\DOMElement $img): bool { global $CFG; - // Only process images with src attribute + // Only process images with src attribute. if (!$img->getAttribute('src')) { $img->setAttribute('x-debug-notice', 'no source present'); return false; @@ -677,10 +677,10 @@ protected function convert_image_to_base64(\DOMElement $img): bool { $img->setAttribute('x-original-source', $img->getAttribute('src')); } - // Remove any parameters and anchors from URL + // Remove any parameters and anchors from URL. $imgsrc = preg_replace('/^([^\?\&\#]+).*$/', '${1}', $img->getAttribute('src')); - // Convert relative URLs to absolute URLs + // Convert relative URLs to absolute URLs. $config = get_config('quiz_archiver'); $moodlebaseurl = rtrim($config->internal_wwwroot ?: $CFG->wwwroot, '/').'/'; if ($config->internal_wwwroot) { @@ -688,32 +688,32 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } $imgsrcurl = $this->ensure_absolute_url($imgsrc, $moodlebaseurl); - // Make sure to only process web URLs and nothing that somehow remained a valid local filepath - if (!substr($imgsrcurl, 0, 4) === "http") { // Yes, this includes https as well ;) + // Make sure to only process web URLs and nothing that somehow remained a valid local filepath. + if (!substr($imgsrcurl, 0, 4) === "http") { // Yes, this includes https as well ;). $img->setAttribute('x-debug-notice', 'not a web URL'); return false; } - // Only process allowed image types + // Only process allowed image types. $imgext = pathinfo($imgsrcurl, PATHINFO_EXTENSION); if (!array_key_exists($imgext, self::ALLOWED_IMAGE_TYPES)) { - // Edge case: Moodle theme images must not always contain extensions + // Edge case: Moodle theme images must not always contain extensions. if (!preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $imgsrcurl)) { $img->setAttribute('x-debug-notice', 'image type not allowed'); return false; } } - // Try to get image content based on link type + // Try to get image content based on link type. $regexmatches = null; $imgdata = null; $imgmime = array_key_exists($imgext, self::ALLOWED_IMAGE_TYPES) ? self::ALLOWED_IMAGE_TYPES[$imgext] : null; - // Handle special internal URLs first + // Handle special internal URLs first. $isinternalurl = substr($imgsrcurl, 0, strlen($moodlebaseurl)) === $moodlebaseurl; if ($isinternalurl) { if (preg_match(self::REGEX_MOODLE_URL_PLUGINFILE, $imgsrcurl, $regexmatches)) { - // ### Link type: Moodle pluginfile URL ### + // Link type: Moodle pluginfile URL. $img->setAttribute('x-url-type', 'MOODLE_URL_PLUGINFILE'); // Edge case detection: question / qtype files follow another pattern, inserting questionbank_id and question_slot after filearea ... @@ -725,17 +725,17 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } } - // Decode RFC 3986 URL escaped sequences + // Decode RFC 3986 URL escaped sequences. $regexmatches['filename'] = urldecode($regexmatches['filename']); - // Get file content via Moodle File API + // Get file content via Moodle File API. $fs = get_file_storage(); $file = $fs->get_file( $regexmatches['contextid'], $regexmatches['component'], $regexmatches['filearea'], !empty($regexmatches['itemid']) ? $regexmatches['itemid'] : 0, - '/', // Dirty simplification but works for now *sigh* + '/', // Dirty simplification but works for now *sigh*. $regexmatches['filename'], ); @@ -745,13 +745,13 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } $imgdata = $file->get_content(); } else if (preg_match(self::REGEX_MOODLE_URL_STACKPLOT, $imgsrcurl, $regexmatches)) { - // ### Link type: qtype_stack plotfile ### + // Link type: qtype_stack plotfile. $img->setAttribute('x-url-type', 'MOODLE_URL_STACKPLOT'); - // Decode RFC 3986 URL escaped sequences + // Decode RFC 3986 URL escaped sequences. $regexmatches['filename'] = urldecode($regexmatches['filename']); - // Get STACK plot file from disk + // Get STACK plot file from disk. $filename = $CFG->dataroot . '/stack/plots/' . clean_filename($regexmatches['filename']); if (!is_readable($filename)) { $img->setAttribute('x-debug-notice', 'stack plot file not readable'); @@ -763,29 +763,29 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } } - // Fall back to generic URL handling if image data not already set by internal handling routines + // Fall back to generic URL handling if image data not already set by internal handling routines. if ($imgdata === null) { if (preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $imgsrcurl)) { - // ### Link type: Moodle theme image ### - // We should be able to download there images using a simple HTTP request + // Link type: Moodle theme image. + // We should be able to download there images using a simple HTTP request. // Accessing them directly from disk is a little more complicated due to caching and other logic (see: /theme/image.php). // Let's try to keep it this way until we encounter explicit problems. $img->setAttribute('x-url-type', 'MOODLE_URL_THEME_IMAGE'); } else { - // ### Link type: Generic ### + // Link type: Generic. $img->setAttribute('x-url-type', 'GENERIC'); } - // No special local file access. Try to download via HTTP request + // No special local file access. Try to download via HTTP request. $c = new curl(['ignoresecurity' => $isinternalurl]); - $imgdata = $c->get($imgsrcurl); // Curl handle automatically closed + $imgdata = $c->get($imgsrcurl); // Curl handle automatically closed. if ($c->get_info()['http_code'] !== 200 || $imgdata === false) { $img->setAttribute('x-debug-more', $imgdata); $img->setAttribute('x-debug-notice', 'HTTP request failed'); return false; } - // Check if we need to detect mime type from response headers + // Check if we need to detect mime type from response headers. if (!$imgmime) { $imgmime = $c->get_info()['content_type']; if (!in_array($imgmime, self::ALLOWED_IMAGE_TYPES)) { @@ -795,7 +795,7 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } } - // Encode and replace image if present + // Encode and replace image if present. if (!$imgdata) { $img->setAttribute('x-debug-notice', 'no image data'); return false; @@ -816,40 +816,40 @@ protected function convert_image_to_base64(\DOMElement $img): bool { * @return string Absolute URL */ protected static function ensure_absolute_url(string $url, string $base): string { - /* return if already absolute URL */ + // Return if already absolute URL. if (parse_url($url, PHP_URL_SCHEME) != '') { return $url; } - /* queries and anchors */ + // Queries and anchors. if ($url[0] == '#' || $url[0] == '?') { return $base.$url; } - /* parse base URL and convert to local variables: $scheme, $host, $path */ + // Parse base URL and convert to local variables: $scheme, $host, $path. $urlparsed = parse_url($base); $scheme = $urlparsed['scheme']; $host = $urlparsed['host']; $path = $urlparsed['path']; - /* remove non-directory element from path */ + // Remove non-directory element from path. $path = preg_replace('#/[^/]*$#', '', $path); - /* destroy path if relative url points to root */ + // Destroy path if relative url points to root. if ($url[0] == '/') { $path = ''; } - /* dirty absolute URL */ + // Dirty absolute URL. $abs = "$host$path/$url"; - /* replace '//' or '/./' or '/foo/../' with '/' */ + // Replace '//' or '/./' or '/foo/../' with '/'. $re = ['#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#']; for ($n = 1; $n > 0; $abs = preg_replace($re, '/', $abs, -1, $n)) { continue; } - /* absolute URL is ready! */ + // Absolute URL is ready! return $scheme.'://'.$abs; } diff --git a/classes/TSPManager.php b/classes/TSPManager.php index d6a15b3..3c66f25 100644 --- a/classes/TSPManager.php +++ b/classes/TSPManager.php @@ -140,22 +140,22 @@ public function delete_tsp_data(): void { public function timestamp(): void { global $DB; - // Get artifact checksum + // Get artifact checksum. $artifactchecksum = $this->job->get_artifact_checksum(); if ($artifactchecksum === null) { throw new \RuntimeException(get_string('archive_signing_failed_no_artifact', 'quiz_archiver')); } - // Check if TSP signing globally is enabled + // Check if TSP signing globally is enabled. if (!$this->config->tsp_enable) { throw new \Exception(get_string('archive_signing_failed_tsp_disabled', 'quiz_archiver')); } - // Issue TSP timestamp + // Issue TSP timestamp. $tspclient = $this->get_timestampprotocolclient(); $tspdata = $tspclient->sign($artifactchecksum); - // Store TSP data + // Store TSP data. $DB->insert_record(self::TSP_TABLE_NAME, [ 'jobid' => $this->job->get_id(), 'timecreated' => time(), diff --git a/classes/TimeStampProtocolClient.php b/classes/TimeStampProtocolClient.php index f5734b2..012e063 100644 --- a/classes/TimeStampProtocolClient.php +++ b/classes/TimeStampProtocolClient.php @@ -72,11 +72,11 @@ public function get_serverurl() { * invalid data was received */ public function sign(string $sha256hash): array { - // Prepare TimeStampRequest + // Prepare TimeStampRequest. $nonce = self::generate_nonce(); $tsreq = self::create_timestamp_request($sha256hash, $nonce); - // Send TimeStampRequest to TSP server + // Send TimeStampRequest to TSP server. $c = new curl(); $tsresp = $c->post($this->serverurl, $tsreq, [ 'CURLOPT_SSL_VERIFYPEER' => true, @@ -88,8 +88,8 @@ public function sign(string $sha256hash): array { ], ]); - // Error handling - if ($c->error) { // Moodle curl wrapper provides no getter for curl error message + // Error handling. + if ($c->error) { // Moodle curl wrapper provides no getter for curl error message. throw new \Exception(get_string('tsp_client_error_curl', 'quiz_archiver', $c->error)); } else { $curlinfo = $c->get_info(); @@ -103,7 +103,7 @@ public function sign(string $sha256hash): array { throw new \Exception(get_string('tsp_client_error_content_type', 'quiz_archiver', $curlinfo['content_type'])); } - // Success + // Success. return [ 'query' => $tsreq, 'reply' => $tsresp, @@ -133,7 +133,7 @@ public static function generate_nonce(): string { * @throws \ValueError If the SHA256 hash or nonce are invalid */ protected static function create_timestamp_request(string $sha256hash, string $nonce, bool $requesttsapublickey = false): string { - // Validate input + // Validate input. if (strlen($sha256hash) !== 64) { throw new \ValueError('Invalid hexadecimal SHA256 hash'); } @@ -141,43 +141,43 @@ protected static function create_timestamp_request(string $sha256hash, string $n throw new \ValueError('Invalid nonce'); } - // Generate ASN.1 encoded TimeStampReq + // Generate ASN.1 encoded TimeStampReq. $asn1 = []; - // -> Root DER SEQUENCE - $asn1[0] = chr(0x00) . chr(0x00); // SEQUENCE OF + Length (TBD) - // -> TimeStampRequest Version (INTEGER v1) - $asn1[1] = chr(0x02) . chr(0x01) . chr(0x01); // INTEGER + Length + Value - // -> MessageImprint - $asn1[2] = chr(0x00) . chr(0x00); // SEQUENCE OF + Length (TBD) - $asn1[3] = chr(0x30) . chr(0x0d); // SEQUENCE OF + Length (0x0d == 13) - // -> MessageImprint / Object ID, Length 0x09 - $asn1[4] = chr(0x06) . chr(0x09) // OBJECT IDENTIFIER (length 9 bytes) - . chr(0x60) // 2 . 16 - . chr(0x86) . chr(0x48) // 840 - . chr(0x01) . chr(0x65) // 1 . 101 - . chr(0x03) . chr(0x04) // 3 . 4 - . chr(0x02) . chr(0x01) // 2 . 1 - . chr(0x05) . chr(0x00); // OID Terminator == NULL + Length (0x00) - - // -> MessageImprint / Hash Value, Length 0x40 - $asn1[5] = chr(0x04) . chr(0x20) . hex2bin($sha256hash); // OCTET STRING 0x42 == 32 Bytes (SHA256) + Hash value - - // -> Nonce - $asn1[] = chr(0x02) . chr(0x10) . $nonce; // INTEGER + Length (16 bytes) + nonce value - - // -> certReq + // X-> Root DER SEQUENCE. + $asn1[0] = chr(0x00) . chr(0x00); // SEQUENCE OF + Length (TBD). + // X-> TimeStampRequest Version (INTEGER v1). + $asn1[1] = chr(0x02) . chr(0x01) . chr(0x01); // INTEGER + Length + Value. + // X-> MessageImprint. + $asn1[2] = chr(0x00) . chr(0x00); // SEQUENCE OF + Length (TBD). + $asn1[3] = chr(0x30) . chr(0x0d); // SEQUENCE OF + Length (0x0d == 13). + // X-> MessageImprint / Object ID, Length 0x09. + $asn1[4] = chr(0x06) . chr(0x09) // OBJECT IDENTIFIER (length 9 bytes). + . chr(0x60) // 2 . 16. + . chr(0x86) . chr(0x48) // 840. + . chr(0x01) . chr(0x65) // 1 . 101. + . chr(0x03) . chr(0x04) // 3 . 4. + . chr(0x02) . chr(0x01) // 2 . 1. + . chr(0x05) . chr(0x00); // OID Terminator == NULL + Length (0x00). + + // X-> MessageImprint / Hash Value, Length 0x40. + $asn1[5] = chr(0x04) . chr(0x20) . hex2bin($sha256hash); // OCTET STRING 0x42 == 32 Bytes (SHA256) + Hash value. + + // X-> Nonce. + $asn1[] = chr(0x02) . chr(0x10) . $nonce; // INTEGER + Length (16 bytes) + nonce value. + + // X-> certReq. if ($requesttsapublickey) { - $asn1[] = chr(0x01) . chr(0x01) . chr(0xff); // BOOLEAN + Length + True + $asn1[] = chr(0x01) . chr(0x01) . chr(0xff); // BOOLEAN + Length + True. } - // Set correct message length metadata - // -> MessageImprint + // Set correct message length metadata. + // X-> MessageImprint. $asn1[2] = chr(0x30) . chr(strlen($asn1[3] . $asn1[4] . $asn1[5])); - // -> Root DER SEQUENCE + // X-> Root DER SEQUENCE. $asn1[0] = chr(0x30) . chr(strlen(implode('', array_slice($asn1, 1)))); - // Build final ASN.1 encoded TimeStampReq + // Build final ASN.1 encoded TimeStampReq. return implode('', $asn1); } diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index b26ffa6..cc56fc3 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; @@ -125,7 +125,7 @@ public static function execute( ): array { global $DB, $PAGE; - // Validate request + // Validate request. $params = self::validate_parameters(self::execute_parameters(), [ 'courseid' => $courseidraw, 'cmid' => $cmidraw, @@ -136,11 +136,11 @@ public static function execute( 'attachments' => $attachmentsraw, ]); - // Check capabilities + // Check capabilities. $context = \context_module::instance($params['cmid']); require_capability('mod/quiz_archiver:use_webservice', $context); - // Acquire required data objects + // Acquire required data objects. if (!$course = $DB->get_record('course', ['id' => $params['courseid']])) { throw new \invalid_parameter_exception("No course with given courseid found"); } @@ -151,12 +151,12 @@ public static function execute( throw new \invalid_parameter_exception("No quiz with given quizid found"); } - // Validate filename pattern + // Validate filename pattern. if (!ArchiveJob::is_valid_attempt_filename_pattern($params['filenamepattern'])) { throw new \invalid_parameter_exception("Report filename pattern is invalid"); } - // Prepare response + // Prepare response. $res = [ 'courseid' => $params['courseid'], 'cmid' => $params['cmid'], @@ -164,10 +164,10 @@ public static function execute( 'attemptid' => $params['attemptid'], ]; - // Forcefully set URL in $PAGE to the webservice handler to prevent further warnings + // Forcefully set URL in $PAGE to the webservice handler to prevent further warnings. $PAGE->set_url(new \moodle_url('/webservice/rest/server.php', ['wsfunction' => 'quiz_archiver_generate_attempt_report'])); - // Generate report + // Generate report. $report = new Report($course, $cm, $quiz); if (!$report->has_access(optional_param('wstoken', null, PARAM_TEXT))) { return [ @@ -180,17 +180,17 @@ public static function execute( $res['report'] = $report->generate_full_page($params['attemptid'], $params['sections']); - // Check for attachments + // Check for attachments. if ($params['attachments']) { $res['attachments'] = $report->get_attempt_attachments_metadata($params['attemptid']); } else { $res['attachments'] = []; } - // Generate filename + // Generate filename. $res['filename'] = ArchiveJob::generate_attempt_filename($course, $cm, $quiz, $params['attemptid'], $params['filenamepattern']); - // Return response + // Return response. $res['status'] = 'OK'; return $res; diff --git a/classes/external/get_attempts_metadata.php b/classes/external/get_attempts_metadata.php index d0d4679..6cd1abc 100644 --- a/classes/external/get_attempts_metadata.php +++ b/classes/external/get_attempts_metadata.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; @@ -99,7 +99,7 @@ public static function execute_returns(): external_single_structure { public static function execute(int $courseidraw, int $cmidraw, int $quizidraw, array $attemptidsraw): array { global $DB; - // Validate request + // Validate request. $params = self::validate_parameters(self::execute_parameters(), [ 'courseid' => $courseidraw, 'cmid' => $cmidraw, @@ -107,11 +107,11 @@ public static function execute(int $courseidraw, int $cmidraw, int $quizidraw, a 'attemptids' => $attemptidsraw, ]); - // Check capabilities + // Check capabilities. $context = \context_module::instance($params['cmid']); require_capability('mod/quiz_archiver:use_webservice', $context); - // Acquire required data objects + // Acquire required data objects. if (!$course = $DB->get_record('course', ['id' => $params['courseid']])) { throw new \invalid_parameter_exception("No course with given courseid found"); } @@ -122,7 +122,7 @@ public static function execute(int $courseidraw, int $cmidraw, int $quizidraw, a throw new \invalid_parameter_exception("No quiz with given quizid found"); } - // Extract attempt metadata + // Extract attempt metadata. $report = new Report($course, $cm, $quiz); if (!$report->has_access(optional_param('wstoken', null, PARAM_TEXT))) { return [ diff --git a/classes/external/get_backup_status.php b/classes/external/get_backup_status.php index d4622ab..9dacbeb 100644 --- a/classes/external/get_backup_status.php +++ b/classes/external/get_backup_status.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; @@ -77,29 +77,29 @@ public static function execute( string $jobidraw, string $backupidraw ): array { - // Validate request + // Validate request. $params = self::validate_parameters(self::execute_parameters(), [ 'jobid' => $jobidraw, 'backupid' => $backupidraw, ]); - // Validate that the jobid exists + // Validate that the jobid exists. try { $job = ArchiveJob::get_by_jobid($params['jobid']); } catch (\dml_exception $e) { return ['status' => 'E_JOB_NOT_FOUND']; } - // Check access rights + // Check access rights. if (!$job->has_read_access(optional_param('wstoken', null, PARAM_TEXT))) { return ['status' => 'E_ACCESS_DENIED']; } - // Check capabilities + // Check capabilities. $context = \context_module::instance($job->get_cmid()); require_capability('mod/quiz_archiver:use_webservice', $context); - // Get backup + // Get backup. try { $bm = new BackupManager($params['backupid']); @@ -118,7 +118,7 @@ public static function execute( return ['status' => 'E_BACKUP_NOT_FOUND']; } - // Report success + // Report success. return ['status' => 'SUCCESS']; } diff --git a/classes/external/process_uploaded_artifact.php b/classes/external/process_uploaded_artifact.php index 2f1a043..cf9633d 100644 --- a/classes/external/process_uploaded_artifact.php +++ b/classes/external/process_uploaded_artifact.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; @@ -98,7 +98,7 @@ public static function execute( int $artifactitemidraw, string $artifactsha256sumraw ): array { - // Validate request + // Validate request. $params = self::validate_parameters(self::execute_parameters(), [ 'jobid' => $jobidraw, 'artifact_component' => $artifactcomponentraw, @@ -111,7 +111,7 @@ public static function execute( 'artifact_sha256sum' => $artifactsha256sumraw, ]); - // Validate that the jobid exists and no artifact was uploaded previously + // Validate that the jobid exists and no artifact was uploaded previously. try { $job = ArchiveJob::get_by_jobid($params['jobid']); if ($job->is_complete()) { @@ -125,19 +125,19 @@ public static function execute( ]; } - // Check access rights + // Check access rights. if (!$job->has_write_access(optional_param('wstoken', null, PARAM_TEXT))) { return [ 'status' => 'E_ACCESS_DENIED', ]; } - // Check capabilities + // Check capabilities. $context = \context_module::instance($job->get_cmid()); require_capability('mod/quiz_archiver:use_webservice', $context); - // Validate uploaded file - // Note: We use SHA256 instead of Moodle sha1, since SHA1 is prone to + // Validate uploaded file. + // Note: We use SHA256 instead of Moodle sha1, since SHA1 is prone to. // hash collisions! $draftfile = FileManager::get_draft_file( $params['artifact_contextid'], @@ -160,7 +160,7 @@ public static function execute( ]; } - // Store uploaded file + // Store uploaded file. $fm = new FileManager($job->get_courseid(), $job->get_cmid(), $job->get_quizid()); try { $artifact = $fm->store_uploaded_artifact($draftfile); @@ -172,22 +172,24 @@ public static function execute( ]; } - // Timestamp artifact file using TSP + // Timestamp artifact file using TSP. if ($job->tspmanager()->wants_tsp_timestamp()) { try { $job->tspmanager()->timestamp(); // @codingStandardsIgnoreStart } catch (\Exception $e) { // TODO: Fail silently for now ... - // $job->set_status(ArchiveJob::STATUS_FAILED); - // return [ - // 'status' => 'E_TSP_TIMESTAMP_FAILED' - // ]; + /* + $job->set_status(ArchiveJob::STATUS_FAILED); + return [ + 'status' => 'E_TSP_TIMESTAMP_FAILED' + ]; + */ } // @codingStandardsIgnoreEnd } - // Report success + // Report success. $job->set_status(ArchiveJob::STATUS_FINISHED); return [ 'status' => 'OK', diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index e6cfd24..4ff2b8f 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; @@ -75,7 +75,7 @@ public static function execute( string $jobidraw, string $statusraw ): array { - // Validate request + // Validate request. $params = self::validate_parameters(self::execute_parameters(), [ 'jobid' => $jobidraw, 'status' => $statusraw, @@ -84,7 +84,7 @@ public static function execute( try { $job = ArchiveJob::get_by_jobid($params['jobid']); - // Check capabilities + // Check capabilities. $context = \context_module::instance($job->get_cmid()); require_capability('mod/quiz_archiver:use_webservice', $context); @@ -107,7 +107,7 @@ public static function execute( ]; } - // Report success + // Report success. return [ 'status' => 'OK', ]; diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index d99ff22..c14fb72 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -66,23 +66,23 @@ public function definition() { $config = get_config('quiz_archiver'); $mform = $this->_form; - // Title and description + // Title and description. $mform->addElement('html', '

    '.get_string('create_quiz_archive', 'quiz_archiver').'

    '); $mform->addElement('html', '

    '.get_string('archive_quiz_form_desc', 'quiz_archiver').'

    '); - // Internal information of mod_quiz + // Internal information of mod_quiz. $mform->addElement('hidden', 'id', $this->optional_param('id', null, PARAM_INT)); $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'mode', 'archiver'); $mform->setType('mode', PARAM_TEXT); - // Options + // Options. $mform->addElement('header', 'header_settings', get_string('settings')); - // Options: Test + // Options: Test. $mform->addElement('static', 'quiz_name', get_string('modulename', 'mod_quiz'), $this->quizname); - // Options: Attempts + // Options: Attempts. $mform->addElement( 'advcheckbox', 'export_attempts', @@ -111,7 +111,7 @@ public function definition() { } } - // Options: Backups + // Options: Backups. $mform->addElement( 'advcheckbox', 'export_quiz_backup', @@ -132,7 +132,7 @@ public function definition() { $mform->addHelpButton('export_course_backup', 'export_course_backup', 'quiz_archiver'); $mform->setDefault('export_course_backup', $config->job_preset_export_course_backup); - // Advanced options + // Advanced options. $mform->addElement('header', 'header_advanced_settings', get_string('advancedsettings')); $mform->setExpanded('header_advanced_settings', false); @@ -172,7 +172,7 @@ public function definition() { 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), ]); } else { - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern_moodle42', 'quiz_archiver'); } $mform->setType('archive_filename_pattern', PARAM_TEXT); @@ -195,7 +195,7 @@ public function definition() { 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), ]); } else { - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern_moodle42', 'quiz_archiver'); } $mform->setType('export_attempts_filename_pattern', PARAM_TEXT); @@ -235,7 +235,7 @@ public function definition() { $mform->addHelpButton('archive_retention_time', 'archive_retention_time', 'quiz_archiver'); $mform->hideIf('archive_retention_time', 'archive_autodelete', 'notchecked'); - // Submit + // Submit. $mform->closeHeaderBefore('submitbutton'); $mform->addElement('submit', 'submitbutton', get_string('archive_quiz', 'quiz_archiver')); } @@ -251,7 +251,7 @@ public function definition() { public function validation($data, $files) { $errors = parent::validation($data, $files); - // Validate filename pattern + // Validate filename pattern. if (!ArchiveJob::is_valid_archive_filename_pattern($data['archive_filename_pattern'])) { $errors['archive_filename_pattern'] = get_string('error_invalid_archive_filename_pattern', 'quiz_archiver'); } @@ -273,7 +273,7 @@ public function get_data(): \stdClass { $data = parent::get_data(); $config = get_config('quiz_archiver'); - // Force locked fields to their preset values + // Force locked fields to their preset values. foreach ($config as $key => $value) { if (strpos($key, 'job_preset_') === 0 && strrpos($key, '_locked') === strlen($key) - 7) { if ($value) { diff --git a/classes/form/artifact_delete_form.php b/classes/form/artifact_delete_form.php index 5cb8b5f..0915a33 100644 --- a/classes/form/artifact_delete_form.php +++ b/classes/form/artifact_delete_form.php @@ -45,11 +45,11 @@ class artifact_delete_form extends \moodleform { public function definition() { $mform = $this->_form; - // Find job + // Find job. $job = ArchiveJob::get_by_jobid($this->optional_param('jobid', null, PARAM_TEXT)); $artifactfile = $job->get_artifact(); - // Generic warning message + // Generic warning message. $warnhead = get_string('delete_artifact', 'quiz_archiver'); if ($artifactfile) { @@ -58,7 +58,7 @@ public function definition() { $warndetails .= '
    '; $warndetails .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; - // Warn additionally if job is scheduled for automatic deletion + // Warn additionally if job is scheduled for automatic deletion. if ($job->is_autodelete_enabled()) { if ($job->get_status() === ArchiveJob::STATUS_FINISHED) { $warnmsg .= '

    '; @@ -74,7 +74,7 @@ public function definition() { $warndetails = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); } - // Print warning element + // Print warning element. $mform->addElement('html', <<

    $warnhead

    @@ -84,20 +84,20 @@ public function definition() {
    EOD); - // Preserve internal information of mod_quiz + // Preserve internal information of mod_quiz. $mform->addElement('hidden', 'id', $this->optional_param('id', null, PARAM_INT)); $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'mode', 'archiver'); $mform->setType('mode', PARAM_TEXT); if ($artifactfile) { - // Options + // Options. $mform->addElement('hidden', 'action', 'delete_artifact'); $mform->setType('action', PARAM_TEXT); $mform->addElement('hidden', 'jobid', $job->get_jobid()); $mform->setType('jobid', PARAM_TEXT); - // Action buttons + // Action buttons. $this->add_action_buttons(true, get_string('delete', 'moodle')); } else { $this->add_action_buttons(false, get_string('back')); diff --git a/classes/form/autoinstall_form.php b/classes/form/autoinstall_form.php index d01d666..85fb511 100644 --- a/classes/form/autoinstall_form.php +++ b/classes/form/autoinstall_form.php @@ -48,7 +48,7 @@ public function definition() { $mform = $this->_form; $mform->addElement('header', 'header', get_string('settings', 'plugin')); - // Add configuration options + // Add configuration options. $mform->addElement('text', 'workerurl', get_string('setting_worker_url', 'quiz_archiver'), ['size' => 50]); $mform->addElement('static', 'workerurl_help', '', get_string('setting_worker_url_desc', 'quiz_archiver')); $mform->setType('workerurl', PARAM_TEXT); @@ -72,7 +72,7 @@ public function definition() { $mform->setType('username', PARAM_TEXT); $mform->addRule('username', null, 'required', null, 'client'); - // Action buttons + // Action buttons. $this->add_action_buttons(true, get_string('confirm', 'moodle')); } diff --git a/classes/form/job_delete_form.php b/classes/form/job_delete_form.php index e26f9ed..990bca0 100644 --- a/classes/form/job_delete_form.php +++ b/classes/form/job_delete_form.php @@ -45,22 +45,22 @@ class job_delete_form extends \moodleform { public function definition() { $mform = $this->_form; - // Find job + // Find job. $job = ArchiveJob::get_by_jobid($this->optional_param('jobid', null, PARAM_TEXT)); $artifactfile = $job->get_artifact(); - // Generic warning message + // Generic warning message. $warnhead = get_string('delete_job', 'quiz_archiver'); $warnmsg = get_string('delete_job_warning', 'quiz_archiver'); $warndetails = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); - // Add artifact details if available + // Add artifact details if available. if ($artifactfile) { $warndetails .= '
    '; $warndetails .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; } - // Warn additionally if job is scheduled for automatic deletion + // Warn additionally if job is scheduled for automatic deletion. if ($job->is_autodelete_enabled()) { if ($job->get_status() === ArchiveJob::STATUS_FINISHED) { $warnmsg .= '

    '; @@ -72,7 +72,7 @@ public function definition() { } } - // Print warning element + // Print warning element. $mform->addElement('html', <<

    $warnhead

    @@ -82,19 +82,19 @@ public function definition() {
    EOD); - // Preserve internal information of mod_quiz + // Preserve internal information of mod_quiz. $mform->addElement('hidden', 'id', $this->optional_param('id', null, PARAM_INT)); $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'mode', 'archiver'); $mform->setType('mode', PARAM_TEXT); - // Options + // Options. $mform->addElement('hidden', 'action', 'delete_job'); $mform->setType('action', PARAM_TEXT); $mform->addElement('hidden', 'jobid', $job->get_jobid()); $mform->setType('jobid', PARAM_TEXT); - // Action buttons + // Action buttons. $this->add_action_buttons(true, get_string('delete', 'moodle')); } diff --git a/classes/form/job_sign_form.php b/classes/form/job_sign_form.php index 0d23244..6ce74bf 100644 --- a/classes/form/job_sign_form.php +++ b/classes/form/job_sign_form.php @@ -42,7 +42,7 @@ class job_sign_form extends \moodleform { public function definition() { $mform = $this->_form; - // Warning message + // Warning message. $warnhead = get_string('areyousure', 'moodle'); $warnmsg = get_string('sign_archive_warning', 'quiz_archiver', $this->optional_param('jobid', null, PARAM_TEXT)); $warndetails = get_string('jobid', 'quiz_archiver').': '.$this->optional_param('jobid', null, PARAM_TEXT); @@ -55,19 +55,19 @@ public function definition() {
    EOD); - // Preserve internal information of mod_quiz + // Preserve internal information of mod_quiz. $mform->addElement('hidden', 'id', $this->optional_param('id', null, PARAM_INT)); $mform->setType('id', PARAM_INT); $mform->addElement('hidden', 'mode', 'archiver'); $mform->setType('mode', PARAM_TEXT); - // Options + // Options. $mform->addElement('hidden', 'action', 'sign_job'); $mform->setType('action', PARAM_TEXT); $mform->addElement('hidden', 'jobid', $this->optional_param('jobid', null, PARAM_TEXT)); $mform->setType('jobid', PARAM_TEXT); - // Action buttons + // Action buttons. $this->add_action_buttons(true, get_string('sign_archive', 'quiz_archiver')); } diff --git a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php index efce7e4..31313af 100644 --- a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php @@ -36,13 +36,13 @@ class admin_setting_archive_filename_pattern extends \admin_setting_configtext { * @throws \coding_exception */ public function validate($data) { - // Basic data validation + // Basic data validation. $parentvalidation = parent::validate($data); if ($parentvalidation !== true) { return $parentvalidation; } - // Validate filename pattern + // Validate filename pattern. if (!ArchiveJob::is_valid_archive_filename_pattern($data)) { return get_string('error_invalid_archive_filename_pattern', 'quiz_archiver'); } diff --git a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php index 1d87776..82f0b4f 100644 --- a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php @@ -36,13 +36,13 @@ class admin_setting_attempt_filename_pattern extends \admin_setting_configtext { * @throws \coding_exception */ public function validate($data) { - // Basic data validation + // Basic data validation. $parentvalidation = parent::validate($data); if ($parentvalidation !== true) { return $parentvalidation; } - // Validate filename pattern + // Validate filename pattern. if (!ArchiveJob::is_valid_attempt_filename_pattern($data)) { return get_string('error_invalid_attempt_filename_pattern', 'quiz_archiver'); } diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index c65f3ac..306eb11 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -114,11 +114,11 @@ public static function execute( string $username = self::DEFAULT_USERNAME, bool $force = false ): array { - // Prepare return values + // Prepare return values. $success = false; try { - // Init log array + // Init log array. $log = []; // Ensure current user is an admin. @@ -137,7 +137,7 @@ public static function execute( } } - // Apply default values for all plugin settings + // Apply default values for all plugin settings. $adminroot = admin_get_root(); $adminsearch = $adminroot->search('quiz_archiver_settings'); if (!$adminsearch || !$adminsearch['quiz_archiver_settings']->page) { @@ -153,7 +153,7 @@ public static function execute( $log[] = " -> Default plugin settings applied."; } - // Check worker URL + // Check worker URL. if (empty($workerurl)) { $log[] = "Error: The given worker URL is invalid."; throw new \RuntimeException(); @@ -185,7 +185,7 @@ public static function execute( } catch (dml_exception $e) { $log[] = "Error: Cloud not create webservice user: ".$e->getMessage(); throw new \RuntimeException(); - } catch (\Exception $e) { // \Random\RandomException is only thrown with PHP >= 8.2, generic \Exception otherwise + } catch (\Exception $e) { // Random\RandomException is only thrown with PHP >= 8.2, generic \Exception otherwise. $log[] = "Error: Could not create webservice user: ".$e->getMessage(); throw new \RuntimeException(); } @@ -258,7 +258,7 @@ public static function execute( $log[] = " -> Web service '{$wsname}' created with ID {$serviceid}."; } - // Add functions to the service + // Add functions to the service. foreach (self::WS_FUNCTIONS as $f) { $webservicemanager->add_external_function_to_service($f, $serviceid); $log[] = " -> Function {$f} added to service '{$wsname}'."; @@ -274,7 +274,7 @@ public static function execute( $webservicemanager->update_external_service($service); $log[] = " -> User '{$webserviceuser->username}' authorised to use service '{$wsname}'."; - // Configure quiz_archiver plugin settings + // Configure quiz_archiver plugin settings. try { $log[] = " -> Configuring the quiz archiver plugin..."; diff --git a/classes/local/util.php b/classes/local/util.php index 1c5fa21..a2cf55c 100644 --- a/classes/local/util.php +++ b/classes/local/util.php @@ -34,7 +34,7 @@ class util { * @return string Human readable duration string */ public static function duration_to_human_readable(int $duration): string { - // Calculate isolated time units + // Calculate isolated time units. $years = floor($duration / YEARSECS); $months = floor(($duration % YEARSECS) / (YEARSECS / 12)); $days = floor(($duration % (YEARSECS / 12)) / DAYSECS); @@ -42,7 +42,7 @@ public static function duration_to_human_readable(int $duration): string { $minutes = floor(($duration % HOURSECS) / MINSECS); $seconds = floor($duration % MINSECS); - // Generate human readable string + // Generate human readable string. $humanreadable = ''; if ($years > 0) { $humanreadable .= $years . 'y '; diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index 39c1300..55b75f3 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -140,11 +140,11 @@ public function col_filesize($values) { public function col_actions($values) { $html = ''; - // Action: Show details + // Action: Show details. // @codingStandardsIgnoreLine $html .= ''; - // Action: Download + // Action: Download. if ($values->pathnamehash) { $artifactfile = get_file_storage()->get_file_by_hash($values->pathnamehash); $artifacturl = \moodle_url::make_pluginfile_url( @@ -165,7 +165,7 @@ public function col_actions($values) { $html .= ''; } - // Action: Delete + // Action: Delete. $deleteurl = new \moodle_url('', [ 'id' => optional_param('id', null, PARAM_INT), 'mode' => 'archiver', diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php index 1fcb36b..44a1a03 100644 --- a/classes/privacy/provider.php +++ b/classes/privacy/provider.php @@ -51,10 +51,10 @@ class provider implements * @return collection A listing of user data stored through this system. */ public static function get_metadata(collection $collection): collection { - // Quiz archive files + // Quiz archive files. $collection->add_subsystem_link('core_files', [], 'privacy:metadata:core_files'); - // Database tables + // Database tables. $collection->add_database_table('quiz_archiver_jobs', [ 'courseid' => 'privacy:metadata:quiz_archiver_jobs:courseid', 'cmid' => 'privacy:metadata:quiz_archiver_jobs:cmid', @@ -88,7 +88,7 @@ public static function get_metadata(collection $collection): collection { public static function get_contexts_for_userid(int $userid): contextlist { $contextlist = new contextlist(); - // Get all contexts where the user has a quiz archiver job + // Get all contexts where the user has a quiz archiver job. // Note: The context stays the same across all entries for a single // archive job. Hence, we only query the main job table. $contextlist->add_from_sql(" @@ -107,7 +107,7 @@ public static function get_contexts_for_userid(int $userid): contextlist { ] ); - // Add all contexts where the user is part of a quiz archive + // Add all contexts where the user is part of a quiz archive. $contextlist->add_from_sql(" SELECT DISTINCT c.id FROM {context} c @@ -141,10 +141,10 @@ public static function export_user_data(approved_contextlist $contextlist) { $userid = $contextlist->get_user()->id; - // Process all contexts + // Process all contexts. $subctxbase = get_string('pluginname', 'quiz_archiver'); foreach ($contextlist->get_contexts() as $ctx) { - // Get existing jobs for current context + // Get existing jobs for current context. $jobs = $DB->get_records_sql(" SELECT * FROM {context} c @@ -161,12 +161,12 @@ public static function export_user_data(approved_contextlist $contextlist) { 'userid' => $userid, ]); - // Export each job + // Export each job. foreach ($jobs as $job) { - // Set correct subcontext for the job + // Set correct subcontext for the job. $subctx = [$subctxbase, "Job: {$job->jobid}"]; - // Get job settings + // Get job settings. $jobsettings = $DB->get_records( ArchiveJob::JOB_SETTINGS_TABLE_NAME, ['jobid' => $job->id], @@ -174,7 +174,7 @@ public static function export_user_data(approved_contextlist $contextlist) { 'key, value' ); - // Get TSP data + // Get TSP data. $tspdata = $DB->get_record( TSPManager::TSP_TABLE_NAME, ['jobid' => $job->id], @@ -182,13 +182,13 @@ public static function export_user_data(approved_contextlist $contextlist) { IGNORE_MISSING ); - // Encode TSP data as base64 if present + // Encode TSP data as base64 if present. if ($tspdata) { $tspdata->timestampquery = base64_encode($tspdata->timestampquery); $tspdata->timestampreply = base64_encode($tspdata->timestampreply); } - // Add job data to current context + // Add job data to current context. writer::with_context($ctx)->export_data($subctx, (object) [ 'courseid' => $job->courseid, 'cmid' => $job->cmid, @@ -208,7 +208,7 @@ public static function export_user_data(approved_contextlist $contextlist) { } } - // Process artifact files for the user in the given context + // Process artifact files for the user in the given context. $attemptartifacts = $DB->get_records_sql(" SELECT a.id, j.id AS jobid, j.courseid, j.cmid, j.quizid, j.artifactfileid, a.attemptid FROM {context} c @@ -250,7 +250,7 @@ public static function get_users_in_context(userlist $userlist) { return; } - // Job metadata + // Job metadata. $userlist->add_from_sql( 'userid', " @@ -267,7 +267,7 @@ public static function get_users_in_context(userlist $userlist) { ] ); - // Quiz archive file contents + // Quiz archive file contents. $userlist->add_from_sql( 'userid', " @@ -292,7 +292,7 @@ public static function get_users_in_context(userlist $userlist) { * @param approved_userlist $userlist The approved context and user information to delete information for. */ public static function delete_data_for_users(approved_userlist $userlist) { - // We cannot simply delete data that needs to be archived for a specified amount of time + // We cannot simply delete data that needs to be archived for a specified amount of time. } /** @@ -301,7 +301,7 @@ public static function delete_data_for_users(approved_userlist $userlist) { * @param \context $context The specific context to delete data for. */ public static function delete_data_for_all_users_in_context(\context $context) { - // We cannot simply delete data that needs to be archived for a specified amount of time + // We cannot simply delete data that needs to be archived for a specified amount of time. } /** @@ -310,7 +310,7 @@ public static function delete_data_for_all_users_in_context(\context $context) { * @param approved_contextlist $contextlist The approved contexts and user information to delete information for. */ public static function delete_data_for_user(approved_contextlist $contextlist) { - // We cannot simply delete data that needs to be archived for a specified amount of time + // We cannot simply delete data that needs to be archived for a specified amount of time. } } diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 9aa5979..22c60f1 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -32,9 +32,7 @@ /** @var bool Identifies this script as a CLI script */ const CLI_SCRIPT = true; -// ####################### -// # CLI options parsing # -// ####################### +// XXX-> CLI options parsing. list($options, $unrecognised) = cli_get_params( [ @@ -84,9 +82,7 @@ exit(2); } -// ################################ -// # Begin of autoinstall routine # -// ################################ +// XXX-> Begin of autoinstall routine. // Set admin user. $USER = get_admin(); diff --git a/db/install.php b/db/install.php index 036ad44..5c3beaa 100644 --- a/db/install.php +++ b/db/install.php @@ -29,7 +29,7 @@ * Custom code to be run on installing the plugin. */ function xmldb_quiz_archiver_install() { - // Print welcome message + // Print welcome message. $autoinstallurl = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); $pluginsettingsurl = new moodle_url('/admin/settings.php', ['section' => 'quiz_archiver_settings']); diff --git a/db/upgrade.php b/db/upgrade.php index 2d384f8..b73a089 100644 --- a/db/upgrade.php +++ b/db/upgrade.php @@ -86,13 +86,13 @@ function xmldb_quiz_archiver_upgrade($oldversion) { } if ($oldversion < 2023080104) { - // Remove foreign key constraints with reftables to be renamed + // Remove foreign key constraints with reftables to be renamed. $dbman->drop_key( new xmldb_table('quiz_report_archiver_files'), new xmldb_key('jobid', XMLDB_KEY_FOREIGN, ['jobid'], 'quiz_report_archiver_jobs', ['id']) ); - // Rename tables to remove the "report_" prefix + // Rename tables to remove the "report_" prefix. $dbman->rename_table( new xmldb_table('quiz_report_archiver_jobs'), 'quiz_archiver_jobs' @@ -102,7 +102,7 @@ function xmldb_quiz_archiver_upgrade($oldversion) { 'quiz_archiver_files' ); - // Restore foreign key constraints + // Restore foreign key constraints. $dbman->add_key( new xmldb_table('quiz_archiver_files'), new xmldb_key('jobid', XMLDB_KEY_FOREIGN, ['jobid'], 'quiz_archiver_jobs', ['id']) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 4fa1bb2..131ef28 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -32,18 +32,18 @@ $string['go_to_plugin_settings'] = 'Plugin-Einstellungen öffnen'; $string['manual_configuration_continue'] = 'Um alle Plugin-Einstellungen manuell zu setzen, verwenden Sie die Schaltfläche "Weiter" am Ende dieser Seite.'; -// Capabilities +// Capabilities. $string['quiz_archiver:view'] = 'Quiz Archiver Berichtsseite anzeigen'; $string['quiz_archiver:archive'] = 'Erstellen und Löschen von Testarchiven'; $string['quiz_archiver:use_webservice'] = 'Webservice des Quiz Archivers nutzen (lesend und schreibend)'; -// General +// General. $string['quiz_archive'] = 'Testarchiv'; $string['quiz_archive_details'] = 'Details des Testarchivs'; $string['quiz_archive_not_found'] = 'Testarchiv nicht gefunden'; $string['quiz_archive_not_ready'] = 'Testarchiv noch nicht bereit'; -// Template: Overview +// Template: Overview. $string['archived'] = 'Archiviert'; $string['users_with_attempts'] = 'Nutzende mit Versuchen'; $string['archive_autodelete'] = 'Automatische Löschung'; @@ -88,10 +88,10 @@ $string['num_attempts'] = 'Anzahl Testversuche'; $string['error_plugin_is_not_configured'] = 'Fehler: Das Quiz Archiver Plugin ist noch nicht konfiguriert. Bitte kontaktieren Sie Ihren Website-Administrator.'; -// Job creation form: Filename pattern +// Job creation form: Filename pattern. $string['archive_filename_pattern'] = 'Archivname'; $string['archive_filename_pattern_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['archive_filename_pattern_moodle42'] = 'Archivname'; $string['archive_filename_pattern_moodle42_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['archive_filename_pattern_variable_courseid'] = 'Kurs-ID'; @@ -106,7 +106,7 @@ $string['error_invalid_archive_filename_pattern'] = 'Ungültiger Archivname. Bitte korrigieren Sie Ihre Eingabe und versuchen Sie es erneut.'; $string['export_attempts_filename_pattern'] = 'Versuchsname'; $string['export_attempts_filename_pattern_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['export_attempts_filename_pattern_moodle42'] = 'Versuchsname'; $string['export_attempts_filename_pattern_moodle42_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${attemptid}: Versuchs-ID
    • ${username}: Nutzer Anmeldename
    • ${firstname}: Nutzer Vorname
    • ${lastname}: Nutzer Nachname
    • ${timestart}: Versuchsstart (Unix Timestamp)
    • ${timefinish}: Versuchsende (Unix Timestamp)
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Kurs-ID'; @@ -126,7 +126,7 @@ $string['export_attempts_filename_pattern_variable_timestamp'] = 'Aktueller Unix Timestamp'; $string['error_invalid_attempt_filename_pattern'] = 'Ungültiger Versuchsname. Bitte korrigieren Sie Ihre Eingabe und versuchen Sie es erneut.'; -// Job +// Job. $string['delete_artifact'] = 'Testarchiv löschen'; $string['delete_artifact_warning'] = 'Sind Sie sicher, dass Sie dieses Testarchiv inklusive aller archivierten Daten löschen möchten?. Die Metadaten des Archivierungsauftrags werden hierbei nicht gelöscht.'; $string['delete_job'] = 'Archivierungsauftrag löschen'; @@ -143,7 +143,7 @@ $string['job_status_TIMEOUT'] = 'Zeitüberschreitung'; $string['job_status_DELETED'] = 'Gelöscht'; -// Job details +// Job details. $string['archive_already_signed'] = 'Testarchiv ist bereits signiert'; $string['archive_autodelete_deleted'] = 'Testarchive wurde automatisch gelöscht'; $string['archive_autodelete_in'] = 'Testarchiv wird gelöscht in {$a}'; @@ -163,12 +163,12 @@ $string['tsp_query_filename'] = 'query.tsq'; $string['tsp_reply_filename'] = 'reply.tsr'; -// TimeStampProtocolClient +// TimeStampProtocolClient. $string['tsp_client_error_content_type'] = 'TSP Server hat einen unerwarteten Content-Type {$a} zurückgegeben'; $string['tsp_client_error_curl'] = 'Fehler beim senden des TSP Requests: {$a}'; $string['tsp_client_error_http_code'] = 'TSP Server hat unerwarteten HTTP Statuscode {$a} zurückgegeben'; -// Settings +// Settings. $string['setting_autoconfigure'] = 'Automatische Konfiguration'; $string['setting_header_archive_worker'] = 'Archive Worker Service'; $string['setting_header_archive_worker_desc'] = 'Konfiguration des Archive Worker Services und des Moodle Webservices.'; @@ -193,12 +193,12 @@ $string['setting_worker_url'] = 'Archive Worker URL'; $string['setting_worker_url_desc'] = 'URL des Archive Worker Services, der für die Ausführung von Archivierungsaufträgen genutzt wird.
    Beispiel: http://127.0.0.1:8080 oder http://moodle-quiz-archive-worker:8080'; -// Errors +// Errors. $string['error_worker_connection_failed'] = 'Verbindung zum Archive Worker fehlgeschlagen.'; $string['error_worker_reported_error'] = 'Der Archive Worker hat einen Fehler gemeldet: {$a}'; $string['error_worker_unknown'] = 'Ein unbekannter Fehler ist beim Senden des Auftrags zum Archive Worker aufgetreten.'; -// Privacy +// Privacy. $string['privacy:metadata:core_files'] = 'Das Quiz Archiver Plugin speichert erstellte Testarchive im Moodle Dateisystem.'; $string['privacy:metadata:quiz_archiver_jobs'] = 'Metadaten über erstellte Testarchive.'; $string['privacy:metadata:quiz_archiver_jobs:courseid'] = 'ID des Kurses der zu einem Testarchiv gehört.'; @@ -216,7 +216,7 @@ $string['privacy:metadata:quiz_archiver_tsp:timestampquery'] = 'Die TimestampQuery, der an den TSP Server gesendet wurde.'; $string['privacy:metadata:quiz_archiver_tsp:timestampreply'] = 'Die TimestampReply, die vom TSP Server empfangen wurde.'; -// Tasks +// Tasks. $string['task_cleanup_temp_files'] = 'Bereinigen temporärer Dateien'; $string['task_cleanup_temp_files_start'] = 'Räume temporäre Dateien auf ...'; $string['task_cleanup_temp_files_report'] = '{$a} temporäre Dateien gelöscht.'; @@ -225,7 +225,7 @@ $string['task_autodelete_job_artifacts_start'] = 'Lösche abgelaufene Testarchive ...'; $string['task_autodelete_job_artifacts_report'] = '{$a} Testarchive gelöscht.'; -// Autoinstall +// Autoinstall. $string['autoinstall_already_configured'] = 'Plugin ist bereits konfiguriert'; $string['autoinstall_already_configured_long'] = 'Das Quiz Archiver Plugin ist bereits konfiguriert. Eine erneute automatische Konfiguration ist nicht möglich.'; $string['autoinstall_cancelled'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde abgebrochen. Es wurden keine Einstellungen verändert.'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 42895fd..195b517 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -32,18 +32,18 @@ $string['go_to_plugin_settings'] = 'Go to plugin settings'; $string['manual_configuration_continue'] = 'To manually configure all plugin settings use the "Continue" button at the bottom of this page.'; -// Capabilities +// Capabilities. $string['quiz_archiver:view'] = 'View quiz archiver report page'; $string['quiz_archiver:archive'] = 'Create and delete quiz archives'; $string['quiz_archiver:use_webservice'] = 'Use the quiz archiver webservice (read and write)'; -// General +// General. $string['quiz_archive'] = 'Quiz archive'; $string['quiz_archive_details'] = 'Quiz archive details'; $string['quiz_archive_not_found'] = 'Quiz archive not found'; $string['quiz_archive_not_ready'] = 'Quiz archive not ready yet'; -// Template: Overview +// Template: Overview. $string['archived'] = 'Archived'; $string['users_with_attempts'] = 'Users with quiz attempts'; $string['archive_autodelete'] = 'Automatic deletion'; @@ -88,10 +88,10 @@ $string['num_attempts'] = 'Number of attempts'; $string['error_plugin_is_not_configured'] = 'Error: The quiz archiver plugin is not configured yet. Please contact your site administrator.'; -// Job creation form: Filename pattern +// Job creation form: Filename pattern. $string['archive_filename_pattern'] = 'Archive name'; $string['archive_filename_pattern_help'] = 'Name of the generated quiz archive. Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
      {$a->variables}
    Forbidden characters: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['archive_filename_pattern_moodle42'] = 'Archive name'; $string['archive_filename_pattern_moodle42_help'] = 'Name of the generated quiz archive. Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
    • ${courseid}: Course ID
    • ${coursename}: Course name
    • ${courseshortname}: Course short name
    • ${cmid}: Course module ID
    • ${quizid}: Quiz ID
    • ${quizname}: Quiz name
    • ${date}: Current date (YYYY-MM-DD)
    • ${time}: Current time (HH-MM-SS)
    • ${timestamp}: Current unix timestamp
    Forbidden characters: \/.:;*?!"<>|'; $string['archive_filename_pattern_variable_courseid'] = 'Course ID'; @@ -106,7 +106,7 @@ $string['error_invalid_archive_filename_pattern'] = 'Invalid archive filename pattern. Please correct your input and try again.'; $string['export_attempts_filename_pattern'] = 'Report name'; $string['export_attempts_filename_pattern_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
      {$a->variables}
    Forbidden characters: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['export_attempts_filename_pattern_moodle42'] = 'Report name'; $string['export_attempts_filename_pattern_moodle42_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
    • ${courseid}: Course ID
    • ${coursename}: Course name
    • ${courseshortname}: Course short name
    • ${cmid}: Course module ID
    • ${quizid}: Quiz ID
    • ${quizname}: Quiz name
    • ${attemptid}: Attempt ID
    • ${username}: Student username
    • ${firstname}: Student first name
    • ${lastname}: Student last name
    • ${timestart}: Attempt start unix timestamp
    • ${timefinish}: Attempt finish unix timestamp
    • ${date}: Current date (YYYY-MM-DD)
    • ${time}: Current time (HH-MM-SS)
    • ${timestamp}: Current unix timestamp
    Forbidden characters: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Course ID'; @@ -126,7 +126,7 @@ $string['export_attempts_filename_pattern_variable_timestamp'] = 'Current unix timestamp'; $string['error_invalid_attempt_filename_pattern'] = 'Invalid attempt report filename pattern. Please correct your input and try again.'; -// Job +// Job. $string['delete_artifact'] = 'Delete quiz archive'; $string['delete_artifact_warning'] = 'Are you sure that you want to delete this quiz archive and therefore all archived data?. The job metadate will be kept.'; $string['delete_job'] = 'Delete archive job'; @@ -143,7 +143,7 @@ $string['job_status_TIMEOUT'] = 'Timeout'; $string['job_status_DELETED'] = 'Deleted'; -// Job details +// Job details. $string['archive_already_signed'] = 'Archive is already signed'; $string['archive_autodelete_deleted'] = 'Archive was automatically deleted'; $string['archive_autodelete_in'] = 'Archive will be deleted in {$a}'; @@ -163,12 +163,12 @@ $string['tsp_query_filename'] = 'query.tsq'; $string['tsp_reply_filename'] = 'reply.tsr'; -// TimeStampProtocolClient +// TimeStampProtocolClient. $string['tsp_client_error_content_type'] = 'TSP server returned unexpected content type {$a}'; $string['tsp_client_error_curl'] = 'Error while sending TSP request: {$a}'; $string['tsp_client_error_http_code'] = 'TSP server returned HTTP status code {$a}'; -// Settings +// Settings. $string['setting_autoconfigure'] = 'Automatic configuration'; $string['setting_header_archive_worker'] = 'Archive Worker Service'; $string['setting_header_archive_worker_desc'] = 'Configuration of the archive worker service and the Moodle web service it uses.'; @@ -193,12 +193,12 @@ $string['setting_worker_url'] = 'Archive worker URL'; $string['setting_worker_url_desc'] = 'URL of the archive worker service to call for quiz archive task execution.
    Example: http://127.0.0.1:8080 or http://moodle-quiz-archive-worker:8080'; -// Errors +// Errors. $string['error_worker_connection_failed'] = 'Establishing a connection to the archive worker failed.'; $string['error_worker_reported_error'] = 'The archive worker reported an error: {$a}'; $string['error_worker_unknown'] = 'An unknown error occurred while enqueueing the job at the remote archive worker.'; -// Privacy +// Privacy. $string['privacy:metadata:core_files'] = 'The quiz archiver plugin stores created quiz archives inside the Moodle file system.'; $string['privacy:metadata:quiz_archiver_jobs'] = 'Metadata about created quiz archives.'; $string['privacy:metadata:quiz_archiver_jobs:courseid'] = 'The course ID of the course the quiz archive belongs to.'; @@ -216,7 +216,7 @@ $string['privacy:metadata:quiz_archiver_tsp:timestampquery'] = 'The timestamp query that was sent to the TSP server.'; $string['privacy:metadata:quiz_archiver_tsp:timestampreply'] = 'The timestamp reply that was received from the TSP server.'; -// Tasks +// Tasks. $string['task_cleanup_temp_files'] = 'Cleanup temporary files'; $string['task_cleanup_temp_files_start'] = 'Cleaning up expired temporary files ...'; $string['task_cleanup_temp_files_report'] = 'Deleted {$a} temporary files.'; @@ -224,7 +224,7 @@ $string['task_autodelete_job_artifacts_start'] = 'Deleting expired quiz archives ...'; $string['task_autodelete_job_artifacts_report'] = 'Deleted {$a} quiz archives.'; -// Autoinstall +// Autoinstall. $string['autoinstall_already_configured'] = 'Plugin is already configured'; $string['autoinstall_already_configured_long'] = 'The Quiz Archiver Plugin is already configured. Automatic configuration is not possible twice.'; $string['autoinstall_cancelled'] = 'The automatic configuration of the Quiz Archiver Plugin was cancelled. No changes were made.'; diff --git a/lib.php b/lib.php index d2913fa..be3034b 100644 --- a/lib.php +++ b/lib.php @@ -50,17 +50,17 @@ function quiz_archiver_pluginfile($course, $cm, $context, $filearea, $args, $for require_capability('quiz/grading:viewstudentnames', $context); require_capability('quiz/grading:viewidnumber', $context); - // Validate course + // Validate course. if ($args[1] !== $course->id) { send_file_not_found(); } - // Try to serve file + // Try to serve file. $fs = get_file_storage(); $relativepath = implode('/', $args); $fullpath = "/$context->id/".FileManager::COMPONENT_NAME."/$filearea/$relativepath"; - // Catch virtual files + // Catch virtual files. if (FileManager::filearea_is_virtual($filearea)) { try { $fm = new FileManager($args[1], $args[2], $args[3]); @@ -70,7 +70,7 @@ function quiz_archiver_pluginfile($course, $cm, $context, $filearea, $args, $for } } - // Try to serve physical files + // Try to serve physical files. $file = $fs->get_file_by_hash(sha1($fullpath)); if (!$file || $file->is_directory()) { send_file_not_found(); diff --git a/patch_401_class_renames.php b/patch_401_class_renames.php index 024b11d..95d0605 100644 --- a/patch_401_class_renames.php +++ b/patch_401_class_renames.php @@ -32,9 +32,9 @@ require_once($CFG->dirroot.'/mod/quiz/locallib.php'); require_once($CFG->dirroot.'/lib/external/externallib.php'); - // Patch renamed classes + // Patch renamed classes. foreach ([ - // External API + // External API. 'external_api' => 'core_external\external_api', 'external_description' => 'core_external\external_description', 'external_files' => 'core_external\files', @@ -48,7 +48,7 @@ 'external_warnings' => 'core_external\external_warnings', 'restricted_context_exception' => 'core_external\restricted_context_exception', - // mod_quiz + // Module: mod_quiz. 'quiz_default_report' => 'mod_quiz\local\reports\report_base', 'quiz_attempt' => 'mod_quiz\quiz_attempt', 'mod_quiz_display_options' => 'mod_quiz\question\display_options', diff --git a/report.php b/report.php index f3119f5..84cd97c 100644 --- a/report.php +++ b/report.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 +// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use mod_quiz\local\reports\report_base; @@ -96,7 +96,7 @@ public function display($quiz, $cm, $course): bool { 'jobOverviewTable' => "", ]; - // Handle job delete form + // Handle job delete form. if (optional_param('action', null, PARAM_TEXT) === 'delete_job') { $jobdeleteform = new job_delete_form(); @@ -108,7 +108,7 @@ public function display($quiz, $cm, $course): bool { // Check permissions. require_capability('mod/quiz_archiver:delete', $this->context); - // Execute deletion + // Execute deletion. $formdata = $jobdeleteform->get_data(); ArchiveJob::get_by_jobid($formdata->jobid)->delete(); } else { @@ -117,7 +117,7 @@ public function display($quiz, $cm, $course): bool { } } - // Handle artifact delete form + // Handle artifact delete form. if (optional_param('action', null, PARAM_TEXT) === 'delete_artifact') { $arfifactdeleteform = new artifact_delete_form(); @@ -129,7 +129,7 @@ public function display($quiz, $cm, $course): bool { // Check permissions. require_capability('mod/quiz_archiver:delete', $this->context); - // Execute deletion + // Execute deletion. $formdata = $arfifactdeleteform->get_data(); ArchiveJob::get_by_jobid($formdata->jobid)->delete_artifact(); } else { @@ -138,7 +138,7 @@ public function display($quiz, $cm, $course): bool { } } - // Handle job sign form + // Handle job sign form. if (optional_param('action', null, PARAM_TEXT) === 'sign_job') { $jobsignform = new job_sign_form(); @@ -150,7 +150,7 @@ public function display($quiz, $cm, $course): bool { // Check permissions. require_capability('mod/quiz_archiver:create', $this->context); - // Execute signing + // Execute signing. $formdata = $jobsignform->get_data(); $tspmanager = ArchiveJob::get_by_jobid($formdata->jobid)->tspmanager(); $jobidlogstr = ' ('.get_string('jobid', 'quiz_archiver').': '.$formdata->jobid.')'; @@ -188,7 +188,7 @@ public function display($quiz, $cm, $course): bool { } } - // Determine page to display + // Determine page to display. if (!quiz_has_questions($quiz->id)) { $tplctx['quizMissingSomethingWarning'] = quiz_no_questions_message($quiz, $cm, $this->context); } else { @@ -201,7 +201,7 @@ public function display($quiz, $cm, $course): bool { } } - // Archive quiz form + // Archive quiz form. if (!array_key_exists('quizMissingSomethingWarning', $tplctx)) { $archivequizform = new archive_quiz_form( $this->quiz->name, @@ -239,7 +239,7 @@ public function display($quiz, $cm, $course): bool { ]; } - // Do not print job overview table if job creation failed + // Do not print job overview table if job creation failed. if ($job == null) { unset($tplctx['jobOverviewTable']); } @@ -248,9 +248,9 @@ public function display($quiz, $cm, $course): bool { } } - // Job overview table + // Job overview table. if (array_key_exists('jobOverviewTable', $tplctx)) { - // Generate table + // Generate table. $jobtbl = new job_overview_table('job_overview_table', $this->course->id, $this->cm->id, $this->quiz->id); $jobtbl->define_baseurl($this->base_url()); ob_start(); @@ -259,9 +259,9 @@ public function display($quiz, $cm, $course): bool { ob_end_clean(); $tplctx['jobOverviewTable'] = $jobtblhtml; - // Prepare job metadata for job detail modals + // Prepare job metadata for job detail modals. $tplctx['jobs'] = array_map(function($jm): array { - // Generate action URLs + // Generate action URLs. $jm['action_urls'] = [ 'delete_job' => (new moodle_url($this->base_url(), [ 'id' => optional_param('id', null, PARAM_INT), @@ -292,7 +292,7 @@ public function display($quiz, $cm, $course): bool { ]))->out(), ]; - // Inject global TSP settings + // Inject global TSP settings. $jm['tsp_enabled'] = ($this->config->tsp_enable == true); // Moodle stores checkbox values as '0' and '1'. Mustache interprets '0' as true. return [ @@ -302,12 +302,12 @@ public function display($quiz, $cm, $course): bool { }, ArchiveJob::get_metadata_for_jobs($this->course->id, $this->cm->id, $this->quiz->id)); } - // Housekeeping for jobs associated with this quiz + // Housekeeping for jobs associated with this quiz. foreach (ArchiveJob::get_jobs($this->course->id, $this->cm->id, $this->quiz->id) as $job) { $job->timeout_if_overdue($this->config->job_timeout_min); } - // Render output + // Render output. echo $OUTPUT->render_from_template('quiz_archiver/overview', $tplctx); return true; @@ -348,14 +348,14 @@ protected function initiate_archive_job( // Check permissions. require_capability('mod/quiz_archiver:create', $this->context); - // Check if webservice is configured properly + // Check if webservice is configured properly. if (autoinstall::plugin_is_unconfigured()) { throw new \RuntimeException(get_string('error_plugin_is_not_configured', 'quiz_archiver')); } - // Create temporary webservice token + // Create temporary webservice token. if ($CFG->branch > 401 && class_exists('core_external\util')) { - // Moodle 4.2 and above + // Moodle 4.2 and above. $wstoken = core_external\util::generate_token( EXTERNAL_TOKEN_PERMANENT, core_external\util::get_service_by_id($this->config->webservice_id), @@ -365,8 +365,8 @@ protected function initiate_archive_job( 0 ); } else { - // Moodle 4.1 and below - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 + // Moodle 4.1 and below. + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $wstoken = external_generate_token( EXTERNAL_TOKEN_PERMANENT, $this->config->webservice_id, @@ -377,10 +377,10 @@ protected function initiate_archive_job( ); } - // Get attempt metadata + // Get attempt metadata. $attempts = $this->report->get_attempts(); - // Prepare task: Export quiz attempts + // Prepare task: Export quiz attempts. $taskarchivequizattempts = null; if ($exportattempts) { $taskarchivequizattempts = [ @@ -393,7 +393,7 @@ protected function initiate_archive_job( ]; } - // Prepare task: Moodle backups + // Prepare task: Moodle backups. $taskmoodlebackups = null; if ($exportquizbackup || $exportcoursebackup) { $taskmoodlebackups = []; @@ -407,7 +407,7 @@ protected function initiate_archive_job( } } - // Generate job settings array + // Generate job settings array. $jobsettings = []; $jobsettings['num_attempts'] = count($attempts); $jobsettings['export_attempts'] = $exportattempts; @@ -423,7 +423,7 @@ protected function initiate_archive_job( $jobsettings['archive_retention_time'] = util::duration_to_human_readable($retentionseconds); } - // Request archive worker + // Request archive worker. $worker = new RemoteArchiveWorker(rtrim($this->config->worker_url, '/').'/archive', 10, 20); try { $jobmetadata = $worker->enqueue_archive_job( @@ -438,7 +438,7 @@ protected function initiate_archive_job( $taskmoodlebackups, ); - // Persist job in database + // Persist job in database. $job = ArchiveJob::create( $jobmetadata->jobid, $this->course->id, @@ -452,7 +452,7 @@ protected function initiate_archive_job( $jobmetadata->status ); - // Link all temporary files to be created, if present + // Link all temporary files to be created, if present. if ($taskmoodlebackups) { foreach ($taskmoodlebackups as $task) { $job->link_temporary_file($task->pathnamehash); diff --git a/settings.php b/settings.php index b2e1fee..84ac995 100644 --- a/settings.php +++ b/settings.php @@ -41,13 +41,13 @@ // phpcs:ignore Generic.CodeAnalysis.EmptyStatement.DetectedIf if ($ADMIN->fulltree) { - // Descriptive text + // Descriptive text. $settings->add(new admin_setting_heading('quiz_archiver/header_docs', null, get_string('setting_header_docs_desc', 'quiz_archiver') )); - // Autoinstall + // Autoinstall. if (autoinstall::plugin_is_unconfigured()) { $autoinstallurl = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); $autoinstalldesc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; @@ -60,7 +60,7 @@ $autoinstalldesc )); - // Generic settings + // Generic settings. $settings->add(new admin_setting_heading('quiz_archiver/header_archive_worker', get_string('setting_header_archive_worker', 'quiz_archiver'), get_string('setting_header_archive_worker_desc', 'quiz_archiver') @@ -101,7 +101,7 @@ PARAM_TEXT )); - // Job Presets + // Job Presets. $settings->add(new admin_setting_heading('quiz_archiver/header_job_presets', get_string('setting_header_job_presets', 'quiz_archiver'), get_string('setting_header_job_presets_desc', 'quiz_archiver'), @@ -211,7 +211,7 @@ $set->add_dependent_on('quiz_archiver/job_preset_archive_autodelete'); $settings->add($set); - // Time-Stamp Protocol settings + // Time-Stamp Protocol settings. $settings->add(new admin_setting_heading('quit_archiver/header_tsp', get_string('setting_header_tsp', 'quiz_archiver'), get_string('setting_header_tsp_desc', 'quiz_archiver') diff --git a/tests/ArchiveJob_test.php b/tests/ArchiveJob_test.php index cf1d872..d8310d4 100644 --- a/tests/ArchiveJob_test.php +++ b/tests/ArchiveJob_test.php @@ -39,10 +39,10 @@ class ArchiveJob_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -118,7 +118,7 @@ protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, public function test_create_archive_job(): void { global $DB; - // Create new archive job + // Create new archive job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', @@ -132,7 +132,7 @@ public function test_create_archive_job(): void { $mocks->settings ); - // Check that the job was created + // Check that the job was created. $this->assertNotNull($job, 'Job was not created'); $this->assertEquals( $job, @@ -140,10 +140,10 @@ public function test_create_archive_job(): void { 'Job was not found in database' ); - // Check that the job has the correct settings + // Check that the job has the correct settings. $this->assertEquals($mocks->settings, $job->get_settings(), 'Job settings were not stored correctly'); - // Check if attempt ids were stored correctly + // Check if attempt ids were stored correctly. $this->assertEqualsCanonicalizing( array_values($mocks->attempts), array_values($DB->get_records(ArchiveJob::ATTEMPTS_TABLE_NAME, ['jobid' => $job->get_id()], '', 'userid, attemptid')), @@ -160,7 +160,7 @@ public function test_create_archive_job(): void { public function test_delete_archive_job(): void { global $DB; - // Create new archive job + // Create new archive job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', @@ -174,24 +174,24 @@ public function test_delete_archive_job(): void { $mocks->settings ); - // Delete the job but remember its ID + // Delete the job but remember its ID. $this->assertNotNull(ArchiveJob::get_by_jobid('20000000-1234-5678-abcd-ef4242424242')); $jobid = $job->get_id(); $job->delete(); - // Confirm that the job was deleted + // Confirm that the job was deleted. $this->assertEmpty( $DB->get_records(ArchiveJob::JOB_TABLE_NAME, ['jobid' => $jobid]), 'Job was not deleted from database' ); - // Confirm that the attempt ids were deleted + // Confirm that the attempt ids were deleted. $this->assertEmpty( $DB->get_records(ArchiveJob::ATTEMPTS_TABLE_NAME, ['jobid' => $jobid]), 'Attempt ids were not deleted from database' ); - // Confirm that the settings were deleted + // Confirm that the settings were deleted. $this->assertEmpty( $DB->get_records(ArchiveJob::JOB_SETTINGS_TABLE_NAME, ['jobid' => $jobid]), 'Settings were not deleted from database' @@ -208,14 +208,14 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { global $DB; $this->resetAfterTest(); - // Generate data + // Generate data. $mocks = []; $jobs = []; $artifacts = []; for ($quizidx = 0; $quizidx < 3; $quizidx++) { $mocks[$quizidx] = $this->generate_mock_quiz(); for ($jobidx = 0; $jobidx < 3; $jobidx++) { - // Create job + // Create job. $jobs[$quizidx][$jobidx] = ArchiveJob::create( '30000000-1234-5678-abcd-'.$quizidx.'0000000000'.$jobidx, $mocks[$quizidx]->course->id, @@ -228,7 +228,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $mocks[$quizidx]->settings ); - // Attach artifact + // Attach artifact. $artifacts[$quizidx][$jobidx] = $this->generate_artifact_file( $mocks[$quizidx]->course->id, $mocks[$quizidx]->quiz->cmid, @@ -240,7 +240,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { hash('sha256', 'foo bar baz') ); - // Generate mock TSP data + // Generate mock TSP data. $DB->insert_record(TSPManager::TSP_TABLE_NAME, [ 'jobid' => $jobs[$quizidx][$jobidx]->get_id(), 'timecreated' => time(), @@ -251,7 +251,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { } } - // Find jobs in database + // Find jobs in database. foreach ($mocks as $quizidx => $mock) { $this->assertEqualsCanonicalizing( array_values($jobs[$quizidx]), @@ -260,32 +260,32 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { ); } - // Test metadata retrieval + // Test metadata retrieval. foreach ($mocks as $quizidx => $mock) { $metadata = ArchiveJob::get_metadata_for_jobs($mock->course->id, $mock->quiz->cmid, $mock->quiz->id); - // Check that the metadata array contains the correct number of jobs + // Check that the metadata array contains the correct number of jobs. $this->assertSameSize( $jobs[$quizidx], $metadata, 'Metadata for quiz '.$quizidx.' does not contain the correct number of jobs' ); - // Check that the metadata array contains the correct data + // Check that the metadata array contains the correct data. foreach ($jobs[$quizidx] as $jobidx => $expectedjob) { - // Find job in metadata array + // Find job in metadata array. $actualjobs = array_filter($metadata, function ($metadata) use ($expectedjob) { return $metadata['id'] == $expectedjob->get_id(); }); - // Assure that job was found + // Assure that job was found. $this->assertCount( 1, $actualjobs, 'Metadata for job '.$jobidx.' of quiz '.$quizidx.' could not uniquely be identified' ); - // Probe that the metadata contains the correct data + // Probe that the metadata contains the correct data. $actualjob = array_pop($actualjobs); $this->assertEquals($expectedjob->get_jobid(), $actualjob['jobid'], 'Jobid was not returned correctly'); $this->assertEquals($expectedjob->get_courseid(), $actualjob['course']['id'], 'Courseid was not returned correctly'); @@ -297,7 +297,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $this->assertArrayHasKey('autodelete_str', $actualjob, 'Autodelete string was not generated correctly'); $this->assertSameSize($expectedjob->get_settings(), $actualjob['settings'], 'Settings were not returned correctly'); - // Check that the artifact file metadata was returned correctly + // Check that the artifact file metadata was returned correctly. $this->assertArrayHasKey('artifactfile', $actualjob, 'Artifact file metadata was not returned'); $this->assertEquals($artifacts[$quizidx][$jobidx]->get_filename(), $actualjob['artifactfile']['name'], 'Artifact filename was not returned correctly'); $this->assertEquals($artifacts[$quizidx][$jobidx]->get_filesize(), $actualjob['artifactfile']['size'], 'Artifact size was not returned correctly'); @@ -305,7 +305,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $this->assertNotEmpty($actualjob['artifactfile']['size_human'], 'Artifact size in human readable format was not returned'); $this->assertEquals(hash('sha256', 'foo bar baz'), $actualjob['artifactfile']['checksum'], 'Artifact checksum was not returned correctly'); - // Check that the TSP data was returned correctly + // Check that the TSP data was returned correctly. $this->assertArrayHasKey('tsp', $actualjob, 'TSP data was not returned'); $this->assertEquals('localhost', $actualjob['tsp']['server'], 'TSP server was not returned correctly'); $this->assertNotEmpty($actualjob['tsp']['timecreated'], 'TSP creation time was not returned'); @@ -323,7 +323,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { * @throws \moodle_exception */ public function test_set_job_status(): void { - // Job statuses to test and whether they should be considered completed + // Job statuses to test and whether they should be considered completed. $statusesandcompletion = [ ArchiveJob::STATUS_UNKNOWN => false, ArchiveJob::STATUS_UNINITIALIZED => false, @@ -335,7 +335,7 @@ public function test_set_job_status(): void { ArchiveJob::STATUS_DELETED => true, ]; - // Create test job + // Create test job. $mocks = $this->generate_mock_quiz(); $expectedjob = ArchiveJob::create( '40000000-1234-5678-abcd-ef4242424242', @@ -350,14 +350,14 @@ public function test_set_job_status(): void { ArchiveJob::STATUS_UNINITIALIZED ); - // Initial job status + // Initial job status. $this->assertEquals( ArchiveJob::STATUS_UNINITIALIZED, ArchiveJob::get_by_jobid('40000000-1234-5678-abcd-ef4242424242')->get_status(), 'Initial job status was not set correctly' ); - // Test status changes + // Test status changes. foreach ($statusesandcompletion as $status => $completion) { $expectedjob->set_status($status); $actualjob = ArchiveJob::get_by_jobid('40000000-1234-5678-abcd-ef4242424242'); @@ -374,7 +374,7 @@ public function test_set_job_status(): void { * @throws \moodle_exception */ public function test_wstoken_access_checks(): void { - // Generate test data + // Generate test data. $wstokens = [ md5('TEST-WS-TOKEN-1'), md5('TEST-WS-TOKEN-2'), @@ -384,7 +384,7 @@ public function test_wstoken_access_checks(): void { ]; $mocks = $this->generate_mock_quiz(); - // Create jobs and test all tokens against each job + // Create jobs and test all tokens against each job. foreach ($wstokens as $wstoken) { $job = ArchiveJob::create( 'xxx-'.$wstoken, @@ -398,7 +398,7 @@ public function test_wstoken_access_checks(): void { $mocks->settings ); - // Validate token access + // Validate token access. foreach ($wstokens as $otherwstoken) { $this->assertSame( $wstoken === $otherwstoken, @@ -417,17 +417,17 @@ public function test_wstoken_access_checks(): void { * @throws \moodle_exception */ public function test_delete_webservice_token(): void { - // Create temporary webservice token + // Create temporary webservice token. global $CFG, $DB; if ($CFG->branch <= 401) { - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025 + // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/lib/externallib.php'); $wstoken = \external_generate_token(EXTERNAL_TOKEN_PERMANENT, 1, 1, context_system::instance(), time() + 3600, 0); } else { $wstoken = \core_external\util::generate_token(EXTERNAL_TOKEN_PERMANENT, \core_external\util::get_service_by_id(1), 1, context_system::instance(), time() + 3600, 0); } - // Create job and test token access + // Create job and test token access. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( 'xxx-'.$wstoken, @@ -454,7 +454,7 @@ public function test_delete_webservice_token(): void { * @throws \moodle_exception */ public function test_job_timeout(): void { - // Prepare job + // Prepare job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '12300000-1234-5678-abcd-ef4242424242', @@ -469,16 +469,16 @@ public function test_job_timeout(): void { ArchiveJob::STATUS_RUNNING, ); - // Not timed out job should not he set to timed out + // Not timed out job should not he set to timed out. $this->assertFalse($job->timeout_if_overdue(60), 'Job seems to have been set to timed out before timeout'); $this->assertSame(ArchiveJob::STATUS_RUNNING, $job->get_status(), 'Job status was changed to timed out before timeout'); - // Time out job - sleep(1); // Ensure that at least one second has passed + // Time out job. + sleep(1); // Ensure that at least one second has passed. $this->assertTrue($job->timeout_if_overdue(0), 'Job seems to have not been set to timed out after timeout'); $this->assertSame(ArchiveJob::STATUS_TIMEOUT, $job->get_status(), 'Job status was not changed to timed out after timeout'); - // Do not timeout a finished job + // Do not timeout a finished job. $job->set_status(ArchiveJob::STATUS_FINISHED); $this->assertFalse($job->timeout_if_overdue(0), 'Finished job seems to have been set to timed out'); $this->assertSame(ArchiveJob::STATUS_FINISHED, $job->get_status(), 'Finished job was changed to timed out'); @@ -494,7 +494,7 @@ public function test_job_timeout(): void { * @throws \stored_file_creation_exception */ public function test_artifact_linking(): void { - // Create test job + // Create test job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '60000000-1234-5678-abcd-ef4242424242', @@ -510,12 +510,12 @@ public function test_artifact_linking(): void { $this->assertNull($job->get_artifact(), 'Job artifact file was not null before linking'); $this->assertFalse($job->has_artifact(), 'New job believes that it has an artifact file'); - // Create and link artifact file + // Create and link artifact file. $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); - // Check that the artifact file was linked correctly + // Check that the artifact file was linked correctly. $this->assertTrue($job->has_artifact(), 'Job artifact file was not linked'); $this->assertEquals($artifact, $job->get_artifact(), 'Linked artifact file differs from original'); $this->assertSame($sha256dummy, $job->get_artifact_checksum(), 'Artifact checksum was not stored correctly'); @@ -531,7 +531,7 @@ public function test_artifact_linking(): void { * @throws \stored_file_creation_exception */ public function test_artifact_deletion(): void { - // Create test job and link dummy artifact file + // Create test job and link dummy artifact file. $mocks = $this->generate_mock_quiz(); $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $job = ArchiveJob::create( @@ -547,7 +547,7 @@ public function test_artifact_deletion(): void { ); $job->link_artifact($artifact->get_id(), hash('sha256', 'foo bar baz')); - // Delete artifact and ensure that the underlying file was delete correctly + // Delete artifact and ensure that the underlying file was delete correctly. $job->delete_artifact(); $this->assertNull($job->get_artifact(), 'Job still returned an artifact file after deletion'); $this->assertFalse($job->has_artifact(), 'Job believes it still has an artifact file'); @@ -565,7 +565,7 @@ public function test_artifact_deletion(): void { * @throws \stored_file_creation_exception */ public function test_delete_expired_artifacts(): void { - // Create test job that instantly expires and link dummy artifact file + // Create test job that instantly expires and link dummy artifact file. $mocks = $this->generate_mock_quiz(); $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); $job = ArchiveJob::create( @@ -581,7 +581,7 @@ public function test_delete_expired_artifacts(): void { ); $job->link_artifact($artifact->get_id(), hash('sha256', 'foo bar baz')); - // Ensure that the artifact is present + // Ensure that the artifact is present. $this->assertTrue($job->has_artifact(), 'Job does not have an artifact file'); $this->assertSame(1, ArchiveJob::delete_expired_artifacts(), 'Unexpected number of artifacts were reported as deleted'); $this->assertFalse($job->has_artifact(), 'Job still has an artifact file after deletion'); @@ -596,7 +596,7 @@ public function test_delete_expired_artifacts(): void { * @throws \moodle_exception */ public function test_artifact_checksum_non_existing(): void { - // Generate data + // Generate data. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '99000000-1234-5678-abcd-ef4242424242', @@ -610,7 +610,7 @@ public function test_artifact_checksum_non_existing(): void { $mocks->settings ); - // Check that the artifact checksum is null for non-existing artifacts + // Check that the artifact checksum is null for non-existing artifacts. $this->assertNull($job->get_artifact_checksum(), 'Artifact checksum was not null for non-existing artifact'); } @@ -624,7 +624,7 @@ public function test_artifact_checksum_non_existing(): void { * @throws \stored_file_creation_exception */ public function test_temporary_file_linking(): void { - // Generate data + // Generate data. $mocks = $this->generate_mock_quiz(); $tmpfiles = [ $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), @@ -632,7 +632,7 @@ public function test_temporary_file_linking(): void { $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), ]; - // Create job + // Create job. $job = ArchiveJob::create( '90000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -645,10 +645,10 @@ public function test_temporary_file_linking(): void { $mocks->settings ); - // Ensure no temporary files are linked + // Ensure no temporary files are linked. $this->assertEmpty($job->get_temporary_files(), 'Job returned temporary files before linking'); - // Link files and check that they were linked correctly + // Link files and check that they were linked correctly. foreach ($tmpfiles as $tmpfile) { $job->link_temporary_file($tmpfile->get_pathnamehash()); } @@ -669,7 +669,7 @@ public function test_temporary_file_linking(): void { * @throws \stored_file_creation_exception */ public function test_temporary_file_deletion(): void { - // Generate data + // Generate data. $mocks = $this->generate_mock_quiz(); $tmpfiles = [ $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), @@ -677,7 +677,7 @@ public function test_temporary_file_deletion(): void { $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), ]; - // Create job and link files + // Create job and link files. $job = ArchiveJob::create( 'a0000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -693,7 +693,7 @@ public function test_temporary_file_deletion(): void { $job->link_temporary_file($tmpfile->get_pathnamehash()); } - // Ensure link state, delete and check + // Ensure link state, delete and check. $this->assertCount(3, $job->get_temporary_files(), 'Job did not link all temporary files'); $job->delete_temporary_files(); @@ -841,11 +841,11 @@ function ($carry, $item) { * @throws \invalid_parameter_exception */ public function test_generate_archive_filename(): void { - // Generate data + // Generate data. $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); - // Full pattern + // Full pattern. $fullpattern = 'archive'; foreach (ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES as $var) { $fullpattern .= '-${'.$var.'}'; @@ -872,11 +872,11 @@ public function test_generate_archive_filename(): void { * @throws \invalid_parameter_exception */ public function test_generate_archive_filename_without_variables(): void { - // Generate data + // Generate data. $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); - // Full pattern + // Full pattern. $filename = ArchiveJob::generate_archive_filename( $mocks->course, $cm, @@ -894,11 +894,11 @@ public function test_generate_archive_filename_without_variables(): void { * @throws \invalid_parameter_exception */ public function test_generate_archive_filename_invalid_pattern(): void { - // Generate data + // Generate data. $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); - // Test filename generation + // Test filename generation. $this->expectException(\invalid_parameter_exception::class); ArchiveJob::generate_archive_filename( $mocks->course, @@ -916,11 +916,11 @@ public function test_generate_archive_filename_invalid_pattern(): void { * @throws \invalid_parameter_exception */ public function test_generate_archive_filename_invalid_variables(): void { - // Generate data + // Generate data. $mocks = $this->generate_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); - // Test filename generation + // Test filename generation. $this->expectException(\invalid_parameter_exception::class); $filename = ArchiveJob::generate_archive_filename( $mocks->course, diff --git a/tests/BackupManager_test.php b/tests/BackupManager_test.php index e995b1f..6084d10 100644 --- a/tests/BackupManager_test.php +++ b/tests/BackupManager_test.php @@ -39,10 +39,10 @@ class BackupManager_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -88,13 +88,13 @@ protected function generate_mock_quiz(): \stdClass { * @throws \dml_exception */ public function test_course_backup(): void { - // Initiate a mock course backup + // Initiate a mock course backup. $this->setAdminUser(); $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $backup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); - // Check if the backup was created correctly + // Check if the backup was created correctly. $this->assertNotEmpty($backup, 'Backup was not created'); $this->assertNotEmpty($backup->backupid, 'Backup ID was not set'); $this->assertEquals($mock->user->id, $backup->userid, 'User ID was not set correctly'); @@ -116,13 +116,13 @@ public function test_course_backup(): void { * @throws \dml_exception */ public function test_quiz_backup(): void { - // Initiate a mock course backup + // Initiate a mock course backup. $this->setAdminUser(); $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $backup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); - // Check if the backup was created correctly + // Check if the backup was created correctly. $this->assertNotEmpty($backup, 'Backup was not created'); $this->assertNotEmpty($backup->backupid, 'Backup ID was not set'); $this->assertEquals($mock->user->id, $backup->userid, 'User ID was not set correctly'); @@ -230,21 +230,21 @@ public function test_backup_download_url_generation_with_internal_wwwroot(): voi * @throws \dml_exception */ public function test_initialization_by_existing_backupid(): void { - // Prepare a course and a quiz backup + // Prepare a course and a quiz backup. $this->setAdminUser(); $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); - // Course backup + // Course backup. $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); $this->assertNotEmpty($actualcoursebackup, 'Course backup was not created correctly from backup ID'); $this->assertEquals($expectedcoursebackup->backupid, $actualcoursebackup->get_backupid(), 'Course backup ID was not set correctly'); $this->assertEquals($expectedcoursebackup->userid, $actualcoursebackup->get_userid(), 'Course user ID was not set correctly'); $this->assertSame(backup::TYPE_1COURSE, $actualcoursebackup->get_type(), 'Course backup type was not set correctly'); - // Quiz backup + // Quiz backup. $actualquizbackup = new BackupManager($expectedquizbackup->backupid); $this->assertNotEmpty($actualquizbackup, 'Quiz backup was not created correctly from backup ID'); $this->assertEquals($expectedquizbackup->backupid, $actualquizbackup->get_backupid(), 'Quiz backup ID was not set correctly'); @@ -272,20 +272,20 @@ public function test_initialization_by_non_existing_backupid(): void { * @throws \dml_exception */ public function test_backup_status(): void { - // Prepare a course and a quiz backup + // Prepare a course and a quiz backup. $this->setAdminUser(); $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); - // Course backup + // Course backup. $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); $this->assertSame(backup::TYPE_1COURSE, $actualcoursebackup->get_type(), 'Course backup type was not retrieved correctly'); $actualcoursebackup->is_finished_successfully(); $actualcoursebackup->is_failed(); - // Quiz backup + // Quiz backup. $actualquizbackup = new BackupManager($expectedquizbackup->backupid); $this->assertSame(backup::TYPE_1ACTIVITY, $actualquizbackup->get_type(), 'Quiz backup type was not retrieved correctly'); $actualquizbackup->is_finished_successfully(); @@ -302,7 +302,7 @@ public function test_backup_status(): void { * @throws \moodle_exception */ public function test_backup_job_association(): void { - // Prepare a course and a quiz backup + // Prepare a course and a quiz backup. $this->setAdminUser(); $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); @@ -320,11 +320,11 @@ public function test_backup_job_association(): void { $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); - // Course backup + // Course backup. $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); $this->assertTrue($actualcoursebackup->is_associated_with_job($job), 'Course backup was not detected as associated with the given job'); - // Quiz backup + // Quiz backup. $actualquizbackup = new BackupManager($expectedquizbackup->backupid); $this->assertTrue($actualquizbackup->is_associated_with_job($job), 'Quiz backup was not detected as associated with the given job'); } @@ -339,7 +339,7 @@ public function test_backup_job_association(): void { * @throws \moodle_exception */ public function test_backup_invalid_job_association(): void { - // Prepare a course and a quiz backup + // Prepare a course and a quiz backup. $this->setAdminUser(); $mock = $this->generate_mock_quiz(); $mock->user = get_admin(); @@ -357,11 +357,11 @@ public function test_backup_invalid_job_association(): void { $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); - // Course backup + // Course backup. $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); $this->assertFalse($actualcoursebackup->is_associated_with_job($job), 'Course backup was detected as associated with an unrelated job'); - // Quiz backup + // Quiz backup. $actualquizbackup = new BackupManager($expectedquizbackup->backupid); $this->assertFalse($actualquizbackup->is_associated_with_job($job), 'Quiz backup was detected as associated with an unrelated job'); } diff --git a/tests/FileManager_test.php b/tests/FileManager_test.php index af0b3fc..f9df9df 100644 --- a/tests/FileManager_test.php +++ b/tests/FileManager_test.php @@ -37,10 +37,10 @@ class FileManager_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -228,13 +228,13 @@ public function test_artifact_storing(): void { $draftfile = $this->generate_draft_file('testfile.tar.gz'); $draftfilehash = $draftfile->get_contenthash(); - // Store draftfile as artifact + // Store draftfile as artifact. $storedfile = $fm->store_uploaded_artifact($draftfile); $this->assertInstanceOf(\stored_file::class, $storedfile, 'Invalid storage handle returned'); $this->assertEquals($draftfilehash, $storedfile->get_contenthash(), 'Stored file hash does not match draft file hash'); $this->assertEmpty(get_file_storage()->get_file_by_id($draftfile->get_id()), 'Draft file was deleted'); - // Retrieve artifact + // Retrieve artifact. $storedfiles = $fm->get_stored_artifacts(); $this->assertEquals($storedfile, array_shift($storedfiles), 'Stored file handle does not match retrieved file handle'); } @@ -315,7 +315,7 @@ public function test_send_virtual_file_tsp_query(): void { ArchiveJob::STATUS_FINISHED ); - // Generate mock TSP data + // Generate mock TSP data. $DB->insert_record(TSPManager::TSP_TABLE_NAME, [ 'jobid' => $job->get_id(), 'timecreated' => time(), @@ -324,7 +324,7 @@ public function test_send_virtual_file_tsp_query(): void { 'timestampreply' => 'tspreply1', ]); - // Try to send file + // Try to send file. $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); $fm->send_virtual_file( FileManager::TSP_DATA_FILEAREA_NAME, @@ -362,7 +362,7 @@ public function test_send_virtual_file_tsp_reply(): void { ArchiveJob::STATUS_FINISHED ); - // Generate mock TSP data + // Generate mock TSP data. $DB->insert_record(TSPManager::TSP_TABLE_NAME, [ 'jobid' => $job->get_id(), 'timecreated' => time(), @@ -371,7 +371,7 @@ public function test_send_virtual_file_tsp_reply(): void { 'timestampreply' => 'tspreply2', ]); - // Try to send file + // Try to send file. $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); $fm->send_virtual_file( FileManager::TSP_DATA_FILEAREA_NAME, @@ -403,7 +403,7 @@ public function test_send_virtual_files_tsp_invalid_job(): void { ); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Test invalid job + // Test invalid job. $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessageMatches('/resource id/'); $fm->send_virtual_file( @@ -435,7 +435,7 @@ public function test_send_virtual_files_tsp_unsigned_job(): void { ); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Test unsigned job + // Test unsigned job. $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessageMatches('/No TSP data found/'); $fm->send_virtual_file( @@ -454,7 +454,7 @@ public function test_send_virtual_files_invalid_filearea(): void { $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Test invalid filearea + // Test invalid filearea. $this->expectException(\InvalidArgumentException::class); $fm->send_virtual_file('invalid', '/invalid'); } @@ -469,7 +469,7 @@ public function test_send_virtual_files_invalid_path(): void { $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Test invalid path + // Test invalid path. $this->expectException(\InvalidArgumentException::class); $fm->send_virtual_file(FileManager::TSP_DATA_FILEAREA_NAME, '../../42/secrets'); } @@ -484,7 +484,7 @@ public function test_send_virtual_files_invalid_jobid(): void { $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Test invalid job-id + // Test invalid job-id. $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessageMatches('/jobid/'); $fm->send_virtual_file( @@ -503,7 +503,7 @@ public function test_send_virtual_files_missing_job(): void { $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Test missing job + // Test missing job. $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessageMatches('/not found/'); $fm->send_virtual_file( @@ -522,7 +522,7 @@ public function test_send_virtual_files_invalid_filename(): void { $mocks = $this->generate_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Test missing job + // Test missing job. $this->expectException(\InvalidArgumentException::class); $this->expectExceptionMessageMatches('/Invalid filename/'); $fm->send_virtual_file(FileManager::TSP_DATA_FILEAREA_NAME, '/0/0/0/0/secrets'); @@ -539,7 +539,7 @@ public function test_send_virtual_files_invalid_filename(): void { * @throws \stored_file_creation_exception */ public function test_extract_attempt_data_from_artifact(): void { - // Prepare a finished archive job that has a valid artifact file + // Prepare a finished archive job that has a valid artifact file. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000042', @@ -562,7 +562,7 @@ public function test_extract_attempt_data_from_artifact(): void { $storedartifacts = $fm->get_stored_artifacts(); $storedartifact = array_shift($storedartifacts); - // Extract userdata from artifact into temporary stored_file + // Extract userdata from artifact into temporary stored_file. $tempfile = $fm->extract_attempt_data_from_artifact($storedartifact, $job->get_id(), $attemptid); $this->assertNotEmpty($tempfile, 'No temp file was returned'); $this->assertNotEmpty($tempfile->get_contenthash(), 'Temp file has no valid content hash'); @@ -580,7 +580,7 @@ public function test_extract_attempt_data_from_artifact(): void { * @throws \stored_file_creation_exception */ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { - // Prepare a finished archive job that has a valid artifact file + // Prepare a finished archive job that has a valid artifact file. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000021', @@ -600,7 +600,7 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { $storedartifacts = $fm->get_stored_artifacts(); $storedartifact = array_shift($storedartifacts); - // Extract userdata from artifact into temporary stored_file + // Extract userdata from artifact into temporary stored_file. $this->expectException(\moodle_exception::class); $this->expectExceptionMessageMatches('/Attempt not found/'); $fm->extract_attempt_data_from_artifact($storedartifact, $job->get_id(), 9999999); @@ -617,7 +617,7 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { * @throws \stored_file_creation_exception */ public function test_extract_attempt_data_from_invalid_artifact(): void { - // Prepare an unfinished archive job that has no artifact file + // Prepare an unfinished archive job that has no artifact file. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000043', @@ -633,7 +633,7 @@ public function test_extract_attempt_data_from_invalid_artifact(): void { ); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - // Attempt to extract data from nonexisting artifact + // Attempt to extract data from nonexisting artifact. $this->expectException(\moodle_exception::class); $this->expectExceptionMessageMatches('/Error processing archive file/'); $fm->extract_attempt_data_from_artifact($this->generate_draft_file('not-an-artifact.tar.gz'), $job->get_id(), 1337); @@ -648,7 +648,7 @@ public function test_extract_attempt_data_from_invalid_artifact(): void { * @throws \stored_file_creation_exception */ public function test_cleanup_temp_files(): void { - // Prepare tempfiles + // Prepare tempfiles. $overduetempfiles = [ $this->generate_temp_file('tempfile1.tar.gz', 0), $this->generate_temp_file('tempfile2.tar.gz', 0), @@ -660,7 +660,7 @@ public function test_cleanup_temp_files(): void { $this->generate_temp_file('tempfile6.tar.gz', time() + 3600), ]; - // Perform cleanup + // Perform cleanup. FileManager::cleanup_temp_files(); foreach ($overduetempfiles as $file) { diff --git a/tests/Report_test.php b/tests/Report_test.php index a3ffbba..c92f32e 100644 --- a/tests/Report_test.php +++ b/tests/Report_test.php @@ -73,7 +73,7 @@ protected function prepare_reference_course(): \stdClass { $this->resetAfterTest(); $this->setAdminUser(); - // Prepare backup of reference course for restore + // Prepare backup of reference course for restore. $backupid = 'referencequiz'; $backuppath = make_backup_temp_directory($backupid); get_file_packer('application/vnd.moodle.backup')->extract_to_pathname( @@ -100,9 +100,9 @@ protected function prepare_reference_course(): \stdClass { // 2024-05-14: Do not destroy restore_controller. This will drop temptables without removing them from // $DB->temptables properly, causing DB reset to fail in subsequent tests due to missing tables. Destroying the // restore_controller is optional and not necessary for this test. - // $rc->destroy(); + // $rc->destroy();. - // Get course and find the reference quiz + // Get course and find the reference quiz. $course = get_course($rc->get_courseid()); $modinfo = get_fast_modinfo($course); $cms = $modinfo->get_cms(); @@ -204,21 +204,21 @@ public function test_webservice_token_access_validation() { public function test_generate_full_report() { $rc = $this->prepare_reference_course(); - // Generate full report with all sections + // Generate full report with all sections. $report = new Report($rc->course, $rc->cm, $rc->quiz); $html = $report->generate($rc->attemptids[0], self::get_all_report_sections_enabled()); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify quiz header + // Verify quiz header. $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); $this->assertMatchesRegularExpression('/]*>' . preg_quote($rc->course->fullname, '/') . '[^<>]+<\/td>/', $html, 'Course name not found'); $this->assertMatchesRegularExpression('/]*>' . preg_quote($rc->quiz->name, '/') . '[^<>]+<\/td>/', $html, 'Quiz name not found'); - // Verify overall quiz feedback - // TODO: Add proper overall feedback to reference quiz and check its contents + // Verify overall quiz feedback. + // TODO: Add proper overall feedback to reference quiz and check its contents. $this->assertMatchesRegularExpression('/]*>\s*' . preg_quote(get_string('feedback', 'quiz'), '/') . '\s*<\/th>/', $html, 'Overall feedback header not found'); - // Verify questions + // Verify questions. foreach (self::QUESTION_TYPES_IN_REFERENCE_QUIZ as $qtype) { $this->assertMatchesRegularExpression( '/<[^<>]*class="[^\"<>]*que[^\"<>]*'.preg_quote($qtype, '/').'[^\"<>]*"[^<>]*>/', @@ -227,16 +227,16 @@ public function test_generate_full_report() { ); } - // Verify individual question feedback + // Verify individual question feedback. $this->assertMatchesRegularExpression('/
    /', $html, 'Individual question feedback not found'); - // Verify general question feedback + // Verify general question feedback. $this->assertMatchesRegularExpression('/
    /', $html, 'General question feedback not found'); - // Verify correct answers + // Verify correct answers. $this->assertMatchesRegularExpression('/
    /', $html, 'Correct question answers not found'); - // Verify answer history + // Verify answer history. $this->assertMatchesRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history not found'); } @@ -256,8 +256,8 @@ public function test_generate_full_page_stub() { $html = $report->generate_full_page( $rc->attemptids[0], self::get_all_report_sections_enabled(), - false, // We need to disable this since $OUTPUT->header() is not working during tests - false, // We need to disable this since $OUTPUT->header() is not working during tests + false, // We need to disable this since $OUTPUT->header() is not working during tests. + false, // We need to disable this since $OUTPUT->header() is not working during tests. true ); $this->assertNotEmpty($html, 'Generated report is empty'); @@ -274,21 +274,21 @@ public function test_generate_full_page_stub() { public function test_generate_report_no_header() { $rc = $this->prepare_reference_course(); - // Generate report without a header + // Generate report without a header. $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::get_all_report_sections_enabled(); $sections['header'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify that quiz header is absent + // Verify that quiz header is absent. $this->assertDoesNotMatchRegularExpression( '/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table found when it should be absent' ); - // If the quiz header is disabled, the quiz feedback should also be absent + // If the quiz header is disabled, the quiz feedback should also be absent. $this->assertDoesNotMatchRegularExpression( '/]*>\s*'.preg_quote(get_string('feedback', 'quiz'), '/').'\s*<\/th>/', $html, @@ -308,7 +308,7 @@ public function test_generate_report_no_header() { public function test_generate_report_no_quiz_feedback() { $rc = $this->prepare_reference_course(); - // Generate report without quiz feedback + // Generate report without quiz feedback. $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::get_all_report_sections_enabled(); $sections['quiz_feedback'] = false; @@ -316,7 +316,7 @@ public function test_generate_report_no_quiz_feedback() { $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify that quiz feedback is absent + // Verify that quiz feedback is absent. $this->assertMatchesRegularExpression( '/]*quizreviewsummary[^<>]*>/', $html, @@ -341,17 +341,17 @@ public function test_generate_report_no_quiz_feedback() { public function test_generate_report_no_questions() { $rc = $this->prepare_reference_course(); - // Generate report without questions + // Generate report without questions. $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::get_all_report_sections_enabled(); $sections['question'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify that no questions are present + // Verify that no questions are present. $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="[^\"<>]*que[^<>]*>/', $html, 'Question found when it should be absent'); - // If questions are disabled, question_feedback, general_feedback, rightanswer and history should be absent + // If questions are disabled, question_feedback, general_feedback, rightanswer and history should be absent. $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Individual question feedback found when it should be absent'); $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'General question feedback found when it should be absent'); $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Correct question answers found when they should be absent'); @@ -370,14 +370,14 @@ public function test_generate_report_no_questions() { public function test_generate_report_no_question_feedback() { $rc = $this->prepare_reference_course(); - // Generate report without question feedback + // Generate report without question feedback. $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::get_all_report_sections_enabled(); $sections['question_feedback'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify that question feedback is absent + // Verify that question feedback is absent. $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Individual question feedback found when it should be absent'); } @@ -393,14 +393,14 @@ public function test_generate_report_no_question_feedback() { public function test_generate_report_no_general_feedback() { $rc = $this->prepare_reference_course(); - // Generate report without general feedback + // Generate report without general feedback. $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::get_all_report_sections_enabled(); $sections['general_feedback'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify that general feedback is absent + // Verify that general feedback is absent. $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'General question feedback found when it should be absent'); } @@ -416,14 +416,14 @@ public function test_generate_report_no_general_feedback() { public function test_generate_report_no_rightanswers() { $rc = $this->prepare_reference_course(); - // Generate report without right answers + // Generate report without right answers. $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::get_all_report_sections_enabled(); $sections['rightanswer'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify that right answers are absent + // Verify that right answers are absent. $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Correct question answers found when they should be absent'); } @@ -439,14 +439,14 @@ public function test_generate_report_no_rightanswers() { public function test_generate_report_no_history() { $rc = $this->prepare_reference_course(); - // Generate report without answer history + // Generate report without answer history. $report = new Report($rc->course, $rc->cm, $rc->quiz); $sections = self::get_all_report_sections_enabled(); $sections['history'] = false; $html = $report->generate($rc->attemptids[0], $sections); $this->assertNotEmpty($html, 'Generated report is empty'); - // Verify that answer history is absent + // Verify that answer history is absent. $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history found when it should be absent'); } @@ -464,7 +464,7 @@ public function test_get_attempt_attachments() { $attachments = $report->get_attempt_attachments($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); - // Find cake.md attachment + // Find cake.md attachment. $this->assertNotEmpty(array_filter($attachments, fn($a) => $a['file']->get_filename() === 'cake.md'), 'cake.md attachment not found'); } @@ -482,7 +482,7 @@ public function test_get_attempt_attachments_metadata() { $attachments = $report->get_attempt_attachments_metadata($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); - // Find cake.md attachment + // Find cake.md attachment. $cake = array_values(array_filter($attachments, fn($a) => $a->filename === 'cake.md'))[0]; $this->assertNotEmpty($cake, 'cake.md attachment not found'); @@ -525,7 +525,7 @@ public function test_get_attempts_metadata() { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); - // Test without filters + // Test without filters. $attempts = $report->get_attempts_metadata(); $this->assertNotEmpty($attempts, 'No attempts found without filters set'); $this->assertCount(count($rc->attemptids), $attempts, 'Incorrect number of attempts found without filters set'); @@ -541,7 +541,7 @@ public function test_get_attempts_metadata() { $this->assertNotEmpty($attempt->firstname, 'Attempt metadata does not contain firstname'); $this->assertNotEmpty($attempt->lastname, 'Attempt metadata does not contain lastname'); - // Test filtered + // Test filtered. $attemptsfilteredexisting = $report->get_attempts_metadata($rc->attemptids); $this->assertNotEmpty($attemptsfilteredexisting, 'No attempts found with existing attempt ids'); $this->assertCount(count($rc->attemptids), $attemptsfilteredexisting, 'Incorrect number of attempts found with existing attempt ids'); @@ -607,12 +607,12 @@ public function test_attempt_exists() { * @return void */ public function test_build_report_sections_from_formdata() { - // Test all sections enabled + // Test all sections enabled. $formdata = self::get_formdata_all_reports_sections_enabled(); $sections = Report::build_report_sections_from_formdata($formdata); $this->assertEquals(self::get_all_report_sections_enabled(), $sections, 'Full formdata not correctly converted to report sections'); - // Test removal of dependent sections + // Test removal of dependent sections. $formdata = self::get_formdata_all_reports_sections_enabled(); $formdata->export_report_section_question = 0; $sections = Report::build_report_sections_from_formdata($formdata); @@ -623,7 +623,7 @@ public function test_build_report_sections_from_formdata() { $this->assertEmpty($sections['history'], 'Dependent section history not removed correctly'); $this->assertEmpty($sections['attachments'], 'Dependent section attachments not removed correctly'); - // Test removal of superfluous sections + // Test removal of superfluous sections. $formdata = self::get_formdata_all_reports_sections_enabled(); $formdata->export_report_section_superfluous = 1; $sections = Report::build_report_sections_from_formdata($formdata); diff --git a/tests/TSPManager_test.php b/tests/TSPManager_test.php index e31d895..2ded695 100644 --- a/tests/TSPManager_test.php +++ b/tests/TSPManager_test.php @@ -37,10 +37,10 @@ class TSPManager_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -101,7 +101,7 @@ protected function create_mock_tspmanager( string $dummyquery = 'tsp-dummy-query', string $dummyreply = 'tsp-dummy-reply-0123456789abcdef' ): TSPManager { - // Prepare TimeStampProtocolClient that returns dummy data + // Prepare TimeStampProtocolClient that returns dummy data. $tspclientmock = $this->getMockBuilder(TimeStampProtocolClient::class) ->onlyMethods(['sign']) ->setConstructorArgs([$dummyserver]) @@ -113,7 +113,7 @@ protected function create_mock_tspmanager( 'reply' => $dummyreply, ]); - // Create TSPManager that uses the mocked TimeStampProtocolClient + // Create TSPManager that uses the mocked TimeStampProtocolClient. $tspmanager = $this->getMockBuilder(TSPManager::class) ->onlyMethods(['get_timestampprotocolclient']) ->setConstructorArgs([$job]) @@ -135,11 +135,11 @@ protected function create_mock_tspmanager( * @throws \stored_file_creation_exception */ public function test_tsp_timestamp(): void { - // Prepare plugin settings + // Prepare plugin settings. set_config('tsp_server_url', 'localhost', 'quiz_archiver'); set_config('tsp_enable', true, 'quiz_archiver'); - // Generate job with artifact + // Generate job with artifact. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', @@ -158,23 +158,23 @@ public function test_tsp_timestamp(): void { $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); - // Ensure that artifact was not yet signed + // Ensure that artifact was not yet signed. $this->assertFalse($job->tspmanager()->has_tsp_timestamp(), 'Artifact was detected as signed without it being signed'); - // Ensure that the artifact wants to be signed + // Ensure that the artifact wants to be signed. $this->assertTrue($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was not detected as wanting to be signed'); - // Try signing the artifact using TSP + // Try signing the artifact using TSP. $tspmanager = $this->create_mock_tspmanager($job); $tspmanager->timestamp(); $this->assertTrue($tspmanager->has_tsp_timestamp(), 'Artifact was not detected as signed after signing it'); - // Ensure that the TSP data was stored correctly + // Ensure that the TSP data was stored correctly. $this->assertEquals('tsp-dummy-query', $tspmanager->get_tsp_data()->query, 'TSP query was not stored correctly'); $this->assertEquals('tsp-dummy-reply-0123456789abcdef', $tspmanager->get_tsp_data()->reply, 'TSP reply was not stored correctly'); $this->assertEquals('localhost', $tspmanager->get_tsp_data()->server, 'TSP server URL was not stored correctly'); - // Ensure that the artifact does not want to be signed again + // Ensure that the artifact does not want to be signed again. $this->assertFalse($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed after it was signed'); } @@ -188,11 +188,11 @@ public function test_tsp_timestamp(): void { * @throws \stored_file_creation_exception */ public function test_delete_tsp_data(): void { - // Prepare plugin settings + // Prepare plugin settings. set_config('tsp_server_url', 'localhost', 'quiz_archiver'); set_config('tsp_enable', true, 'quiz_archiver'); - // Generate job with artifact + // Generate job with artifact. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', @@ -211,12 +211,12 @@ public function test_delete_tsp_data(): void { $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); - // Sign the artifact using TSP + // Sign the artifact using TSP. $tspmanager = $this->create_mock_tspmanager($job); $tspmanager->timestamp(); $this->assertTrue($tspmanager->has_tsp_timestamp(), 'Artifact was not detected as signed after signing it'); - // Delete the TSP data + // Delete the TSP data. $tspmanager->delete_tsp_data(); $this->assertFalse($tspmanager->has_tsp_timestamp(), 'Artifact was detected as signed after deleting the TSP data'); } @@ -230,11 +230,11 @@ public function test_delete_tsp_data(): void { * @throws \moodle_exception */ public function test_signing_invalid_artifact(): void { - // Prepare plugin settings + // Prepare plugin settings. set_config('tsp_server_url', 'localhost', 'quiz_archiver'); set_config('tsp_enable', true, 'quiz_archiver'); - // Generate job without artifact + // Generate job without artifact. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', @@ -249,7 +249,7 @@ public function test_signing_invalid_artifact(): void { ArchiveJob::STATUS_FINISHED ); - // Try signing the artifact using TSP + // Try signing the artifact using TSP. $this->expectException(\RuntimeException::class); $this->expectExceptionMessage(get_string('archive_signing_failed_no_artifact', 'quiz_archiver')); $this->create_mock_tspmanager($job)->timestamp(); @@ -266,10 +266,10 @@ public function test_signing_invalid_artifact(): void { * @throws \stored_file_creation_exception */ public function test_signing_disabled(): void { - // Ensure signing is disabled + // Ensure signing is disabled. set_config('tsp_enable', false, 'quiz_archiver'); - // Generate job with artifact + // Generate job with artifact. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '40000000-1234-5678-abcd-ef4242424242', @@ -288,10 +288,10 @@ public function test_signing_disabled(): void { $sha256sum = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256sum); - // Check that the artifact does not want to be signed + // Check that the artifact does not want to be signed. $this->assertFalse($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed while TSP is disabled'); - // Try signing the artifact using TSP + // Try signing the artifact using TSP. $this->expectException(\Exception::class); $this->expectExceptionMessage(get_string('archive_signing_failed_tsp_disabled', 'quiz_archiver')); $this->create_mock_tspmanager($job)->timestamp(); diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index 97badea..b291248 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -37,10 +37,10 @@ class generate_attempt_report_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -86,7 +86,7 @@ protected function generate_valid_request(int $courseid, int $cmid, int $quizid, * @throws \DOMException */ public function test_capability_requirement(): void { - // Check that a user without the required capability is rejected + // Check that a user without the required capability is rejected. $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); @@ -138,7 +138,7 @@ public function test_parameter_validation( generate_attempt_report::execute($courseid, $cmid, $quizid, $attemptid, $filenamepattern, $sections, $attachments); // @codingStandardsIgnoreLine } catch (\dml_missing_record_exception $e) { - // Ignore + // Ignore. } } diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index bc3b512..6968403 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -35,10 +35,10 @@ class get_attempts_metadata_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -79,7 +79,7 @@ protected function generate_valid_request(int $courseid, int $cmid, int $quizid) * @throws \moodle_exception */ public function test_capability_requirement(): void { - // Check that a user without the required capability is rejected + // Check that a user without the required capability is rejected. $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); @@ -121,7 +121,7 @@ public function test_parameter_validation( get_attempts_metadata::execute($courseid, $cmid, $quizid, $attemptids); // @codingStandardsIgnoreLine } catch (\dml_exception $e) { - // Ignore + // Ignore. } } diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index 2f4e0bd..8a6577d 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -38,10 +38,10 @@ class get_backup_status_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -66,7 +66,7 @@ protected function generate_mock_quiz(): \stdClass { * @throws \DOMException */ public function test_capability_requirement(): void { - // Create job + // Create job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', @@ -81,7 +81,7 @@ public function test_capability_requirement(): void { ); $_GET['wstoken'] = 'TEST-WS-TOKEN'; - // Check that a user without the required capability is rejected + // Check that a user without the required capability is rejected. $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); get_backup_status::execute($job->get_jobid(), 'f1d2d2f924e986ac86fdf7b36c94bcdf32beec15'); @@ -114,7 +114,7 @@ public function test_parameter_validation( get_backup_status::execute($jobid, $backupid); // @codingStandardsIgnoreLine } catch (\dml_exception $e) { - // Ignore + // Ignore. } } @@ -126,7 +126,7 @@ public function test_parameter_validation( * @throws \moodle_exception */ public function parameter_data_provider(): array { - // Create job + // Create job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', @@ -162,10 +162,10 @@ public function parameter_data_provider(): array { * @throws \required_capability_exception */ public function test_wstoken_access_check(): void { - // Gain webservice permission + // Gain webservice permission. $this->setAdminUser(); - // Create job + // Create job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', @@ -179,7 +179,7 @@ public function test_wstoken_access_check(): void { [] ); - // Check that correct wstoken allows access + // Check that correct wstoken allows access. $_GET['wstoken'] = 'TEST-WS-TOKEN-VALID'; $this->assertSame( ['status' => 'E_BACKUP_NOT_FOUND'], @@ -187,7 +187,7 @@ public function test_wstoken_access_check(): void { 'Valid wstoken was falsely rejected' ); - // Check that incorrect wstoken is rejected + // Check that incorrect wstoken is rejected. $_GET['wstoken'] = 'TEST-WS-TOKEN-INVALID'; $this->assertSame( ['status' => 'E_ACCESS_DENIED'], diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index c141738..08ec578 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -39,10 +39,10 @@ class process_uploaded_artifact_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -88,11 +88,11 @@ protected function generate_valid_request(string $jobid, int $cmid, int $userid) * @throws \moodle_exception */ public function test_capability_requirement(): void { - // Check that a user without the required capability is rejected + // Check that a user without the required capability is rejected. $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); - // Create job + // Create job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', @@ -106,7 +106,7 @@ public function test_capability_requirement(): void { [] ); - // Execute test call + // Execute test call. $_GET['wstoken'] = 'TEST-WS-TOKEN'; $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); process_uploaded_artifact::execute( @@ -202,7 +202,7 @@ public function parameter_data_provider(): array { * @throws \required_capability_exception */ public function test_rejection_of_artifacts_for_complete_jobs(): void { - // Create job + // Create job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', @@ -217,7 +217,7 @@ public function test_rejection_of_artifacts_for_complete_jobs(): void { ArchiveJob::STATUS_FINISHED ); - // Execute test call + // Execute test call. $_GET['wstoken'] = 'TEST-WS-TOKEN'; $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); $this->assertSame(['status' => 'E_NO_ARTIFACT_UPLOAD_EXPECTED'], process_uploaded_artifact::execute( @@ -244,7 +244,7 @@ public function test_rejection_of_artifacts_for_complete_jobs(): void { * @throws \required_capability_exception */ public function test_invalid_file_metadata(): void { - // Create job + // Create job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', @@ -258,11 +258,11 @@ public function test_invalid_file_metadata(): void { [] ); - // Gain access + // Gain access. $_GET['wstoken'] = 'TEST-WS-TOKEN'; $this->setAdminUser(); - // Execute test call + // Execute test call. $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); $this->assertSame(['status' => 'E_UPLOADED_ARTIFACT_NOT_FOUND'], process_uploaded_artifact::execute( $r['jobid'], diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index ee97d02..fb64040 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -38,10 +38,10 @@ class update_job_status_test extends \advanced_testcase { * @return \stdClass Created mock objects */ protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz + // Create course, course module and quiz. $this->resetAfterTest(); - // Prepare user and course + // Prepare user and course. $user = $this->getDataGenerator()->create_user(); $course = $this->getDataGenerator()->create_course(); $quiz = $this->getDataGenerator()->create_module('quiz', [ @@ -65,7 +65,7 @@ protected function generate_mock_quiz(): \stdClass { * @throws \moodle_exception */ public function test_capability_requirement(): void { - // Create mock quiz and job + // Create mock quiz and job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', @@ -80,7 +80,7 @@ public function test_capability_requirement(): void { ); $_GET['wstoken'] = 'TEST-WS-TOKEN'; - // Check that a user without the required capability is rejected + // Check that a user without the required capability is rejected. $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); update_job_status::execute($job->get_jobid(), ArchiveJob::STATUS_UNINITIALIZED); @@ -97,10 +97,10 @@ public function test_capability_requirement(): void { * @throws \required_capability_exception */ public function test_wstoken_validation(): void { - // Gain access to webservice + // Gain access to webservice. $this->setAdminUser(); - // Create mock quiz and job + // Create mock quiz and job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', @@ -114,7 +114,7 @@ public function test_wstoken_validation(): void { [], ); - // Check that a valid token is accepted + // Check that a valid token is accepted. $_GET['wstoken'] = 'TEST-WS-TOKEN-VALID'; $this->assertSame( ['status' => 'OK'], @@ -122,7 +122,7 @@ public function test_wstoken_validation(): void { 'Valid token was rejected' ); - // Check that an invalid token is rejected + // Check that an invalid token is rejected. $_GET['wstoken'] = 'TEST-WS-TOKEN-INVALID'; $this->assertSame( ['status' => 'E_ACCESS_DENIED'], @@ -198,11 +198,11 @@ public function parameter_data_provider(): array { * @throws \required_capability_exception */ public function test_update_job_status(string $originstatus, string $targetstatus, array $expected) { - // Gain privileges + // Gain privileges. $this->setAdminUser(); $_GET['wstoken'] = 'TEST-WS-TOKEN'; - // Create mock quiz and job + // Create mock quiz and job. $mocks = $this->generate_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', @@ -217,10 +217,10 @@ public function test_update_job_status(string $originstatus, string $targetstatu $originstatus ); - // Ensure job is in the expected state + // Ensure job is in the expected state. $this->assertSame($originstatus, $job->get_status()); - // Execute the external function and check the result + // Execute the external function and check the result. $result = update_job_status::execute( $job->get_jobid(), $targetstatus diff --git a/tests/local/autoinstall_test.php b/tests/local/autoinstall_test.php index 0c6f011..5b418d3 100644 --- a/tests/local/autoinstall_test.php +++ b/tests/local/autoinstall_test.php @@ -39,10 +39,10 @@ public function test_autoinstall(): void { global $DB; $this->resetAfterTest(); - // Gain privileges + // Gain privileges. $this->setAdminUser(); - // Execute autoinstall + // Execute autoinstall. $workerurl = 'http://foo.bar:1337'; $wsname = 'test_webservice_name'; $rolename = 'test_role_name'; @@ -55,30 +55,30 @@ public function test_autoinstall(): void { $username ); - // Check function return + // Check function return. $this->assertTrue($success, 'Autoinstall returned success=false'); $this->assertNotEmpty($log, 'Autoinstall returned empty log'); - // Check worker URL + // Check worker URL. $this->assertSame($workerurl, get_config('quiz_archiver', 'worker_url'), 'Worker URL was not set correctly'); - // Check global config - $this->assertEquals(true, get_config('moodle', 'enablewebservices'), 'Webservices were not globally enabled'); // This can not be assertTrue, since Moodle stores a '1' + // Check global config. + $this->assertEquals(true, get_config('moodle', 'enablewebservices'), 'Webservices were not globally enabled'); // This can not be assertTrue, since Moodle stores a '1'. $this->assertStringContainsString('rest', get_config('moodle', 'webserviceprotocols'), 'REST protocol was not globally enabled'); - // Check webservice + // Check webservice. $webservice = $DB->get_record('external_services', ['name' => $wsname]); $this->assertNotEmpty($webservice, 'Webservice was not created'); $this->assertSame($webservice->name, $wsname, 'Webservice name was not set correctly'); $this->assertNotEmpty($DB->get_records('external_services_functions', ['externalserviceid' => $webservice->id]), 'Webservice functions were not assigned'); $this->assertSame($webservice->id, get_config('quiz_archiver', 'webservice_id'), 'Webservice ID was not set correctly'); - // Check role + // Check role. $role = $DB->get_record('role', ['shortname' => $rolename]); $this->assertNotEmpty($role, 'Role was not created'); $this->assertNotEmpty($DB->get_records('role_capabilities', ['roleid' => $role->id]), 'Role capabilities were not assigned'); - // Check user + // Check user. $user = $DB->get_record('user', ['username' => $username]); $this->assertNotEmpty($user, 'User was not created'); $this->assertNotEmpty($DB->get_records('role_assignments', ['userid' => $user->id, 'roleid' => $role->id]), 'User role was not assigned'); @@ -95,20 +95,20 @@ public function test_autoinstall(): void { public function test_autoinstall_detection(): void { $this->resetAfterTest(); - // Gain privileges + // Gain privileges. $this->setAdminUser(); - // Plugin should be unconfigured + // Plugin should be unconfigured. $this->assertTrue(autoinstall::plugin_is_unconfigured(), 'Plugin was not unconfigured'); - // Perform autoinstall + // Perform autoinstall. list($success, $log) = autoinstall::execute('http://foo.bar:1337'); $this->assertTrue($success, 'First autoinstall failed'); - // Try to detect autoinstall + // Try to detect autoinstall. $this->assertFalse(autoinstall::plugin_is_unconfigured(), 'Successful autoinstall was not detected'); - // Try to autoinstall a second time + // Try to autoinstall a second time. list($success, $log) = autoinstall::execute('http://foo.bar:1337'); $this->assertFalse($success, 'Second autoinstall was successful'); $this->assertNotEmpty($log, 'Second autoinstall returned empty log'); diff --git a/version.php b/version.php index 9feed67..4267a44 100644 --- a/version.php +++ b/version.php @@ -29,5 +29,4 @@ $plugin->version = 2024070800; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; -// $plugin->incompatible = 402; $plugin->maturity = MATURITY_STABLE; From 5b96eae836559e77493412c70278424f2d0f4437 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 10:24:26 +0200 Subject: [PATCH 073/185] Fix warnings about superfluous MOODLE_INTERNAL checks --- classes/ArchiveJob.php | 1 + classes/BackupManager.php | 1 + classes/FileManager.php | 1 + classes/RemoteArchiveWorker.php | 1 + classes/Report.php | 1 + classes/TSPManager.php | 1 + classes/TimeStampProtocolClient.php | 1 + .../admin/setting/admin_setting_archive_filename_pattern.php | 1 + .../admin/setting/admin_setting_attempt_filename_pattern.php | 1 + .../admin/setting/admin_setting_configcheckbox_alwaystrue.php | 1 + classes/local/autoinstall.php | 1 + classes/local/util.php | 1 + classes/output/job_overview_table.php | 1 + classes/privacy/provider.php | 1 + classes/task/autodelete_job_artifacts.php | 1 + classes/task/cleanup_temp_files.php | 1 + db/access.php | 1 + db/install.php | 1 + db/services.php | 1 + db/tasks.php | 1 + db/uninstall.php | 1 + db/upgrade.php | 1 + lib.php | 1 + patch_401_class_renames.php | 1 + 24 files changed, 24 insertions(+) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index 0c3d2af..39f17f8 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -26,6 +26,7 @@ use quiz_archiver\local\util; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); diff --git a/classes/BackupManager.php b/classes/BackupManager.php index 6ff2a1d..06ef06b 100644 --- a/classes/BackupManager.php +++ b/classes/BackupManager.php @@ -29,6 +29,7 @@ use context_course; use context_module; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); require_once($CFG->dirroot.'/backup/util/includes/backup_includes.php'); diff --git a/classes/FileManager.php b/classes/FileManager.php index 528bc40..274d3ae 100644 --- a/classes/FileManager.php +++ b/classes/FileManager.php @@ -27,6 +27,7 @@ use context_course; use stored_file; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index 7d709ac..adbf8cf 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -26,6 +26,7 @@ use curl; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); diff --git a/classes/Report.php b/classes/Report.php index fd9deb6..83ca3be 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -27,6 +27,7 @@ use curl; use mod_quiz\quiz_attempt; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); require_once("$CFG->dirroot/mod/quiz/locallib.php"); // Required for legacy mod_quiz functions ... diff --git a/classes/TSPManager.php b/classes/TSPManager.php index 3c66f25..79ecd5f 100644 --- a/classes/TSPManager.php +++ b/classes/TSPManager.php @@ -24,6 +24,7 @@ namespace quiz_archiver; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/TimeStampProtocolClient.php b/classes/TimeStampProtocolClient.php index 012e063..49b27c5 100644 --- a/classes/TimeStampProtocolClient.php +++ b/classes/TimeStampProtocolClient.php @@ -26,6 +26,7 @@ use curl; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php index 31313af..527ff6b 100644 --- a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php @@ -18,6 +18,7 @@ use quiz_archiver\ArchiveJob; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php index 82f0b4f..cec59bc 100644 --- a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php @@ -18,6 +18,7 @@ use quiz_archiver\ArchiveJob; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php index 09b47bd..bd9e0ba 100644 --- a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php +++ b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php @@ -16,6 +16,7 @@ namespace quiz_archiver\local\admin\setting; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 306eb11..31a812c 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -16,6 +16,7 @@ namespace quiz_archiver\local; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); require_once("{$CFG->dirroot}/user/lib.php"); diff --git a/classes/local/util.php b/classes/local/util.php index a2cf55c..c405d92 100644 --- a/classes/local/util.php +++ b/classes/local/util.php @@ -16,6 +16,7 @@ namespace quiz_archiver\local; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index 55b75f3..cbd35fb 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -26,6 +26,7 @@ use quiz_archiver\ArchiveJob; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); global $CFG; diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php index 44a1a03..8da8d29 100644 --- a/classes/privacy/provider.php +++ b/classes/privacy/provider.php @@ -34,6 +34,7 @@ use quiz_archiver\FileManager; use quiz_archiver\TSPManager; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/classes/task/autodelete_job_artifacts.php b/classes/task/autodelete_job_artifacts.php index 3add849..1b0462a 100644 --- a/classes/task/autodelete_job_artifacts.php +++ b/classes/task/autodelete_job_artifacts.php @@ -26,6 +26,7 @@ use quiz_archiver\ArchiveJob; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); diff --git a/classes/task/cleanup_temp_files.php b/classes/task/cleanup_temp_files.php index 157ce53..4ee067b 100644 --- a/classes/task/cleanup_temp_files.php +++ b/classes/task/cleanup_temp_files.php @@ -26,6 +26,7 @@ use quiz_archiver\FileManager; +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); diff --git a/db/access.php b/db/access.php index 35f472a..c29892f 100644 --- a/db/access.php +++ b/db/access.php @@ -22,6 +22,7 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); $capabilities = [ diff --git a/db/install.php b/db/install.php index 5c3beaa..e5d051a 100644 --- a/db/install.php +++ b/db/install.php @@ -23,6 +23,7 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/db/services.php b/db/services.php index a57a6aa..54c76be 100644 --- a/db/services.php +++ b/db/services.php @@ -22,6 +22,7 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); $functions = [ diff --git a/db/tasks.php b/db/tasks.php index 9bf2220..7a372bf 100644 --- a/db/tasks.php +++ b/db/tasks.php @@ -22,6 +22,7 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); $tasks = [ diff --git a/db/uninstall.php b/db/uninstall.php index 202e6e4..efa7bde 100644 --- a/db/uninstall.php +++ b/db/uninstall.php @@ -23,6 +23,7 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/db/upgrade.php b/db/upgrade.php index b73a089..1b54503 100644 --- a/db/upgrade.php +++ b/db/upgrade.php @@ -23,6 +23,7 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); /** diff --git a/lib.php b/lib.php index be3034b..544821a 100644 --- a/lib.php +++ b/lib.php @@ -22,6 +22,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); use quiz_archiver\FileManager; diff --git a/patch_401_class_renames.php b/patch_401_class_renames.php index 95d0605..68c3459 100644 --- a/patch_401_class_renames.php +++ b/patch_401_class_renames.php @@ -24,6 +24,7 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); global $CFG; From 3a6f73e80d8270ccd58a70cc65b55329d648b414 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 10:33:35 +0200 Subject: [PATCH 074/185] Fix implicitly nulled function argument type --- classes/Report.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/Report.php b/classes/Report.php index 83ca3be..31e140f 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -157,7 +157,7 @@ public function get_attempts(): array { * @return array * @throws \dml_exception */ - public function get_attempts_metadata(array $filterattemptids = null): array { + public function get_attempts_metadata(?array $filterattemptids = null): array { global $DB; // Handle attempt ID filter. From 0364d17c020d65e6a16f8fd5a060a7abb4af9957 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 11:21:40 +0200 Subject: [PATCH 075/185] Reformat / break all lines that exceed the warning threshold of 132 characters --- classes/ArchiveJob.php | 5 +- classes/FileManager.php | 1 + classes/RemoteArchiveWorker.php | 13 +- classes/Report.php | 21 ++- classes/TimeStampProtocolClient.php | 6 +- classes/external/generate_attempt_report.php | 122 +++++++++++++--- classes/external/get_attempts_metadata.php | 112 ++++++++++++--- classes/external/get_backup_status.php | 18 ++- .../external/process_uploaded_artifact.php | 59 ++++++-- classes/external/update_job_status.php | 17 ++- classes/form/archive_quiz_form.php | 52 ++++--- classes/form/artifact_delete_form.php | 3 +- classes/form/job_delete_form.php | 3 +- classes/output/job_overview_table.php | 14 +- db/install.php | 4 +- report.php | 10 +- settings.php | 10 +- tests/ArchiveJob_test.php | 42 +++++- tests/BackupManager_test.php | 22 ++- tests/FileManager_test.php | 8 +- tests/Report_test.php | 132 +++++++++++++++--- tests/TSPManager_test.php | 31 +++- .../external/generate_attempt_report_test.php | 14 +- .../process_uploaded_artifact_test.php | 34 ++++- tests/local/autoinstall_test.php | 33 ++++- 25 files changed, 636 insertions(+), 150 deletions(-) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index 39f17f8..aa894a4 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -789,7 +789,10 @@ public function get_artifact(): ?\stored_file { global $DB; try { $file = $DB->get_record_sql( - 'SELECT pathnamehash FROM {files} files JOIN {'.self::JOB_TABLE_NAME.'} AS jobs ON files.id = jobs.artifactfileid WHERE jobs.id = :id', + 'SELECT pathnamehash '. + 'FROM {files} files '. + 'JOIN {'.self::JOB_TABLE_NAME.'} jobs ON files.id = jobs.artifactfileid '. + 'WHERE jobs.id = :id', ['id' => $this->id] ); diff --git a/classes/FileManager.php b/classes/FileManager.php index 274d3ae..7bbfe45 100644 --- a/classes/FileManager.php +++ b/classes/FileManager.php @@ -341,6 +341,7 @@ public function extract_attempt_data_from_artifact(stored_file $artifactfile, in // Prepare. $packer = get_file_packer('application/x-gzip'); + // @codingStandardsIgnoreLine $workdir = "{$CFG->tempdir}/quiz_archiver/jid{$jobid}_cid{$this->courseid}_cmid{$this->cmid}_qid{$this->quizid}_aid{$attemptid}"; // Wrap in try-catch to ensure cleanup on exit. diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index adbf8cf..4187040 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -80,7 +80,15 @@ public function __construct(string $serverurl, int $connectiontimeout, int $requ * service or decoding of the response failed * @throws \RuntimeException if the archive worker service reported an error */ - public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, int $quizid, array $joboptions, $taskarchivequizattempts, $taskmoodlebackups) { + public function enqueue_archive_job( + string $wstoken, + int $courseid, + int $cmid, + int $quizid, + array $joboptions, + $taskarchivequizattempts, + $taskmoodlebackups + ) { global $CFG; $moodleurlbase = rtrim($this->config->internal_wwwroot ?: $CFG->wwwroot, '/'); @@ -103,7 +111,8 @@ public function enqueue_archive_job(string $wstoken, int $courseid, int $cmid, i // Execute request. // Moodle curl wrapper automatically closes curl handle after requests. No need to call curl_close() manually. - $c = new curl(['ignoresecurity' => true]); // Ignore URL filter since we require custom ports and the URL is only configurable by admins. + // Ignore URL filter since we require custom ports and the URL is only configurable by admins. + $c = new curl(['ignoresecurity' => true]); $result = $c->post($this->serverurl, $payload, [ 'CURLOPT_CONNECTTIMEOUT' => $this->connectiontimeout, 'CURLOPT_TIMEOUT' => $this->requesttimeout, diff --git a/classes/Report.php b/classes/Report.php index 31e140f..d332f75 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -167,7 +167,8 @@ public function get_attempts_metadata(?array $filterattemptids = null): array { // Get all requested attempts. return $DB->get_records_sql( - "SELECT qa.id AS attemptid, qa.userid, qa.attempt, qa.state, qa.timestart, qa.timefinish, u.username, u.firstname, u.lastname ". + "SELECT qa.id AS attemptid, qa.userid, qa.attempt, qa.state, qa.timestart, qa.timefinish, ". + " u.username, u.firstname, u.lastname ". "FROM {quiz_attempts} qa LEFT JOIN {user} u ON qa.userid = u.id ". "WHERE qa.preview = 0 AND qa.quiz = :quizid " . ($filterwhereclause ?? ''), [ @@ -567,7 +568,13 @@ public function generate(int $attemptid, array $sections): string { * @throws \moodle_exception * @throws \DOMException */ - public function generate_full_page(int $attemptid, array $sections, bool $fixrelativeurls = true, bool $minimal = true, bool $inlineimages = true): string { + public function generate_full_page( + int $attemptid, + array $sections, + bool $fixrelativeurls = true, + bool $minimal = true, + bool $inlineimages = true + ): string { global $CFG, $OUTPUT; // Build HTML tree. @@ -632,19 +639,19 @@ public function generate_full_page(int $attemptid, array $sections, bool $fixrel return $dom->saveHTML(); } + // @codingStandardsIgnoreStart /** @var string Regex for URLs of qtype_stack plots */ const REGEX_MOODLE_URL_STACKPLOT = '/^(?Phttps?:\/\/.+)?(\/question\/type\/stack\/plot\.php\/)(?P[^\/\#\?\&]+\.(png|svg))$/m'; /** @var string Regex for Moodle file API URLs */ - // @codingStandardsIgnoreLine const REGEX_MOODLE_URL_PLUGINFILE = '/^(?Phttps?:\/\/.+)?(\/pluginfile\.php)(?P\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)(\/(?P\d+))?\/(?P.*)?\/(?P[^\/\?\&\#]+))$/m'; /** @var string Regex for Moodle file API URLs of specific types: component=(question|qtype_.*) */ - // @codingStandardsIgnoreLine const REGEX_MOODLE_URL_PLUGINFILE_QUESTION_AND_QTYPE = '/^(?Phttps?:\/\/.+)?(\/pluginfile\.php)(?P\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)\/(?P\d+)\/(?P[^\/\?\&\#]+))$/m'; /** @var string Regex for Moodle theme image files */ const REGEX_MOODLE_URL_THEME_IMAGE = '/^(?Phttps?:\/\/.+)?(\/theme\/image\.php\/)(?P[^\/]+)\/(?P[^\/]+)\/(?P[^\/]+)\/(?P.+)$/m'; + // @codingStandardsIgnoreEnd /** @var string[] Mapping of file extensions to file types that are allowed to process */ const ALLOWED_IMAGE_TYPES = [ @@ -717,7 +724,8 @@ protected function convert_image_to_base64(\DOMElement $img): bool { // Link type: Moodle pluginfile URL. $img->setAttribute('x-url-type', 'MOODLE_URL_PLUGINFILE'); - // Edge case detection: question / qtype files follow another pattern, inserting questionbank_id and question_slot after filearea ... + // Edge case detection: question / qtype files follow another pattern, + // inserting questionbank_id and question_slot after filearea ... if ($regexmatches['component'] == 'question' || strpos($regexmatches['component'], 'qtype_') === 0) { $regexmatches = null; if (!preg_match(self::REGEX_MOODLE_URL_PLUGINFILE_QUESTION_AND_QTYPE, $imgsrcurl, $regexmatches)) { @@ -769,7 +777,8 @@ protected function convert_image_to_base64(\DOMElement $img): bool { if (preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $imgsrcurl)) { // Link type: Moodle theme image. // We should be able to download there images using a simple HTTP request. - // Accessing them directly from disk is a little more complicated due to caching and other logic (see: /theme/image.php). + // Accessing them directly from disk is a little more complicated due to + // caching and other logic (see: /theme/image.php). // Let's try to keep it this way until we encounter explicit problems. $img->setAttribute('x-url-type', 'MOODLE_URL_THEME_IMAGE'); } else { diff --git a/classes/TimeStampProtocolClient.php b/classes/TimeStampProtocolClient.php index 49b27c5..1e999a3 100644 --- a/classes/TimeStampProtocolClient.php +++ b/classes/TimeStampProtocolClient.php @@ -133,7 +133,11 @@ public static function generate_nonce(): string { * @return string ASN.1 encoded TimeStampReq * @throws \ValueError If the SHA256 hash or nonce are invalid */ - protected static function create_timestamp_request(string $sha256hash, string $nonce, bool $requesttsapublickey = false): string { + protected static function create_timestamp_request( + string $sha256hash, + string $nonce, + bool $requesttsapublickey = false + ): string { // Validate input. if (strlen($sha256hash) !== 64) { throw new \ValueError('Invalid hexadecimal SHA256 hash'); diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index cc56fc3..163d6c4 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -48,11 +48,31 @@ class generate_attempt_report extends external_api { */ public static function execute_parameters(): external_function_parameters { return new external_function_parameters([ - 'courseid' => new external_value(PARAM_INT, 'ID of course', VALUE_REQUIRED), - 'cmid' => new external_value(PARAM_INT, 'ID of the course module', VALUE_REQUIRED), - 'quizid' => new external_value(PARAM_INT, 'ID of the quiz', VALUE_REQUIRED), - 'attemptid' => new external_value(PARAM_INT, 'ID of the quiz attempt', VALUE_REQUIRED), - 'filenamepattern' => new external_value(PARAM_TEXT, 'Filename pattern to use for the generated archive', VALUE_REQUIRED), + 'courseid' => new external_value( + PARAM_INT, + 'ID of course', + VALUE_REQUIRED + ), + 'cmid' => new external_value( + PARAM_INT, + 'ID of the course module', + VALUE_REQUIRED + ), + 'quizid' => new external_value( + PARAM_INT, + 'ID of the quiz', + VALUE_REQUIRED + ), + 'attemptid' => new external_value( + PARAM_INT, + 'ID of the quiz attempt', + VALUE_REQUIRED + ), + 'filenamepattern' => new external_value( + PARAM_TEXT, + 'Filename pattern to use for the generated archive', + VALUE_REQUIRED + ), 'sections' => new external_single_structure( array_combine(Report::SECTIONS, array_map(fn ($section): external_value => new external_value( @@ -64,7 +84,11 @@ public static function execute_parameters(): external_function_parameters { 'Sections to include in the report', VALUE_REQUIRED ), - 'attachments' => new external_value(PARAM_BOOL, 'Whether to check for attempts and include metadata if present', VALUE_REQUIRED), + 'attachments' => new external_value( + PARAM_BOOL, + 'Whether to check for attempts and include metadata if present', + VALUE_REQUIRED + ), ]); } @@ -74,25 +98,77 @@ public static function execute_parameters(): external_function_parameters { */ public static function execute_returns(): external_single_structure { return new external_single_structure([ - 'courseid' => new external_value(PARAM_INT, 'ID of course', VALUE_OPTIONAL), - 'cmid' => new external_value(PARAM_INT, 'ID of the course module', VALUE_OPTIONAL), - 'quizid' => new external_value(PARAM_INT, 'ID of the quiz', VALUE_OPTIONAL), - 'attemptid' => new external_value(PARAM_INT, 'ID of the quiz attempt', VALUE_OPTIONAL), - 'filename' => new external_value(PARAM_TEXT, 'Desired filename of this quiz attempt report', VALUE_OPTIONAL), - 'report' => new external_value(PARAM_RAW, 'HTML DOM of the generated quiz attempt report', VALUE_OPTIONAL), + 'courseid' => new external_value( + PARAM_INT, + 'ID of course', + VALUE_OPTIONAL + ), + 'cmid' => new external_value( + PARAM_INT, + 'ID of the course module', + VALUE_OPTIONAL + ), + 'quizid' => new external_value( + PARAM_INT, + 'ID of the quiz', + VALUE_OPTIONAL + ), + 'attemptid' => new external_value( + PARAM_INT, + 'ID of the quiz attempt', + VALUE_OPTIONAL + ), + 'filename' => new external_value( + PARAM_TEXT, + 'Desired filename of this quiz attempt report', + VALUE_OPTIONAL + ), + 'report' => new external_value( + PARAM_RAW, + 'HTML DOM of the generated quiz attempt report', + VALUE_OPTIONAL + ), 'attachments' => new external_multiple_structure( new external_single_structure([ - 'slot' => new external_value(PARAM_INT, 'Number of the quiz slot this file is attached to', VALUE_REQUIRED), - 'filename' => new external_value(PARAM_TEXT, 'Filename of the attachment', VALUE_REQUIRED), - 'filesize' => new external_value(PARAM_INT, 'Filesize of the attachment', VALUE_REQUIRED), - 'mimetype' => new external_value(PARAM_TEXT, 'Mimetype of the attachment', VALUE_REQUIRED), - 'contenthash' => new external_value(PARAM_TEXT, 'Contenthash (SHA-1) of the attachment', VALUE_REQUIRED), - 'downloadurl' => new external_value(PARAM_TEXT, 'URL to download the attachment', VALUE_REQUIRED), + 'slot' => new external_value( + PARAM_INT, + 'Number of the quiz slot this file is attached to', + VALUE_REQUIRED + ), + 'filename' => new external_value( + PARAM_TEXT, + 'Filename of the attachment', + VALUE_REQUIRED + ), + 'filesize' => new external_value( + PARAM_INT, + 'Filesize of the attachment', + VALUE_REQUIRED + ), + 'mimetype' => new external_value( + PARAM_TEXT, + 'Mimetype of the attachment', + VALUE_REQUIRED + ), + 'contenthash' => new external_value( + PARAM_TEXT, + 'Contenthash (SHA-1) of the attachment', + VALUE_REQUIRED + ), + 'downloadurl' => new external_value( + PARAM_TEXT, + 'URL to download the attachment', + VALUE_REQUIRED + ), ]), 'Files attached to the quiz attempt', VALUE_OPTIONAL ), - 'status' => new external_value(PARAM_TEXT, 'Status of the executed wsfunction', VALUE_REQUIRED), + 'status' => new external_value( + PARAM_TEXT, + 'Status of the executed wsfunction', + VALUE_REQUIRED + ), ]); } @@ -188,7 +264,13 @@ public static function execute( } // Generate filename. - $res['filename'] = ArchiveJob::generate_attempt_filename($course, $cm, $quiz, $params['attemptid'], $params['filenamepattern']); + $res['filename'] = ArchiveJob::generate_attempt_filename( + $course, + $cm, + $quiz, + $params['attemptid'], + $params['filenamepattern'] + ); // Return response. $res['status'] = 'OK'; diff --git a/classes/external/get_attempts_metadata.php b/classes/external/get_attempts_metadata.php index 6cd1abc..46b67a6 100644 --- a/classes/external/get_attempts_metadata.php +++ b/classes/external/get_attempts_metadata.php @@ -47,12 +47,30 @@ class get_attempts_metadata extends external_api { */ public static function execute_parameters(): external_function_parameters { return new external_function_parameters([ - 'courseid' => new external_value(PARAM_INT, 'ID of course', VALUE_REQUIRED), - 'cmid' => new external_value(PARAM_INT, 'ID of the course module', VALUE_REQUIRED), - 'quizid' => new external_value(PARAM_INT, 'ID of the quiz', VALUE_REQUIRED), + 'courseid' => new external_value( + PARAM_INT, + 'ID of course', + VALUE_REQUIRED + ), + 'cmid' => new external_value( + PARAM_INT, + 'ID of the course module', + VALUE_REQUIRED + ), + 'quizid' => new external_value( + PARAM_INT, + 'ID of the quiz', + VALUE_REQUIRED + ), 'attemptids' => new external_multiple_structure( - new external_value(PARAM_INT, 'ID of the quiz attempt', VALUE_REQUIRED) - , 'List of quiz attempt IDs to query', VALUE_REQUIRED), + new external_value( + PARAM_INT, + 'ID of the quiz attempt', + VALUE_REQUIRED + ), + 'List of quiz attempt IDs to query', + VALUE_REQUIRED + ), ]); } @@ -62,23 +80,77 @@ public static function execute_parameters(): external_function_parameters { */ public static function execute_returns(): external_single_structure { return new external_single_structure([ - 'status' => new external_value(PARAM_TEXT, 'Status of the executed wsfunction', VALUE_REQUIRED), - 'courseid' => new external_value(PARAM_INT, 'ID of course', VALUE_OPTIONAL), - 'cmid' => new external_value(PARAM_INT, 'ID of the course module', VALUE_OPTIONAL), - 'quizid' => new external_value(PARAM_INT, 'ID of the quiz', VALUE_OPTIONAL), + 'status' => new external_value( + PARAM_TEXT, + 'Status of the executed wsfunction', + VALUE_REQUIRED + ), + 'courseid' => new external_value( + PARAM_INT, + 'ID of course', + VALUE_OPTIONAL + ), + 'cmid' => new external_value( + PARAM_INT, + 'ID of the course module', + VALUE_OPTIONAL + ), + 'quizid' => new external_value( + PARAM_INT, + 'ID of the quiz', + VALUE_OPTIONAL + ), 'attempts' => new external_multiple_structure( new external_single_structure([ - 'attemptid' => new external_value(PARAM_INT, 'ID of the quiz attempt', VALUE_REQUIRED), - 'userid' => new external_value(PARAM_INT, 'ID of the user for this quit attempt', VALUE_REQUIRED), - 'username' => new external_value(PARAM_TEXT, 'Username for this quiz attempt', VALUE_REQUIRED), - 'firstname' => new external_value(PARAM_TEXT, 'First name for this quiz attempt', VALUE_REQUIRED), - 'lastname' => new external_value(PARAM_TEXT, 'Last name for this quiz attempt', VALUE_REQUIRED), - 'timestart' => new external_value(PARAM_INT, 'Timestamp of when the quiz attempt started', VALUE_REQUIRED), - 'timefinish' => new external_value(PARAM_INT, 'Timestamp of when the quiz attempt finished', VALUE_REQUIRED), - 'attempt' => new external_value(PARAM_INT, 'Sequential attempt number', VALUE_REQUIRED), - 'state' => new external_value(PARAM_TEXT, 'State of the quiz attempt', VALUE_REQUIRED), - ]) - , 'Attempt metadata for each attempt ID', VALUE_OPTIONAL), + 'attemptid' => new external_value( + PARAM_INT, + 'ID of the quiz attempt', + VALUE_REQUIRED + ), + 'userid' => new external_value( + PARAM_INT, + 'ID of the user for this quit attempt', + VALUE_REQUIRED + ), + 'username' => new external_value( + PARAM_TEXT, + 'Username for this quiz attempt', + VALUE_REQUIRED + ), + 'firstname' => new external_value( + PARAM_TEXT, + 'First name for this quiz attempt', + VALUE_REQUIRED + ), + 'lastname' => new external_value( + PARAM_TEXT, + 'Last name for this quiz attempt', + VALUE_REQUIRED + ), + 'timestart' => new external_value( + PARAM_INT, + 'Timestamp of when the quiz attempt started', + VALUE_REQUIRED + ), + 'timefinish' => new external_value( + PARAM_INT, + 'Timestamp of when the quiz attempt finished', + VALUE_REQUIRED + ), + 'attempt' => new external_value( + PARAM_INT, + 'Sequential attempt number', + VALUE_REQUIRED + ), + 'state' => new external_value( + PARAM_TEXT, + 'State of the quiz attempt', + VALUE_REQUIRED + ), + ]), + 'Attempt metadata for each attempt ID', + VALUE_OPTIONAL + ), ]); } diff --git a/classes/external/get_backup_status.php b/classes/external/get_backup_status.php index 9dacbeb..994c10d 100644 --- a/classes/external/get_backup_status.php +++ b/classes/external/get_backup_status.php @@ -47,8 +47,16 @@ class get_backup_status extends external_api { */ public static function execute_parameters(): external_function_parameters { return new external_function_parameters([ - 'jobid' => new external_value(PARAM_TEXT, 'UUID of the job this artifact is associated with', VALUE_REQUIRED), - 'backupid' => new external_value(PARAM_TEXT, 'ID of the backup controller', VALUE_REQUIRED), + 'jobid' => new external_value( + PARAM_TEXT, + 'UUID of the job this artifact is associated with', + VALUE_REQUIRED + ), + 'backupid' => new external_value( + PARAM_TEXT, + 'ID of the backup controller', + VALUE_REQUIRED + ), ]); } @@ -58,7 +66,11 @@ public static function execute_parameters(): external_function_parameters { */ public static function execute_returns(): external_single_structure { return new external_single_structure([ - 'status' => new external_value(PARAM_TEXT, 'Status of the requested backup', VALUE_REQUIRED), + 'status' => new external_value( + PARAM_TEXT, + 'Status of the requested backup', + VALUE_REQUIRED + ), ]); } diff --git a/classes/external/process_uploaded_artifact.php b/classes/external/process_uploaded_artifact.php index cf9633d..d18e4b7 100644 --- a/classes/external/process_uploaded_artifact.php +++ b/classes/external/process_uploaded_artifact.php @@ -47,15 +47,51 @@ class process_uploaded_artifact extends external_api { */ public static function execute_parameters(): external_function_parameters { return new external_function_parameters([ - 'jobid' => new external_value(PARAM_TEXT, 'UUID of the job this artifact is associated with', VALUE_REQUIRED), - 'artifact_component' => new external_value(PARAM_TEXT, 'File API component', VALUE_REQUIRED), - 'artifact_contextid' => new external_value(PARAM_INT, 'File API contextid', VALUE_REQUIRED), - 'artifact_userid' => new external_value(PARAM_INT, 'File API userid', VALUE_REQUIRED), - 'artifact_filearea' => new external_value(PARAM_TEXT, 'File API filearea', VALUE_REQUIRED), - 'artifact_filename' => new external_value(PARAM_TEXT, 'File API filename', VALUE_REQUIRED), - 'artifact_filepath' => new external_value(PARAM_TEXT, 'File API filepath', VALUE_REQUIRED), - 'artifact_itemid' => new external_value(PARAM_INT, 'File API itemid', VALUE_REQUIRED), - 'artifact_sha256sum' => new external_value(PARAM_TEXT, 'SHA256 checksum of the file', VALUE_REQUIRED), + 'jobid' => new external_value( + PARAM_TEXT, + 'UUID of the job this artifact is associated with', + VALUE_REQUIRED + ), + 'artifact_component' => new external_value( + PARAM_TEXT, + 'File API component', + VALUE_REQUIRED + ), + 'artifact_contextid' => new external_value( + PARAM_INT, + 'File API contextid', + VALUE_REQUIRED + ), + 'artifact_userid' => new external_value( + PARAM_INT, + 'File API userid', + VALUE_REQUIRED + ), + 'artifact_filearea' => new external_value( + PARAM_TEXT, + 'File API filearea', + VALUE_REQUIRED + ), + 'artifact_filename' => new external_value( + PARAM_TEXT, + 'File API filename', + VALUE_REQUIRED + ), + 'artifact_filepath' => new external_value( + PARAM_TEXT, + 'File API filepath', + VALUE_REQUIRED + ), + 'artifact_itemid' => new external_value( + PARAM_INT, + 'File API itemid', + VALUE_REQUIRED + ), + 'artifact_sha256sum' => new external_value( + PARAM_TEXT, + 'SHA256 checksum of the file', + VALUE_REQUIRED + ), ]); } @@ -65,7 +101,10 @@ public static function execute_parameters(): external_function_parameters { */ public static function execute_returns(): external_single_structure { return new external_single_structure([ - 'status' => new external_value(PARAM_TEXT, 'Status of the executed wsfunction'), + 'status' => new external_value( + PARAM_TEXT, + 'Status of the executed wsfunction'), + ]); } diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index 4ff2b8f..1fbe7a5 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -46,8 +46,16 @@ class update_job_status extends external_api { */ public static function execute_parameters(): external_function_parameters { return new external_function_parameters([ - 'jobid' => new external_value(PARAM_TEXT, 'UUID of the job this artifact is associated with', VALUE_REQUIRED), - 'status' => new external_value(PARAM_TEXT, 'New status to set for job with UUID of jobid', VALUE_REQUIRED), + 'jobid' => new external_value( + PARAM_TEXT, + 'UUID of the job this artifact is associated with', + VALUE_REQUIRED + ), + 'status' => new external_value( + PARAM_TEXT, + 'New status to set for job with UUID of jobid', + VALUE_REQUIRED + ), ]); } @@ -57,7 +65,10 @@ public static function execute_parameters(): external_function_parameters { */ public static function execute_returns(): external_single_structure { return new external_single_structure([ - 'status' => new external_value(PARAM_TEXT, 'Status of the executed wsfunction'), + 'status' => new external_value( + PARAM_TEXT, + 'Status of the executed wsfunction' + ), ]); } diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index c14fb72..98d73e5 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -163,14 +163,24 @@ public function definition() { $config->job_preset_archive_filename_pattern_locked ? 'disabled' : null ); if ($CFG->branch > 402) { - $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern', 'quiz_archiver', '', false, [ - 'variables' => array_reduce( - ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES, - fn($res, $varname) => $res."
  • \${".$varname."}: ".get_string('archive_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • ", - "" - ), - 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), - ]); + $mform->addHelpButton( + 'archive_filename_pattern', + 'archive_filename_pattern', + 'quiz_archiver', + '', + false, + [ + 'variables' => array_reduce( + ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES, + fn($res, $varname) => $res."
  • ". + "\${".$varname."}: ". + get_string('archive_filename_pattern_variable_'.$varname, 'quiz_archiver'). + "
  • ", + "" + ), + 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), + ] + ); } else { // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern_moodle42', 'quiz_archiver'); @@ -186,14 +196,24 @@ public function definition() { $config->job_preset_export_attempts_filename_pattern_locked ? 'disabled' : null ); if ($CFG->branch > 402) { - $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern', 'quiz_archiver', '', false, [ - 'variables' => array_reduce( - ArchiveJob::ATTEMPT_FILENAME_PATTERN_VARIABLES, - fn($res, $varname) => $res."
  • \${".$varname."}: ".get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • ", - "" - ), - 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), - ]); + $mform->addHelpButton( + 'export_attempts_filename_pattern', + 'export_attempts_filename_pattern', + 'quiz_archiver', + '', + false, + [ + 'variables' => array_reduce( + ArchiveJob::ATTEMPT_FILENAME_PATTERN_VARIABLES, + fn($res, $varname) => $res."
  • ". + "\${".$varname."}: ". + get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver'). + "
  • ", + "" + ), + 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), + ] + ); } else { // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern_moodle42', 'quiz_archiver'); diff --git a/classes/form/artifact_delete_form.php b/classes/form/artifact_delete_form.php index 0915a33..e711ce1 100644 --- a/classes/form/artifact_delete_form.php +++ b/classes/form/artifact_delete_form.php @@ -56,7 +56,8 @@ public function definition() { $warnmsg = get_string('delete_artifact_warning', 'quiz_archiver'); $warndetails = get_string('jobid', 'quiz_archiver').': '.$job->get_jobid(); $warndetails .= '
    '; - $warndetails .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; + $warndetails .= get_string('quiz_archive', 'quiz_archiver').': '.$artifactfile->get_filename(). + ' ('.display_size($artifactfile->get_filesize()).')'; // Warn additionally if job is scheduled for automatic deletion. if ($job->is_autodelete_enabled()) { diff --git a/classes/form/job_delete_form.php b/classes/form/job_delete_form.php index 990bca0..c98e78b 100644 --- a/classes/form/job_delete_form.php +++ b/classes/form/job_delete_form.php @@ -57,7 +57,8 @@ public function definition() { // Add artifact details if available. if ($artifactfile) { $warndetails .= '
    '; - $warndetails .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename().' ('.display_size($artifactfile->get_filesize()).')'; + $warndetails .= get_string('quiz_archive', 'quiz_archiver').': ' .$artifactfile->get_filename(). + ' ('.display_size($artifactfile->get_filesize()).')'; } // Warn additionally if job is scheduled for automatic deletion. diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index cbd35fb..aa22fdc 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -70,8 +70,11 @@ public function __construct(string $uniqueid, int $courseid, int $cmid, int $qui ]); $this->set_sql( - 'j.jobid, j.userid, j.timecreated, j.timemodified, j.status, j.retentiontime, j.artifactfilechecksum, f.pathnamehash, f.filesize, u.username', - '{'.ArchiveJob::JOB_TABLE_NAME.'} j JOIN {user} u ON j.userid = u.id LEFT JOIN {files} f ON j.artifactfileid = f.id', + 'j.jobid, j.userid, j.timecreated, j.timemodified, j.status, j.retentiontime, j.artifactfilechecksum, '. + 'f.pathnamehash, f.filesize, u.username', + '{'.ArchiveJob::JOB_TABLE_NAME.'} j '. + 'JOIN {user} u ON j.userid = u.id '. + 'LEFT JOIN {files} f ON j.artifactfileid = f.id', 'j.courseid = :courseid AND j.cmid = :cmid AND j.quizid = :quizid', [ 'courseid' => $courseid, @@ -105,7 +108,8 @@ public function col_timecreated($values) { */ public function col_status($values) { $s = ArchiveJob::get_status_display_args($values->status); - return ''.$s['text'].'
    '.date('H:i:s', $values->timemodified).''; + return ''.$s['text'].'
    '. + ''.date('H:i:s', $values->timemodified).''; } /** @@ -158,7 +162,8 @@ public function col_actions($values) { true, ); - $downloadtitle = get_string('download').': '.$artifactfile->get_filename().' ('.get_string('size').': '.display_size($artifactfile->get_filesize()).')'; + $downloadtitle = get_string('download').': '.$artifactfile->get_filename(). + ' ('.get_string('size').': '.display_size($artifactfile->get_filesize()).')'; // @codingStandardsIgnoreLine $html .= ''; } else { @@ -173,6 +178,7 @@ public function col_actions($values) { 'action' => 'delete_job', 'jobid' => $values->jobid, ]); + // @codingStandardsIgnoreLine $html .= ''; return $html; diff --git a/db/install.php b/db/install.php index e5d051a..cb0b665 100644 --- a/db/install.php +++ b/db/install.php @@ -37,7 +37,9 @@ function xmldb_quiz_archiver_install() { echo ''; diff --git a/report.php b/report.php index 84cd97c..1b60044 100644 --- a/report.php +++ b/report.php @@ -293,7 +293,8 @@ public function display($quiz, $cm, $course): bool { ]; // Inject global TSP settings. - $jm['tsp_enabled'] = ($this->config->tsp_enable == true); // Moodle stores checkbox values as '0' and '1'. Mustache interprets '0' as true. + // Moodle stores checkbox values as '0' and '1'. Mustache interprets '0' as true. + $jm['tsp_enabled'] = ($this->config->tsp_enable == true); return [ 'jobid' => $jm['jobid'], @@ -432,7 +433,12 @@ protected function initiate_archive_job( $this->cm->id, $this->quiz->id, [ - 'archive_filename' => ArchiveJob::generate_archive_filename($this->course, $this->cm, $this->quiz, $archivefilenamepattern), + 'archive_filename' => ArchiveJob::generate_archive_filename( + $this->course, + $this->cm, + $this->quiz, + $archivefilenamepattern + ), ], $taskarchivequizattempts, $taskmoodlebackups, diff --git a/settings.php b/settings.php index 84ac995..ba918bb 100644 --- a/settings.php +++ b/settings.php @@ -49,9 +49,11 @@ // Autoinstall. if (autoinstall::plugin_is_unconfigured()) { + // @codingStandardsIgnoreStart $autoinstallurl = new moodle_url('/mod/quiz/report/archiver/adminui/autoinstall.php'); $autoinstalldesc = "".get_string('autoinstall_start_now', 'quiz_archiver').""; $autoinstalldesc .= "

    ".get_string('autoinstall_explanation', 'quiz_archiver')."

    "; + // @codingStandardsIgnoreEnd } else { $autoinstalldesc = get_string('autoinstall_already_configured', 'quiz_archiver'); } @@ -166,7 +168,9 @@ get_string('archive_filename_pattern_help', 'quiz_archiver', [ 'variables' => array_reduce( ArchiveJob::ARCHIVE_FILENAME_PATTERN_VARIABLES, - fn ($res, $varname) => $res . "
  • \${".$varname."}: ".get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • " + fn ($res, $varname) => $res."
  • \${".$varname."}: ". + get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver'). + "
  • " , "" ), 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), @@ -182,7 +186,9 @@ get_string('export_attempts_filename_pattern_help', 'quiz_archiver', [ 'variables' => array_reduce( ArchiveJob::ATTEMPT_FILENAME_PATTERN_VARIABLES, - fn ($res, $varname) => $res . "
  • \${".$varname."}: ".get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver')."
  • " + fn ($res, $varname) => $res."
  • \${".$varname."}: ". + get_string('export_attempts_filename_pattern_variable_'.$varname, 'quiz_archiver'). + "
  • " , "" ), 'forbiddenchars' => implode('', ArchiveJob::FILENAME_FORBIDDEN_CHARACTERS), diff --git a/tests/ArchiveJob_test.php b/tests/ArchiveJob_test.php index d8310d4..d41f009 100644 --- a/tests/ArchiveJob_test.php +++ b/tests/ArchiveJob_test.php @@ -105,7 +105,8 @@ protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, 'timecreated' => time(), 'timemodified' => time(), ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. + 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' ); } @@ -287,6 +288,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { // Probe that the metadata contains the correct data. $actualjob = array_pop($actualjobs); + // @codingStandardsIgnoreStart $this->assertEquals($expectedjob->get_jobid(), $actualjob['jobid'], 'Jobid was not returned correctly'); $this->assertEquals($expectedjob->get_courseid(), $actualjob['course']['id'], 'Courseid was not returned correctly'); $this->assertEquals($expectedjob->get_cmid(), $actualjob['quiz']['cmid'], 'Course module id was not returned correctly'); @@ -311,6 +313,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $this->assertNotEmpty($actualjob['tsp']['timecreated'], 'TSP creation time was not returned'); $this->assertNotEmpty($actualjob['tsp']['queryfiledownloadurl'], 'TSP queryfile download URL was not returned'); $this->assertNotEmpty($actualjob['tsp']['replyfiledownloadurl'], 'TSP replyfile download URL was not returned'); + // @codingStandardsIgnoreEnd } } } @@ -422,9 +425,23 @@ public function test_delete_webservice_token(): void { if ($CFG->branch <= 401) { // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/lib/externallib.php'); - $wstoken = \external_generate_token(EXTERNAL_TOKEN_PERMANENT, 1, 1, context_system::instance(), time() + 3600, 0); + $wstoken = \external_generate_token( + EXTERNAL_TOKEN_PERMANENT, + 1, + 1, + context_system::instance(), + time() + 3600, + 0 + ); } else { - $wstoken = \core_external\util::generate_token(EXTERNAL_TOKEN_PERMANENT, \core_external\util::get_service_by_id(1), 1, context_system::instance(), time() + 3600, 0); + $wstoken = \core_external\util::generate_token( + EXTERNAL_TOKEN_PERMANENT, + \core_external\util::get_service_by_id(1), + 1, + context_system::instance(), + time() + 3600, + 0 + ); } // Create job and test token access. @@ -441,9 +458,15 @@ public function test_delete_webservice_token(): void { $mocks->settings ); - $this->assertNotEmpty($DB->get_record('external_tokens', ['token' => $wstoken]), 'Webservice token was not created correctly'); + $this->assertNotEmpty( + $DB->get_record('external_tokens', ['token' => $wstoken]), + 'Webservice token was not created correctly' + ); $job->delete_webservice_token(); - $this->assertEmpty($DB->get_record('external_tokens', ['token' => $wstoken]), 'Webservice token was not deleted correctly'); + $this->assertEmpty( + $DB->get_record('external_tokens', ['token' => $wstoken]), + 'Webservice token was not deleted correctly' + ); } /** @@ -549,10 +572,12 @@ public function test_artifact_deletion(): void { // Delete artifact and ensure that the underlying file was delete correctly. $job->delete_artifact(); + // @codingStandardsIgnoreStart $this->assertNull($job->get_artifact(), 'Job still returned an artifact file after deletion'); $this->assertFalse($job->has_artifact(), 'Job believes it still has an artifact file'); $this->assertFalse(get_file_storage()->get_file_by_id($artifact->get_id()), 'Artifact file was not deleted from file storage'); $this->assertSame(ArchiveJob::STATUS_DELETED, $job->get_status(), 'Job status was not set to deleted'); + // @codingStandardsIgnoreEnd } /** @@ -582,10 +607,12 @@ public function test_delete_expired_artifacts(): void { $job->link_artifact($artifact->get_id(), hash('sha256', 'foo bar baz')); // Ensure that the artifact is present. + // @codingStandardsIgnoreStart $this->assertTrue($job->has_artifact(), 'Job does not have an artifact file'); $this->assertSame(1, ArchiveJob::delete_expired_artifacts(), 'Unexpected number of artifacts were reported as deleted'); $this->assertFalse($job->has_artifact(), 'Job still has an artifact file after deletion'); $this->assertFalse(get_file_storage()->get_file_by_id($artifact->get_id()), 'Artifact file was not deleted from file storage'); + // @codingStandardsIgnoreEnd } /** @@ -699,7 +726,10 @@ public function test_temporary_file_deletion(): void { $this->assertEmpty($job->get_temporary_files(), 'Job still has temporary files after deletion'); foreach ($tmpfiles as $tmpfile) { - $this->assertFalse(get_file_storage()->get_file_by_id($tmpfile->get_id()), 'Temporary file was not deleted from file storage'); + $this->assertFalse( + get_file_storage()->get_file_by_id($tmpfile->get_id()), + 'Temporary file was not deleted from file storage' + ); } } diff --git a/tests/BackupManager_test.php b/tests/BackupManager_test.php index 6084d10..6f3c239 100644 --- a/tests/BackupManager_test.php +++ b/tests/BackupManager_test.php @@ -238,6 +238,7 @@ public function test_initialization_by_existing_backupid(): void { $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); // Course backup. + // @codingStandardsIgnoreStart $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); $this->assertNotEmpty($actualcoursebackup, 'Course backup was not created correctly from backup ID'); $this->assertEquals($expectedcoursebackup->backupid, $actualcoursebackup->get_backupid(), 'Course backup ID was not set correctly'); @@ -250,6 +251,7 @@ public function test_initialization_by_existing_backupid(): void { $this->assertEquals($expectedquizbackup->backupid, $actualquizbackup->get_backupid(), 'Quiz backup ID was not set correctly'); $this->assertEquals($expectedquizbackup->userid, $actualquizbackup->get_userid(), 'Quiz user ID was not set correctly'); $this->assertSame(backup::TYPE_1ACTIVITY, $actualquizbackup->get_type(), 'Quiz backup type was not set correctly'); + // @codingStandardsIgnoreEnd } /** @@ -322,11 +324,17 @@ public function test_backup_job_association(): void { // Course backup. $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); - $this->assertTrue($actualcoursebackup->is_associated_with_job($job), 'Course backup was not detected as associated with the given job'); + $this->assertTrue( + $actualcoursebackup->is_associated_with_job($job), + 'Course backup was not detected as associated with the given job' + ); // Quiz backup. $actualquizbackup = new BackupManager($expectedquizbackup->backupid); - $this->assertTrue($actualquizbackup->is_associated_with_job($job), 'Quiz backup was not detected as associated with the given job'); + $this->assertTrue( + $actualquizbackup->is_associated_with_job($job), + 'Quiz backup was not detected as associated with the given job' + ); } /** @@ -359,11 +367,17 @@ public function test_backup_invalid_job_association(): void { // Course backup. $actualcoursebackup = new BackupManager($expectedcoursebackup->backupid); - $this->assertFalse($actualcoursebackup->is_associated_with_job($job), 'Course backup was detected as associated with an unrelated job'); + $this->assertFalse( + $actualcoursebackup->is_associated_with_job($job), + 'Course backup was detected as associated with an unrelated job' + ); // Quiz backup. $actualquizbackup = new BackupManager($expectedquizbackup->backupid); - $this->assertFalse($actualquizbackup->is_associated_with_job($job), 'Quiz backup was detected as associated with an unrelated job'); + $this->assertFalse( + $actualquizbackup->is_associated_with_job($job), + 'Quiz backup was detected as associated with an unrelated job' + ); } } diff --git a/tests/FileManager_test.php b/tests/FileManager_test.php index f9df9df..bd16a92 100644 --- a/tests/FileManager_test.php +++ b/tests/FileManager_test.php @@ -109,7 +109,8 @@ protected function generate_draft_file(string $filename, string $filearea = 'dra 'timecreated' => time(), 'timemodified' => time(), ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. + 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' ); } @@ -137,7 +138,8 @@ protected function generate_temp_file(string $filename, int $expiry): \stored_fi 'timecreated' => time(), 'timemodified' => time(), ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. + 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' ); } @@ -298,6 +300,7 @@ public function test_send_virtual_file_tsp_query(): void { global $CFG, $DB; if ($CFG->branch < 404) { + // @codingStandardsIgnoreLine $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); } @@ -345,6 +348,7 @@ public function test_send_virtual_file_tsp_reply(): void { global $CFG, $DB; if ($CFG->branch < 404) { + // @codingStandardsIgnoreLine $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); } diff --git a/tests/Report_test.php b/tests/Report_test.php index c92f32e..5eb5ec8 100644 --- a/tests/Report_test.php +++ b/tests/Report_test.php @@ -210,34 +210,66 @@ public function test_generate_full_report() { $this->assertNotEmpty($html, 'Generated report is empty'); // Verify quiz header. - $this->assertMatchesRegularExpression('/]*quizreviewsummary[^<>]*>/', $html, 'Quiz header table not found'); - $this->assertMatchesRegularExpression('/]*>' . preg_quote($rc->course->fullname, '/') . '[^<>]+<\/td>/', $html, 'Course name not found'); - $this->assertMatchesRegularExpression('/]*>' . preg_quote($rc->quiz->name, '/') . '[^<>]+<\/td>/', $html, 'Quiz name not found'); + $this->assertMatchesRegularExpression( + '/]*quizreviewsummary[^<>]*>/', + $html, + 'Quiz header table not found' + ); + $this->assertMatchesRegularExpression( + '/]*>' . preg_quote($rc->course->fullname, + '/') . '[^<>]+<\/td>/', + $html, 'Course name not found' + ); + $this->assertMatchesRegularExpression( + '/]*>' . preg_quote($rc->quiz->name, + '/') . '[^<>]+<\/td>/', + $html, 'Quiz name not found' + ); // Verify overall quiz feedback. // TODO: Add proper overall feedback to reference quiz and check its contents. - $this->assertMatchesRegularExpression('/]*>\s*' . preg_quote(get_string('feedback', 'quiz'), '/') . '\s*<\/th>/', $html, 'Overall feedback header not found'); + $this->assertMatchesRegularExpression( + '/]*>\s*' . preg_quote(get_string('feedback', + 'quiz'), + '/' + ) . '\s*<\/th>/', $html, 'Overall feedback header not found'); // Verify questions. foreach (self::QUESTION_TYPES_IN_REFERENCE_QUIZ as $qtype) { $this->assertMatchesRegularExpression( - '/<[^<>]*class="[^\"<>]*que[^\"<>]*'.preg_quote($qtype, '/').'[^\"<>]*"[^<>]*>/', + '/<[^<>]*class="[^\"<>]*que[^\"<>]*' . preg_quote($qtype, '/') . '[^\"<>]*"[^<>]*>/', $html, - 'Question of type '.$qtype.' not found' + 'Question of type ' . $qtype . ' not found' ); } // Verify individual question feedback. - $this->assertMatchesRegularExpression('/
    /', $html, 'Individual question feedback not found'); + $this->assertMatchesRegularExpression( + '/
    /', + $html, + 'Individual question feedback not found' + ); // Verify general question feedback. - $this->assertMatchesRegularExpression('/
    /', $html, 'General question feedback not found'); + $this->assertMatchesRegularExpression( + '/
    /', + $html, + 'General question feedback not found' + ); // Verify correct answers. - $this->assertMatchesRegularExpression('/
    /', $html, 'Correct question answers not found'); + $this->assertMatchesRegularExpression( + '/
    /', + $html, + 'Correct question answers not found' + ); // Verify answer history. - $this->assertMatchesRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history not found'); + $this->assertMatchesRegularExpression( + '/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', + $html, + 'Answer history not found' + ); } /** @@ -349,13 +381,33 @@ public function test_generate_report_no_questions() { $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that no questions are present. - $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="[^\"<>]*que[^<>]*>/', $html, 'Question found when it should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/<[^<>]*class="[^\"<>]*que[^<>]*>/', + $html, + 'Question found when it should be absent' + ); // If questions are disabled, question_feedback, general_feedback, rightanswer and history should be absent. - $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Individual question feedback found when it should be absent'); - $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'General question feedback found when it should be absent'); - $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Correct question answers found when they should be absent'); - $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history found when it should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/
    /', + $html, + 'Individual question feedback found when it should be absent' + ); + $this->assertDoesNotMatchRegularExpression( + '/
    /', + $html, + 'General question feedback found when it should be absent' + ); + $this->assertDoesNotMatchRegularExpression( + '/
    /', + $html, + 'Correct question answers found when they should be absent' + ); + $this->assertDoesNotMatchRegularExpression( + '/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', + $html, + 'Answer history found when it should be absent' + ); } /** @@ -378,7 +430,11 @@ public function test_generate_report_no_question_feedback() { $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that question feedback is absent. - $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Individual question feedback found when it should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/
    /', + $html, + 'Individual question feedback found when it should be absent' + ); } /** @@ -401,7 +457,11 @@ public function test_generate_report_no_general_feedback() { $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that general feedback is absent. - $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'General question feedback found when it should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/
    /', + $html, + 'General question feedback found when it should be absent' + ); } /** @@ -424,7 +484,11 @@ public function test_generate_report_no_rightanswers() { $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that right answers are absent. - $this->assertDoesNotMatchRegularExpression('/
    /', $html, 'Correct question answers found when they should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/
    /', + $html, + 'Correct question answers found when they should be absent' + ); } /** @@ -447,7 +511,11 @@ public function test_generate_report_no_history() { $this->assertNotEmpty($html, 'Generated report is empty'); // Verify that answer history is absent. - $this->assertDoesNotMatchRegularExpression('/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', $html, 'Answer history found when it should be absent'); + $this->assertDoesNotMatchRegularExpression( + '/<[^<>]*class="responsehistoryheader[^\"<>]*"[^<>]*>/', + $html, + 'Answer history found when it should be absent' + ); } /** @@ -465,7 +533,13 @@ public function test_get_attempt_attachments() { $this->assertNotEmpty($attachments, 'No attachments found'); // Find cake.md attachment. - $this->assertNotEmpty(array_filter($attachments, fn($a) => $a['file']->get_filename() === 'cake.md'), 'cake.md attachment not found'); + $this->assertNotEmpty( + array_filter( + $attachments, + fn($a) => $a['file']->get_filename() === 'cake.md' + ), + 'cake.md attachment not found' + ); } /** @@ -493,7 +567,11 @@ public function test_get_attempt_attachments_metadata() { $this->assertNotEmpty($cake->contenthash, 'Attachment contenthash not set'); $this->assertNotEmpty($cake->downloadurl, 'Attachment downloadurl not set'); - $this->assertEquals(sha1_file(__DIR__.'/fixtures/cake.md'), $cake->contenthash, 'Attachment contenthash (SHA1) does not match'); + $this->assertEquals( + sha1_file(__DIR__ . '/fixtures/cake.md'), + $cake->contenthash, + 'Attachment contenthash (SHA1) does not match' + ); } /** @@ -544,7 +622,11 @@ public function test_get_attempts_metadata() { // Test filtered. $attemptsfilteredexisting = $report->get_attempts_metadata($rc->attemptids); $this->assertNotEmpty($attemptsfilteredexisting, 'No attempts found with existing attempt ids'); - $this->assertCount(count($rc->attemptids), $attemptsfilteredexisting, 'Incorrect number of attempts found with existing attempt ids'); + $this->assertCount( + count($rc->attemptids), + $attemptsfilteredexisting, + 'Incorrect number of attempts found with existing attempt ids' + ); $attemptsfilterednonexisting = $report->get_attempts_metadata([-1, -2, -3]); $this->assertEmpty($attemptsfilterednonexisting, 'Attempts found for non-existing attempt ids'); @@ -610,7 +692,11 @@ public function test_build_report_sections_from_formdata() { // Test all sections enabled. $formdata = self::get_formdata_all_reports_sections_enabled(); $sections = Report::build_report_sections_from_formdata($formdata); - $this->assertEquals(self::get_all_report_sections_enabled(), $sections, 'Full formdata not correctly converted to report sections'); + $this->assertEquals( + self::get_all_report_sections_enabled(), + $sections, + 'Full formdata not correctly converted to report sections' + ); // Test removal of dependent sections. $formdata = self::get_formdata_all_reports_sections_enabled(); diff --git a/tests/TSPManager_test.php b/tests/TSPManager_test.php index 2ded695..edadea4 100644 --- a/tests/TSPManager_test.php +++ b/tests/TSPManager_test.php @@ -82,7 +82,8 @@ protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, 'timecreated' => time(), 'timemodified' => time(), ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.' + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. + 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' ); } @@ -170,12 +171,27 @@ public function test_tsp_timestamp(): void { $this->assertTrue($tspmanager->has_tsp_timestamp(), 'Artifact was not detected as signed after signing it'); // Ensure that the TSP data was stored correctly. - $this->assertEquals('tsp-dummy-query', $tspmanager->get_tsp_data()->query, 'TSP query was not stored correctly'); - $this->assertEquals('tsp-dummy-reply-0123456789abcdef', $tspmanager->get_tsp_data()->reply, 'TSP reply was not stored correctly'); - $this->assertEquals('localhost', $tspmanager->get_tsp_data()->server, 'TSP server URL was not stored correctly'); + $this->assertEquals( + 'tsp-dummy-query', + $tspmanager->get_tsp_data()->query, + 'TSP query was not stored correctly' + ); + $this->assertEquals( + 'tsp-dummy-reply-0123456789abcdef', + $tspmanager->get_tsp_data()->reply, + 'TSP reply was not stored correctly' + ); + $this->assertEquals( + 'localhost', + $tspmanager->get_tsp_data()->server, + 'TSP server URL was not stored correctly' + ); // Ensure that the artifact does not want to be signed again. - $this->assertFalse($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed after it was signed'); + $this->assertFalse( + $job->tspmanager()->wants_tsp_timestamp(), + 'Artifact was detected as wanting to be signed after it was signed' + ); } /** @@ -289,7 +305,10 @@ public function test_signing_disabled(): void { $job->link_artifact($artifact->get_id(), $sha256sum); // Check that the artifact does not want to be signed. - $this->assertFalse($job->tspmanager()->wants_tsp_timestamp(), 'Artifact was detected as wanting to be signed while TSP is disabled'); + $this->assertFalse( + $job->tspmanager()->wants_tsp_timestamp(), + 'Artifact was detected as wanting to be signed while TSP is disabled' + ); // Try signing the artifact using TSP. $this->expectException(\Exception::class); diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index b291248..f2bd73a 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -151,9 +151,17 @@ public function parameter_data_provider(): array { $mocks = $this->generate_mock_quiz(); $base = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); return [ - 'Valid' => array_merge($base, ['shouldfail' => false]), - 'Invalid filenamepattern' => array_merge($base, ['filenamepattern' => 'Foo', 'shouldfail' => true]), - 'Invalid sections' => array_merge($base, ['sections' => ['foo' => true], 'shouldfail' => true]), + 'Valid' => array_merge($base, [ + 'shouldfail' => false, + ]), + 'Invalid filenamepattern' => array_merge($base, [ + 'filenamepattern' => 'Foo', + 'shouldfail' => true, + ]), + 'Invalid sections' => array_merge($base, [ + 'sections' => ['foo' => true], + 'shouldfail' => true, + ]), ]; } diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 08ec578..60696e3 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -181,13 +181,33 @@ public function parameter_data_provider(): array { $mocks = $this->generate_mock_quiz(); $base = $this->generate_valid_request('xxx', $mocks->quiz->cmid, $mocks->user->id); return [ - 'Valid' => array_merge($base, ['shouldfail' => false]), - 'Invalid jobid' => array_merge($base, ['jobid' => 'Foo', 'shouldfail' => true]), - 'Invalid artifact_component' => array_merge($base, ['artifact_component' => 'Foo', 'shouldfail' => true]), - 'Invalid artifact_filearea' => array_merge($base, ['artifact_filearea' => 'Foo', 'shouldfail' => true]), - 'Invalid artifact_filename' => array_merge($base, ['artifact_filename' => 'Foo', 'shouldfail' => true]), - 'Invalid artifact_filepath' => array_merge($base, ['artifact_filepath' => 'Foo', 'shouldfail' => true]), - 'Invalid artifact_sha256sum' => array_merge($base, ['artifact_sha256sum' => 'Foo', 'shouldfail' => true]), + 'Valid' => array_merge($base, [ + 'shouldfail' => false, + ]), + 'Invalid jobid' => array_merge($base, [ + 'jobid' => 'Foo', + 'shouldfail' => true, + ]), + 'Invalid artifact_component' => array_merge($base, [ + 'artifact_component' => 'Foo', + 'shouldfail' => true, + ]), + 'Invalid artifact_filearea' => array_merge($base, [ + 'artifact_filearea' => 'Foo', + 'shouldfail' => true, + ]), + 'Invalid artifact_filename' => array_merge($base, [ + 'artifact_filename' => 'Foo', + 'shouldfail' => true, + ]), + 'Invalid artifact_filepath' => array_merge($base, [ + 'artifact_filepath' => 'Foo', + 'shouldfail' => true, + ]), + 'Invalid artifact_sha256sum' => array_merge($base, [ + 'artifact_sha256sum' => 'Foo', + 'shouldfail' => true, + ]), ]; } diff --git a/tests/local/autoinstall_test.php b/tests/local/autoinstall_test.php index 5b418d3..02b3e5d 100644 --- a/tests/local/autoinstall_test.php +++ b/tests/local/autoinstall_test.php @@ -63,25 +63,46 @@ public function test_autoinstall(): void { $this->assertSame($workerurl, get_config('quiz_archiver', 'worker_url'), 'Worker URL was not set correctly'); // Check global config. - $this->assertEquals(true, get_config('moodle', 'enablewebservices'), 'Webservices were not globally enabled'); // This can not be assertTrue, since Moodle stores a '1'. - $this->assertStringContainsString('rest', get_config('moodle', 'webserviceprotocols'), 'REST protocol was not globally enabled'); + $this->assertEquals( // This can not be assertTrue, since Moodle stores a '1'. + true, + get_config('moodle', 'enablewebservices'), + 'Webservices were not globally enabled' + ); + $this->assertStringContainsString( + 'rest', + get_config('moodle', 'webserviceprotocols'), + 'REST protocol was not globally enabled' + ); // Check webservice. $webservice = $DB->get_record('external_services', ['name' => $wsname]); $this->assertNotEmpty($webservice, 'Webservice was not created'); $this->assertSame($webservice->name, $wsname, 'Webservice name was not set correctly'); - $this->assertNotEmpty($DB->get_records('external_services_functions', ['externalserviceid' => $webservice->id]), 'Webservice functions were not assigned'); - $this->assertSame($webservice->id, get_config('quiz_archiver', 'webservice_id'), 'Webservice ID was not set correctly'); + $this->assertNotEmpty( + $DB->get_records('external_services_functions', ['externalserviceid' => $webservice->id]), + 'Webservice functions were not assigned' + ); + $this->assertSame( + $webservice->id, + get_config('quiz_archiver', 'webservice_id'), + 'Webservice ID was not set correctly' + ); // Check role. $role = $DB->get_record('role', ['shortname' => $rolename]); $this->assertNotEmpty($role, 'Role was not created'); - $this->assertNotEmpty($DB->get_records('role_capabilities', ['roleid' => $role->id]), 'Role capabilities were not assigned'); + $this->assertNotEmpty( + $DB->get_records('role_capabilities', ['roleid' => $role->id]), + 'Role capabilities were not assigned' + ); // Check user. $user = $DB->get_record('user', ['username' => $username]); $this->assertNotEmpty($user, 'User was not created'); - $this->assertNotEmpty($DB->get_records('role_assignments', ['userid' => $user->id, 'roleid' => $role->id]), 'User role was not assigned'); + $this->assertNotEmpty( + $DB->get_records('role_assignments', ['userid' => $user->id, 'roleid' => $role->id]), + 'User role was not assigned' + ); $this->assertSame($user->id, get_config('quiz_archiver', 'webservice_userid'), 'User ID was not set correctly'); } From d9e3b854a03819be0e0a31edccdd0f1c206fc626 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 11:29:11 +0200 Subject: [PATCH 076/185] Prepend dummy MDL tracker number to TODOs --- classes/Report.php | 4 ++-- classes/external/generate_attempt_report.php | 2 +- classes/external/get_attempts_metadata.php | 2 +- classes/external/get_backup_status.php | 2 +- classes/external/process_uploaded_artifact.php | 2 +- classes/external/update_job_status.php | 2 +- classes/form/archive_quiz_form.php | 4 ++-- lang/de/quiz_archiver.php | 4 ++-- lang/en/quiz_archiver.php | 4 ++-- report.php | 4 ++-- tests/ArchiveJob_test.php | 2 +- tests/Report_test.php | 2 +- 12 files changed, 17 insertions(+), 17 deletions(-) diff --git a/classes/Report.php b/classes/Report.php index d332f75..4e139fc 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -505,10 +505,10 @@ public function generate(int $attemptid, array $sections): string { // Add summary table to the html. if ($CFG->branch <= 403) { - // FIXME: Remove after Moodle 4.1 (LTS) support ends on 2025-12-08. + // TODO (MDL-0): Remove after Moodle 4.1 (LTS) support ends on 2025-12-08. $html .= $renderer->review_summary_table($quizheaderdata, 0); } else { - // TODO: Rework into proper use of new 4.4 API but create appropriate test cases first. + // TODO (MDL-0): Rework into proper use of new 4.4 API but create appropriate test cases first. $html .= $renderer->review_attempt_summary( \mod_quiz\output\attempt_summary_information::create_from_legacy_array($quizheaderdata), 0 diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index 163d6c4..75fc8d2 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; diff --git a/classes/external/get_attempts_metadata.php b/classes/external/get_attempts_metadata.php index 46b67a6..909b061 100644 --- a/classes/external/get_attempts_metadata.php +++ b/classes/external/get_attempts_metadata.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; diff --git a/classes/external/get_backup_status.php b/classes/external/get_backup_status.php index 994c10d..96a72ef 100644 --- a/classes/external/get_backup_status.php +++ b/classes/external/get_backup_status.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; diff --git a/classes/external/process_uploaded_artifact.php b/classes/external/process_uploaded_artifact.php index d18e4b7..8e6bf5e 100644 --- a/classes/external/process_uploaded_artifact.php +++ b/classes/external/process_uploaded_artifact.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index 1fbe7a5..81fb0da 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -26,7 +26,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use core_external\external_api; diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index 98d73e5..f16984a 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -182,7 +182,7 @@ public function definition() { ] ); } else { - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $mform->addHelpButton('archive_filename_pattern', 'archive_filename_pattern_moodle42', 'quiz_archiver'); } $mform->setType('archive_filename_pattern', PARAM_TEXT); @@ -215,7 +215,7 @@ public function definition() { ] ); } else { - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $mform->addHelpButton('export_attempts_filename_pattern', 'export_attempts_filename_pattern_moodle42', 'quiz_archiver'); } $mform->setType('export_attempts_filename_pattern', PARAM_TEXT); diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 131ef28..35936ec 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -91,7 +91,7 @@ // Job creation form: Filename pattern. $string['archive_filename_pattern'] = 'Archivname'; $string['archive_filename_pattern_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['archive_filename_pattern_moodle42'] = 'Archivname'; $string['archive_filename_pattern_moodle42_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['archive_filename_pattern_variable_courseid'] = 'Kurs-ID'; @@ -106,7 +106,7 @@ $string['error_invalid_archive_filename_pattern'] = 'Ungültiger Archivname. Bitte korrigieren Sie Ihre Eingabe und versuchen Sie es erneut.'; $string['export_attempts_filename_pattern'] = 'Versuchsname'; $string['export_attempts_filename_pattern_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['export_attempts_filename_pattern_moodle42'] = 'Versuchsname'; $string['export_attempts_filename_pattern_moodle42_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${attemptid}: Versuchs-ID
    • ${username}: Nutzer Anmeldename
    • ${firstname}: Nutzer Vorname
    • ${lastname}: Nutzer Nachname
    • ${timestart}: Versuchsstart (Unix Timestamp)
    • ${timefinish}: Versuchsende (Unix Timestamp)
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Kurs-ID'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 195b517..276fc0c 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -91,7 +91,7 @@ // Job creation form: Filename pattern. $string['archive_filename_pattern'] = 'Archive name'; $string['archive_filename_pattern_help'] = 'Name of the generated quiz archive. Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
      {$a->variables}
    Forbidden characters: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['archive_filename_pattern_moodle42'] = 'Archive name'; $string['archive_filename_pattern_moodle42_help'] = 'Name of the generated quiz archive. Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
    • ${courseid}: Course ID
    • ${coursename}: Course name
    • ${courseshortname}: Course short name
    • ${cmid}: Course module ID
    • ${quizid}: Quiz ID
    • ${quizname}: Quiz name
    • ${date}: Current date (YYYY-MM-DD)
    • ${time}: Current time (HH-MM-SS)
    • ${timestamp}: Current unix timestamp
    Forbidden characters: \/.:;*?!"<>|'; $string['archive_filename_pattern_variable_courseid'] = 'Course ID'; @@ -106,7 +106,7 @@ $string['error_invalid_archive_filename_pattern'] = 'Invalid archive filename pattern. Please correct your input and try again.'; $string['export_attempts_filename_pattern'] = 'Report name'; $string['export_attempts_filename_pattern_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
      {$a->variables}
    Forbidden characters: {$a->forbiddenchars}'; -// TODO: Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['export_attempts_filename_pattern_moodle42'] = 'Report name'; $string['export_attempts_filename_pattern_moodle42_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
    • ${courseid}: Course ID
    • ${coursename}: Course name
    • ${courseshortname}: Course short name
    • ${cmid}: Course module ID
    • ${quizid}: Quiz ID
    • ${quizname}: Quiz name
    • ${attemptid}: Attempt ID
    • ${username}: Student username
    • ${firstname}: Student first name
    • ${lastname}: Student last name
    • ${timestart}: Attempt start unix timestamp
    • ${timefinish}: Attempt finish unix timestamp
    • ${date}: Current date (YYYY-MM-DD)
    • ${time}: Current time (HH-MM-SS)
    • ${timestamp}: Current unix timestamp
    Forbidden characters: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Course ID'; diff --git a/report.php b/report.php index 1b60044..4fa2735 100644 --- a/report.php +++ b/report.php @@ -24,7 +24,7 @@ defined('MOODLE_INTERNAL') || die(); -// TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. +// TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); use mod_quiz\local\reports\report_base; @@ -367,7 +367,7 @@ protected function initiate_archive_job( ); } else { // Moodle 4.1 and below. - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $wstoken = external_generate_token( EXTERNAL_TOKEN_PERMANENT, $this->config->webservice_id, diff --git a/tests/ArchiveJob_test.php b/tests/ArchiveJob_test.php index d41f009..eecae93 100644 --- a/tests/ArchiveJob_test.php +++ b/tests/ArchiveJob_test.php @@ -423,7 +423,7 @@ public function test_delete_webservice_token(): void { // Create temporary webservice token. global $CFG, $DB; if ($CFG->branch <= 401) { - // TODO: Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. require_once($CFG->dirroot.'/lib/externallib.php'); $wstoken = \external_generate_token( EXTERNAL_TOKEN_PERMANENT, diff --git a/tests/Report_test.php b/tests/Report_test.php index 5eb5ec8..1c25fe9 100644 --- a/tests/Report_test.php +++ b/tests/Report_test.php @@ -227,7 +227,7 @@ public function test_generate_full_report() { ); // Verify overall quiz feedback. - // TODO: Add proper overall feedback to reference quiz and check its contents. + // TODO (MDL-0): Add proper overall feedback to reference quiz and check its contents. $this->assertMatchesRegularExpression( '/]*>\s*' . preg_quote(get_string('feedback', 'quiz'), From 3d9882f54479e5afb3f08820d3fb47d6459b4a0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 11:33:10 +0200 Subject: [PATCH 077/185] Revert cli/autoinstall.php CLI_SCRIPT definition to old define syntax for Moodle CodeSniffer profile --- cli/autoinstall.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cli/autoinstall.php b/cli/autoinstall.php index 22c60f1..4900b83 100644 --- a/cli/autoinstall.php +++ b/cli/autoinstall.php @@ -23,15 +23,15 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// Must be kept at old define syntax because Moodle CodeSniffer profile does not detect new const syntax properly. +define('CLI_SCRIPT', true); + require_once(__DIR__ . '/../../../../../config.php'); require_once("{$CFG->libdir}/clilib.php"); require_once("{$CFG->dirroot}/mod/quiz/report/archiver/classes/local/autoinstall.php"); use quiz_archiver\local\autoinstall; -/** @var bool Identifies this script as a CLI script */ -const CLI_SCRIPT = true; - // XXX-> CLI options parsing. list($options, $unrecognised) = cli_get_params( From b0bf1880d38b1502d16cc50a3ef29c3dc0989ced Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 11:37:25 +0200 Subject: [PATCH 078/185] Ignore language files from coding style checks to keep proper string groupings --- lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 1 + 2 files changed, 2 insertions(+) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 35936ec..3a952d7 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -22,6 +22,7 @@ * @copyright 2024 Niels Gandraß * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreFile $string['pluginname'] = 'Quiz Archiver'; $string['archiver'] = 'Quiz Archiver'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 276fc0c..fff301f 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -22,6 +22,7 @@ * @copyright 2024 Niels Gandraß * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ +// @codingStandardsIgnoreFile $string['pluginname'] = 'Quiz Archiver'; $string['archiver'] = 'Quiz Archiver'; From 30eb7455a485ddb7ee4c792e7024fb7691a3337d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 11:38:40 +0200 Subject: [PATCH 079/185] Declare test classes as final --- tests/ArchiveJob_test.php | 2 +- tests/BackupManager_test.php | 2 +- tests/FileManager_test.php | 2 +- tests/RemoteArchiveWorker_test.php | 2 +- tests/Report_test.php | 2 +- tests/TSPManager_test.php | 2 +- tests/TimeStampProtocolClient_test.php | 2 +- tests/external/generate_attempt_report_test.php | 2 +- tests/external/get_attempts_metadata_test.php | 2 +- tests/external/get_backup_status_test.php | 2 +- tests/external/process_uploaded_artifact_test.php | 2 +- tests/external/update_job_status_test.php | 2 +- tests/local/autoinstall_test.php | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/ArchiveJob_test.php b/tests/ArchiveJob_test.php index eecae93..a5d2048 100644 --- a/tests/ArchiveJob_test.php +++ b/tests/ArchiveJob_test.php @@ -31,7 +31,7 @@ /** * Tests for the ArchiveJob class */ -class ArchiveJob_test extends \advanced_testcase { +final class ArchiveJob_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/BackupManager_test.php b/tests/BackupManager_test.php index 6f3c239..d518c82 100644 --- a/tests/BackupManager_test.php +++ b/tests/BackupManager_test.php @@ -31,7 +31,7 @@ /** * Tests for the BackupManager class */ -class BackupManager_test extends \advanced_testcase { +final class BackupManager_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/FileManager_test.php b/tests/FileManager_test.php index bd16a92..09148f1 100644 --- a/tests/FileManager_test.php +++ b/tests/FileManager_test.php @@ -29,7 +29,7 @@ /** * Tests for the FileManager class */ -class FileManager_test extends \advanced_testcase { +final class FileManager_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/RemoteArchiveWorker_test.php b/tests/RemoteArchiveWorker_test.php index 23c902d..9637f22 100644 --- a/tests/RemoteArchiveWorker_test.php +++ b/tests/RemoteArchiveWorker_test.php @@ -27,7 +27,7 @@ /** * Tests for the RemoteArchiveWorker class */ -class RemoteArchiveWorker_test extends \advanced_testcase { +final class RemoteArchiveWorker_test extends \advanced_testcase { /** * Test creation of request and interaction with the Moodle curl wrapper diff --git a/tests/Report_test.php b/tests/Report_test.php index 1c25fe9..71b6ac3 100644 --- a/tests/Report_test.php +++ b/tests/Report_test.php @@ -35,7 +35,7 @@ /** * Tests for the Report class */ -class Report_test extends \advanced_testcase { +final class Report_test extends \advanced_testcase { /** @var string[] Question types present in the reference quiz */ const QUESTION_TYPES_IN_REFERENCE_QUIZ = [ diff --git a/tests/TSPManager_test.php b/tests/TSPManager_test.php index edadea4..2b6ad11 100644 --- a/tests/TSPManager_test.php +++ b/tests/TSPManager_test.php @@ -29,7 +29,7 @@ /** * Tests for the TSPManager class */ -class TSPManager_test extends \advanced_testcase { +final class TSPManager_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/TimeStampProtocolClient_test.php b/tests/TimeStampProtocolClient_test.php index c74f6de..3561d31 100644 --- a/tests/TimeStampProtocolClient_test.php +++ b/tests/TimeStampProtocolClient_test.php @@ -27,7 +27,7 @@ /** * Tests for the TimeStampProtocolClient class */ -class TimeStampProtocolClient_test extends \advanced_testcase { +final class TimeStampProtocolClient_test extends \advanced_testcase { /** * Tests the creation of a TimeStampProtocolClient instance diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index f2bd73a..b3a21c1 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -29,7 +29,7 @@ /** * Tests for the generate_attempt_report external service */ -class generate_attempt_report_test extends \advanced_testcase { +final class generate_attempt_report_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index 6968403..061e4a5 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -27,7 +27,7 @@ /** * Tests for the get_attempts_metadata external service */ -class get_attempts_metadata_test extends \advanced_testcase { +final class get_attempts_metadata_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index 8a6577d..80d2485 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -30,7 +30,7 @@ /** * Tests for the get_backup_status external service */ -class get_backup_status_test extends \advanced_testcase { +final class get_backup_status_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 60696e3..072dbf5 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -31,7 +31,7 @@ /** * Tests for the process_uploaded_artifact external service */ -class process_uploaded_artifact_test extends \advanced_testcase { +final class process_uploaded_artifact_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index fb64040..25a850d 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -30,7 +30,7 @@ /** * Tests for the update_job_status external service */ -class update_job_status_test extends \advanced_testcase { +final class update_job_status_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/local/autoinstall_test.php b/tests/local/autoinstall_test.php index 02b3e5d..e72a998 100644 --- a/tests/local/autoinstall_test.php +++ b/tests/local/autoinstall_test.php @@ -27,7 +27,7 @@ /** * Tests for the autoinstall class */ -class autoinstall_test extends \advanced_testcase { +final class autoinstall_test extends \advanced_testcase { /** * Test one full autoinstall process From 1db176e46d1783abc1ca678ae6b4ebcb5d4aa017 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 11:41:54 +0200 Subject: [PATCH 080/185] Rename test classes and files to match lower-case PHPUnit test name --- tests/{ArchiveJob_test.php => archivejob_test.php} | 2 +- tests/{BackupManager_test.php => backupmanager_test.php} | 2 +- tests/{FileManager_test.php => filemanager_test.php} | 2 +- ...emoteArchiveWorker_test.php => remotearchiveworker_test.php} | 2 +- tests/{Report_test.php => report_test.php} | 2 +- ...ProtocolClient_test.php => timestampprotocolclient_test.php} | 2 +- tests/{TSPManager_test.php => tspmanager_test.php} | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) rename tests/{ArchiveJob_test.php => archivejob_test.php} (99%) rename tests/{BackupManager_test.php => backupmanager_test.php} (99%) rename tests/{FileManager_test.php => filemanager_test.php} (99%) rename tests/{RemoteArchiveWorker_test.php => remotearchiveworker_test.php} (96%) rename tests/{Report_test.php => report_test.php} (99%) rename tests/{TimeStampProtocolClient_test.php => timestampprotocolclient_test.php} (97%) rename tests/{TSPManager_test.php => tspmanager_test.php} (99%) diff --git a/tests/ArchiveJob_test.php b/tests/archivejob_test.php similarity index 99% rename from tests/ArchiveJob_test.php rename to tests/archivejob_test.php index a5d2048..2012e30 100644 --- a/tests/ArchiveJob_test.php +++ b/tests/archivejob_test.php @@ -31,7 +31,7 @@ /** * Tests for the ArchiveJob class */ -final class ArchiveJob_test extends \advanced_testcase { +final class archivejob_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/BackupManager_test.php b/tests/backupmanager_test.php similarity index 99% rename from tests/BackupManager_test.php rename to tests/backupmanager_test.php index d518c82..84ab401 100644 --- a/tests/BackupManager_test.php +++ b/tests/backupmanager_test.php @@ -31,7 +31,7 @@ /** * Tests for the BackupManager class */ -final class BackupManager_test extends \advanced_testcase { +final class backupmanager_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/FileManager_test.php b/tests/filemanager_test.php similarity index 99% rename from tests/FileManager_test.php rename to tests/filemanager_test.php index 09148f1..49ec2ca 100644 --- a/tests/FileManager_test.php +++ b/tests/filemanager_test.php @@ -29,7 +29,7 @@ /** * Tests for the FileManager class */ -final class FileManager_test extends \advanced_testcase { +final class filemanager_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests diff --git a/tests/RemoteArchiveWorker_test.php b/tests/remotearchiveworker_test.php similarity index 96% rename from tests/RemoteArchiveWorker_test.php rename to tests/remotearchiveworker_test.php index 9637f22..5c663e4 100644 --- a/tests/RemoteArchiveWorker_test.php +++ b/tests/remotearchiveworker_test.php @@ -27,7 +27,7 @@ /** * Tests for the RemoteArchiveWorker class */ -final class RemoteArchiveWorker_test extends \advanced_testcase { +final class remotearchiveworker_test extends \advanced_testcase { /** * Test creation of request and interaction with the Moodle curl wrapper diff --git a/tests/Report_test.php b/tests/report_test.php similarity index 99% rename from tests/Report_test.php rename to tests/report_test.php index 71b6ac3..ec38b24 100644 --- a/tests/Report_test.php +++ b/tests/report_test.php @@ -35,7 +35,7 @@ /** * Tests for the Report class */ -final class Report_test extends \advanced_testcase { +final class report_test extends \advanced_testcase { /** @var string[] Question types present in the reference quiz */ const QUESTION_TYPES_IN_REFERENCE_QUIZ = [ diff --git a/tests/TimeStampProtocolClient_test.php b/tests/timestampprotocolclient_test.php similarity index 97% rename from tests/TimeStampProtocolClient_test.php rename to tests/timestampprotocolclient_test.php index 3561d31..10c563d 100644 --- a/tests/TimeStampProtocolClient_test.php +++ b/tests/timestampprotocolclient_test.php @@ -27,7 +27,7 @@ /** * Tests for the TimeStampProtocolClient class */ -final class TimeStampProtocolClient_test extends \advanced_testcase { +final class timestampprotocolclient_test extends \advanced_testcase { /** * Tests the creation of a TimeStampProtocolClient instance diff --git a/tests/TSPManager_test.php b/tests/tspmanager_test.php similarity index 99% rename from tests/TSPManager_test.php rename to tests/tspmanager_test.php index 2b6ad11..9ed8130 100644 --- a/tests/TSPManager_test.php +++ b/tests/tspmanager_test.php @@ -29,7 +29,7 @@ /** * Tests for the TSPManager class */ -final class TSPManager_test extends \advanced_testcase { +final class tspmanager_test extends \advanced_testcase { /** * Generates a mock quiz to use in the tests From 0e4443faf2c4cb089c4f221e62d4e0180e9273ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 12:14:28 +0200 Subject: [PATCH 081/185] Attach coverage annotations to all PHPUnit test cases --- tests/archivejob_test.php | 65 +++++++++++++++++++ tests/backupmanager_test.php | 26 ++++++++ .../external/generate_attempt_report_test.php | 3 + tests/external/get_attempts_metadata_test.php | 3 + tests/external/get_backup_status_test.php | 7 ++ .../process_uploaded_artifact_test.php | 7 ++ tests/external/update_job_status_test.php | 6 ++ tests/filemanager_test.php | 37 +++++++++++ tests/local/autoinstall_test.php | 5 ++ tests/remotearchiveworker_test.php | 3 + tests/report_test.php | 37 +++++++++++ tests/timestampprotocolclient_test.php | 8 +++ tests/tspmanager_test.php | 12 ++++ 13 files changed, 219 insertions(+) diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index 2012e30..7a829f4 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -113,6 +113,9 @@ protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, /** * Tests the creation of a new archive job * + * @covers \quiz_archiver\ArchiveJob::create + * @covers \quiz_archiver\ArchiveJob::get_by_jobid + * * @throws \dml_exception * @throws \moodle_exception */ @@ -155,6 +158,10 @@ public function test_create_archive_job(): void { /** * Test the deletion of an archive job * + * @covers \quiz_archiver\ArchiveJob::create + * @covers \quiz_archiver\ArchiveJob::get_by_jobid + * @covers \quiz_archiver\ArchiveJob::delete + * * @throws \dml_exception * @throws \moodle_exception */ @@ -203,7 +210,25 @@ public function test_delete_archive_job(): void { * Tests the creation and retrieval of multiple jobs for different quizzes * as well as their metadata arrays. * + * @covers \quiz_archiver\ArchiveJob::create + * @covers \quiz_archiver\ArchiveJob::link_artifact + * @covers \quiz_archiver\ArchiveJob::get_jobs + * @covers \quiz_archiver\ArchiveJob::get_metadata_for_jobs + * @covers \quiz_archiver\ArchiveJob::get_jobid + * @covers \quiz_archiver\ArchiveJob::get_courseid + * @covers \quiz_archiver\ArchiveJob::get_cmid + * @covers \quiz_archiver\ArchiveJob::get_quizid + * @covers \quiz_archiver\ArchiveJob::get_userid + * @covers \quiz_archiver\ArchiveJob::get_retentiontime + * @covers \quiz_archiver\ArchiveJob::is_autodelete_enabled + * @covers \quiz_archiver\ArchiveJob::get_settings + * * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \file_exception + * @throws \moodle_exception + * @throws \stored_file_creation_exception */ public function test_multiple_jobs_retrieval_and_metadata(): void { global $DB; @@ -321,6 +346,10 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { /** * Test status changes of jobs * + * @covers \quiz_archiver\ArchiveJob::set_status + * @covers \quiz_archiver\ArchiveJob::get_status + * @covers \quiz_archiver\ArchiveJob::is_complete + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -372,6 +401,8 @@ public function test_set_job_status(): void { /** * Test webservice token access checks * + * @covers \quiz_archiver\ArchiveJob::has_write_access + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -415,6 +446,8 @@ public function test_wstoken_access_checks(): void { /** * Test the deletion of a webservice token * + * @covers \quiz_archiver\ArchiveJob::delete_webservice_token + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -472,6 +505,8 @@ public function test_delete_webservice_token(): void { /** * Test job timeout * + * @covers \quiz_archiver\ArchiveJob::timeout_if_overdue + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -510,6 +545,11 @@ public function test_job_timeout(): void { /** * Tests the linking of an artifact file to a job * + * @covers \quiz_archiver\ArchiveJob::link_artifact + * @covers \quiz_archiver\ArchiveJob::has_artifact + * @covers \quiz_archiver\ArchiveJob::get_artifact + * @covers \quiz_archiver\ArchiveJob::get_artifact_checksum + * * @return void * @throws \dml_exception * @throws \file_exception @@ -547,6 +587,8 @@ public function test_artifact_linking(): void { /** * Tests the deletion of an artifact file * + * @covers \quiz_archiver\ArchiveJob::delete_artifact + * * @return void * @throws \dml_exception * @throws \file_exception @@ -583,6 +625,8 @@ public function test_artifact_deletion(): void { /** * Tests the deletion of expired artifact files * + * @covers \quiz_archiver\ArchiveJob::delete_expired_artifacts + * * @return void * @throws \dml_exception * @throws \file_exception @@ -618,6 +662,8 @@ public function test_delete_expired_artifacts(): void { /** * Tests that the artifact checksum is null for non-existing artifacts * + * @covers \quiz_archiver\ArchiveJob::get_artifact_checksum + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -644,6 +690,9 @@ public function test_artifact_checksum_non_existing(): void { /** * Tests that temporary files can be linked to a job * + * @covers \quiz_archiver\ArchiveJob::link_temporary_file + * @covers \quiz_archiver\ArchiveJob::get_temporary_files + * * @return void * @throws \dml_exception * @throws \file_exception @@ -689,6 +738,8 @@ public function test_temporary_file_linking(): void { /** * Tests that temporary files are deleted properly * + * @covers \quiz_archiver\ArchiveJob::delete_temporary_files + * * @return void * @throws \dml_exception * @throws \file_exception @@ -736,6 +787,8 @@ public function test_temporary_file_deletion(): void { /** * Test archive filename pattern validation * + * @covers \quiz_archiver\ArchiveJob::is_valid_archive_filename_pattern + * * @dataProvider archive_filename_pattern_data_provider * * @param string $pattern Pattern to test @@ -801,6 +854,8 @@ function ($carry, $item) { /** * Test attempt filename pattern validation * + * @covers \quiz_archiver\ArchiveJob::is_valid_attempt_filename_pattern + * * @dataProvider attempt_filename_pattern_data_provider * * @param string $pattern Pattern to test @@ -866,6 +921,8 @@ function ($carry, $item) { /** * Test generation of valid archive filenames * + * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * * @return void * @throws \coding_exception * @throws \invalid_parameter_exception @@ -897,6 +954,8 @@ public function test_generate_archive_filename(): void { /** * Test generation of archive filenames without variables * + * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * * @return void * @throws \coding_exception * @throws \invalid_parameter_exception @@ -919,6 +978,8 @@ public function test_generate_archive_filename_without_variables(): void { /** * Test generation of archive filenames with invalid patterns * + * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * * @return void * @throws \coding_exception * @throws \invalid_parameter_exception @@ -941,6 +1002,8 @@ public function test_generate_archive_filename_invalid_pattern(): void { /** * Test generation of archive filenames with invalid variables * + * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * * @return void * @throws \coding_exception * @throws \invalid_parameter_exception @@ -963,6 +1026,8 @@ public function test_generate_archive_filename_invalid_variables(): void { /** * Test retrieval of human-readable job status * + * @covers \quiz_archiver\ArchiveJob::get_status_display_args + * * @dataProvider status_display_args_data_provider * * @param string $status diff --git a/tests/backupmanager_test.php b/tests/backupmanager_test.php index 84ab401..1d85ff3 100644 --- a/tests/backupmanager_test.php +++ b/tests/backupmanager_test.php @@ -82,6 +82,8 @@ protected function generate_mock_quiz(): \stdClass { /** * Tests the backup of a course * + * @covers \quiz_archiver\BackupManager::initiate_course_backup + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -110,6 +112,8 @@ public function test_course_backup(): void { /** * Tests the backup of a quiz * + * @covers \quiz_archiver\BackupManager::initiate_quiz_backup + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -138,6 +142,8 @@ public function test_quiz_backup(): void { /** * Tests the backup of a non-existing course * + * @covers \quiz_archiver\BackupManager::initiate_course_backup + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -154,6 +160,8 @@ public function test_backup_missing_course(): void { /** * Tests the backup of a non-existing quiz * + * @covers \quiz_archiver\BackupManager::initiate_quiz_backup + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -170,6 +178,8 @@ public function test_backup_missing_quiz(): void { /** * Tests backing up a course without the required privileges * + * @covers \quiz_archiver\BackupManager::initiate_course_backup + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -186,6 +196,8 @@ public function test_backup_course_without_privileges(): void { /** * Tests backing up a quiz without the required privileges * + * @covers \quiz_archiver\BackupManager::initiate_quiz_backup + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -202,6 +214,8 @@ public function test_backup_quiz_without_privileges(): void { /** * Tests the download URL generation with an explicitly given internal_wwwroot * + * @covers \quiz_archiver\BackupManager::initiate_course_backup + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -224,6 +238,8 @@ public function test_backup_download_url_generation_with_internal_wwwroot(): voi /** * Tests BackupManager instantiation by backupid * + * @covers \quiz_archiver\BackupManager::__construct + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -257,6 +273,8 @@ public function test_initialization_by_existing_backupid(): void { /** * Tests BackupManager instantiation by non-existing backupid * + * @covers \quiz_archiver\BackupManager::__construct + * * @return void * @throws \dml_exception */ @@ -268,6 +286,10 @@ public function test_initialization_by_non_existing_backupid(): void { /** * Tests access to backup status values * + * @covers \quiz_archiver\BackupManager::is_finished_successfully + * @covers \quiz_archiver\BackupManager::is_failed + * @covers \quiz_archiver\BackupManager::get_type + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -297,6 +319,8 @@ public function test_backup_status(): void { /** * Tests backup to job association detection * + * @covers \quiz_archiver\BackupManager::is_associated_with_job + * * @return void * @throws \base_setting_exception * @throws \base_task_exception @@ -340,6 +364,8 @@ public function test_backup_job_association(): void { /** * Tests backup to job association detection with an invalid job * + * @covers \quiz_archiver\BackupManager::is_associated_with_job + * * @return void * @throws \base_setting_exception * @throws \base_task_exception diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index b3a21c1..f03a3ff 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -80,6 +80,8 @@ protected function generate_valid_request(int $courseid, int $cmid, int $quizid, /** * Test that users without the required capabilities are rejected * + * @covers \quiz_archiver\external\generate_attempt_report::execute + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -107,6 +109,7 @@ public function test_capability_requirement(): void { * Verifies webservice parameter validation * * @dataProvider parameter_data_provider + * @covers \quiz_archiver\external\generate_attempt_report::execute * * @param int $courseid Course ID * @param int $cmid Course module ID diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index 061e4a5..3898621 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -74,6 +74,8 @@ protected function generate_valid_request(int $courseid, int $cmid, int $quizid) /** * Test that users without the required capabilities are rejected * + * @covers \quiz_archiver\external\get_attempts_metadata::execute + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -97,6 +99,7 @@ public function test_capability_requirement(): void { * Verifies webservice parameter validation * * @dataProvider parameter_data_provider + * @covers \quiz_archiver\external\get_attempts_metadata::execute * * @param int $courseid Course ID * @param int $cmid Course module ID diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index 80d2485..ed7eb69 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -60,6 +60,8 @@ protected function generate_mock_quiz(): \stdClass { /** * Test that users without the required capabilities are rejected * + * @covers \quiz_archiver\external\get_backup_status::execute + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -92,6 +94,7 @@ public function test_capability_requirement(): void { * Verifies webservice parameter validation * * @dataProvider parameter_data_provider + * @covers \quiz_archiver\external\get_backup_status::execute * * @param string $jobid Job ID * @param string $backupid Backup ID @@ -154,6 +157,8 @@ public function parameter_data_provider(): array { /** * Test wstoken validation * + * @covers \quiz_archiver\external\get_backup_status::execute + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -199,6 +204,8 @@ public function test_wstoken_access_check(): void { /** * Test that invalid jobs return no status * + * @covers \quiz_archiver\external\get_backup_status::execute + * * @return void * @throws \coding_exception * @throws \dml_exception diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 072dbf5..ec52a60 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -83,6 +83,8 @@ protected function generate_valid_request(string $jobid, int $cmid, int $userid) /** * Test that users without the required capabilities are rejected * + * @covers \quiz_archiver\external\process_uploaded_artifact::execute + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -126,6 +128,7 @@ public function test_capability_requirement(): void { * Verifies webservice parameter validation * * @dataProvider parameter_data_provider + * @covers \quiz_archiver\external\process_uploaded_artifact::execute * * @param string $jobid Job ID * @param string $artifactcomponent Component name @@ -214,6 +217,8 @@ public function parameter_data_provider(): array { /** * Test that completed jobs reject further artifact uploads * + * @covers \quiz_archiver\external\process_uploaded_artifact::execute + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -256,6 +261,8 @@ public function test_rejection_of_artifacts_for_complete_jobs(): void { /** * Test that missing files are reported correctly * + * @covers \quiz_archiver\external\process_uploaded_artifact::execute + * * @return void * @throws \coding_exception * @throws \dml_exception diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 25a850d..81c5092 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -60,6 +60,8 @@ protected function generate_mock_quiz(): \stdClass { /** * Test that users without the required capabilities are rejected * + * @covers \quiz_archiver\external\update_job_status::execute + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -89,6 +91,8 @@ public function test_capability_requirement(): void { /** * Tests that webservice tokens are validated against the requested job * + * @covers \quiz_archiver\external\update_job_status::execute + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -135,6 +139,7 @@ public function test_wstoken_validation(): void { * Verifies webservice parameter validation * * @dataProvider parameter_data_provider + * @covers \quiz_archiver\external\update_job_status::execute * * @param string $jobid Raw jobid parameter * @param string $status Raw status parameter @@ -186,6 +191,7 @@ public function parameter_data_provider(): array { * Test updating a valid job * * @dataProvider job_status_data_provider + * @covers \quiz_archiver\external\update_job_status::execute * * @param string $originstatus Status to transition from * @param string $targetstatus Status to transition to diff --git a/tests/filemanager_test.php b/tests/filemanager_test.php index 49ec2ca..afc0d4f 100644 --- a/tests/filemanager_test.php +++ b/tests/filemanager_test.php @@ -146,6 +146,8 @@ protected function generate_temp_file(string $filename, int $expiry): \stored_fi /** * Tests the generation of file paths based on context data * + * @covers \quiz_archiver\FileManager::get_file_path + * * @dataProvider file_path_generator_data_provider * * @param int $courseid @@ -219,6 +221,10 @@ public function file_path_generator_data_provider(): array { /** * Test artifact storing and retrieval * + * @covers \quiz_archiver\FileManager::__construct + * @covers \quiz_archiver\FileManager::store_uploaded_artifact + * @covers \quiz_archiver\FileManager::get_stored_artifacts + * * @return void * @throws \coding_exception * @throws \file_exception @@ -244,6 +250,9 @@ public function test_artifact_storing(): void { /** * Test that only uploaded draftfiles are stored and others are rejected * + * @covers \quiz_archiver\FileManager::__construct + * @covers \quiz_archiver\FileManager::store_uploaded_artifact + * * @return void * @throws \file_exception * @throws \stored_file_creation_exception @@ -261,6 +270,8 @@ public function test_artifact_storing_invalid_file(): void { /** * Tests the hash generation for a valid stored_file * + * @covers \quiz_archiver\FileManager::hash_file + * * @return void * @throws \file_exception * @throws \stored_file_creation_exception @@ -278,6 +289,8 @@ public function test_hash_valid_file(): void { /** * Tests hash generation using an invalid hash algorithm * + * @covers \quiz_archiver\FileManager::hash_file + * * @return void * @throws \file_exception * @throws \stored_file_creation_exception @@ -291,6 +304,7 @@ public function test_hash_file_invalid_algorithm(): void { * Tests sending a TSP query as a virtual file * * @runInSeparateProcess + * @covers \quiz_archiver\FileManager::send_virtual_file * * @return void * @throws \dml_exception @@ -339,6 +353,7 @@ public function test_send_virtual_file_tsp_query(): void { * Tests sending a TSP reply as a virtual file * * @runInSeparateProcess + * @covers \quiz_archiver\FileManager::send_virtual_file * * @return void * @throws \dml_exception @@ -387,6 +402,8 @@ public function test_send_virtual_file_tsp_reply(): void { * Tests sending a virtual TSP file for a relativepath that does not match * the information of the respective job. * + * @covers \quiz_archiver\FileManager::send_virtual_file + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -419,6 +436,8 @@ public function test_send_virtual_files_tsp_invalid_job(): void { /** * Tests sending a virtual TSP file for a job that has no TSP data. * + * @covers \quiz_archiver\FileManager::send_virtual_file + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -451,6 +470,8 @@ public function test_send_virtual_files_tsp_unsigned_job(): void { /** * Tests sending virtual file from invalid filearea. * + * @covers \quiz_archiver\FileManager::send_virtual_file + * * @return void * @throws \dml_exception */ @@ -466,6 +487,8 @@ public function test_send_virtual_files_invalid_filearea(): void { /** * Tests sending virtual file from invalid path. * + * @covers \quiz_archiver\FileManager::send_virtual_file + * * @return void * @throws \dml_exception */ @@ -481,6 +504,8 @@ public function test_send_virtual_files_invalid_path(): void { /** * Tests sending virtual file with invalid jobid. * + * @covers \quiz_archiver\FileManager::send_virtual_file + * * @return void * @throws \dml_exception */ @@ -500,6 +525,8 @@ public function test_send_virtual_files_invalid_jobid(): void { /** * Tests sending virtual file for non-existing job. * + * @covers \quiz_archiver\FileManager::send_virtual_file + * * @return void * @throws \dml_exception */ @@ -519,6 +546,8 @@ public function test_send_virtual_files_missing_job(): void { /** * Tests sending virtual file with invalid filename. * + * @covers \quiz_archiver\FileManager::send_virtual_file + * * @return void * @throws \dml_exception */ @@ -535,6 +564,8 @@ public function test_send_virtual_files_invalid_filename(): void { /** * Test extracting the data of a single attempt from a job artifact file. * + * @covers \quiz_archiver\FileManager::extract_attempt_data_from_artifact + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -576,6 +607,8 @@ public function test_extract_attempt_data_from_artifact(): void { /** * Test extracting a non-existing attempt from an artifact file. * + * @covers \quiz_archiver\FileManager::extract_attempt_data_from_artifact + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -613,6 +646,8 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { /** * Test extracting userdata from an invalid artifact file. * + * @covers \quiz_archiver\FileManager::extract_attempt_data_from_artifact + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -646,6 +681,8 @@ public function test_extract_attempt_data_from_invalid_artifact(): void { /** * Tests cleanup of temporary files produced by the attempt data extraction routine. * + * @covers \quiz_archiver\FileManager::cleanup_temp_files + * * @return void * @throws \dml_exception * @throws \file_exception diff --git a/tests/local/autoinstall_test.php b/tests/local/autoinstall_test.php index e72a998..cf2b280 100644 --- a/tests/local/autoinstall_test.php +++ b/tests/local/autoinstall_test.php @@ -32,6 +32,8 @@ final class autoinstall_test extends \advanced_testcase { /** * Test one full autoinstall process * + * @covers \quiz_archiver\local\autoinstall::execute + * * @return void * @throws \dml_exception */ @@ -110,6 +112,9 @@ public function test_autoinstall(): void { * Tests if autoinstalls are properly detected and repeated autoinstalls * are prevented. * + * @covers \quiz_archiver\local\autoinstall::plugin_is_unconfigured + * @covers \quiz_archiver\local\autoinstall::execute + * * @return void * @throws \dml_exception */ diff --git a/tests/remotearchiveworker_test.php b/tests/remotearchiveworker_test.php index 5c663e4..5456264 100644 --- a/tests/remotearchiveworker_test.php +++ b/tests/remotearchiveworker_test.php @@ -32,6 +32,9 @@ final class remotearchiveworker_test extends \advanced_testcase { /** * Test creation of request and interaction with the Moodle curl wrapper * + * @covers \quiz_archiver\RemoteArchiveWorker::__construct + * @covers \quiz_archiver\RemoteArchiveWorker::enqueue_archive_job + * * @return void * @throws \dml_exception */ diff --git a/tests/report_test.php b/tests/report_test.php index ec38b24..30791ab 100644 --- a/tests/report_test.php +++ b/tests/report_test.php @@ -162,6 +162,8 @@ protected static function get_formdata_all_reports_sections_enabled(): object { /** * Tests validation of webservice tokens * + * @covers \quiz_archiver\quiz_archiverReport::has_access + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -195,6 +197,8 @@ public function test_webservice_token_access_validation() { /** * Test generation of a full attempt report with all sections * + * @covers \quiz_archiver\quiz_archiverReport::generate + * * @return void * @throws \DOMException * @throws \coding_exception @@ -275,6 +279,8 @@ public function test_generate_full_report() { /** * Tests generation of a full page report with all sections * + * @covers \quiz_archiver\Report::generate_full_page + * * @return void * @throws \DOMException * @throws \coding_exception @@ -298,6 +304,8 @@ public function test_generate_full_page_stub() { /** * Tests generation of a report with no header * + * @covers \quiz_archiver\Report::generate + * * @throws \restore_controller_exception * @throws \coding_exception * @throws \dml_exception @@ -331,6 +339,8 @@ public function test_generate_report_no_header() { /** * Tests generation of a report with no quiz feedback * + * @covers \quiz_archiver\Report::generate + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -364,6 +374,8 @@ public function test_generate_report_no_quiz_feedback() { /** * Tests generation of a report with no questions * + * @covers \quiz_archiver\Report::generate + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -413,6 +425,8 @@ public function test_generate_report_no_questions() { /** * Tests generation of a report with no individual question feedback * + * @covers \quiz_archiver\Report::generate + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -440,6 +454,8 @@ public function test_generate_report_no_question_feedback() { /** * Tests generation of a report with no general question feedback * + * @covers \quiz_archiver\Report::generate + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -467,6 +483,8 @@ public function test_generate_report_no_general_feedback() { /** * Tests generation of a report without showing correct answers for questions * + * @covers \quiz_archiver\Report::generate + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -494,6 +512,8 @@ public function test_generate_report_no_rightanswers() { /** * Tests generation of a report without showing answer histories * + * @covers \quiz_archiver\Report::generate + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -521,6 +541,8 @@ public function test_generate_report_no_history() { /** * Tests to get the attachments of an attempt * + * @covers \quiz_archiver\Report::get_attempt_attachments + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -545,6 +567,8 @@ public function test_get_attempt_attachments() { /** * Tests metadata retrieval for attempt attachments * + * @covers \quiz_archiver\Report::get_attempt_attachments_metadata + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -577,6 +601,8 @@ public function test_get_attempt_attachments_metadata() { /** * Tests to get the attempts of a quiz * + * @covers \quiz_archiver\Report::get_attempts + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -594,6 +620,8 @@ public function test_get_attempts() { /** * Tests to get the attempt metadata array for a quiz * + * @covers \quiz_archiver\Report::get_attempts_metadata + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -634,6 +662,9 @@ public function test_get_attempts_metadata() { /** * Tests to get the IDs of users with attempts in a quiz + * + * @covers \quiz_archiver\Report::get_users_with_attempts + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -651,6 +682,8 @@ public function test_get_users_with_attempts() { /** * Tests to retrieve the latest attemptid of a user * + * @covers \quiz_archiver\Report::get_latest_attemptid_for_user + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -670,6 +703,8 @@ public function test_get_latest_attempt_for_user() { /** * Tests to retrieve existing and nonexisting attempts * + * @covers \quiz_archiver\Report::attempt_exists + * * @return void * @throws \dml_exception * @throws \moodle_exception @@ -686,6 +721,8 @@ public function test_attempt_exists() { /** * Tests conversion/sanitization of formdata to report section settings * + * @covers \quiz_archiver\Report::build_report_sections_from_formdata + * * @return void */ public function test_build_report_sections_from_formdata() { diff --git a/tests/timestampprotocolclient_test.php b/tests/timestampprotocolclient_test.php index 10c563d..b07520c 100644 --- a/tests/timestampprotocolclient_test.php +++ b/tests/timestampprotocolclient_test.php @@ -32,6 +32,8 @@ final class timestampprotocolclient_test extends \advanced_testcase { /** * Tests the creation of a TimeStampProtocolClient instance * + * @covers \quiz_archiver\TimeStampProtocolClient::__construct + * * @return void */ public function test_creation(): void { @@ -43,6 +45,8 @@ public function test_creation(): void { /** * Tests the generation of a nonce * + * @covers \quiz_archiver\TimeStampProtocolClient::generate_nonce + * * @return void * @throws \Exception */ @@ -63,6 +67,8 @@ public function test_generate_nonce(): void { /** * Tests the generation of a TSP request from valid data * + * @covers \quiz_archiver\TimeStampProtocolClient::sign + * * @return void * @throws \coding_exception */ @@ -77,6 +83,8 @@ public function test_signing_valid_data(): void { /** * Test the generation of a TSP request from invalid data * + * @covers \quiz_archiver\TimeStampProtocolClient::sign + * * @return void * @throws \Exception */ diff --git a/tests/tspmanager_test.php b/tests/tspmanager_test.php index 9ed8130..3f5b260 100644 --- a/tests/tspmanager_test.php +++ b/tests/tspmanager_test.php @@ -129,6 +129,11 @@ protected function create_mock_tspmanager( /** * Tests signing of valid artifacts using TSP * + * @covers \quiz_archiver\TSPManager::timestamp + * @covers \quiz_archiver\TSPManager::has_tsp_timestamp + * @covers \quiz_archiver\TSPManager::wants_tsp_timestamp + * @covers \quiz_archiver\TSPManager::get_tsp_data + * * @return void * @throws \dml_exception * @throws \file_exception @@ -197,6 +202,8 @@ public function test_tsp_timestamp(): void { /** * Tests deletion of TSP data * + * @covers \quiz_archiver\TSPManager::delete_tsp_data + * * @return void * @throws \dml_exception * @throws \file_exception @@ -240,6 +247,8 @@ public function test_delete_tsp_data(): void { /** * Tests error handling when trying to sign non-existing artifacts * + * @covers \quiz_archiver\TSPManager::timestamp + * * @return void * @throws \coding_exception * @throws \dml_exception @@ -274,6 +283,9 @@ public function test_signing_invalid_artifact(): void { /** * Tests error handling when trying to sign an artifact while TSP is globally disabled * + * @covers \quiz_archiver\TSPManager::timestamp + * @covers \quiz_archiver\TSPManager::wants_tsp_timestamp + * * @return void * @throws \coding_exception * @throws \dml_exception From afc0de6c7bcbb14a0d5b0162bc8ec827e4ba0eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 12:26:44 +0200 Subject: [PATCH 082/185] Make PHPUnit data providers static --- tests/archivejob_test.php | 6 +++--- tests/external/generate_attempt_report_test.php | 7 ++++--- tests/external/get_attempts_metadata_test.php | 7 ++++--- tests/external/get_backup_status_test.php | 5 +++-- tests/external/process_uploaded_artifact_test.php | 7 ++++--- tests/external/update_job_status_test.php | 4 ++-- tests/filemanager_test.php | 2 +- 7 files changed, 21 insertions(+), 17 deletions(-) diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index 7a829f4..de2f16f 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -808,7 +808,7 @@ public function test_archive_filename_pattern_validation(string $pattern, bool $ * * @return array[] Array of test cases */ - public function archive_filename_pattern_data_provider(): array { + public static function archive_filename_pattern_data_provider(): array { return [ 'Default pattern' => [ 'pattern' => 'quiz-archive-${courseshortname}-${courseid}-${quizname}-${quizid}_${date}-${time}', @@ -875,7 +875,7 @@ public function test_attempt_filename_pattern_validation(string $pattern, bool $ * * @return array[] Array of test cases */ - public function attempt_filename_pattern_data_provider(): array { + public static function attempt_filename_pattern_data_provider(): array { return [ 'Default pattern' => [ 'pattern' => 'attempt-${attemptid}-${username}_${date}-${time}', @@ -1052,7 +1052,7 @@ public function test_status_display_args(string $status): void { * * @return array List of job status values to test */ - public function status_display_args_data_provider(): array { + public static function status_display_args_data_provider(): array { return [ ArchiveJob::STATUS_UNKNOWN => ['status' => ArchiveJob::STATUS_UNKNOWN], ArchiveJob::STATUS_UNINITIALIZED => ['status' => ArchiveJob::STATUS_UNINITIALIZED], diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index f03a3ff..63deb7d 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -150,9 +150,10 @@ public function test_parameter_validation( * * @return array[] Test data */ - public function parameter_data_provider(): array { - $mocks = $this->generate_mock_quiz(); - $base = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + public static function parameter_data_provider(): array { + $self = new self(); + $mocks = $self->generate_mock_quiz(); + $base = $self->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); return [ 'Valid' => array_merge($base, [ 'shouldfail' => false, diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index 3898621..9329544 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -133,9 +133,10 @@ public function test_parameter_validation( * * @return array[] Test data */ - public function parameter_data_provider(): array { - $mocks = $this->generate_mock_quiz(); - $base = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + public static function parameter_data_provider(): array { + $self = new self(); + $mocks = $self->generate_mock_quiz(); + $base = $self->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); return [ 'Valid' => array_merge($base, ['shouldfail' => false]), 'Invalid attemptids (simple)' => array_merge($base, ['attemptids' => ['a'], 'shouldfail' => true]), diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index ed7eb69..dedf3f0 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -128,9 +128,10 @@ public function test_parameter_validation( * @throws \dml_exception * @throws \moodle_exception */ - public function parameter_data_provider(): array { + public static function parameter_data_provider(): array { // Create job. - $mocks = $this->generate_mock_quiz(); + $self = new self(); + $mocks = $self->generate_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index ec52a60..1c4560f 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -180,9 +180,10 @@ public function test_parameter_validation( * * @return array[] Test data */ - public function parameter_data_provider(): array { - $mocks = $this->generate_mock_quiz(); - $base = $this->generate_valid_request('xxx', $mocks->quiz->cmid, $mocks->user->id); + public static function parameter_data_provider(): array { + $self = new self(); + $mocks = $self->generate_mock_quiz(); + $base = $self->generate_valid_request('xxx', $mocks->quiz->cmid, $mocks->user->id); return [ 'Valid' => array_merge($base, [ 'shouldfail' => false, diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 81c5092..7b4044c 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -162,7 +162,7 @@ public function test_parameter_validation(string $jobid, string $status, bool $s * * @return array[] Test data */ - public function parameter_data_provider(): array { + public static function parameter_data_provider(): array { return [ 'Valid' => [ 'jobid' => '00000000-1234-5678-abcd-ef4242424242', @@ -239,7 +239,7 @@ public function test_update_job_status(string $originstatus, string $targetstatu * * @return array[] Test data */ - public function job_status_data_provider(): array { + public static function job_status_data_provider(): array { return [ 'Status: UNKNOWN -> UNINITIALIZED' => [ 'originstatus' => ArchiveJob::STATUS_UNKNOWN, diff --git a/tests/filemanager_test.php b/tests/filemanager_test.php index afc0d4f..38a4099 100644 --- a/tests/filemanager_test.php +++ b/tests/filemanager_test.php @@ -165,7 +165,7 @@ public function test_file_path_generator(int $courseid, int $cmid, int $quizid, * * @return array Test data for test_file_path_generator */ - public function file_path_generator_data_provider(): array { + public static function file_path_generator_data_provider(): array { return [ 'Full valid path' => [ 1, From aea6edd9764390b59751c7715a117f0794adae7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 12:28:59 +0200 Subject: [PATCH 083/185] Add missing return type declarations to some PHPUnit functions --- tests/external/update_job_status_test.php | 2 +- tests/report_test.php | 36 +++++++++++------------ 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 7b4044c..39ce7d4 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -203,7 +203,7 @@ public static function parameter_data_provider(): array { * @throws \moodle_exception * @throws \required_capability_exception */ - public function test_update_job_status(string $originstatus, string $targetstatus, array $expected) { + public function test_update_job_status(string $originstatus, string $targetstatus, array $expected): void { // Gain privileges. $this->setAdminUser(); $_GET['wstoken'] = 'TEST-WS-TOKEN'; diff --git a/tests/report_test.php b/tests/report_test.php index 30791ab..89125ae 100644 --- a/tests/report_test.php +++ b/tests/report_test.php @@ -169,7 +169,7 @@ protected static function get_formdata_all_reports_sections_enabled(): object { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_webservice_token_access_validation() { + public function test_webservice_token_access_validation(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $validtoken = md5("VALID-TEST-TOKEN"); @@ -205,7 +205,7 @@ public function test_webservice_token_access_validation() { * @throws \dml_exception * @throws \moodle_exception */ - public function test_generate_full_report() { + public function test_generate_full_report(): void { $rc = $this->prepare_reference_course(); // Generate full report with all sections. @@ -288,7 +288,7 @@ public function test_generate_full_report() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_generate_full_page_stub() { + public function test_generate_full_page_stub(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $html = $report->generate_full_page( @@ -311,7 +311,7 @@ public function test_generate_full_page_stub() { * @throws \dml_exception * @throws \moodle_exception */ - public function test_generate_report_no_header() { + public function test_generate_report_no_header(): void { $rc = $this->prepare_reference_course(); // Generate report without a header. @@ -347,7 +347,7 @@ public function test_generate_report_no_header() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_generate_report_no_quiz_feedback() { + public function test_generate_report_no_quiz_feedback(): void { $rc = $this->prepare_reference_course(); // Generate report without quiz feedback. @@ -382,7 +382,7 @@ public function test_generate_report_no_quiz_feedback() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_generate_report_no_questions() { + public function test_generate_report_no_questions(): void { $rc = $this->prepare_reference_course(); // Generate report without questions. @@ -433,7 +433,7 @@ public function test_generate_report_no_questions() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_generate_report_no_question_feedback() { + public function test_generate_report_no_question_feedback(): void { $rc = $this->prepare_reference_course(); // Generate report without question feedback. @@ -462,7 +462,7 @@ public function test_generate_report_no_question_feedback() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_generate_report_no_general_feedback() { + public function test_generate_report_no_general_feedback(): void { $rc = $this->prepare_reference_course(); // Generate report without general feedback. @@ -491,7 +491,7 @@ public function test_generate_report_no_general_feedback() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_generate_report_no_rightanswers() { + public function test_generate_report_no_rightanswers(): void { $rc = $this->prepare_reference_course(); // Generate report without right answers. @@ -520,7 +520,7 @@ public function test_generate_report_no_rightanswers() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_generate_report_no_history() { + public function test_generate_report_no_history(): void { $rc = $this->prepare_reference_course(); // Generate report without answer history. @@ -548,7 +548,7 @@ public function test_generate_report_no_history() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_get_attempt_attachments() { + public function test_get_attempt_attachments(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attachments = $report->get_attempt_attachments($rc->attemptids[0]); @@ -574,7 +574,7 @@ public function test_get_attempt_attachments() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_get_attempt_attachments_metadata() { + public function test_get_attempt_attachments_metadata(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attachments = $report->get_attempt_attachments_metadata($rc->attemptids[0]); @@ -608,7 +608,7 @@ public function test_get_attempt_attachments_metadata() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_get_attempts() { + public function test_get_attempts(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attempts = $report->get_attempts(); @@ -627,7 +627,7 @@ public function test_get_attempts() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_get_attempts_metadata() { + public function test_get_attempts_metadata(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -670,7 +670,7 @@ public function test_get_attempts_metadata() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_get_users_with_attempts() { + public function test_get_users_with_attempts(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -689,7 +689,7 @@ public function test_get_users_with_attempts() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_get_latest_attempt_for_user() { + public function test_get_latest_attempt_for_user(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -710,7 +710,7 @@ public function test_get_latest_attempt_for_user() { * @throws \moodle_exception * @throws \restore_controller_exception */ - public function test_attempt_exists() { + public function test_attempt_exists(): void { $rc = $this->prepare_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -725,7 +725,7 @@ public function test_attempt_exists() { * * @return void */ - public function test_build_report_sections_from_formdata() { + public function test_build_report_sections_from_formdata(): void { // Test all sections enabled. $formdata = self::get_formdata_all_reports_sections_enabled(); $sections = Report::build_report_sections_from_formdata($formdata); From e1edc8c79c9e2e672e3f3840eb9955ab55bb89a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 15:51:41 +0200 Subject: [PATCH 084/185] Improve English and German translations --- lang/de/quiz_archiver.php | 68 +++++++++++++++++++-------------------- lang/en/quiz_archiver.php | 34 ++++++++++---------- 2 files changed, 50 insertions(+), 52 deletions(-) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 3a952d7..e5932d3 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -34,7 +34,7 @@ $string['manual_configuration_continue'] = 'Um alle Plugin-Einstellungen manuell zu setzen, verwenden Sie die Schaltfläche "Weiter" am Ende dieser Seite.'; // Capabilities. -$string['quiz_archiver:view'] = 'Quiz Archiver Berichtsseite anzeigen'; +$string['quiz_archiver:view'] = 'Quiz Archiver Seite anzeigen'; $string['quiz_archiver:archive'] = 'Erstellen und Löschen von Testarchiven'; $string['quiz_archiver:use_webservice'] = 'Webservice des Quiz Archivers nutzen (lesend und schreibend)'; @@ -49,12 +49,12 @@ $string['users_with_attempts'] = 'Nutzende mit Versuchen'; $string['archive_autodelete'] = 'Automatische Löschung'; $string['archive_autodelete_short'] = 'Löschung'; -$string['archive_autodelete_help'] = 'Automatisches Löschen dieses Testarchivs nach einer bestimmten Zeit. Die Aufbewahrungszeit kann konfiguriert werden, sobald die automatische Löschung aktiviert ist.'; +$string['archive_autodelete_help'] = 'Automatisches Löschen dieses Testarchivs nach einer bestimmten Zeit. Die Speicherdauer kann konfiguriert werden, sobald die automatische Löschung aktiviert ist.'; $string['archive_quiz'] = 'Test archivieren'; -$string['archive_retention_time'] = 'Aufbewahrungszeit'; -$string['archive_retention_time_help'] = 'Die Aufbewahrungszeit dieses Testarchivs, bevor es automatisch gelöscht wird. Diese Einstellung hat nur Auswirkungen, wenn die automatische Löschung aktiviert ist.'; -$string['create_quiz_archive'] = 'Neues Archiv erstellen'; -$string['archive_quiz_form_desc'] = 'Füllen Sie dieses Formular aus, um den Test zu archivieren. Die Archivierung findet asynchron statt und kann einige Zeit in Anspruch nehmen. Sie können den aktuellen Status jederzeit auf dieser Seite überprüfen und fertige Archive herunterladen.'; +$string['archive_retention_time'] = 'Speicherdauer'; +$string['archive_retention_time_help'] = 'Die Speicherdauer dieses Testarchivs, bevor es automatisch gelöscht wird. Diese Einstellung hat nur Auswirkungen, wenn die automatische Löschung aktiviert ist.'; +$string['create_quiz_archive'] = 'Neues Testarchiv erstellen'; +$string['archive_quiz_form_desc'] = 'Verwenden Sie dieses Formular um den ausgewählten Test zu archivieren. Die Archivierung findet asynchron statt und kann einige Zeit in Anspruch nehmen. Sie können den aktuellen Status jederzeit auf dieser Seite überprüfen sowie fertige Archive herunterladen.'; $string['error_archive_quiz_form_validation_failed'] = 'Validierung der gesendeten Formulardaten fehlgeschlagen. Bitte überprüfen Sie Ihre Eingaben.'; $string['export_attempts'] = 'Testversuche exportieren'; $string['export_attempts_help'] = 'Es werden stets alle Testversuche exportiert'; @@ -66,27 +66,27 @@ $string['export_attempts_paper_format'] = 'Papierformat'; $string['export_attempts_paper_format_help'] = 'Das Papierformat für den PDF-Export. Dies hat keinen Einfluss auf HTML-Exporte.'; $string['export_course_backup'] = 'Vollständiges Moodle Kursbackup (.mbz) erzeugen'; -$string['export_course_backup_help'] = 'Erzeugt ein vollständiges Moodle Kursbackup (.mbz) mit allen Kursinhalten und -einstellungen. Dies kann genutzt werden, um den gesamten Kurs in ein anderes Moodle-System zu importieren.'; +$string['export_course_backup_help'] = 'Erzeugt ein vollständiges Moodle Kursbackup (.mbz) mit allen Kursinhalten und -einstellungen. Dies kann genutzt werden, um den gesamten Kurs in einem anderen Moodle-System zu importieren.'; $string['export_quiz_backup'] = 'Moodle Testbackup (.mbz) erzeugen'; -$string['export_quiz_backup_help'] = 'Erzeugt ein Moodle Testbackup (.mbz) mit allen Testinhalten und Fragen. Dies kann genutzt werden, um den Test unabhängig von diesem Kurs in ein anderes Moodle-System zu importieren.'; +$string['export_quiz_backup_help'] = 'Erzeugt ein Moodle Testbackup (.mbz) mit allen Testinhalten und Fragen. Dies kann genutzt werden, um den Test unabhängig von diesem Kurs in einem anderen Moodle-System zu importieren.'; $string['export_report_section_header'] = 'Test-Metadaten einschließen'; $string['export_report_section_header_help'] = 'Metadaten des Versuchs (z.B. Teilnehmender, Startzeitpunkt, Endzeitpunkt, Bewertung, ...) im Bericht einschließen'; $string['export_report_section_question'] = 'Fragen einschließen'; -$string['export_report_section_question_help'] = 'Alle Fragen des Tests im Bericht einschließen'; +$string['export_report_section_question_help'] = 'Alle Fragen des Versuchs im Bericht einschließen'; $string['export_report_section_rightanswer'] = 'Richtige Antworten einschließen'; -$string['export_report_section_rightanswer_help'] = 'Richtige Antworten der Fragen im Bericht einschließen'; +$string['export_report_section_rightanswer_help'] = 'Richtige Antworten für alle Fragen im Bericht einschließen'; $string['export_report_section_quiz_feedback'] = 'Testfeedback einschließen'; $string['export_report_section_quiz_feedback_help'] = 'Generelles Test-Feedback im Bericht einschließen'; $string['export_report_section_question_feedback'] = 'Individuelles Fragenfeedback einschließen'; $string['export_report_section_question_feedback_help'] = 'Individuelles Fragenfeedback im Bericht einschließen'; $string['export_report_section_general_feedback'] = 'Allgemeines Fragenfeedback einschließen'; $string['export_report_section_general_feedback_help'] = 'Allgemeines Fragenfeedback im Bericht einschließen'; -$string['export_report_section_history'] = 'Bearbeitungsverlauf einschließen'; -$string['export_report_section_history_help'] = 'Bearbeitungsverlauf der Testfragen im Bericht einschließen'; +$string['export_report_section_history'] = 'Antworthistorie einschließen'; +$string['export_report_section_history_help'] = 'Antworthistorie für alle Testfragen im Bericht einschließen'; $string['export_report_section_attachments'] = 'Dateiabgaben einschließen'; -$string['export_report_section_attachments_help'] = 'Alle Dateiabgaben (z.B. von Aufsätzen/Essay Aufgaben) im Archiv einschließen. Warnung: Dies kann die Archivgröße erheblich erhöhen.'; +$string['export_report_section_attachments_help'] = 'Alle Dateiabgaben (z.B. von Freitextaufgaben) im Archiv einschließen. Warnung: Dies kann die Archivgröße erheblich erhöhen.'; $string['job_overview'] = 'Testarchive'; -$string['num_attempts'] = 'Anzahl Testversuche'; +$string['num_attempts'] = 'Anzahl der Testversuche'; $string['error_plugin_is_not_configured'] = 'Fehler: Das Quiz Archiver Plugin ist noch nicht konfiguriert. Bitte kontaktieren Sie Ihren Website-Administrator.'; // Job creation form: Filename pattern. @@ -94,7 +94,7 @@ $string['archive_filename_pattern_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; // TODO (MDL-0): Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['archive_filename_pattern_moodle42'] = 'Archivname'; -$string['archive_filename_pattern_moodle42_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; +$string['archive_filename_pattern_moodle42_help'] = 'Name des erzeugten Archivs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix-Zeitstempel
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['archive_filename_pattern_variable_courseid'] = 'Kurs-ID'; $string['archive_filename_pattern_variable_coursename'] = 'Kursname'; $string['archive_filename_pattern_variable_courseshortname'] = 'Kurzer Kursname'; @@ -103,13 +103,13 @@ $string['archive_filename_pattern_variable_quizname'] = 'Testname'; $string['archive_filename_pattern_variable_date'] = 'Aktuelles Datum (YYYY-MM-DD)'; $string['archive_filename_pattern_variable_time'] = 'Aktuelle Uhrzeit (HH-MM-SS)'; -$string['archive_filename_pattern_variable_timestamp'] = 'Aktueller Unix Timestamp'; +$string['archive_filename_pattern_variable_timestamp'] = 'Aktueller Unix-Zeitstempel'; $string['error_invalid_archive_filename_pattern'] = 'Ungültiger Archivname. Bitte korrigieren Sie Ihre Eingabe und versuchen Sie es erneut.'; $string['export_attempts_filename_pattern'] = 'Versuchsname'; $string['export_attempts_filename_pattern_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
      {$a->variables}
    Verbotene Zeichen: {$a->forbiddenchars}'; // TODO (MDL-0): Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. $string['export_attempts_filename_pattern_moodle42'] = 'Versuchsname'; -$string['export_attempts_filename_pattern_moodle42_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${attemptid}: Versuchs-ID
    • ${username}: Nutzer Anmeldename
    • ${firstname}: Nutzer Vorname
    • ${lastname}: Nutzer Nachname
    • ${timestart}: Versuchsstart (Unix Timestamp)
    • ${timefinish}: Versuchsende (Unix Timestamp)
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix Timestamp
    Verbotene Zeichen: \/.:;*?!"<>|'; +$string['export_attempts_filename_pattern_moodle42_help'] = 'Name eines archivierten Versuchs. Variablen müssen dem ${variablename} Muster folgen. Die Dateiendung wird automatisch hinzugefügt.

    Verfügbare Variablen:
    • ${courseid}: Kurs-ID
    • ${coursename}: Kursname
    • ${courseshortname}: Kurzer Kursname
    • ${cmid}: Kursmodul-ID
    • ${quizid}: Test-ID
    • ${quizname}: Testname
    • ${attemptid}: Versuchs-ID
    • ${username}: Nutzer Anmeldename
    • ${firstname}: Nutzer Vorname
    • ${lastname}: Nutzer Nachname
    • ${timestart}: Versuchsstart (Unix-Zeitstempel)
    • ${timefinish}: Versuchsende (Unix-Zeitstempel)
    • ${date}: Aktuelles Datum (YYYY-MM-DD)
    • ${time}: Aktuelle Uhrzeit (HH-MM-SS)
    • ${timestamp}: Aktueller Unix-Zeitstempel
    Verbotene Zeichen: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Kurs-ID'; $string['export_attempts_filename_pattern_variable_coursename'] = 'Kursname'; $string['export_attempts_filename_pattern_variable_courseshortname'] = 'Kurzer Kursname'; @@ -120,11 +120,11 @@ $string['export_attempts_filename_pattern_variable_username'] = 'Nutzer Anmeldename'; $string['export_attempts_filename_pattern_variable_firstname'] = 'Nutzer Vorname'; $string['export_attempts_filename_pattern_variable_lastname'] = 'Nutzer Nachname'; -$string['export_attempts_filename_pattern_variable_timestart'] = 'Versuchsstart (Unix Timestamp)'; -$string['export_attempts_filename_pattern_variable_timefinish'] = 'Versuchsende (Unix Timestamp)'; +$string['export_attempts_filename_pattern_variable_timestart'] = 'Versuchsstart (Unix-Zeitstempel)'; +$string['export_attempts_filename_pattern_variable_timefinish'] = 'Versuchsende (Unix-Zeitstempel)'; $string['export_attempts_filename_pattern_variable_date'] = 'Aktuelles Datum (YYYY-MM-DD)'; $string['export_attempts_filename_pattern_variable_time'] = 'Aktuelle Uhrzeit (HH-MM-SS)'; -$string['export_attempts_filename_pattern_variable_timestamp'] = 'Aktueller Unix Timestamp'; +$string['export_attempts_filename_pattern_variable_timestamp'] = 'Aktueller Unix-Zeitstempel'; $string['error_invalid_attempt_filename_pattern'] = 'Ungültiger Versuchsname. Bitte korrigieren Sie Ihre Eingabe und versuchen Sie es erneut.'; // Job. @@ -136,7 +136,7 @@ $string['jobid'] = 'Auftrags-ID'; $string['job_created_successfully'] = 'Neuer Archivierungsauftrag erfolgreich erstellt: {$a}'; $string['job_status_UNKNOWN'] = 'Unbekannt'; -$string['job_status_UNINITIALIZED'] = 'Nicht initialisiert'; +$string['job_status_UNINITIALIZED'] = 'Neu'; $string['job_status_AWAITING_PROCESSING'] = 'Wartend'; $string['job_status_RUNNING'] = 'Läuft'; $string['job_status_FINISHED'] = 'Fertig'; @@ -165,17 +165,17 @@ $string['tsp_reply_filename'] = 'reply.tsr'; // TimeStampProtocolClient. -$string['tsp_client_error_content_type'] = 'TSP Server hat einen unerwarteten Content-Type {$a} zurückgegeben'; -$string['tsp_client_error_curl'] = 'Fehler beim senden des TSP Requests: {$a}'; -$string['tsp_client_error_http_code'] = 'TSP Server hat unerwarteten HTTP Statuscode {$a} zurückgegeben'; +$string['tsp_client_error_content_type'] = 'TSP-Server hat einen unerwarteten Content-Type {$a} zurückgegeben'; +$string['tsp_client_error_curl'] = 'Fehler beim senden des TSP-Requests: {$a}'; +$string['tsp_client_error_http_code'] = 'TSP-Server hat einen unerwarteten HTTP Statuscode {$a} zurückgegeben'; // Settings. $string['setting_autoconfigure'] = 'Automatische Konfiguration'; $string['setting_header_archive_worker'] = 'Archive Worker Service'; -$string['setting_header_archive_worker_desc'] = 'Konfiguration des Archive Worker Services und des Moodle Webservices.'; +$string['setting_header_archive_worker_desc'] = 'Konfiguration des Archive Worker Services sowie des Moodle Webservices.'; $string['setting_header_docs_desc'] = 'Dieses Plugin archiviert Testversuche als PDF- und HTML-Dateien zur langfristigen Speicherung unabhängig von Moodle. Es erfordert die Installation eines separaten Archive Worker Services um korrekt zu funktionieren. Die Dokumentation enthält alle notwendigen Informationen und Installationsanweisungen.'; -$string['setting_header_job_presets'] = 'Archiv-Vorgaben'; -$string['setting_header_job_presets_desc'] = 'Systemweite Vorgaben für die Erstellung von Testarchiven. Nutzende können diese Werte bei der Erstellung eines neuen Testarchivs individuell anpassen. Jede einzelne Einstellung kann jedoch auch gesperrt werden, um zu verhindern, dass Nutzende sie verändern. Dies kann nützlich sein, um organisationsweite Archivierungsrichtlinien durchzusetzen.'; +$string['setting_header_job_presets'] = 'Archivierungs-Vorgaben'; +$string['setting_header_job_presets_desc'] = 'Systemweite Vorgaben für die Erstellung von Testarchiven. Hinterlegte Standardwerte können bei der Erstellung eines neuen Testarchivs individuell anpassen. Jede einzelne Einstellung kann jedoch auch gesperrt werden um zu verhindern, dass Manager / Trainer diese verändern können. Dies kann nützlich sein, um organisationsweite Archivierungsrichtlinien durchzusetzen.'; $string['setting_header_tsp'] = 'Signierung von Testarchiven'; $string['setting_header_tsp_desc'] = 'Testarchive und der Zeitpunkt ihrer Erstellung können von einer vertrauenswürdigen Zertifizierungsstelle mithilfe des Time-Stamp Protocol (TSP) gemäß RFC 3161 digital signiert werden. Diese Signaturen können verwendet werden, um die Datenintegrität und den Zeitpunkt der Archivierung zu einem späteren Zeitpunkt kryptografisch nachzuweisen. Testarchive können automatisch bei der Erstellung oder nachträglich manuell signiert werden.'; $string['setting_internal_wwwroot'] = 'Eigene Moodle Basis-URL'; @@ -186,9 +186,9 @@ $string['setting_tsp_automatic_signing_desc'] = 'Testarchive automatisch bei der Erstellung signieren.'; $string['setting_tsp_enable'] = 'Signierung aktivieren'; $string['setting_tsp_enable_desc'] = 'Erlaubt die Signierung von Testarchiven mithilfe des Time-Stamp Protocols (TSP). Wenn diese Option deaktiviert ist können Testarchive weder manuell noch automatisch signiert werden.'; -$string['setting_tsp_server_url'] = 'TSP server URL'; +$string['setting_tsp_server_url'] = 'TSP-Server URL'; $string['setting_tsp_server_url_desc'] = 'URL des Time-Stamp Protocol (TSP) Servers, der für die Signierung von Testarchiven genutzt wird.
    Beispiele: https://freetsa.org/tsr, https://zeitstempel.dfn.de, http://timestamp.digicert.com'; -$string['setting_webservice_desc'] = 'Der externe Service, welcher alle quiz_archiver_* Funktionen ausführen darf. Er muss ebenfalls die Berechtigung haben, Dateien hoch- und herunterzuladen.'; +$string['setting_webservice_desc'] = 'Der externe Service (Webservice), welcher alle quiz_archiver_* Funktionen ausführen darf. Er muss ebenfalls die Berechtigung haben, Dateien hoch- und herunterzuladen.'; $string['setting_webservice_userid'] = 'Webservice Nutzer-ID'; $string['setting_webservice_userid_desc'] = 'User-ID des Moodle Nutzers, der vom Archive Worker Service genutzt wird, um auf Testdaten zuzugreifen. Er muss alle Berechtigungen besitzen, die in der Dokumentation aufgelistet sind, um korrekt zu funktionieren. Aus Sicherheitsgründen sollte dies ein dedizierter Nutzer ohne globale Administrationsrechte sein.'; $string['setting_worker_url'] = 'Archive Worker URL'; @@ -197,7 +197,7 @@ // Errors. $string['error_worker_connection_failed'] = 'Verbindung zum Archive Worker fehlgeschlagen.'; $string['error_worker_reported_error'] = 'Der Archive Worker hat einen Fehler gemeldet: {$a}'; -$string['error_worker_unknown'] = 'Ein unbekannter Fehler ist beim Senden des Auftrags zum Archive Worker aufgetreten.'; +$string['error_worker_unknown'] = 'Beim Senden des Auftrags zum Archive Worker ist ein unbekannter Fehler aufgetreten.'; // Privacy. $string['privacy:metadata:core_files'] = 'Das Quiz Archiver Plugin speichert erstellte Testarchive im Moodle Dateisystem.'; @@ -219,9 +219,8 @@ // Tasks. $string['task_cleanup_temp_files'] = 'Bereinigen temporärer Dateien'; -$string['task_cleanup_temp_files_start'] = 'Räume temporäre Dateien auf ...'; +$string['task_cleanup_temp_files_start'] = 'Bereinige temporäre Dateien ...'; $string['task_cleanup_temp_files_report'] = '{$a} temporäre Dateien gelöscht.'; -$string['task_autodelete_job_artifacts'] = 'Delete expired quiz archives'; $string['task_autodelete_job_artifacts'] = 'Löschen abgelaufener Testarchive'; $string['task_autodelete_job_artifacts_start'] = 'Lösche abgelaufene Testarchive ...'; $string['task_autodelete_job_artifacts_report'] = '{$a} Testarchive gelöscht.'; @@ -230,8 +229,8 @@ $string['autoinstall_already_configured'] = 'Plugin ist bereits konfiguriert'; $string['autoinstall_already_configured_long'] = 'Das Quiz Archiver Plugin ist bereits konfiguriert. Eine erneute automatische Konfiguration ist nicht möglich.'; $string['autoinstall_cancelled'] = 'Die automatische Konfiguration des Quiz Archiver Plugins wurde abgebrochen. Es wurden keine Einstellungen verändert.'; -$string['autoinstall_explanation'] = 'Das Quiz Archiver Plugin erfordert anfangs einige Konfigurationsschritte, um zu funktionieren (siehe Installation). Sie können diese Einstellungen manuell konfigurieren, oder die automatische Konfiguration verwenden, um alle Moodle-bezogenen Einstellungen zu setzen.'; -$string['autoinstall_explanation_details'] = 'Die automatische Konfiguration übernimmt die folgenden Schritte:
    • Setzen aller Plugin-Einstellungen auf ihre Standardwerte
    • Aktivieren von Webservices und REST-Protokoll
    • Erstellung einer Quiz Archiver Service Rolle und eines entsprechenden Nutzers
    • Erstellen eines neuen Webservices mit allen erforderlichen Webservice-Funktionen
    • Autorisieren des Nutzers zur Nutzung des Webservices
    '; +$string['autoinstall_explanation'] = 'Das Quiz Archiver Plugin erfordert anfangs einige Konfigurationsschritte, um zu funktionieren (siehe Installation). Sie können diese Einstellungen entweder manuell vornehmen, oder die automatische Konfigurationsfunktion verwenden um alle Moodle-bezogenen Einstellungen zu setzen.'; +$string['autoinstall_explanation_details'] = 'Die automatische Konfiguration übernimmt die folgenden Schritte:
    • Setzen aller Plugin-Einstellungen auf ihre Standardwerte
    • Aktivieren von Webservices und dem REST-Protokoll
    • Erstellen einer Quiz Archiver Service Rolle und eines entsprechenden Nutzers
    • Erstellen eines neuen Webservices mit allen erforderlichen Webservice-Funktionen
    • Autorisieren des Nutzers zur Nutzung des Webservices
    '; $string['autoinstall_failure'] = 'Die automatische Konfiguration des Quiz Archiver Plugins ist fehlgeschlagen.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatische Konfiguration'; $string['autoinstall_started'] = 'Automatische Konfiguration gestartet ...'; @@ -240,7 +239,6 @@ $string['autoinstall_rolename'] = 'Rollenname'; $string['autoinstall_rolename_help'] = 'Name der Rolle, die für den Quiz Archiver Service Nutzer erstellt wird.'; $string['autoinstall_username'] = 'Nutzername'; -$string['autoinstall_username_help'] = 'Name of the service user that is created to access the quiz archiver webservice.'; $string['autoinstall_username_help'] = 'Name des Nutzerkontos, das für den Zugriff auf den Quiz Archiver Webservice erstellt wird.'; $string['autoinstall_wsname'] = 'Webservicename'; $string['autoinstall_wsname_help'] = 'Name des Webservices, der für den Quiz Archive Worker erstellt wird.'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index fff301f..630a631 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -34,7 +34,7 @@ $string['manual_configuration_continue'] = 'To manually configure all plugin settings use the "Continue" button at the bottom of this page.'; // Capabilities. -$string['quiz_archiver:view'] = 'View quiz archiver report page'; +$string['quiz_archiver:view'] = 'View quiz archiver page'; $string['quiz_archiver:archive'] = 'Create and delete quiz archives'; $string['quiz_archiver:use_webservice'] = 'Use the quiz archiver webservice (read and write)'; @@ -54,7 +54,7 @@ $string['archive_retention_time'] = 'Retention time'; $string['archive_retention_time_help'] = 'The amount of time this quiz archive should be kept before it is automatically deleted. This setting only takes effect if automatic deletion is activated.'; $string['create_quiz_archive'] = 'Create new quiz archive'; -$string['archive_quiz_form_desc'] = 'Trigger the creation of a new quiz archive by submitting this form. This will spawn an asynchronous job which will take some time to complete. You can always check the current status on this page.'; +$string['archive_quiz_form_desc'] = 'Trigger the creation of a new quiz archive by submitting this form. This will spawn an asynchronous job which will take some time to complete. You can always check the current status on this page and download finished archives.'; $string['error_archive_quiz_form_validation_failed'] = 'Form data validation failed. Please correct your input and try again.'; $string['export_attempts'] = 'Export quiz attempts'; $string['export_attempts_help'] = 'Quiz attempts will always be exported'; @@ -70,19 +70,19 @@ $string['export_quiz_backup'] = 'Export Moodle quiz backup (.mbz)'; $string['export_quiz_backup_help'] = 'This will export a Moodle quiz backup (.mbz) including questions used inside this quiz. This can be useful if you want to import this quiz independent of this course into another Moodle instance.'; $string['export_report_section_header'] = 'Include quiz header'; -$string['export_report_section_header_help'] = 'Display quiz metadata (e.g., user, time taken, grade, ...) inside the report.'; +$string['export_report_section_header_help'] = 'Display quiz metadata (e.g., user, time taken, grade, ...) inside the attempt report.'; $string['export_report_section_question'] = 'Include questions'; -$string['export_report_section_question_help'] = 'Display all questions that are part of this attempt inside the report.'; +$string['export_report_section_question_help'] = 'Display all questions that are part of this attempt inside the attempt report.'; $string['export_report_section_rightanswer'] = 'Include correct answers'; -$string['export_report_section_rightanswer_help'] = 'Display the correct answers for each question inside the report.'; +$string['export_report_section_rightanswer_help'] = 'Display the correct answers for each question inside the attempt report.'; $string['export_report_section_quiz_feedback'] = 'Include overall quiz feedback'; -$string['export_report_section_quiz_feedback_help'] = 'Display the overall quiz feedback inside the report header.'; +$string['export_report_section_quiz_feedback_help'] = 'Display the overall quiz feedback inside the attempt report header.'; $string['export_report_section_question_feedback'] = 'Include individual question feedback'; -$string['export_report_section_question_feedback_help'] = 'Display the individual feedback for each question inside the report.'; +$string['export_report_section_question_feedback_help'] = 'Display the individual feedback for each question inside the attempt report.'; $string['export_report_section_general_feedback'] = 'Include general question feedback'; -$string['export_report_section_general_feedback_help'] = 'Display the general feedback for each question inside the report.'; +$string['export_report_section_general_feedback_help'] = 'Display the general feedback for each question inside the attempt report.'; $string['export_report_section_history'] = 'Include answer history'; -$string['export_report_section_history_help'] = 'Display the answer history for each question inside the report.'; +$string['export_report_section_history_help'] = 'Display the answer history for each question inside the attempt report.'; $string['export_report_section_attachments'] = 'Include file attachments'; $string['export_report_section_attachments_help'] = 'Include all file attachments (e.g., essay file submissions) inside the archive. Warning: This can significantly increase the archive size.'; $string['job_overview'] = 'Archives'; @@ -105,10 +105,10 @@ $string['archive_filename_pattern_variable_time'] = 'Current time (HH-MM-SS)'; $string['archive_filename_pattern_variable_timestamp'] = 'Current unix timestamp'; $string['error_invalid_archive_filename_pattern'] = 'Invalid archive filename pattern. Please correct your input and try again.'; -$string['export_attempts_filename_pattern'] = 'Report name'; +$string['export_attempts_filename_pattern'] = 'Attempt name'; $string['export_attempts_filename_pattern_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
      {$a->variables}
    Forbidden characters: {$a->forbiddenchars}'; // TODO (MDL-0): Remove the following 2 lines after deprecation of Moodle 4.1 (LTS) on 08-12-2025. -$string['export_attempts_filename_pattern_moodle42'] = 'Report name'; +$string['export_attempts_filename_pattern_moodle42'] = 'Attempt name'; $string['export_attempts_filename_pattern_moodle42_help'] = 'Name of the generated quiz attempt reports (PDF files). Variables must follow the ${variablename} pattern. The file extension will be added automatically.

    Available variables:
    • ${courseid}: Course ID
    • ${coursename}: Course name
    • ${courseshortname}: Course short name
    • ${cmid}: Course module ID
    • ${quizid}: Quiz ID
    • ${quizname}: Quiz name
    • ${attemptid}: Attempt ID
    • ${username}: Student username
    • ${firstname}: Student first name
    • ${lastname}: Student last name
    • ${timestart}: Attempt start unix timestamp
    • ${timefinish}: Attempt finish unix timestamp
    • ${date}: Current date (YYYY-MM-DD)
    • ${time}: Current time (HH-MM-SS)
    • ${timestamp}: Current unix timestamp
    Forbidden characters: \/.:;*?!"<>|'; $string['export_attempts_filename_pattern_variable_courseid'] = 'Course ID'; $string['export_attempts_filename_pattern_variable_coursename'] = 'Course name'; @@ -129,7 +129,7 @@ // Job. $string['delete_artifact'] = 'Delete quiz archive'; -$string['delete_artifact_warning'] = 'Are you sure that you want to delete this quiz archive and therefore all archived data?. The job metadate will be kept.'; +$string['delete_artifact_warning'] = 'Are you sure that you want to delete this quiz archive including all archived data?. The job metadate will be kept.'; $string['delete_job'] = 'Delete archive job'; $string['delete_job_warning'] = 'Are you sure that you want to delete this archive job including all archived data?'; $string['delete_job_warning_retention'] = 'Attention: This archive job is scheduled for automatic deletion on {$a}. Are you absolutely sure that you want to delete it before its scheduled lifetime expired?'; @@ -175,11 +175,11 @@ $string['setting_header_archive_worker_desc'] = 'Configuration of the archive worker service and the Moodle web service it uses.'; $string['setting_header_docs_desc'] = 'This plugin archives quiz attempts as PDF and HTML files for long-term storage, independent of Moodle. It requires a separate worker service to be installed for the actual archiving process to work. Please refer to the documentation for more details and setup instructions.'; $string['setting_header_job_presets'] = 'Archive Presets'; -$string['setting_header_job_presets_desc'] = 'System wide default settings for quiz archive creation. These defaults can be overridden when creating a new quiz archive. However, each individual setting can also be locked to prevent users from changing it. This can be useful when enforcing organization wide archive policies.'; +$string['setting_header_job_presets_desc'] = 'System wide default settings for quiz archive creation. These defaults can be overridden when creating a new quiz archive. However, each individual setting can also be locked to prevent managers / teachers from changing it. This can be useful when enforcing organization wide archive policies.'; $string['setting_header_tsp'] = 'Archive Signing'; $string['setting_header_tsp_desc'] = 'Quiz archives and their creation date can be digitally signed by a trusted authority using the Time-Stamp Protocol (TSP) according to RFC 3161. This can be used to cryptographically prove the integrity and creation date of the archive at a later point in time. Quiz archives can be signed automatically at creation or manually later on.'; $string['setting_internal_wwwroot'] = 'Custom Moodle base URL'; -$string['setting_internal_wwwroot_desc'] = 'Overwrites the default Moodle base URL ($CFG->wwwroot) inside generated reports. This can be useful if you are running the archive worker service inside a private network (e.g., Docker) and want it to access Moodle directly.
    Example: http://moodle/'; +$string['setting_internal_wwwroot_desc'] = 'Overwrites the default Moodle base URL ($CFG->wwwroot) inside generated attempt reports. This can be useful if you are running the archive worker service inside a private network (e.g., Docker) and want it to access Moodle directly.
    Example: http://moodle/'; $string['setting_job_timeout_min'] = 'Job timeout (minutes)'; $string['setting_job_timeout_min_desc'] = 'The number of minutes a single archive job is allowed to run before it is aborted by Moodle. Job web service access tokens become invalid after this timeout.
    Note: This timeout can not exceed the timeout configured within the archive worker service. The shorter timeout always takes precedence.'; $string['setting_tsp_automatic_signing'] = 'Automatically sign quiz archives'; @@ -188,7 +188,7 @@ $string['setting_tsp_enable_desc'] = 'Allow quiz archives to be signed using the Time-Stamp Protocol (TSP). If this option is disabled, quiz archives can neither be signed manually nor automatically.'; $string['setting_tsp_server_url'] = 'TSP server URL'; $string['setting_tsp_server_url_desc'] = 'URL of the Time-Stamp Protocol (TSP) server to use.
    Examples: https://freetsa.org/tsr, https://zeitstempel.dfn.de, http://timestamp.digicert.com'; -$string['setting_webservice_desc'] = 'The webservice that is allowed to execute all quiz_archiver_* webservice functions. It must also have permission to up- and download files.'; +$string['setting_webservice_desc'] = 'The external service (webservice) that is allowed to execute all quiz_archiver_* webservice functions. It must also have permission to up- and download files.'; $string['setting_webservice_userid'] = 'Web service user-ID'; $string['setting_webservice_userid_desc'] = 'User-ID of the Moodle user that is used by the archive worker service to access quiz data. It must have all capabilities that are listed in the documentation to work properly. For security reasons, this should be a dedicated user account without full administrative privileges.'; $string['setting_worker_url'] = 'Archive worker URL'; @@ -227,11 +227,11 @@ // Autoinstall. $string['autoinstall_already_configured'] = 'Plugin is already configured'; -$string['autoinstall_already_configured_long'] = 'The Quiz Archiver Plugin is already configured. Automatic configuration is not possible twice.'; +$string['autoinstall_already_configured_long'] = 'The Quiz Archiver plugin is already configured. Automatic configuration is not possible twice.'; $string['autoinstall_cancelled'] = 'The automatic configuration of the Quiz Archiver Plugin was cancelled. No changes were made.'; $string['autoinstall_explanation'] = 'The Quiz Archiver plugin requires a few initial configuration steps to work (see Installation). You can either configure all of these settings manually or use the automatic configuration feature to take care of all Moodle related settings.'; $string['autoinstall_explanation_details'] = 'The automatic configuration feature will take care of the following steps:
    • Setting all plugin settings to their default values
    • Enabling web services and REST protocol
    • Creating a quiz archiver service role and a corresponding user
    • Creating a new web service with all required webservice functions
    • Authorising the user to use the webservice
    '; -$string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin failed.'; +$string['autoinstall_failure'] = 'The automatic configuration of the Quiz Archiver Plugin has failed.'; $string['autoinstall_plugin'] = 'Quiz Archiver: Automatic configuration'; $string['autoinstall_started'] = 'Automatic configuration started ...'; $string['autoinstall_start_now'] = 'Start automatic configuration now'; From e22f9d8cb59d6644e30b9451dfcfd972f7d5b9c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 9 Jul 2024 16:15:34 +0200 Subject: [PATCH 085/185] Release version 1.2.10 (2024070900) --- CHANGELOG.md | 7 +++++++ version.php | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 12359ba..1d76cfe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Version 1.2.10 (2024070900) + +- Full code overhaul to comply with the [Moodle Coding Style](https://moodledev.io/general/development/policies/codingstyle) +- Enforce strict coding style checks during CI runs / prior to any new releases +- Improve English and German translations + + ## Version 1.2.9 (2024070800) - Synchronize default job timeout setting with quiz archive worker and add hint about the additional timeout inside the diff --git a/version.php b/version.php index 4267a44..b7da506 100644 --- a/version.php +++ b/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.9'; -$plugin->version = 2024070800; +$plugin->release = '1.2.10'; +$plugin->version = 2024070900; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; $plugin->maturity = MATURITY_STABLE; From 329dad267e557201d0946a47825b22d09dadf98b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 16 Jul 2024 18:19:07 +0200 Subject: [PATCH 086/185] Fix image inlining for files with non-lowercase file extensions --- CHANGELOG.md | 5 +++++ classes/Report.php | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d76cfe..8e926b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Version 1.2.11 (XXXXXXXXXX) + +- Fix image inlining for files with non-lowercase file extensions (e.g., `image.JPG`) + + ## Version 1.2.10 (2024070900) - Full code overhaul to comply with the [Moodle Coding Style](https://moodledev.io/general/development/policies/codingstyle) diff --git a/classes/Report.php b/classes/Report.php index 4e139fc..60a2a0c 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -703,7 +703,7 @@ protected function convert_image_to_base64(\DOMElement $img): bool { } // Only process allowed image types. - $imgext = pathinfo($imgsrcurl, PATHINFO_EXTENSION); + $imgext = strtolower(pathinfo($imgsrcurl, PATHINFO_EXTENSION)); if (!array_key_exists($imgext, self::ALLOWED_IMAGE_TYPES)) { // Edge case: Moodle theme images must not always contain extensions. if (!preg_match(self::REGEX_MOODLE_URL_THEME_IMAGE, $imgsrcurl)) { From a49828cab894161fa2c31632c7e50ca1ef91418f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 17 Jul 2024 14:15:29 +0200 Subject: [PATCH 087/185] Move "Keep HTML files" setting to a lower location in quiz archive form and plugin preset settings --- classes/form/archive_quiz_form.php | 20 ++++++++++---------- settings.php | 16 ++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index f16984a..e62ede8 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -146,16 +146,6 @@ public function definition() { $mform->addHelpButton('export_attempts_paper_format', 'export_attempts_paper_format', 'quiz_archiver'); $mform->setDefault('export_attempts_paper_format', $config->job_preset_export_attempts_paper_format); - $mform->addElement( - 'advcheckbox', - 'export_attempts_keep_html_files', - get_string('export_attempts_keep_html_files', 'quiz_archiver'), - get_string('export_attempts_keep_html_files_desc', 'quiz_archiver'), - $config->job_preset_export_attempts_keep_html_files_locked ? 'disabled' : null - ); - $mform->addHelpButton('export_attempts_keep_html_files', 'export_attempts_keep_html_files', 'quiz_archiver'); - $mform->setDefault('export_attempts_keep_html_files', $config->job_preset_export_attempts_keep_html_files); - $mform->addElement( 'text', 'archive_filename_pattern', @@ -222,6 +212,16 @@ public function definition() { $mform->setDefault('export_attempts_filename_pattern', $config->job_preset_export_attempts_filename_pattern); $mform->addRule('export_attempts_filename_pattern', null, 'maxlength', 255, 'client'); + $mform->addElement( + 'advcheckbox', + 'export_attempts_keep_html_files', + get_string('export_attempts_keep_html_files', 'quiz_archiver'), + get_string('export_attempts_keep_html_files_desc', 'quiz_archiver'), + $config->job_preset_export_attempts_keep_html_files_locked ? 'disabled' : null + ); + $mform->addHelpButton('export_attempts_keep_html_files', 'export_attempts_keep_html_files', 'quiz_archiver'); + $mform->setDefault('export_attempts_keep_html_files', $config->job_preset_export_attempts_keep_html_files); + $mform->addElement( 'advcheckbox', 'archive_autodelete', diff --git a/settings.php b/settings.php index ba918bb..fdcd022 100644 --- a/settings.php +++ b/settings.php @@ -155,14 +155,6 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); - $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_keep_html_files', - get_string('export_attempts_keep_html_files', 'quiz_archiver'), - get_string('export_attempts_keep_html_files_help', 'quiz_archiver'), - '0', - ); - $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); - $settings->add($set); - $set = new admin_setting_archive_filename_pattern('quiz_archiver/job_preset_archive_filename_pattern', get_string('archive_filename_pattern', 'quiz_archiver'), get_string('archive_filename_pattern_help', 'quiz_archiver', [ @@ -199,6 +191,14 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_keep_html_files', + get_string('export_attempts_keep_html_files', 'quiz_archiver'), + get_string('export_attempts_keep_html_files_help', 'quiz_archiver'), + '0', + ); + $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $settings->add($set); + $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_archive_autodelete', get_string('archive_autodelete', 'quiz_archiver'), get_string('archive_autodelete_help', 'quiz_archiver'), From 5c0fd66cc9120cfb938ed90929156327b8adca10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 17 Jul 2024 15:03:46 +0200 Subject: [PATCH 088/185] Fix conditional hide/show of retention time in quiz archive form --- classes/form/archive_quiz_form.php | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index e62ede8..aa36543 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -233,27 +233,29 @@ public function definition() { $mform->addHelpButton('archive_autodelete', 'archive_autodelete', 'quiz_archiver'); $mform->setDefault('archive_autodelete', $config->job_preset_archive_autodelete); + $mformgroup = []; // This is wrapped in a form group to make hideIf() work with static elements if ($config->job_preset_archive_retention_time_locked) { $durationwithunit = util::duration_to_unit($config->job_preset_archive_retention_time); - $mform->addElement( + $mformgroup[] = $mform->createElement( 'static', 'archive_retention_time_static', - get_string('archive_retention_time', 'quiz_archiver'), + '', $durationwithunit[0].' '.$durationwithunit[1] ); $mform->addElement('hidden', 'archive_retention_time', $config->job_preset_archive_retention_time); } else { - $mform->addElement( + $mformgroup[] = $mform->createElement( 'duration', 'archive_retention_time', - get_string('archive_retention_time', 'quiz_archiver'), + '', ['optional' => false, 'defaultunit' => DAYSECS], ); $mform->setDefault('archive_retention_time', $config->job_preset_archive_retention_time); } $mform->setType('archive_retention_time', PARAM_INT); - $mform->addHelpButton('archive_retention_time', 'archive_retention_time', 'quiz_archiver'); - $mform->hideIf('archive_retention_time', 'archive_autodelete', 'notchecked'); + $mform->addGroup($mformgroup, 'archive_retention_time_group', get_string('archive_retention_time', 'quiz_archiver'), '', false); + $mform->addHelpButton('archive_retention_time_group', 'archive_retention_time', 'quiz_archiver'); + $mform->hideIf('archive_retention_time_group', 'archive_autodelete', 'notchecked'); // Submit. $mform->closeHeaderBefore('submitbutton'); From 7ad679b26e3636da96ccf68e988e5cebaf33df0d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 17 Jul 2024 15:57:39 +0200 Subject: [PATCH 089/185] Optionally scale down large images within quiz reports to preserve space and keep PDF files compact --- CHANGELOG.md | 5 +- classes/RemoteArchiveWorker.php | 2 +- classes/form/archive_quiz_form.php | 83 +++++++++++++++++++++++++++++- lang/de/quiz_archiver.php | 8 +++ lang/en/quiz_archiver.php | 8 +++ report.php | 8 +++ settings.php | 28 ++++++++++ 7 files changed, 138 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e926b2..19b462e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,11 @@ # Changelog -## Version 1.2.11 (XXXXXXXXXX) +## Version 1.3.0 (XXXXXXXXXX) +- Optionally scale down large images within quiz reports to preserve space and keep PDF files compact - Fix image inlining for files with non-lowercase file extensions (e.g., `image.JPG`) +- Fix conditional hide/show of retention time in quiz archive form when locked +- Optimize order of settings in quiz archive form and plugin admin settings ## Version 1.2.10 (2024070900) diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index 4187040..881c2e9 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -45,7 +45,7 @@ class RemoteArchiveWorker { protected \stdClass $config; /** @var int Version of the used API */ - public const API_VERSION = 5; + public const API_VERSION = 6; /** * RemoteArchiveWorker constructor diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index aa36543..bab734b 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -212,6 +212,78 @@ public function definition() { $mform->setDefault('export_attempts_filename_pattern', $config->job_preset_export_attempts_filename_pattern); $mform->addRule('export_attempts_filename_pattern', null, 'maxlength', 255, 'client'); + $mform->addElement( + 'advcheckbox', + 'export_attempts_image_resize', + get_string('export_attempts_image_resize', 'quiz_archiver'), + get_string('enable'), + $config->job_preset_export_attempts_image_resize_locked ? 'disabled' : null, + ['0', '1'] + ); + $mform->addHelpButton('export_attempts_image_resize', 'export_attempts_image_resize', 'quiz_archiver'); + $mform->setDefault('export_attempts_image_resize', $config->job_preset_export_attempts_image_resize); + + $mformgroup = []; + $mformgroupfieldseperator = 'x'; + if ($config->job_preset_export_attempts_image_resize_width_locked) { + $mformgroup[] = $mform->createElement( + 'static', + 'export_attempts_image_resize_width_static', + '', + $config->job_preset_export_attempts_image_resize_width + ); + $mform->addElement( + 'hidden', + 'export_attempts_image_resize_width', + $config->job_preset_export_attempts_image_resize_width + ); + } else { + $mformgroup[] = $mform->createElement( + 'text', + 'export_attempts_image_resize_width', + get_string('export_attempts_image_resize_width', 'quiz_archiver'), + ['size' => 4] + ); + $mform->setDefault('export_attempts_image_resize_width', $config->job_preset_export_attempts_image_resize_width); + } + $mform->setType('export_attempts_image_resize_width', PARAM_INT); + + if ($config->job_preset_export_attempts_image_resize_height_locked) { + $mformgroup[] = $mform->createElement( + 'static', + 'export_attempts_image_resize_height_static', + '', + $config->job_preset_export_attempts_image_resize_height + ); + $mform->addElement( + 'hidden', + 'export_attempts_image_resize_height', + $config->job_preset_export_attempts_image_resize_height + ); + } else { + $mformgroup[] = $mform->createElement( + 'text', + 'export_attempts_image_resize_height', + get_string('export_attempts_image_resize_height', 'quiz_archiver'), + ['size' => 4] + ); + $mform->setDefault('export_attempts_image_resize_height', $config->job_preset_export_attempts_image_resize_height); + $mformgroupfieldseperator .= ' '; + } + $mform->setType('export_attempts_image_resize_height', PARAM_INT); + + $mformgroup[] = $mform->createElement('static', 'export_attempts_image_resize_px', '', 'px'); + + $mform->addGroup( + $mformgroup, + 'export_attempts_image_resize_group', + get_string('export_attempts_image_resize_group', 'quiz_archiver'), + [$mformgroupfieldseperator, ''], + false + ); + $mform->addHelpButton('export_attempts_image_resize_group', 'export_attempts_image_resize_group', 'quiz_archiver'); + $mform->hideIf('export_attempts_image_resize_group', 'export_attempts_image_resize', 'notchecked'); + $mform->addElement( 'advcheckbox', 'export_attempts_keep_html_files', @@ -233,7 +305,7 @@ public function definition() { $mform->addHelpButton('archive_autodelete', 'archive_autodelete', 'quiz_archiver'); $mform->setDefault('archive_autodelete', $config->job_preset_archive_autodelete); - $mformgroup = []; // This is wrapped in a form group to make hideIf() work with static elements + $mformgroup = []; // This is wrapped in a form group to make hideIf() work with static elements. if ($config->job_preset_archive_retention_time_locked) { $durationwithunit = util::duration_to_unit($config->job_preset_archive_retention_time); $mformgroup[] = $mform->createElement( @@ -253,7 +325,14 @@ public function definition() { $mform->setDefault('archive_retention_time', $config->job_preset_archive_retention_time); } $mform->setType('archive_retention_time', PARAM_INT); - $mform->addGroup($mformgroup, 'archive_retention_time_group', get_string('archive_retention_time', 'quiz_archiver'), '', false); + + $mform->addGroup( + $mformgroup, + 'archive_retention_time_group', + get_string('archive_retention_time', 'quiz_archiver'), + '', + false + ); $mform->addHelpButton('archive_retention_time_group', 'archive_retention_time', 'quiz_archiver'); $mform->hideIf('archive_retention_time_group', 'archive_autodelete', 'notchecked'); diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index e5932d3..b5c87f2 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -60,6 +60,14 @@ $string['export_attempts_help'] = 'Es werden stets alle Testversuche exportiert'; $string['export_attempts_num'] = 'Testversuche ({$a}) exportieren'; $string['export_attempts_num_help'] = 'Es werden stets alle Testversuche exportiert'; +$string['export_attempts_image_resize'] = 'Bilder optimieren'; +$string['export_attempts_image_resize_help'] = 'Wenn aktiviert, werden große Bilder innerhalb der Versuchsberichte unter Berücksichtigung der unten angegebenen Dimensionen verkleinert. Bilder werden ausschließlich verkleinert. Bilder, die kleiner als die angegebenen Dimensionen sind, bleiben unberührt. Dies betrifft nur PDF-Exporte. HTML-Quelldateien behalten stets die Originalbildgröße bei.'; +$string['export_attempts_image_resize_group'] = 'Maximale Bildauflösung'; +$string['export_attempts_image_resize_group_help'] = 'Maximale Auflösung für Bilder innerhalb der Versuchsberichte in Pixeln (Breite x Höhe). Wenn ein Bild breiter oder höher als die angegebenen Dimensionen ist, wird es so verkleinert, dass es vollständig in die angegebenen Dimensionen passt. Das Seitenverhältnis wird dabei beibehalten. Dies kann nützlich sein, um die Gesamtgröße des Archivs zu reduzieren, wenn große Bilder im Test verwendet werden.'; +$string['export_attempts_image_resize_height'] = 'Maximale Bildhöhe'; +$string['export_attempts_image_resize_height_help'] = 'Maximale Höhe für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild höher als die angegebene Höhe ist, wird es auf die angegebene Höhe verkleinert, wobei das Seitenverhältnis beibehalten wird.'; +$string['export_attempts_image_resize_width'] = 'Maximale Bildbreite'; +$string['export_attempts_image_resize_width_help'] = 'Maximale Breite für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild breiter als die angegebene Breite ist, wird es auf die angegebene Breite verkleinert, wobei das Seitenverhältnis beibehalten wird.'; $string['export_attempts_keep_html_files'] = 'HTML-Dateien'; $string['export_attempts_keep_html_files_desc'] = 'HTML-Quelldateien behalten'; $string['export_attempts_keep_html_files_help'] = 'Speichert die HTML-Quelldateien zusätzlich zu den erzeugten PDFs während des Exportvorgangs. Dies kann nützlich sein, wenn Sie auf den HTML DOM zugreifen möchten, aus dem die PDFs erzeugt wurden. Deaktivieren dieser Option kann die Archivgröße deutlich reduzieren!'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 630a631..575a057 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -60,6 +60,14 @@ $string['export_attempts_help'] = 'Quiz attempts will always be exported'; $string['export_attempts_num'] = 'Export quiz attempts ({$a})'; $string['export_attempts_num_help'] = 'Quiz attempts will always be exported'; +$string['export_attempts_image_resize'] = 'Optimize images'; +$string['export_attempts_image_resize_help'] = 'If enabled, large images inside the quiz attempt reports will be shrunk with respect to the following dimensions. Images will only be scaled down. Images smaller than the given dimensions remain untouched. This only affects PDF exports. HTML source files will always keep the original image size.'; +$string['export_attempts_image_resize_group'] = 'Maximum image dimensions'; +$string['export_attempts_image_resize_group_help'] = 'Maximum dimensions for images inside the quiz attempt reports in pixels (width x height). If an image is larger than the given width or height, it will be scaled down so that it fully fits into the given dimensions while maintaining its aspect ratio. This can be useful to reduce the overall archive size if large images are used within the quiz.'; +$string['export_attempts_image_resize_height'] = 'Maximum image height'; +$string['export_attempts_image_resize_height_help'] = 'Maximum height of images inside the quiz attempt reports in pixels. If an images height is larger than the given height, it will be scaled down to the given height while maintaining its aspect ratio.'; +$string['export_attempts_image_resize_width'] = 'Maximum image width'; +$string['export_attempts_image_resize_width_help'] = 'Maximum width of images inside the quiz attempt reports in pixels. If an images width is larger than the given width, it will be scaled down to the given width while maintaining its aspect ratio.'; $string['export_attempts_keep_html_files'] = 'HTML files'; $string['export_attempts_keep_html_files_desc'] = 'Keep HTML source files'; $string['export_attempts_keep_html_files_help'] = 'Save HTML source files in addition to the generated PDFs during the export process. This can be useful if you want to access the raw HTML DOM the PDFs were generated from. Disabling this option can significantly reduce the archive size.'; diff --git a/report.php b/report.php index 4fa2735..82a4f70 100644 --- a/report.php +++ b/report.php @@ -224,6 +224,10 @@ public function display($quiz, $cm, $course): bool { $formdata->export_course_backup, $formdata->archive_filename_pattern, $formdata->export_attempts_filename_pattern, + $formdata->export_attempts_image_resize ? [ + 'width' => (int) $formdata->export_attempts_image_resize_width, + 'height' => (int) $formdata->export_attempts_image_resize_height, + ] : null, $formdata->archive_autodelete ? $formdata->archive_retention_time : null, ); $tplctx['jobInitiationStatusAlert'] = [ @@ -326,6 +330,8 @@ public function display($quiz, $cm, $course): bool { * @param bool $exportcoursebackup Complete course backup will be archived if true * @param string $archivefilenamepattern Filename pattern to use for archive generation * @param string $attemptsfilenamepattern Filename pattern to use for attempt report generation + * @param array|null $imageresize If set, images in the attempt report will be downsized to the dimensions passed here as + * an array with keys 'width' and 'height' * @param int|null $retentionseconds If set, the archive will be deleted automatically this many seconds after creation * @return ArchiveJob|null Created ArchiveJob on success * @throws coding_exception Handled by Moodle @@ -342,6 +348,7 @@ protected function initiate_archive_job( bool $exportcoursebackup, string $archivefilenamepattern, string $attemptsfilenamepattern, + ?array $imageresize = null, ?int $retentionseconds = null ): ?ArchiveJob { global $CFG, $USER; @@ -391,6 +398,7 @@ protected function initiate_archive_job( 'paper_format' => $paperformat, 'keep_html_files' => $reportkeephtmlfiles, 'filename_pattern' => $attemptsfilenamepattern, + 'image_resize' => $imageresize ?? false, ]; } diff --git a/settings.php b/settings.php index fdcd022..9649689 100644 --- a/settings.php +++ b/settings.php @@ -191,6 +191,34 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_image_resize', + get_string('export_attempts_image_resize', 'quiz_archiver'), + get_string('export_attempts_image_resize_help', 'quiz_archiver'), + '0', + ); + $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $settings->add($set); + + $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_resize_width', + get_string('export_attempts_image_resize_width', 'quiz_archiver'), + get_string('export_attempts_image_resize_width_help', 'quiz_archiver'), + '1280', + PARAM_INT + ); + $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_resize'); + $settings->add($set); + + $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_resize_height', + get_string('export_attempts_image_resize_height', 'quiz_archiver'), + get_string('export_attempts_image_resize_height_help', 'quiz_archiver'), + '1280', + PARAM_INT + ); + $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_resize'); + $settings->add($set); + $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_keep_html_files', get_string('export_attempts_keep_html_files', 'quiz_archiver'), get_string('export_attempts_keep_html_files_help', 'quiz_archiver'), From edddad7749d1eeaf5be22d826182f9a19486ca93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 13:52:25 +0200 Subject: [PATCH 090/185] Fix code indentation in RemoteArchiveWorker class --- classes/RemoteArchiveWorker.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index 881c2e9..b02ee47 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -95,16 +95,16 @@ public function enqueue_archive_job( // Prepare request payload. $payload = json_encode(array_merge( [ - "api_version" => self::API_VERSION, - "moodle_base_url" => $moodleurlbase, - "moodle_ws_url" => $moodleurlbase.'/webservice/rest/server.php', - "moodle_upload_url" => $moodleurlbase.'/webservice/upload.php', - "wstoken" => $wstoken, - "courseid" => $courseid, - "cmid" => $cmid, - "quizid" => $quizid, - "task_archive_quiz_attempts" => $taskarchivequizattempts, - "task_moodle_backups" => $taskmoodlebackups, + "api_version" => self::API_VERSION, + "moodle_base_url" => $moodleurlbase, + "moodle_ws_url" => $moodleurlbase.'/webservice/rest/server.php', + "moodle_upload_url" => $moodleurlbase.'/webservice/upload.php', + "wstoken" => $wstoken, + "courseid" => $courseid, + "cmid" => $cmid, + "quizid" => $quizid, + "task_archive_quiz_attempts" => $taskarchivequizattempts, + "task_moodle_backups" => $taskmoodlebackups, ], $joboptions )); From db37e15f342d3840e2b8436035e01df4c755853f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 14:00:11 +0200 Subject: [PATCH 091/185] Rename image_resize settings to image_optimize --- classes/form/archive_quiz_form.php | 56 +++++++++++++++--------------- lang/de/quiz_archiver.php | 16 ++++----- lang/en/quiz_archiver.php | 16 ++++----- report.php | 14 ++++---- settings.php | 22 ++++++------ 5 files changed, 62 insertions(+), 62 deletions(-) diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index bab734b..1068e71 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -214,75 +214,75 @@ public function definition() { $mform->addElement( 'advcheckbox', - 'export_attempts_image_resize', - get_string('export_attempts_image_resize', 'quiz_archiver'), + 'export_attempts_image_optimize', + get_string('export_attempts_image_optimize', 'quiz_archiver'), get_string('enable'), - $config->job_preset_export_attempts_image_resize_locked ? 'disabled' : null, + $config->job_preset_export_attempts_image_optimize_locked ? 'disabled' : null, ['0', '1'] ); - $mform->addHelpButton('export_attempts_image_resize', 'export_attempts_image_resize', 'quiz_archiver'); - $mform->setDefault('export_attempts_image_resize', $config->job_preset_export_attempts_image_resize); + $mform->addHelpButton('export_attempts_image_optimize', 'export_attempts_image_optimize', 'quiz_archiver'); + $mform->setDefault('export_attempts_image_optimize', $config->job_preset_export_attempts_image_optimize); $mformgroup = []; $mformgroupfieldseperator = 'x'; - if ($config->job_preset_export_attempts_image_resize_width_locked) { + if ($config->job_preset_export_attempts_image_optimize_width_locked) { $mformgroup[] = $mform->createElement( 'static', - 'export_attempts_image_resize_width_static', + 'export_attempts_image_optimize_width_static', '', - $config->job_preset_export_attempts_image_resize_width + $config->job_preset_export_attempts_image_optimize_width ); $mform->addElement( 'hidden', - 'export_attempts_image_resize_width', - $config->job_preset_export_attempts_image_resize_width + 'export_attempts_image_optimize_width', + $config->job_preset_export_attempts_image_optimize_width ); } else { $mformgroup[] = $mform->createElement( 'text', - 'export_attempts_image_resize_width', - get_string('export_attempts_image_resize_width', 'quiz_archiver'), + 'export_attempts_image_optimize_width', + get_string('export_attempts_image_optimize_width', 'quiz_archiver'), ['size' => 4] ); - $mform->setDefault('export_attempts_image_resize_width', $config->job_preset_export_attempts_image_resize_width); + $mform->setDefault('export_attempts_image_optimize_width', $config->job_preset_export_attempts_image_optimize_width); } - $mform->setType('export_attempts_image_resize_width', PARAM_INT); + $mform->setType('export_attempts_image_optimize_width', PARAM_INT); - if ($config->job_preset_export_attempts_image_resize_height_locked) { + if ($config->job_preset_export_attempts_image_optimize_height_locked) { $mformgroup[] = $mform->createElement( 'static', - 'export_attempts_image_resize_height_static', + 'export_attempts_image_optimize_height_static', '', - $config->job_preset_export_attempts_image_resize_height + $config->job_preset_export_attempts_image_optimize_height ); $mform->addElement( 'hidden', - 'export_attempts_image_resize_height', - $config->job_preset_export_attempts_image_resize_height + 'export_attempts_image_optimize_height', + $config->job_preset_export_attempts_image_optimize_height ); } else { $mformgroup[] = $mform->createElement( 'text', - 'export_attempts_image_resize_height', - get_string('export_attempts_image_resize_height', 'quiz_archiver'), + 'export_attempts_image_optimize_height', + get_string('export_attempts_image_optimize_height', 'quiz_archiver'), ['size' => 4] ); - $mform->setDefault('export_attempts_image_resize_height', $config->job_preset_export_attempts_image_resize_height); + $mform->setDefault('export_attempts_image_optimize_height', $config->job_preset_export_attempts_image_optimize_height); $mformgroupfieldseperator .= ' '; } - $mform->setType('export_attempts_image_resize_height', PARAM_INT); + $mform->setType('export_attempts_image_optimize_height', PARAM_INT); - $mformgroup[] = $mform->createElement('static', 'export_attempts_image_resize_px', '', 'px'); + $mformgroup[] = $mform->createElement('static', 'export_attempts_image_optimize_px', '', 'px'); $mform->addGroup( $mformgroup, - 'export_attempts_image_resize_group', - get_string('export_attempts_image_resize_group', 'quiz_archiver'), + 'export_attempts_image_optimize_group', + get_string('export_attempts_image_optimize_group', 'quiz_archiver'), [$mformgroupfieldseperator, ''], false ); - $mform->addHelpButton('export_attempts_image_resize_group', 'export_attempts_image_resize_group', 'quiz_archiver'); - $mform->hideIf('export_attempts_image_resize_group', 'export_attempts_image_resize', 'notchecked'); + $mform->addHelpButton('export_attempts_image_optimize_group', 'export_attempts_image_optimize_group', 'quiz_archiver'); + $mform->hideIf('export_attempts_image_optimize_group', 'export_attempts_image_optimize', 'notchecked'); $mform->addElement( 'advcheckbox', diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index b5c87f2..ea3b812 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -60,14 +60,14 @@ $string['export_attempts_help'] = 'Es werden stets alle Testversuche exportiert'; $string['export_attempts_num'] = 'Testversuche ({$a}) exportieren'; $string['export_attempts_num_help'] = 'Es werden stets alle Testversuche exportiert'; -$string['export_attempts_image_resize'] = 'Bilder optimieren'; -$string['export_attempts_image_resize_help'] = 'Wenn aktiviert, werden große Bilder innerhalb der Versuchsberichte unter Berücksichtigung der unten angegebenen Dimensionen verkleinert. Bilder werden ausschließlich verkleinert. Bilder, die kleiner als die angegebenen Dimensionen sind, bleiben unberührt. Dies betrifft nur PDF-Exporte. HTML-Quelldateien behalten stets die Originalbildgröße bei.'; -$string['export_attempts_image_resize_group'] = 'Maximale Bildauflösung'; -$string['export_attempts_image_resize_group_help'] = 'Maximale Auflösung für Bilder innerhalb der Versuchsberichte in Pixeln (Breite x Höhe). Wenn ein Bild breiter oder höher als die angegebenen Dimensionen ist, wird es so verkleinert, dass es vollständig in die angegebenen Dimensionen passt. Das Seitenverhältnis wird dabei beibehalten. Dies kann nützlich sein, um die Gesamtgröße des Archivs zu reduzieren, wenn große Bilder im Test verwendet werden.'; -$string['export_attempts_image_resize_height'] = 'Maximale Bildhöhe'; -$string['export_attempts_image_resize_height_help'] = 'Maximale Höhe für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild höher als die angegebene Höhe ist, wird es auf die angegebene Höhe verkleinert, wobei das Seitenverhältnis beibehalten wird.'; -$string['export_attempts_image_resize_width'] = 'Maximale Bildbreite'; -$string['export_attempts_image_resize_width_help'] = 'Maximale Breite für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild breiter als die angegebene Breite ist, wird es auf die angegebene Breite verkleinert, wobei das Seitenverhältnis beibehalten wird.'; +$string['export_attempts_image_optimize'] = 'Bilder optimieren'; +$string['export_attempts_image_optimize_help'] = 'Wenn aktiviert, werden große Bilder innerhalb der Versuchsberichte unter Berücksichtigung der unten angegebenen Dimensionen verkleinert. Bilder werden ausschließlich verkleinert. Bilder, die kleiner als die angegebenen Dimensionen sind, bleiben unberührt. Dies betrifft nur PDF-Exporte. HTML-Quelldateien behalten stets die Originalbildgröße bei.'; +$string['export_attempts_image_optimize_group'] = 'Maximale Bildauflösung'; +$string['export_attempts_image_optimize_group_help'] = 'Maximale Auflösung für Bilder innerhalb der Versuchsberichte in Pixeln (Breite x Höhe). Wenn ein Bild breiter oder höher als die angegebenen Dimensionen ist, wird es so verkleinert, dass es vollständig in die angegebenen Dimensionen passt. Das Seitenverhältnis wird dabei beibehalten. Dies kann nützlich sein, um die Gesamtgröße des Archivs zu reduzieren, wenn große Bilder im Test verwendet werden.'; +$string['export_attempts_image_optimize_height'] = 'Maximale Bildhöhe'; +$string['export_attempts_image_optimize_height_help'] = 'Maximale Höhe für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild höher als die angegebene Höhe ist, wird es auf die angegebene Höhe verkleinert, wobei das Seitenverhältnis beibehalten wird.'; +$string['export_attempts_image_optimize_width'] = 'Maximale Bildbreite'; +$string['export_attempts_image_optimize_width_help'] = 'Maximale Breite für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild breiter als die angegebene Breite ist, wird es auf die angegebene Breite verkleinert, wobei das Seitenverhältnis beibehalten wird.'; $string['export_attempts_keep_html_files'] = 'HTML-Dateien'; $string['export_attempts_keep_html_files_desc'] = 'HTML-Quelldateien behalten'; $string['export_attempts_keep_html_files_help'] = 'Speichert die HTML-Quelldateien zusätzlich zu den erzeugten PDFs während des Exportvorgangs. Dies kann nützlich sein, wenn Sie auf den HTML DOM zugreifen möchten, aus dem die PDFs erzeugt wurden. Deaktivieren dieser Option kann die Archivgröße deutlich reduzieren!'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 575a057..b5ec011 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -60,14 +60,14 @@ $string['export_attempts_help'] = 'Quiz attempts will always be exported'; $string['export_attempts_num'] = 'Export quiz attempts ({$a})'; $string['export_attempts_num_help'] = 'Quiz attempts will always be exported'; -$string['export_attempts_image_resize'] = 'Optimize images'; -$string['export_attempts_image_resize_help'] = 'If enabled, large images inside the quiz attempt reports will be shrunk with respect to the following dimensions. Images will only be scaled down. Images smaller than the given dimensions remain untouched. This only affects PDF exports. HTML source files will always keep the original image size.'; -$string['export_attempts_image_resize_group'] = 'Maximum image dimensions'; -$string['export_attempts_image_resize_group_help'] = 'Maximum dimensions for images inside the quiz attempt reports in pixels (width x height). If an image is larger than the given width or height, it will be scaled down so that it fully fits into the given dimensions while maintaining its aspect ratio. This can be useful to reduce the overall archive size if large images are used within the quiz.'; -$string['export_attempts_image_resize_height'] = 'Maximum image height'; -$string['export_attempts_image_resize_height_help'] = 'Maximum height of images inside the quiz attempt reports in pixels. If an images height is larger than the given height, it will be scaled down to the given height while maintaining its aspect ratio.'; -$string['export_attempts_image_resize_width'] = 'Maximum image width'; -$string['export_attempts_image_resize_width_help'] = 'Maximum width of images inside the quiz attempt reports in pixels. If an images width is larger than the given width, it will be scaled down to the given width while maintaining its aspect ratio.'; +$string['export_attempts_image_optimize'] = 'Optimize images'; +$string['export_attempts_image_optimize_help'] = 'If enabled, large images inside the quiz attempt reports will be shrunk with respect to the following dimensions. Images will only be scaled down. Images smaller than the given dimensions remain untouched. This only affects PDF exports. HTML source files will always keep the original image size.'; +$string['export_attempts_image_optimize_group'] = 'Maximum image dimensions'; +$string['export_attempts_image_optimize_group_help'] = 'Maximum dimensions for images inside the quiz attempt reports in pixels (width x height). If an image is larger than the given width or height, it will be scaled down so that it fully fits into the given dimensions while maintaining its aspect ratio. This can be useful to reduce the overall archive size if large images are used within the quiz.'; +$string['export_attempts_image_optimize_height'] = 'Maximum image height'; +$string['export_attempts_image_optimize_height_help'] = 'Maximum height of images inside the quiz attempt reports in pixels. If an images height is larger than the given height, it will be scaled down to the given height while maintaining its aspect ratio.'; +$string['export_attempts_image_optimize_width'] = 'Maximum image width'; +$string['export_attempts_image_optimize_width_help'] = 'Maximum width of images inside the quiz attempt reports in pixels. If an images width is larger than the given width, it will be scaled down to the given width while maintaining its aspect ratio.'; $string['export_attempts_keep_html_files'] = 'HTML files'; $string['export_attempts_keep_html_files_desc'] = 'Keep HTML source files'; $string['export_attempts_keep_html_files_help'] = 'Save HTML source files in addition to the generated PDFs during the export process. This can be useful if you want to access the raw HTML DOM the PDFs were generated from. Disabling this option can significantly reduce the archive size.'; diff --git a/report.php b/report.php index 82a4f70..b698ef3 100644 --- a/report.php +++ b/report.php @@ -224,9 +224,9 @@ public function display($quiz, $cm, $course): bool { $formdata->export_course_backup, $formdata->archive_filename_pattern, $formdata->export_attempts_filename_pattern, - $formdata->export_attempts_image_resize ? [ - 'width' => (int) $formdata->export_attempts_image_resize_width, - 'height' => (int) $formdata->export_attempts_image_resize_height, + $formdata->export_attempts_image_optimize ? [ + 'width' => (int) $formdata->export_attempts_image_optimize_width, + 'height' => (int) $formdata->export_attempts_image_optimize_height, ] : null, $formdata->archive_autodelete ? $formdata->archive_retention_time : null, ); @@ -330,8 +330,8 @@ public function display($quiz, $cm, $course): bool { * @param bool $exportcoursebackup Complete course backup will be archived if true * @param string $archivefilenamepattern Filename pattern to use for archive generation * @param string $attemptsfilenamepattern Filename pattern to use for attempt report generation - * @param array|null $imageresize If set, images in the attempt report will be downsized to the dimensions passed here as - * an array with keys 'width' and 'height' + * @param array|null $imageoptimize If set, images in the attempt report will be optimized according to the passed array + * containing 'width', 'height', and 'quality' * @param int|null $retentionseconds If set, the archive will be deleted automatically this many seconds after creation * @return ArchiveJob|null Created ArchiveJob on success * @throws coding_exception Handled by Moodle @@ -348,7 +348,7 @@ protected function initiate_archive_job( bool $exportcoursebackup, string $archivefilenamepattern, string $attemptsfilenamepattern, - ?array $imageresize = null, + ?array $imageoptimize = null, ?int $retentionseconds = null ): ?ArchiveJob { global $CFG, $USER; @@ -398,7 +398,7 @@ protected function initiate_archive_job( 'paper_format' => $paperformat, 'keep_html_files' => $reportkeephtmlfiles, 'filename_pattern' => $attemptsfilenamepattern, - 'image_resize' => $imageresize ?? false, + 'image_optimize' => $imageoptimize ?? false, ]; } diff --git a/settings.php b/settings.php index 9649689..409df40 100644 --- a/settings.php +++ b/settings.php @@ -191,32 +191,32 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); - $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_image_resize', - get_string('export_attempts_image_resize', 'quiz_archiver'), - get_string('export_attempts_image_resize_help', 'quiz_archiver'), + $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_image_optimize', + get_string('export_attempts_image_optimize', 'quiz_archiver'), + get_string('export_attempts_image_optimize_help', 'quiz_archiver'), '0', ); $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); - $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_resize_width', - get_string('export_attempts_image_resize_width', 'quiz_archiver'), - get_string('export_attempts_image_resize_width_help', 'quiz_archiver'), + $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_optimize_width', + get_string('export_attempts_image_optimize_width', 'quiz_archiver'), + get_string('export_attempts_image_optimize_width_help', 'quiz_archiver'), '1280', PARAM_INT ); $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); - $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_resize'); + $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_optimize'); $settings->add($set); - $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_resize_height', - get_string('export_attempts_image_resize_height', 'quiz_archiver'), - get_string('export_attempts_image_resize_height_help', 'quiz_archiver'), + $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_optimize_height', + get_string('export_attempts_image_optimize_height', 'quiz_archiver'), + get_string('export_attempts_image_optimize_height_help', 'quiz_archiver'), '1280', PARAM_INT ); $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); - $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_resize'); + $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_optimize'); $settings->add($set); $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_keep_html_files', From 0f4376c2029e01a699f6d4a6d0a29ebb084b902f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 14:19:36 +0200 Subject: [PATCH 092/185] Optionally compress images within quiz reports to preserve space and keep PDF files compact --- classes/form/archive_quiz_form.php | 42 ++++++++++++++++++++++++++++++ lang/de/quiz_archiver.php | 4 ++- lang/en/quiz_archiver.php | 4 ++- report.php | 1 + settings.php | 10 +++++++ 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index 1068e71..b0427e7 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -284,6 +284,48 @@ public function definition() { $mform->addHelpButton('export_attempts_image_optimize_group', 'export_attempts_image_optimize_group', 'quiz_archiver'); $mform->hideIf('export_attempts_image_optimize_group', 'export_attempts_image_optimize', 'notchecked'); + $mformgroup = []; + if ($config->job_preset_export_attempts_image_optimize_quality_locked) { + $mformgroup[] = $mform->createElement( + 'static', + 'export_attempts_image_optimize_quality_static', + '', + $config->job_preset_export_attempts_image_optimize_quality + ); + $mform->addElement( + 'hidden', + 'export_attempts_image_optimize_quality', + $config->job_preset_export_attempts_image_optimize_quality + ); + } else { + $mformgroup[] = $mform->createElement( + 'text', + 'export_attempts_image_optimize_quality', + get_string('export_attempts_image_optimize_quality', 'quiz_archiver'), + ['size' => 2] + ); + $mform->setDefault( + 'export_attempts_image_optimize_quality', + $config->job_preset_export_attempts_image_optimize_quality + ); + } + $mform->setType('export_attempts_image_optimize_quality', PARAM_INT); + + $mformgroup[] = $mform->createElement('static', 'export_attempts_image_optimize_quality_percent', '', '%'); + $mform->addGroup( + $mformgroup, + 'export_attempts_image_optimize_quality_group', + get_string('export_attempts_image_optimize_quality', 'quiz_archiver'), + '', + false + ); + $mform->addHelpButton( + 'export_attempts_image_optimize_quality_group', + 'export_attempts_image_optimize_quality', + 'quiz_archiver' + ); + $mform->hideIf('export_attempts_image_optimize_quality_group', 'export_attempts_image_optimize', 'notchecked'); + $mform->addElement( 'advcheckbox', 'export_attempts_keep_html_files', diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index ea3b812..b145cbd 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -61,11 +61,13 @@ $string['export_attempts_num'] = 'Testversuche ({$a}) exportieren'; $string['export_attempts_num_help'] = 'Es werden stets alle Testversuche exportiert'; $string['export_attempts_image_optimize'] = 'Bilder optimieren'; -$string['export_attempts_image_optimize_help'] = 'Wenn aktiviert, werden große Bilder innerhalb der Versuchsberichte unter Berücksichtigung der unten angegebenen Dimensionen verkleinert. Bilder werden ausschließlich verkleinert. Bilder, die kleiner als die angegebenen Dimensionen sind, bleiben unberührt. Dies betrifft nur PDF-Exporte. HTML-Quelldateien behalten stets die Originalbildgröße bei.'; +$string['export_attempts_image_optimize_help'] = 'Wenn aktiviert, werden Bilder innerhalb der Versuchsberichte komprimiert und große Bilder unter Berücksichtigung der unten angegebenen Dimensionen verkleinert. Bilder werden ausschließlich verkleinert. Dies betrifft nur PDF-Exporte. HTML-Quelldateien behalten stets die Originalbildgröße bei.'; $string['export_attempts_image_optimize_group'] = 'Maximale Bildauflösung'; $string['export_attempts_image_optimize_group_help'] = 'Maximale Auflösung für Bilder innerhalb der Versuchsberichte in Pixeln (Breite x Höhe). Wenn ein Bild breiter oder höher als die angegebenen Dimensionen ist, wird es so verkleinert, dass es vollständig in die angegebenen Dimensionen passt. Das Seitenverhältnis wird dabei beibehalten. Dies kann nützlich sein, um die Gesamtgröße des Archivs zu reduzieren, wenn große Bilder im Test verwendet werden.'; $string['export_attempts_image_optimize_height'] = 'Maximale Bildhöhe'; $string['export_attempts_image_optimize_height_help'] = 'Maximale Höhe für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild höher als die angegebene Höhe ist, wird es auf die angegebene Höhe verkleinert, wobei das Seitenverhältnis beibehalten wird.'; +$string['export_attempts_image_optimize_quality'] = 'Bildkompression'; +$string['export_attempts_image_optimize_quality_help'] = 'Qualität der komprimierten Bilder (0 - 100 %). Je höher die Qualität, desto größer die Versuchsberichte. Diese Einstellung verhält sich wie die JPEG-Kompressionsintensität. Ein guter Richtwert sind 85 %.'; $string['export_attempts_image_optimize_width'] = 'Maximale Bildbreite'; $string['export_attempts_image_optimize_width_help'] = 'Maximale Breite für Bilder innerhalb der Versuchsberichte in Pixeln. Wenn ein Bild breiter als die angegebene Breite ist, wird es auf die angegebene Breite verkleinert, wobei das Seitenverhältnis beibehalten wird.'; $string['export_attempts_keep_html_files'] = 'HTML-Dateien'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index b5ec011..e133b71 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -61,11 +61,13 @@ $string['export_attempts_num'] = 'Export quiz attempts ({$a})'; $string['export_attempts_num_help'] = 'Quiz attempts will always be exported'; $string['export_attempts_image_optimize'] = 'Optimize images'; -$string['export_attempts_image_optimize_help'] = 'If enabled, large images inside the quiz attempt reports will be shrunk with respect to the following dimensions. Images will only be scaled down. Images smaller than the given dimensions remain untouched. This only affects PDF exports. HTML source files will always keep the original image size.'; +$string['export_attempts_image_optimize_help'] = 'If enabled, images inside the quiz attempt reports will compressed and large images will be shrunk with respect to the specified dimensions. Images will only ever be scaled down. This only affects PDF exports. HTML source files will always keep the original image size.'; $string['export_attempts_image_optimize_group'] = 'Maximum image dimensions'; $string['export_attempts_image_optimize_group_help'] = 'Maximum dimensions for images inside the quiz attempt reports in pixels (width x height). If an image is larger than the given width or height, it will be scaled down so that it fully fits into the given dimensions while maintaining its aspect ratio. This can be useful to reduce the overall archive size if large images are used within the quiz.'; $string['export_attempts_image_optimize_height'] = 'Maximum image height'; $string['export_attempts_image_optimize_height_help'] = 'Maximum height of images inside the quiz attempt reports in pixels. If an images height is larger than the given height, it will be scaled down to the given height while maintaining its aspect ratio.'; +$string['export_attempts_image_optimize_quality'] = 'Image compression'; +$string['export_attempts_image_optimize_quality_help'] = 'Quality of compressed images (0 - 100 %). The higher the quality, the larger the file size. This behaves like JPEG compression intensity. A good default value is 85 %.'; $string['export_attempts_image_optimize_width'] = 'Maximum image width'; $string['export_attempts_image_optimize_width_help'] = 'Maximum width of images inside the quiz attempt reports in pixels. If an images width is larger than the given width, it will be scaled down to the given width while maintaining its aspect ratio.'; $string['export_attempts_keep_html_files'] = 'HTML files'; diff --git a/report.php b/report.php index b698ef3..8f844cc 100644 --- a/report.php +++ b/report.php @@ -227,6 +227,7 @@ public function display($quiz, $cm, $course): bool { $formdata->export_attempts_image_optimize ? [ 'width' => (int) $formdata->export_attempts_image_optimize_width, 'height' => (int) $formdata->export_attempts_image_optimize_height, + 'quality' => (int) $formdata->export_attempts_image_optimize_quality, ] : null, $formdata->archive_autodelete ? $formdata->archive_retention_time : null, ); diff --git a/settings.php b/settings.php index 409df40..beecfe7 100644 --- a/settings.php +++ b/settings.php @@ -219,6 +219,16 @@ $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_optimize'); $settings->add($set); + $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_optimize_quality', + get_string('export_attempts_image_optimize_quality', 'quiz_archiver'), + get_string('export_attempts_image_optimize_quality_help', 'quiz_archiver'), + '85', + PARAM_INT + ); + $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); + $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_optimize'); + $settings->add($set); + $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_keep_html_files', get_string('export_attempts_keep_html_files', 'quiz_archiver'), get_string('export_attempts_keep_html_files_help', 'quiz_archiver'), From 331d021d7f2cc894513fbb9c1f1dedeeddf6e903 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 14:26:21 +0200 Subject: [PATCH 093/185] Add comment separators to improve readability of settings.php and archive_quiz_form --- classes/form/archive_quiz_form.php | 8 ++++++++ settings.php | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index b0427e7..af56e5a 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -136,6 +136,7 @@ public function definition() { $mform->addElement('header', 'header_advanced_settings', get_string('advancedsettings')); $mform->setExpanded('header_advanced_settings', false); + // Advanced options: Paper format. $mform->addElement( 'select', 'export_attempts_paper_format', @@ -146,6 +147,7 @@ public function definition() { $mform->addHelpButton('export_attempts_paper_format', 'export_attempts_paper_format', 'quiz_archiver'); $mform->setDefault('export_attempts_paper_format', $config->job_preset_export_attempts_paper_format); + // Advanced options: Archive filename pattern. $mform->addElement( 'text', 'archive_filename_pattern', @@ -179,6 +181,7 @@ public function definition() { $mform->setDefault('archive_filename_pattern', $config->job_preset_archive_filename_pattern); $mform->addRule('archive_filename_pattern', null, 'maxlength', 255, 'client'); + // Advanced options: Attempts filename pattern. $mform->addElement( 'text', 'export_attempts_filename_pattern', @@ -212,6 +215,7 @@ public function definition() { $mform->setDefault('export_attempts_filename_pattern', $config->job_preset_export_attempts_filename_pattern); $mform->addRule('export_attempts_filename_pattern', null, 'maxlength', 255, 'client'); + // Advanced options: Image optimization. $mform->addElement( 'advcheckbox', 'export_attempts_image_optimize', @@ -223,6 +227,7 @@ public function definition() { $mform->addHelpButton('export_attempts_image_optimize', 'export_attempts_image_optimize', 'quiz_archiver'); $mform->setDefault('export_attempts_image_optimize', $config->job_preset_export_attempts_image_optimize); + // Image max width/height fields. $mformgroup = []; $mformgroupfieldseperator = 'x'; if ($config->job_preset_export_attempts_image_optimize_width_locked) { @@ -284,6 +289,7 @@ public function definition() { $mform->addHelpButton('export_attempts_image_optimize_group', 'export_attempts_image_optimize_group', 'quiz_archiver'); $mform->hideIf('export_attempts_image_optimize_group', 'export_attempts_image_optimize', 'notchecked'); + // Image quality field. $mformgroup = []; if ($config->job_preset_export_attempts_image_optimize_quality_locked) { $mformgroup[] = $mform->createElement( @@ -326,6 +332,7 @@ public function definition() { ); $mform->hideIf('export_attempts_image_optimize_quality_group', 'export_attempts_image_optimize', 'notchecked'); + // Advanced options: Keep HTML files. $mform->addElement( 'advcheckbox', 'export_attempts_keep_html_files', @@ -336,6 +343,7 @@ public function definition() { $mform->addHelpButton('export_attempts_keep_html_files', 'export_attempts_keep_html_files', 'quiz_archiver'); $mform->setDefault('export_attempts_keep_html_files', $config->job_preset_export_attempts_keep_html_files); + // Advanced options: Autodelete. $mform->addElement( 'advcheckbox', 'archive_autodelete', diff --git a/settings.php b/settings.php index beecfe7..fa080bc 100644 --- a/settings.php +++ b/settings.php @@ -68,6 +68,7 @@ get_string('setting_header_archive_worker_desc', 'quiz_archiver') )); + // Worker URL. $settings->add(new admin_setting_configtext('quiz_archiver/worker_url', get_string('setting_worker_url', 'quiz_archiver'), get_string('setting_worker_url_desc', 'quiz_archiver'), @@ -75,6 +76,7 @@ PARAM_TEXT )); + // Webservice. $settings->add(new admin_setting_configselect('quiz_archiver/webservice_id', get_string('webservice', 'webservice'), get_string('setting_webservice_desc', 'quiz_archiver'), @@ -82,6 +84,7 @@ [-1 => ''] + $DB->get_records_menu('external_services', null, 'name ASC', 'id, name') )); + // Webservice user. $settings->add(new admin_setting_configtext('quiz_archiver/webservice_userid', get_string('setting_webservice_userid', 'quiz_archiver'), get_string('setting_webservice_userid_desc', 'quiz_archiver'), @@ -89,6 +92,7 @@ PARAM_INT )); + // Job timeout. $settings->add(new admin_setting_configtext('quiz_archiver/job_timeout_min', get_string('setting_job_timeout_min', 'quiz_archiver'), get_string('setting_job_timeout_min_desc', 'quiz_archiver'), @@ -96,6 +100,7 @@ PARAM_INT )); + // Custom Moodle base URL. $settings->add(new admin_setting_configtext('quiz_archiver/internal_wwwroot', get_string('setting_internal_wwwroot', 'quiz_archiver'), get_string('setting_internal_wwwroot_desc', 'quiz_archiver'), @@ -109,12 +114,14 @@ get_string('setting_header_job_presets_desc', 'quiz_archiver'), )); + // Export Attempts. $settings->add(new admin_setting_configcheckbox_alwaystrue('quiz_archiver/job_preset_export_attempts', get_string('export_attempts', 'quiz_archiver'), get_string('export_attempts_help', 'quiz_archiver'), '1', )); + // Attempt report sections. foreach (Report::SECTIONS as $section) { $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_report_section_'.$section, get_string('export_report_section_'.$section, 'quiz_archiver'), @@ -130,6 +137,7 @@ $settings->add($set); } + // Export Quiz Backup. $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_quiz_backup', get_string('export_quiz_backup', 'quiz_archiver'), get_string('export_quiz_backup_help', 'quiz_archiver'), @@ -138,6 +146,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + // Export Course Backup. $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_course_backup', get_string('export_course_backup', 'quiz_archiver'), get_string('export_course_backup_help', 'quiz_archiver'), @@ -146,6 +155,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + // Export paper format. $set = new admin_setting_configselect('quiz_archiver/job_preset_export_attempts_paper_format', get_string('export_attempts_paper_format', 'quiz_archiver'), get_string('export_attempts_paper_format_help', 'quiz_archiver'), @@ -155,6 +165,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + // Archive filename pattern. $set = new admin_setting_archive_filename_pattern('quiz_archiver/job_preset_archive_filename_pattern', get_string('archive_filename_pattern', 'quiz_archiver'), get_string('archive_filename_pattern_help', 'quiz_archiver', [ @@ -173,6 +184,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + // Attempt filename pattern. $set = new admin_setting_attempt_filename_pattern('quiz_archiver/job_preset_export_attempts_filename_pattern', get_string('export_attempts_filename_pattern', 'quiz_archiver'), get_string('export_attempts_filename_pattern_help', 'quiz_archiver', [ @@ -191,6 +203,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + // Image optimization. $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_image_optimize', get_string('export_attempts_image_optimize', 'quiz_archiver'), get_string('export_attempts_image_optimize_help', 'quiz_archiver'), @@ -199,6 +212,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + // Image optimization: Max width. $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_optimize_width', get_string('export_attempts_image_optimize_width', 'quiz_archiver'), get_string('export_attempts_image_optimize_width_help', 'quiz_archiver'), @@ -209,6 +223,7 @@ $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_optimize'); $settings->add($set); + // Image optimization: Max height. $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_optimize_height', get_string('export_attempts_image_optimize_height', 'quiz_archiver'), get_string('export_attempts_image_optimize_height_help', 'quiz_archiver'), @@ -219,6 +234,7 @@ $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_optimize'); $settings->add($set); + // Image optimization: Quality. $set = new admin_setting_configtext('quiz_archiver/job_preset_export_attempts_image_optimize_quality', get_string('export_attempts_image_optimize_quality', 'quiz_archiver'), get_string('export_attempts_image_optimize_quality_help', 'quiz_archiver'), @@ -229,6 +245,7 @@ $set->add_dependent_on('quiz_archiver/job_preset_export_attempts_image_optimize'); $settings->add($set); + // Keep HTML files. $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_export_attempts_keep_html_files', get_string('export_attempts_keep_html_files', 'quiz_archiver'), get_string('export_attempts_keep_html_files_help', 'quiz_archiver'), @@ -237,6 +254,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, false); $settings->add($set); + // Archive autodelete. $set = new admin_setting_configcheckbox('quiz_archiver/job_preset_archive_autodelete', get_string('archive_autodelete', 'quiz_archiver'), get_string('archive_autodelete_help', 'quiz_archiver'), @@ -245,6 +263,7 @@ $set->set_locked_flag_options(admin_setting_flag::ENABLED, true); $settings->add($set); + // Archive autodelete: Retention time. $set = new admin_setting_configduration('quiz_archiver/job_preset_archive_retention_time', get_string('archive_retention_time', 'quiz_archiver'), get_string('archive_retention_time_help', 'quiz_archiver'), @@ -261,18 +280,21 @@ get_string('setting_header_tsp_desc', 'quiz_archiver') )); + // Enable TSP. $settings->add(new admin_setting_configcheckbox('quiz_archiver/tsp_enable', get_string('setting_tsp_enable', 'quiz_archiver'), get_string('setting_tsp_enable_desc', 'quiz_archiver'), '0' )); + // TSP automatic signing. $settings->add(new admin_setting_configcheckbox('quiz_archiver/tsp_automatic_signing', get_string('setting_tsp_automatic_signing', 'quiz_archiver'), get_string('setting_tsp_automatic_signing_desc', 'quiz_archiver'), '1' )); + // TSP server URL. $settings->add(new admin_setting_configtext('quiz_archiver/tsp_server_url', get_string('setting_tsp_server_url', 'quiz_archiver'), get_string('setting_tsp_server_url_desc', 'quiz_archiver'), From 171a57d11e27361c1387d63ee73e987c3c60aaf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 15:11:50 +0200 Subject: [PATCH 094/185] Write documentation for image optimization / compression feature --- CHANGELOG.md | 1 + README.md | 28 ++++++++++++++++++ .../configuration_job_image_optimization.png | Bin 0 -> 55439 bytes ...iguration_job_image_optimization_thumb.png | Bin 0 -> 11765 bytes 4 files changed, 29 insertions(+) create mode 100644 doc/configuration/configuration_job_image_optimization.png create mode 100644 doc/configuration/configuration_job_image_optimization_thumb.png diff --git a/CHANGELOG.md b/CHANGELOG.md index 19b462e..4e53a68 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Version 1.3.0 (XXXXXXXXXX) - Optionally scale down large images within quiz reports to preserve space and keep PDF files compact +- Optionally compress images within quiz reports to preserve space and keep PDF files compact - Fix image inlining for files with non-lowercase file extensions (e.g., `image.JPG`) - Fix conditional hide/show of retention time in quiz archive form when locked - Optimize order of settings in quiz archive form and plugin admin settings diff --git a/README.md b/README.md index 85158cf..ff7713a 100644 --- a/README.md +++ b/README.md @@ -422,6 +422,34 @@ Locked options will be grayed out during archive creation (8). [![Screenshot: Configuration - Archive job presets 3](doc/configuration/configuration_archive_job_presets_3_thumb.png)](doc/configuration/configuration_archive_job_presets_3.png) +### Image optimization / compression + +If quizzes contain a large number of images or images with a excessively high +resolutions (e.g., 4000x3000 px), the quiz archiver can compress such images +during archiving. This can significantly reduce the size of the generated +PDF files. HTML source files, if generated, are never modified and remain +untouched. + +To enable image optimization for a quiz archive job: + +1. Navigate to the quiz archiver overview page +2. Expand the _Advanced settings_ section of the _Create new quiz archive_ form +3. Check the _Optimize images_ checkbox (1) +4. Set the desired maximum dimensions and quality (2) + - If an image exceeds any of the specified dimensions, it will be resized + proportionally to fit within the specified bounds. + - The quality setting controls the compression level of the images. A value + of 100% will result in no compression, while a value of 0% will result in + the lowest quality and smallest file size. A value of 85% is a good + compromise between quality and file size. +5. Continue with the archive creation as usual + +_Note: It is strongly advised to lock quality settings to global defaults using +the [archive job presets](#archive-job-presets-global-defaults--policies)._ + +[![Screenshot: Configuration - Image optimization](doc/configuration/configuration_job_image_optimization_thumb.png)](doc/configuration/configuration_job_image_optimization.png) + + ### Automatic deletion of quiz archives (retention policy) Quiz archives can be automatically deleted after a specified retention period. diff --git a/doc/configuration/configuration_job_image_optimization.png b/doc/configuration/configuration_job_image_optimization.png new file mode 100644 index 0000000000000000000000000000000000000000..dd1db0a1ad3a972a82e1e06117a3f9f179cd1c5c GIT binary patch literal 55439 zcma&Nbx<9_*Dadh5G27}5AN;|Ah^4`ySqCCcXxMp_u%eshu{Zyxa4==_q|uI>dGHe zr>19m_U`Gf(`)UuCR|QN6afw!?#q`i2;ySD6ux}<`u2G|!9absL}(vnfBwMQiK#n& z`GPq3@A#TTjfnH*3*i^>Ujj;QI%k`%S|~^0BUjU;`r&6pxiA60_sUg%lzA?yTQ6Fi zT5ax|HVK{2G;367FDvT;2=1mV|s0FiiZA^;T* zHn{M^;y+<@P|I5JrwW$FN?DoKi0NdA#7h&Asp8)MMFt7J?awTm88c;*oFPyGU`dLC z6oPvGWzhNkgW`66QDb54$j7}~2@cjU3De@=1(>1pHbLEFBI&BPk*1db3IHrh5}3Hs z^MBG^L2Z+G%Lga;Nj+Xz*3{YC@^73$3MGH?KJvl&B~?KGau1N>`HlK~Oiu}FFf&eb z`tkaoHX1m*XY4Aiv%q^ep{k_W&VUEBe|sM8>al$$W}whIL;scaoVY3wcfjX^FdkkfKYU~Qp4q(Z8)RPC zLd>PzhA-^4_d*If!nW}e>j1;Dc+Bovob<#y(6@8*4B@#Zs^2bXEMWxpukQ5NXpDQN zN|3kq=bXc2Kb?73Wvb8nEH>6hsuasjpDgpi_wsX)zNCGuvLLN=+|cNURs-k{0-1i=e+cR`Uy2s?3DL#655{2-an#;D7Uxi{Y9GHXP{3M+h{aMVsopY z$eGB+;d2N_ptBizg@)&dqQxe=uP66Ttr)9&pY_p7?;|B+`zs^JtdQ0}re+rF z0Anm>623idY-cb4VW>vNv+W;J4h_J>(KiKNY=dcAllT0nGfwxw7yIMXwv68QN`DAA=q+6jzhmiJZsf*aRro*m#mU7|z5*goWp{epkxIpgT>~EK zEI$|nrge!9WFTf?&BcKCN|pCqRqgkNb}=3t6nE&M>CE$M^WMAKOgI@yZoZAd=LMCV zZ3c)pY`A-u9gKx(TziM}aRLNLC5}l<2QO8n1)N7c$<7_o4%Z44NCqfkNfWgWPDLIA z)n2bdUrvrJT$05*+j7t(*=uiBgl+i6ei~XtMVR7YyZ#-@eMsLkDQ5RX=ZuTRlT7Py zVHZ&C50_EV*KNZ;e~B@6f*eSTAfw%bz)`W%8<};~>UfELbRq>VHFLBnm*_-1U~)IY z%0RuOl3g&ZC)eohck9t@Mv=iXpN**&=`_f|Ki1+PWJNNYO7ZumLJh3m4(gFFY#hY2 zl;1%6m7}A$OpRQ;0KHuP*bSONk(V^~dc*lKPL@E|ziMkTAx7@s^=XDJ(=L_HF5_yh zay#;}=1rW>`kVWnioj8g&DtJ*B~$I_Z(qGpZ@8ps!3PvHR{eT&>3VuBz+Y${J6cc5 zv0L=%8+FmDp5A%*%B+PzWNa`XY^C@tS<|K zl)c2cyDX=_Dar7d{g6;zef;a(g|5-VYYZpOTqaydLEV?pVk|tbNf;QhsaKjcH5rKD zTpI;$Q<8C67(S1<$jTv!;f2$cWH>llR}7^5$p=$s3~&!*e7pSv8JoiLb>|bV)ZjkuO5w_^ z+K0YAPM$eS#`G(#@TYm(v!!dUlo64!|MBM+LAFfK?0DNP;2{O&<1gP;%!MQKT2^-8 zosh1i6bM)3-Ii^nfYl?1JL?Zl$%_3xOUL`Q>1`%wq_tVrNAMhVu6J#Uy{?R&keS95 zm#Fq(Z+&=X=l78iR-v-I4w9z z0&^+y5B#h6jkEvd!NdjYS_okby9mti;?&pzcp8> zGy2nXMGs(Kt=1r9E|JK{a=w+D#u>UW9;3YVro=|l+Bww^XptV`tdymoGnj#B0_wqZ z74!@g@mm~>o!7NQa9q>3MWv0#1CP|oFa)AamlwjV7LZ;u!vWcvy*1p1cg00^9>ZdR zy~_pO{Z9j?a2r7J5mQi)mOp(SQ_IL`AJ~3>WGNa%-XP_#1@x%7x#%*X3S%f=BM2dk z4WOS6$TDZ}>Mp>NCTaolT~2mQ1AQ9y7hZkDIgvWMv}CD8Q*K)U80w+<>KJtiTYl8h zOf+G((HnOJ5L?n`WrFuDAv1wMs3&Kny(!}9eBZ?_9j&n%xp{JXP}Q~_xCSdT`1v<; zmqaKtcnFbDCM&vTqRdOGxRHLlzaFd!!{-})GlFFQdO#VFd^@uKt3`@4m^s76uAz5f z`5M56PrWVh+Gs>-c_ft^QBtP!*E}4NXE3-@x-iOM{(u11Em3hkDbZ!&oH1D!oyPR7 z-2L_b+-|GfCdqp_==D!d89&}AB3y73lA#I#@U`xXOy=5jK=#FIUYeW5k8d%?(K$0A zA49U^HK&l>VC(IdH|HCNmAX&dC>@@LSDBuM4j_EQ6Khq+ZP^v~6V#HxXvez~&VZKb zqtk5G(Tl8^pn8jIttqk-I*mk`#&-)6QyGGTKUaol8B58PP;k~0KJRMokWE)OULEYQ zJ0uZLGeR{w6;4Niq|mU4Z~zXwuW!_=*Gu$YA)xVgVyay{pi_Uh6I30!$r1Jme0^Pd z;?zJoP%_v{T)22+jZm%88%@k!nA->~TGrS!u2F zM!C)tc+>HK66Z`KMr8r7K2+u?kO|Kx^rwgrOvPt}kRWuAKl~Fr_VYBj>*jxFwE|b~ zn|`&dj11HJ0~Q`EL_Hfh;?=N2B}tr356a;y2^n8^Jzk_qTCiG$Hx&kcbgQF@2_^wx)lM;*v=N=1rWJ|O%FWx@U#&=<20DN3r-AO zr&YV-`)QNk($`a3Ga+=6+e{{koz90YzYXu2BF@Az=T~>s{lCTI2FRKVT zdQww^p*URNsdCNOtZ}{ny^wH03ec6@x=0WRQGqpU>oEj}Zs6-Q`aS(od=ppW4GiD@ zlg2jSp>R|~z)=9zI17Q_9ocTKeQ|z&q$DwwU0C^u?@N>M%TW6vrbbtY%A$k8N^wC^ zgXx+iAv-g1-Wco;Hf&NH-S0$WyK9@iFPE9eClwj$u5=Yc!v4w`_OCp-WN94%SlOFU z^UgY7ZUmVxA6rq}5@+gI%e1O-RnpaH9Pn7FCeE|$mM({DDMPWaR?<&L@`B=uz^7zn zJ_rG5E6$I}MG4$`J4N~Xg@-V z+r77zYrY=NcQ6=eE?EaZ8^tHw+IS`zH&QSzc}o?Q;VEzZ6-cT){-iI|JlwaWW#7Gz z-47ApU*NM-Bv9}h9tajdq{oyu74)^<%bS^^spaJ}^}&`d=Q_$woU|K9cFL~GxzZfJ zKXxIwoSNsfrOe#z-g$Oc!%6gSpF3{vmwH-c#h+ws=N~(Mx?u7>LI12T67C2|HFzGOdd!VyS0U6cupb%vH1s)WppE^MPtoa_YY6#i9 zYgPvf48(rTPZ2p`<2g)pcD2M6&W2r$zBD@K^2@Z!Ry47s|7B1fLr_cTE#P6scvq4 zwuy(wlkJ5V1`vslzcUg}?np;<2&g7CegkKD5QLrod8oQ+Pn)zG6-~cWJDPb1EJY{v1NNi_9Hdn%xt~@4RL)rz6DxHyol1<*cL0HwWnUcTC-dS3G1Xu(3y=R=@1Wu<4ezy(WtM2qA(WSLc zg6=Pbo`MY$ObqsHqV|%i4WH1=$doXK+j&?7Z04G9&tE4>)L&?EYz4=pq7I?inDmS^G?Qqtx$A7JH7RWbKDw7(i5yGr2!V_~ZRYs){7k&2t}|qI z?$bG1OF1KQ7I04}8Qo*dk=C z*EAU>ImR~|$E~cVBdWSFh1S9-KP4Bu-^lmP-JD#wEvHN{4wBL(%Jo+(2-6I$(_Uhe zXlQ18T;f^NC#-YB$@cvF*d83l9eX94T~@?Ey}7uFZk^om7rxO3o7$TW2k`my=O%qc zn>4R|X(3(1OivATN+=IlaQ!_YyPSkbMSwj1=C)F%z#cApyr z{^qX;*TwUQ-+y3H>Ox7J@2sjVR4*wu+SD$B)f_4HpNI9z#1f95gOkk>>C{<_fY8(8=n1HpfKVLjMQ3}3XY@7c~CIr*^Zf{ z7@M~Sa?u<~?Y|g9x4i*OW0IOigYYw_XDak3Hdq4bWO7w7&b6~kicSwlAI2f)#Frr-3EAXqkjCq;t$d zx_Pk_2IQ9b5|Wz5k$1+wcY}x(P+1H(4gu@;XifB(2Zj4q{NKmdH_u{YDJ=D?UEvmy z@$d!Uoa<&hqweJ?T;XlLjSJTo75Sj_0I3AX3(8#I0PRwu`iqHE(zMQ(MZnkeBHZ!x zQm6f{;M1q>HffXX8rnwQ|t60OE<~7;&K5-{syz z)QjMwO<J8QJ%MN;<&qjADtDxpq)rjYd-5wX6)QBeift@@#pxIy-GSl zq`enfj7t)|bc3vqeZ7oXg^VtSZpZO-bk5Qe@ zM?QPBY>diAGaUxTq&1zx^pPXh17GssvkBrY3*CGG>n2WSX2smQmf=1134WCXX7Veu z?Fj_xX-EpyKvz!EFjnfRD+*~Li3RgyFSaykBwZ<`)JLZR&7w@bc-Ds%hG*?(8TH}j z0diQr_LwNiV&>NQP@2}NuSyFxA7mG+Wi>iP0|$3$CouWKj>(;o*r<@xL~+PxJogmtwLHWm zmWt;Jzdvx0E@L8Cu1|btxjFxtan^^;baEPj$>oL4O)nB(njFVkHW;F9^l?If#bxkA z^|s~(Ky7uGBUKt@xI96yVh2bSdgtcEOSpptR9ZJcg@c*3c3feYSn`1%sp`B`UAb=$r$xlAEWZAeaZQzR+whfB|Oz$8i4 zHqY7;p+MvTsFfm$C5ZBp3svteJ>kR!mE~CZcPZXO@sBb$NDWV#tfLLPQ<#xmCfDYA zSz-s;-<>%RS=Jx;3y)q7k>OFaZ}x{qj?FHh4S<06VTm6x3V=nbje-eyAy0|9OLkym|)iB zyz)EIK3C-9Gw(g3#w6|L^U}C%-di)R820u%TEYjq7wx|MyT(0+X^Q5c? zYF`Drz0sYM60n(LEj|9ni{D>B*E+qjjnhS?Cs)2Ziiqz*sy7OF_&ivB`b($@zO1DdjQYzN3oVLZ5RaxzaT}YHHNdA!;`=-8b=2@HCYsv3&lQ}H zZQ4kvtDV?ovHNH%qHQyc>JD_mS;p*zb3$f%c;;9c-ix#MDDW}rC288r`sQ3B7Io>- znw&DX>1_qY26d?AxW+%3WCLk?Og zE;c>I1V3p%g_Vx!?ZmWs()P_eqyR-6oHw5WRkp&qkN;=g-B{p~dc?l>BULA-K1lwY zt#QhWSoR(DzR|0}rn>v3v7uuXC(V7AFm2i3aZbAOxgKM(E31x)xqo3Ujw-61(P!2q z8L3i4|AaL@>vKzto(pfzI?4M$;rRkL;_}*QLzmO3jO2>L92q&jC%2lCje_1_Y=S|B z>Ncy0tCVQV9Y_1JbbS+6&2mK-lhwvZRrJHSGOJ9XhSi%7U)of)Yj@SS^GPq8zXKRu zpu67g#-*W`uawKeHZWF(+=Sz5Fq6{LuxFT~_3(=0d9QcBv?%pb%j&FUO<`yysP5^C z?SwyiCSCD3F+!YU=YbA8F7ozxJJ4dLFrRhplAMa2Cb!hhlVr(OD6}n`)-jng1YVv{ zp+l=a4=OM|+kX9))486whIUS2S@>SYtGtyR=ZP7hI;`Keq7udePf_N59s#lW;hj zH?_l=RgvFJ*jn{;!usN`c!7}$p|1@cS3?OD94`+p!;(?aa>(*!Dh(zs(E z!}d>#tZOZsS*27svUPYFh@)O>#J*gAxtu_u*g^pA1<#!WA@E2~>2TBC?bL+s92cs= zpCv)0Ph;^IAO}Ck$#8+dw}P3&TUtj5*HJ8`!=B=kO>Z$%`Z>BjehF2>r2Liimj;Um zVi4pmX*{Z$%H@=-rAc@%Mv%e|!Q$;*Srd~*l-2>6Z!jQFp*x)$9AdXenhdxhf?l;M zG_$?jhJqz&P>vlrZlF1pRNmxmw$)9&xvn&#!o#imT_V`v+Z&ArR-*=1)J69B#LFbJ zxF5in&tHa8oB|b+UqkgjYSW(b+5gnc1V;f}Gyew_jYv@UUndFJAJ6|$p(MioA0aOP z4}UAkC#XV=lSgVpc1Qqu#_>eUGGx-A_O6W~FT+i_c`6UDj?UWE6Y^kO+2Mc67pZ;& z0ztu|aup#M_!nq(O?6C}!W2KPw0K&C23p-XgML@jHCg~oIU)#A)BdS>I$@LVo^_2B zk`+MW%J(uqApro7_`&&U>m5y7y2JPuLp$bAMy!DqPtoiO?F zwO(a1!3hC-0QU3kc?>o@L<9n%zP-R3h|WV=;a-rkm4g%tdBcqsMirTDaPG``Zp`+?$(j^)@hf;nKGLI z3LJ7R-WXiVj=#(~q`&{pO1H#7++{YU4vgLeFpx2WzB0`rb9(MG?Jw7q0MnUqCEg!+ z?U>)@6rh|=r&T=--A~pmFB|l|blask#rhRZX*khobcO?l#^EC%cZ(Q}6Jt-3?IozsB zaMDT|zVG&FWMIzJQ7E!!1fd=$lW8IHj0Uou+l@W!q_}&%(l>9-{lptEC!PO{sn%-b ze%})cj~n~;5df-Bj7|3;3ob&*&c;`&I+jd{F<~gPrs{a-63pL?43LvB=HZ$4<9+t0 z*Vo^dDmlq^dZ_-TY3g`;!^?RB27VucT%f9wPpZ4qO9|P%sk!fQLm^7s7~=SakX&1D z@mZ9`45$-tK?lhM{~9cr9Pzn^Boa$!riGbCHXCr$Q_b)#n|QeDf@D2idyksdl-#S( zx{A+svuzd>hIi>pPub%pLxD{Bo}%f`PYOMoc0Rn^YeLr3Nsi6}L-!13-zkb4vrtCty@5i2{ZA6sTH zuTH`87)4`x#p_%(7aDK*$(y@;(YRK%`Ofhv5sYlYaJ1nO?9?Ah`PF5U<(cZo2ea{z zi}MxcR*aYJ+7W;!Vj4)YB<78#TiS^p}?Ihp{?x_h?b+Hg$vsyqe{ zZ(dr+MlEb=40d+Dq|3bfSx7u#oyt4Z^aUXkzVV&f79OJ);dLvi$?Y!EuRT5Y6CJ)712Im%+R^JO-XJ`t0Y$+&U!N2Ug6ocUL_ zTeluYAm*&uExnXm3DKg~nO*gA=$5Tno7b+33+>Nj>YI1dE)ZSC7pby^I~2ZKo^jod zfmt)bRffy&$|JA6f6{Js_UkQg~!>%hcF=zy}iqB zK^&pghb-2mmzRdXdeKI##jKO!5Y>$ULLN!j^5gNrDgwd9sN6*hM!E;COWBMOj+_a6 ziMxRYEA^g)f)pD&a+XML*93}r<|B9tb>(6S&MpWQjy?I&#IRbi#^buop6ow$qvxfZ ztd>w%&JtYsNCq*^B5S4p~rZx&n7 zn6LW2vv7o+N~9FGq?KE*>8ysQh889f5fQW|?eHo4V3^z1JQyeUM*}UPv)cn{9gf@k zp<47Q*DNFCq{W6-#*qNaSp&%<^NOcJn+qlOdYTlx#`w5dMYgaY;{w^0&Kg?oB|6jH z5^c4=%;BsJ?Yr5spb}l}iJ)K$J}t(ebalMSU@atpKQa9isNAp@z)`L=&`qcrdU9V{ zsnKowYeQOUnt{HWTD%zv439(L?cYSDun_cR$>+I-Q_p~{}MB>OEW<|1vA3yg8S9fuHioTJ2yR(?ZXh&(-s37;kO$Ykn!T~ z&q~yqOwgde8!$XmZ`V;z3nK{ZZ)EhVzwe!07#=|C$T+NdURYh`e@ZJOYn$M2gj923+Bq=b6 zw7)wZn~vb?o5uYaF8Yy1Batz-VD4@HEEd%!$@;qWM6e0BUQAaeH$-4MJku6Ljz5`O);R zH@#&$w@WTuB=c}dRx3z3`RV0QzGPDFA4vES!v$Fc7a=45M&Y&<&os|>FamW^<~c{i zFWbUFU7&LDdK#Q;(sySjL|^~uqu~j@*Qiq3Zy)aVuCg;Oo18K@(M#h({+4$pxPMim z#^~$P`5mVeh9e()Yt<;o3|`i@?}9aG>4p>P*@%X>e~9+d>vu-tt!Q|WHu4f7j|k0 z0k`8%Q(1pcQh%h!R*n4h3+n*oC!BkFmJRBbZ@A>dFjAxXXZ#A_n_VY|5v;3kt_QHu zZGEN$RcC*trg_Yp`|JB}v476Bp|Pd_=1;f_9}#R|$ISx&iIYQy{u`8T=_IweaSs0L zh(RB^bFREvtM(mE`hRv@9gX`0$Pl>5;MTttd-DjX+S_-|4$L^j|LcxwWoCZlY{2gw zda|#f0b*|PVihJnAqfz9V(%!j2cPvJBRCG+Uutd;O%`suyE;EU5$u3^5ZK`GkRvxs zWJHQk>E9D#FkK4te+bzvkGKHef%JfE_kq|QH%E^{ox-mviL@Fm^Xk5wCjB=MHtA;*+K5Bk8hq?Xj8=GZ@1 z#xf-r9T=@i1dP{PsZsn}CSZur|F}UFw$3NuA6yz9vqKknoDPqQIC3$={G0>1*~MU$ z$yaz&cjJG)LXe=<{dPo=u(}2-JtsMjfZHk%0ev+_A4>OMAB9u=yCRo@0$)Pk@J3rxeo>GPK zKm;`rJ3@pm*Z+@@1Sw1obP<2f$^Uz8aNdLWEZfXfYeH_KMQcW{>If{EdPLNk_OAM8rCXiL z{#DPRM=)tZKj3vDNK-=Jdls71+07P9P&4#HcP+cAtZM{VBXWJEt515cCpvJKL@<9| zvR{ZJGZ$xw$n5-woTf8VpW_(v5B%Fq%9RSK|7+}I4w7DfwVK3w9*BjM?)ETfGqO@O zYkBzWFno8=prm)Ggn4t#!%%y#IfxMT*JRVTP*7S!lE8=!GG>C{?~BUhxa2>pI4M{? zKD?~UnY(fhlw6zQDsE4#dFHGc@va8cenuA|vJGSlln(~JAQskJ!iMhDKk<$uPi5Po zw*);u-r8e@xpjjCGA#{2ejq+=AgA7TK0vE3adbD=zrii~ z?&2mVG8tPJAw@&fPdpLDHKd)RFHS01c^kFa9J&#`08c1{l$I*8l{yS&56`4VIf^tE zcD4IeC#WfPD~_T;YITgkYm$2_gkrClU8j1UspPlWe07oUw?_YG?n9PHcY;IC8K;nP zv1z%lXAsn;4SCXh-6xdB3td+yu2d=y?iu$OTqyiPe~wHiuUmKjj^CW=lDGMI!6Kt8 z(nISRezt^@QYo20u8Fl`MwC=?x8JvsvzoS)Mwc<%w-*{*Xq(<4++O+N07i^JbEjeFh|BADt=Po3FbF`o-z zG*EFwhL+v4ylk@+KU@vt5+0JR`{eWmXq&d7B?+dD(PHu$!-1b_7}aP_uXm-&bEdX+ z(4!>lMQzt!K2{HTn@FdN_EtdylB-5`%;&M*+tJdjiG|ff^UPSV-ELusiGLP>VPMoY zfFBDtiyTWDj?~>ioZgL=pIJ6o#uC^Xo!1tkpw=cOkK~Jk|0H{zGY7u3T?G$}YfK*% zgmX@}4_U5yU+{&KO|iJ0N}t740`{s_y*BgVky?Dm!xDUG9-C=hko}}?t1mIJ)nZn+ zT?fNMt=zIPIK5XG7;S>L|U(+;xR%EAlU!F=-2RUO=Wp zRGW+J@%||CwgjU9&4O$%o=QlY;h)z($dGPF4A)pZimHrP*j@i}ol^9>N}cM7UQd43nD(Y;Gwk)W!$oY7^vt-CCcZs#d?}5TD-uS&Q={9#B@BdzdwWxp z0T@klCEN0kHic4BR8h}5p8-5nRsG458!}WIxOTu=^5+@qDuQG~A22uCu#=I^Y^n?o zRON5g8AFCe(jw-AY<7HeLg&1%OdDwmcAv+lA9?ce_O)f1Mn0e}gn$fXyCnB?x_!k7 zE$*oXLEc&TUcBA3)o`)mGV0OKn;{Ivj%b@~3F3$dMu%f~xLw%d0ah|k*ir76 z1KBM0jKq#wA{Wlir)%lZI4<9d{rlQm9@$5I3EW6of-Y{4IyE)dlv($i?yKtfkEZYK z0>>$zeypoz9YtYva6BF9l~c~Q@|ZGszqf`?2OZ+_`S?}w_sB+77W~8+8rE&md)no> z$J_YRa@U{w@PsR4l>Ng|%%#zNJY^8v^V4;AA|gX*XZn2!uYJdm3Z=`G*t=x2|7d&> z7h!F*6CYb8`uVrCJf!w@SzD_GLfxim!;u{!v~TIaka>cdJ#z!IG>&I>LLI{6-v?)0 zzV={BXTis-h$5}oQ%gzy_PAbbl-16U@6bM8QPlj=xi@CM8{Mx7Bm&UtOYdJBx;3gj zCvPeXm7v1%-X$M&Xd8jv-_f`XvEHb;JPi`VS%=`qBc;3nsfV7 z*%KG=&Q4i@0?Xr>3dK)XIMJvK-$6N>n@(-xA=+FSzFT8yPikbR`IX70;o>C?LTnO? z-;qtS_^xEQO8czqqtmh~f5}f*t;37xG@0ILGXS}+oIhfw>dqvAS;Dz<6}j4){;O^3hH9oT{kD6qpt`Wv|_(2v&aH9 zecyUjaqtxiK2&M6SR!=!Edoo@AROQ@lD$V30%r^sP?KrjvIwA;h)r%}y^aXv3%zOf zhkd|MwIA(wX@(y$9nYtA)p3DCpi5uV)yf*o*-9QVn|>CDNwOV53G zZ%W1GO+q{|zNP?k%>*+Z6KqM0*FP=ZCyFwzb#ZCbr<|v236~#_N#>Va4$g}P%^}7% z(AG*{=DT$!X&)}UxGfQ>O?;#<#(UB@-LXng9GlDE+oR8CvUJg-N&*LZ8m21`g1Uj| z@9WjOSHKJ<hL&0G?vZb-#mvFIU>y75AL_%A_aSEkyUgL2znLNynDC(b`>!qR#Ra(K>6N(VQu> zdvU^#Y2j=GJqC266_&Ewwj}>YI9Y$5%xr<8fsEgY;%w#X!{w*{9-*j&BsiGJdc`l_ zRu}bfEYEy1Ju(n_7TxhBhl?#e0&1X_HOBU8Xp1_Ny{ebJtNq&3m;(oSYE#R$>QF<8 zhVogMRO)2AWA(=iSD;9z_@qPf3deHp_@C^@bTr(V>3k;Ek-0fANlC+tOLfUyZC8;N zN1_g8Zi09rN0G>rFk54Ct14}?g}xX#BpXLb+n9qv;lWhtes|EZ>(K}E zEf(^9YsfFZo6O~xDPIn#(q3jR2gsD{Yx~PoOxsx*fFfdMTVEX|*wddmksbEn>zMpP zX7%z%eW(Gfz8*UZfKOXDrzM<-S8r|^7gyh+K(^ZU*2rpp|I7)+4bLnub={u*@zoPm3hQYDd zqA>+auw~RznueL|O1|2wtq5fj3mR`PSvZJvKZ)!{bD+-&c4C)_WMYe=y zKY3d0l@Ca4;9f~y35pZaklUO^##x5CJ-^3}`816xk|dzw3Dp}5ck-Us)w>i*1VSmb zOsv`}HEo+1y;yLlugh0yt7@!>I-HvzGhqw5JUKQgAn~2<2Zm-rsvMSI18b4Yg}$$U z?pQg@j#U-GSU_}RhS6@ZXIDzb$(IxAcdIVtaJq9IW+aJ%H7B#v!E5XFHZCi8)`n=M zBId<%4O3lVOTj4z9mSY%pX62JHVSRf{aBjru^J*YW!m6@mg84Kb=KXg;e@pI2OeG4 zN?C;+8yTgui4q+Nv7WJ~({S93jp%g61|6aT8S#;Q0eFqGYtA%^(j65dQxZwG6-`M1 zDH)Mr6oB0Rv{%;(hGV=*GjF5KGsVu?dhRY-PnZ)UvmTvB-M~1nFhKL^>_I_I%|M)K zbd)KTcbW@sH5xzIet+lDet8<|o$opBf!5W+gI12TjXzr~|NqGSfTa-KsXo zbjqg;#a>K~OE1hJd2dMf>rqra(*T7M627~59VL8zHvtHshV!V36qsXyV zwW;8=HmLQ|@1`TUwYsdQEO~hwIv@}zwKwg@`Cv?$h1PDYZVGvd>*|y zzd+8@f=NR4YS~Pc{B~Q<^vlf2<^6oK^<8N$)|+9*mvOlrg;Ca{7X>v#TW}&ub3#+Q z(lW*CK_Y}C6Ve5%O1XjD$#D5u~bB9PgNq^NE2GX7w2rFR-L2UW#|GOHtPSIS`56b=G@mT_{uU~tSF4CW+r@*Q4t^Q;7AJ>`_I>(fnIbzQeG4 zw64@==|O9Z?c`U*ZQvOfZf|r?*YTQ;t6y5HVw)fsdp|3OGKDN;SC2#TbRD-@KS%8; z)gqMi(J2!5Y`#CcjRLa0drVY6^@TGH0zO~RQdI;msKLBR?G*%$#p?m$AP$Jkq%w@7 zv>ux!-2S17jK*upR4tFDGu_f&R%inmnz<$ed+_%x4Amte!=p;ep&!qN=g)Bo1GOQP zEOOX1-5l~81KToYsMdkeRE_!|QK&1{YVk&ctjij7CVabO5#0dR+!MlyXUBe}m_SVn zEq%dtD<>cD`mmJv&J;szS89J44VKgAcf*KG!tQ#I2AQ8xa76@GOn(8Ri(PJ};Z#mR z(`o~M2L9-uG%A~7z;QaaG8=2@{(aC(+~^;_`cCTV6CACD4<@I?!_Dh7vYW?e1bi-) z{sApPeG?h1?C&)#yG;27;nbjrvAp{G!l#acM`sULt7$7!-O@-!NK>V_AA`wF(|2v- zoN6ZbPvDsAiWPUBUU&0uTw|guPLK2ssnpVBixU$b&KJ zo2ql$BDpH7=ZN-ijN?3%61rr|{)~{Co6LH3Z_J%Z5$EYiRu{E8-YOwNrxXW}lEx)w zN{9%U6DIYI3HB9qxP~tWWV%Jr;zY+?uC&ldu&+6n4Gl;)q@sKmJlG%kwFP5x6dne) zbgB->#D3bdHzc5zr8b+Ztgj9+|5epYYuDbHt-F*3l$kKZ57yr8O((VLc)LvqdA?@z z(R2;^rf*+p1hA)f13#6;+TYg{ZlR}?6C*qw&K0}21x?{#ySy>RSYr@}xxa?3mpnK; zHbae0#n?zUon`apoTm_nONNo&F6d4?GG}sWYwngojMibZp4rs-PD{rd&G23Av+7E>U&!t4wCwYbWC zq{K>v+d?Ovlubo;`+{__qUL=R7I(|TPbtUVW71X~wbl7Vq+r`ee>@Jh5yYGdPpCd` zajjr7kvTk3XUlvS&WNZZ{kVOr6XJ*-Psx|15!Y?Q-CdB8aAQSCivMO>Phm}^SaMf% zOu`DJTLgI?`8thzqWiFo`d6cnedoEr(Rh~W8*XFUd~q!ThTnWXMS!tp-&fs=#_0@3 zUq3`q2lK{qS?qE?v@{CGo<v{VVtT$V=!giHbh{dIwAsmj$(C6|$x?lt+lZBVh5=36yL7$0gAGe{{0`nqXL zco}={$Hlvu9spd8$USa%+6cCf36T47Dwo?#;{zxFd>;$oNs#VQZLBl59_cvEX%|K1 zdUPsl46ITgB=_YNU~|nKJGDN(jGZ=}EpW0Meg%s7T=&RY{RTUQK%<40&UN+f;`4-U zRF?+DL-Gmr9PBqytKFO)(R_Ywx_^(&E7}ZJMso-4JzC;hZFEbtVnS|h zO;T(@|BtE=qef#m0iTX!eSg5U4#M9xen;GtI8@1*x#P+(@sYu)sCK*&hQVdraKM1; zsE~RdudcLGz1xsRH^}!_dN^M8oyN`3pp25Q#(Zjjc=DzucJe#5Sbe6fX$0YGim}np zm;3ME^*9cTU@m9;Be#7=gfU))(Oe%Ote3O)Z<%r6QCn4Phy86P&%Uhwmlt5M^z~MY zLWTK=#&{wO2|gl124^^3mfXJU#;V&U&Q&f=?w142dP#Nv-ux`fc+C-SZ7zA5G1Ny4vdI30$;SYW7DI!8`1P|)A+b8(Hw7WwoczRaA-z8j%* z8;w~}ekf>5Y<3M}%pkASvELD+->k;pJZwo&@Tz9NgSr8{;zUHCP1lpZD5@q~Jkd=y zQAtT?7Z(?1O~Dzy_E!i-qq$68PIN&-MC=@xNxigPP^O}$7Ks$2ILhO58;c4$c#^IZ zY2y6!*fs6&X_>BRw_b7Lx=i$jBfz)VEb<95POKLKUx3rAo0XN7or8mdsyjmzEi09B zfk=_X39@*6AgpmW&M_<0uq! zmfC>nSQ02u6WV0CINN^%^0QuN%3&b;1x$Fw7YH{Tfk8qdCnE#?54yfGDz2d0l0bmq z!5tFZ3GR^KjRtpjcL*Nbt#NmEcL?t8!QI_`Zoc5Qpj}R;H zY#7sey(2=qlJSc1&=rqHiE5;HI}KyM7sDbLpJ*4Ohn%Mj!= zM0(Bdk#uliIz2u8i-;(7bNf^T&ReJ998n${1Xlao!4i!2*75Mmy*Mm`Gx>)6`t#K% zl?)b>?i>+a3j{bg+q1Nmeo{L`6iR;njGZ0B8@E@7m(FsbjckV06WH|=ii#LKgS+|{I>Z$AfUtXaI*ZLEO0wv*G$}zrNYUKOX7MM8^uLXe z&|X?E96?d(;IL=1T2yrWiA{sT2dB&REJH#B3c)o}vgDvtj=31$R95Qi^`+X)`SMZP zH;T>nTb+a=P^VU zc;gTY(s6skMNHPoey;NW9fE%TqCHr+&lfB-f9hstW;QWq<=*`G%RO0hfD*JPfqX7G zArJv`aymB^q*7$l?_T9-VR7Te$DMxGtlG{90w03^wMPyA@KlmZK{_>snmhHdf^;eg zHgq$bP8{`{nDM3(^#T(R%3(l9i2BL*=6(W`ftvrhAgq9ZQ?DTzHW(wSTW6EmoHfy#x47(3D+~vGYin!! zr@LEF8|d_AF-e<|3KZp+h~58mJ2zE$<`Dp&HK%W35tf@vs$Q;4;Rym0;s0CSsq$3r zt66AR7=1Idkl0vs85tR%Yw(RK^?&RgcH@X>G?LTqrKNSHs7b37D)RcgeY7VUPoq?% zUQZJl8ELPr1I`-|y<-4BRyBwUc(rjq&01Q_!IuX>GcYjxa&sFF@Bk*{ToV*C8fuiu ze*g&yxb~UU?y&#!vw@9GRAM4FufBJ_cBFW*)o6l7%NI4U_`FuCN` z&Q4wh4G6HnAh0;(`1trI{gLE1VT|9fE>(8-$jABv$=lr>n7%;p@bH9UGs-O07+qdn zfgK)!Su$NE@C{kwMu={0Z3RC(+ekzagh=b>v`EAR-(74(W$=Yu-}J7nWo-3@DP#*m zOT^QVS6-2W+;aXoNy?Nd5Ksb-pYON1t?9Ak{T50t_VWM&dg#+$lH$$t3`kF;#VyBiA8L~=ya(- z9@}AfhX@08d3os{7>L$tg}=K$QTR(dxJ5lXtwKH^on8a&{4BD*o(*t-f0mHXm)P9j z4{C33SL1cHd9L^(*kdi9Zx1bzNaK@QTH6vz#^<81zuoM?7N^klHSXd*UnCahh(G+y;PKRb&|O~nUh zrK+Zu+-J*gIKFA~w;|Q5y`?COY{>Gp<-tbV>~UHlb2~8#B9;sjhzRB7^z-xcO-)T3 z$H$Tq67V4*A$fUuSu=-|hmJUiFc>0T-QAG1w6y=d(Yv}n0Pa^-US3^S$C_%Gc?zt5 ziDE?-vLsloRK6J!2!6wPjGzLE+$miH1HXs}Bw$^eT3d4$j+yWxxCBCTvZhQYO<7Ir z)#>QyMvXrS2J6t6YZ{CkF#I~JprEmcVqdTjxYnFk3}RMpThu(B#=04o9kb%(|i zByZ>7#2%ud{Le-T*l3W;4L*$=ZFhJ{UG1;HP9XXhMW|ER5Z1hj!$l#&>&;_2Jh-sD zyo?1RzJTO6hfK~T!NsBB{!s$spa+PQo}g?i4H8DpFI-%>uGbM{pn$Kj9c0NRlRw3! zmBgy~T#%PD_?qn=0eEf*CqmR;PBv%!_YW;KX05>ElVztEL)W#tUxRmJv4Ce7mPo`y zy1P4JK-_N+R1@AHufN|?N_V72z3#YjN~eaM-iXXxU$!r<<{?eKFk^k)OTX z&+w@Y6Pq%bcFwt46+=o(yJuMS;uH;RDasmc@I0T`0e6Tm_EzD2P{gke;O)GoBTbl0 z4OywL+`)90xPjBtjA9F*kI8V&$iNYeQWkS~I2Z8mxjA3L#sis)8ZRWpWb{rUba~Wx zaQR3^Rk7?oE@2}L$q7@ey}Dk7@)7#ZF3a^E&Rw=0z^!)%SNH5!J@?wQtvY-=9~Tgn zA0PPKOQ~%W9G1#O zg&cwLn+0yB?M`39BJj-@{aGsT+Akr(@k_5k5dTs;92o6KX6rMv{p6q0U!w3HCA0r`DHgs<2wa@(!F8T<`BMkuV6z*98$rg!zpPvAn1 zGor-~oKM=d{(jo44>cyxwHjmA>L8sJ{p%w?jB{>(mGrw>^W{_bH$S96p0JcNY6Rn*@TeCHaGIPi1iESKvQ<2FPUtLcX|-btB8Io4J?AXKx1HNy<7wOtw4!M@d6&Ne zhLhiD7|QI=W>p$dN5@aMm6d7I`0y8-kBMpML8&4Lh`0J7TPi`(%VR(=j{7 z`m0U(U%_Ad84u>a!`nUnUJxd%u|uv>zlM=J^-C3uuE?q-@UR2Pr_Y!{2STHd_IL>I ze6r#BC~Q1!19`GMKj&e@HOH23_vP$8T+o#1NDuTeB$gH)Ec?Ina!BiMU7`E;;ZQF* zW2}2kMS`)St1S?nL@gdYLK!u@H3tq;r}8+J3ilToT|28Ow{E1=T~fxNp}uiOEB&o$ zd!A4ig)TWO9)DUkD(H|t0vNk%dos`++b{Pk$G|x|(XPRAD1_vG)OYK^`dPi(g5Gkyq^ex^>} z5*#5u>J_4}6#fA9|H7j3<0T|XMp%B^xknP?A|{GjtHy|EMbbA#5U5Lh(_N%2{lo?_ z<5sJ1EVgiOZhsLp=hC;9#-Gk_#7d^K(*L3}UvsZd*VOj?RmKzdM#Ag_bCNi6&&Qg56i_dhYoZNo(BMcp95E18kBhPwko$glKhuOhe7p1DYnqC~jK6)WICp|2m z?|u}|;IhHLqG7=TJ)zKHY7U&?AIo_#b&k5L_#-YF-I5xHydnZW2=Q@Nc@QUBQ$`!> zM6$oaOtz=6G+tSzzH!n$CrzPhsomLmmO(I+EY|L*B%JVy`H%ZdM`#x|AB|&(-rB(hDkcKgkD*7Vw>Cu9w5u2MnJA%I8@-(46_K!Tjr@Ul@%0m z-07g=qSK;HPhSV)`cI}~3bbj<);;Yo+HsyV1ao&PNgb$4vSvC<<-vUw?xvaQ)Xyqf zJ2tVS>!K1qa%E~1la?#q9ND^MbPg47|BSn7(Hren-?ve3*G=U=c}hTE0zHdGzotXt zi;g51tZ3)j_erkPP3O|R=*K6|(BP=Q)S?_E3^3*47*kA_BqEvDn`h#xV(;vG z>7eUIrFWRv3-dTi8+Eg~dTTntrcYzF1H&RGTo7kkSpG!rvgdb){&XY`YGyRqH1ic; zs&Ar}=-W@o*s%*4SRDG>ePi3Sy$Ae4eecMWaJipJwht_)$}PN^wiaSZ=D!Gw&N47H z>)1@WPnv9%YM}~JhLgN4LSD+;Gxq(Z%Ka?JDCqV6z3!Y%Q|jTkESTfd*PE%Wjgu(h zeUx{s#2Y~zry-KNmCUVGYn@Qu!>5e6A_K&aWd#hKov~ z?W9Iec+_7|6XxzQ<(7lPOShurpn4~X-!V-{wnd~4zB0KOdNUm~UXy6?N-Z0e#|Ja@^lsRZe3`7>oU3|Y=Bn0yRz{ObRWA}rS-Fl=G{6=VtDOum)V z)7vFb80@v`7Q)dXK;xL~4I;?AuE2RyNg5pg^ysSl975_u!hFhbH`Z0@mM1jBR(QuOkFTeFfhT)iu&I39F~ft7=@j#^&IbJ&4nc zMYcbXnr<3=2!)zkI}zU~CnadHhM+5cf8+3Ya?_%DYS~uE#pc7ugX2$LMaFPjMwlf6 zgKBGPy8C)U__dzxdKk_zUmIZfbY$@RvN1K96Tsl(lEJ~|U>qqoa~+LPne)4Rt6TYB ztxZ2$9!F*!n))9t+$L2G&P{{rMg8*2p=2WOR5f-`XK*+h?dTIr@AZ32<1d};x(m%= z-B{=Cbtlvu)x0H4M`rGBziYDUZmMM_%#{VZl#5mN_f-jZ6-z*wb7}3K#Ph%gZ7F9G zrPFNXeWK-p`O_&}jsV&bsr|X@bU7ztsFMm?Lge}WeRWlMc+K}rWtN6h4%QXE;$P@J&{)Ktc zMN_X9!qk;F>F^?EtQDUFa9@|Mc=4N;TFGjOr$+gi!%efqni z5cg0Hd1DP_A}i5@n}*SAj_&!6e|#&?8`lU3xHhYSl#Pqr1Q}$?|CCov%~1 zX>7_VDq(Ex^20P#Zu)$Dw6uSWkOK^o7=O_sc8XIP;i$U5fv(U*+8wSpJXsq(tD)Ly z!2TDn3aH@cL%ZYk-|Eh0gWA2v21F7qG6(h3)1*#q_O@=_h%27sVemD6Vjyx84*m9f zf~F9P{XQD2?1o}<6LlqcC`(3fzBlw2gH|L3zaf?<^4eic1g_ZuZC?!CAGpay z*A2Zyt%|PkH7r_2#+6#3P{POt7?PQrXs(Cw`2_(7H~QAlat^QYYT=b>p~tq!7gpyn zoL&{+s-oZevSCvKmp{fv16=1joDSb{SDtkFrg%Db{a99$@0Mue#8<{=;drXf*)rUm zm(GGf-$e7ftU_e`cZALP2}RbUh~sn0C>$_Guu ze+k%bCVf3&PNbF`xoYlM5VXr_ih`2ZBf!ksn7eUGu}m8u(S~>?%JGym?^fl% zgpG{D`|}P7pYmo|v{ZmeTi`u#kwnqNoc0Q- zhF8Nx6?d~Jxj;ejwMri*aL#|8aicM>t3Z%A^JF@{`Nz&ZPj=4eKE>T_{+(D&&S>Qh zSiXa82)dD){JXTJXEZb=ziYbQ0jr@x-`#I}&PVG-J!Gj~8`rP(gsxG>sj6mRW#O0G zk^=`4XpNJLMV3E_zpFc#BoLS|Y>;}4#Bu6-X4d~^PW3kYsl#;NU8P2@jKEfIQ1fSj ztxIxF){5tM`-u#W(N6sqMr&f=%rhQkoWvVq5t@WY0GoI zoWFYz?{<(Mg>`RgYBj{{f>8rL%qTI$@h(3l)-A~67s(qlwhgY?PO8)AJObl&IQn?? z#Br{5g>U*E8~U*?Mg&W}##$D}p07mGWe}(%eGeG^u`R|w_&V;QGw8}Kn9O-hInC?z zZ33_l=UZ54Io<*&qF&4G1qm$X>GGBK`SV(yZ|t@<*j2k7pEF}X;i)o0>>NjeiW}#iyj77!Pur3`K8deM zt|vM=BP?G=h;y1lP052Tv!fyw=Q85r(2vk%3@xyl+&JC$>q|)O<^1)t>us&ybupRW zU>d1n0KUY85kneb^8p$u|M)S7{91p{%PN<8Pnv1*v>^<%RBgW+h3AE1O^NB$IF=)qQL1>4W}=H3~W6&12<;J{A@C)wa|^ zGaPIAcH8ygc-4{RD)>`{QWfwM!7nljnMFHUY?h&wGKoaD#i|{=m^I!s?D?__-*Y%B z$*G{f`=u5lFb$yCl92eOP93`TI&!idi;A^MhZEn@x-*E_(Voz`zaD|N;6jqntQh$a@Yroc`k>GHx>Pt=@)h^6i_TclzK&n|#GLxKiUBu_K_J}I5;@7(!>n>Cb z!-GnCNnjgsW6!^nth|)_iMeKa=rIwju16JB%9lqeCHV^Dbg-56U3n{0rxG`F!Mv;@ zX}kVdMXhe1F@L}CXCl0!Kn43Z_s#=AZ0?#FObQ0MU#E?t{{9r_w+D9iRYr_Rl5W4kqD~eA-2?L zUB5e;o2zFh)WE96`G)-0-2h@zTfn3TiYJnF$N0($bEd4=DCNNxk#gEy)^byJT^oyC z2A96+Xc-Vaa~GA2Hcb4AGVd5?1UwS?Neh@Ew?Mf!_#}w4qb`74|-`Psh zExzen%4(0QH{ASbkZUvL(f??*)V=sa$kqLU%qy%!Y(dn;Ch;2{%l-2+jrcPpe6y&b zRWX1GS+Qy0^4U_o3Ot468l}!ma>X&e~ONMuBB1x+{fxz5x{o4`JBk0g;rc# zeAGy5Utp^tKP9)StsLhF+Z%rAx*~7fM3La}5Q)=yI<#v1Sj8MUjoA;$9>Pj(pMK(7{6-i{9t zi0}XcT2;UO+F(oUH6A~Uy#>Zy@s=Hw|3!TX_Q?ti9-0yugTW%$P z^6qCj7SB#N5Xclp#P4_td|k7dF3k|?5+lE|(5d_Ad?MW*+~?7-^CDDf^h-IpUyvUJ zhVSd+h$ie&jAF*v(S;rl(CdnE3(FvifOlGyLPw zq1Boz~cgr|i+t-z;ed`lJBPv33dLU+t#LB>} z^Znfaq9CUoMCC95RNu~GCNOo~J8ID6VU3yu^8Kq&lii!gT8Q@mvgzVyU%$;orZ^q1 zucxan0Qmitp8oW#r5Ru_5&(YTKZ68H;H~n1gVOuaIaG^FOPed@_#7QC@>*#Zu8hF3wH=q#0ARcn6)>XL`HN{`zGAmO0{@Z!WME)93?Miy*Qv3)#L@oTrT+l9 zi@t$nNv)e+fQ$=Ldx>6lCwv`^m{J61d@alT-gAM|Zclj7*0^pZD9#DrRk- z<=SWf0ye<0_ZM+f56%PWENE!4hFgiFYe1W1WE4}tCr(oe*@OaKFTb3Ag7fzMa;N}4 zAiGi_$p3i3j?+m(3mRgd;5ZHHe`*0N7J>mzxLTVJFcyI8`zsXc?#nnSq0!NEX;hN{ zTw7Cfv(fyR(Dwjl&1S6rigs8g97JHLbS*4~b)HEf zJ$4{A0unhnAY+WfKnxUn{;LiGXAl6?;ZQihByL@HBapp4QWp1xm4I6Fe~gHU_?lQ98EAs--#)Wg*qcA^%x$b!!iLg~O$xp*Q9Ak- zoqXeTcnI)$|7e(r&;LdywFK;{`5b7}S`&j&liPOigh#uU1pJ+x9H92fo;mz1IM@r+ zh4@#O;M0d#N}=V3pN$OqlV8G9ISlftn%dsDQFT0_AImx>q8c?vDM1tenK8j=8eFC) z3_eG9wh)!Weva!dCTmBBDhg3}dm=VR5Q<9YQHMuQx45Ka>@^Uc5as-N<;f2p_mAN1 z?2Zn!!td^=xCtcynuAJq;q~?Lxd)|KE*D0rRJpIK>no7)Ck{5m+ldF31j@z5X@@9f zX9tqf10wUn7O}V(h$aBd_qFnd{1ErcKf>n2<<-d1B|>bV z=)MW9*DE)7dSp`*=Z#x?8$eN^Q~n#>Kc`w*U3GYipw>=%2*u=@&xU%oUhTdfM3o@s z5lyZ&sg{sc>ExAVu(QiES#6-iz6Q8`fH($^1_L~$wY4=TH}}@*sWiaQ{bL0CfF#Ze zg2Lsx&7V?;6=G3W-BY=7NXY%{Y)Y@}TqNyn-*6)Si^ltg7Xj=VvgH4G!YEa!FCceO zR#xWZndol zLKW0y#oGm*W^OQpLD%BokH4o(g)0|wXAZ@srQ01KKNHIW6eXOU9cLQ1$fZJ|xC%z3 zN~H`q79AiM;~2D3V36=O0EQBf8a$PggP2kOEsG<{*N?ckxCf5hfG$K_N{Wnu;jAL| zHz4o;n8&%fc>CR9xegE4lhf0woolByfZ+4|&(CxOgVRuduTVk&lqeUdQ?**3lZVGZ z@2d$S`B2=ykRb14lnG&IXc!$6W4G}1TdcVoTQCdb($9|!)RG81Ey?(tfQF`HzYc7X zfoSAgZ3(@OO3qm^QS~i@mWQ{vdD(qyf_}W1;Lz!wr~y8Q8-m9Y zzS}kJ@ragvD;kn&P zk{y0cnvL%e?-&extW|6B5-{oBnp$>~uW+VyL&ERIXKcZ^LhKW_e~^~vd%39kIJu!w z$d@ju*qv`{6DPE-7?Y6By``K}lzKYVC=Hep5ti7T(Ckq-a{y-vjK?XjCVR5E5K5Xy zE)9mdNMO|HeEZQ)HgCDy%>zr??6hE5`h|-+#fma#$?J->_K3|$ElfV{*PcMt4J)S8 zotr6%vw*^L+lUQZ{Q-v~S}r8-RKJ$qyTEnwiUCTY*F!pJj2E7F)~M+Tflp_3BDHmI zW>xD0>jNw9;J{I6fFAbug(%3`DUzQbmnnc?rBU8J!N^7W+lyyww$HUHXY+tu%G^5f zw$(Qx=)5-bLWG%izM^0t@UqI6etQ85Qn<()=?;?6Uf^y6R@F_M*JeKQCQd2)%FovB{jSx1v2- zF#8_6rm*xm z>7pk*evh@oueDFy9V_8@Y^jrGD}W4Aw!o;}cux%qXZ&i6_Cp+%7XN}Q^sv)QvIER- zR)&gnsfh$9YMpAl`el^;LZ~S<*h+O&%T)1=9b)ufrCJKwWd!2+fi@SH>)2VCGW^-1OFG|>$zP%KsqkhtYxvRjx*4T{gu z@}yam>r5g)gu!t+kh{+=GcXy{cYfhbLoR2Iidg8c*p#>E8aufoRM@rU8qXi&nAkC;K`jT{`BawZyt(ZnK=-~ zl@E8;HbSWs{gBOt{)c*m>Q7hL#hV_X{ zQdlmpoiAcgkQ!nL~BvXDm4%yp+)Gpm_N&g;CRx~)?$ zVS*yfO>c)}%hv1tI@j-wCLTgw?0PIOkaAL!HwOT zoT`?#CpchVv2)geXqWhS?54d;4ni?T1Fa{0mi65VO_kK9CZ6Qn-ugHMgzO=e?WF`% zKZ~sbXu3ADx2f-Vni@Sv3II0{*~Gc5??dj)P|?(~xXTxny*N{*LtMf|qpOg>kY17- zMk_S2$+(#hjc}fLsH$Rn^w7sU{!qWj-Mq1P6q;(lTH2u=nms|bR&EXzSo*@|PPr>4 zwf|~tbZLK`Z#;o|bFn&+vRZwg@qH)1YPkSuBOQ19;8vdeg^#y*wwb3qZNi>J7$wl6 zOtT59vayi4K?{QaY)#Rc2Tbib9246>Ts0P$lYjwdnwx|@uU$r{lPg-jCK^y`DRE18!8FZu?X=D$O&(-^s|RHn(n{Cta)j7yGcwAHwYy4ZZz9 zT}~MW1FH{}#WNCe4LW(g!i1zWSwKHfaEglz?+<=XH%!eGv`LL=Vo7~4m?MhJ?ChQ^ zU1&nf&kaBx{Iod>tzsVK_I1I#39A$Q=Hli3huwm^vwxZKwFg^kovcaB=IO>%%xMC$ zq1G_Lm&D1kJ!5>tYyM?^1(O3GNf~buCuN)%`})0QtxZktd|MOY5yN8Tr9L_yT;C_T zmFe))%+A4uVq2dX_xIduWCUHP!xy&Uoxhp&j6d^p*hU0m&8h$f3)2xf>yNU9@hC+`W&*qhHl6Yc&tmfQWa|5-w8-Nu*Q%qS{jKIpv z)h2kplTYTRU-JpQkQ{Qpr`HzPPcXZ%tIC~KP|AZO>U;a2d=76Ij)Hzum)t91>~_E= zo}EDQrxzB!pF_codNl-p)9;PAQ%Jm!yKUXaq)QLwf%9&N}cdP`w=<=9?0wrc5E zji2sAe{}d`n*)J(n1@eaEiY|{gY?9cdHQ3ytbSuGb6&yZUV!f97S@eUQ@AtJdvn{( zMW&YwWc5@{=5fOMvBl_2q0oT&VXwDmYo+3QcaFUNYh_k8R%YN{pNLZrBE zr1R{}do#7Th&bi=OwPOetRt_yUq!eJ+p+oirQKIxSvNbm$H&#cocsAfw;b{2YWf zB9|{X|DzBB=Npz|-Kkz4?Dch0z{MRIjLL8a4Q!dD+&rTXf*wrUYv^|3abc3e51xST zN%S@|77o1djUYKb(}gCO5B#ENwae2joNs4xX`Hyp7UJL1H_*Sj1R^2SjD_+svL5#N z>!@7yjKsXO*kYqBcuMYdf6=|^67E(A_bHhovSr;J!ftKynA-L}zPoT%1F^v5pHz!f0`>yK@7Ub{S zQd&Bx?y{m}#SmA2cQbhVl9e-M^1?1rU>xy>%IaY`G10n1vYbYriYPr3%@0^!q412? za}aR4-}GO4l?V`8`yys6lD`?l!O=for0DF4O*j487#BhQs6~1tN(LvgHkD_0wQo1d z(KeLC;UO+9{slPM_U^DE{)K39EFF$-&irO~YG%C>xiLK@{le*X=b7b z)6@L%L!idVvmViMElZ7vQcK$#B&Bi0W@~z4aEqs3uD9n9$FlrcTOU+|nzt8{0K=+~ z?IL|nWsvQiD4sPiUtwa(RXb40e5 zhNy=>URbS2Rc1a25r`R2=r$jSuO~3vlc_}5;JdL&8!wq;*524sHIh`?U9AU%KN{m7 zIfOh{Qz=Jgto?OgBkqfA*_E8iZo}rk$MCIp;cCHViKx(UyW@=<84t?&#cpzy8CLu> zGeP%w#McoeC9=IEnGbWC^t8ZJM{DA}(51I(3IUZi&y>@{X${Xq>-c<1&2#A|SzX-WBQ9|o&OlayMV0e?u6E_Z;f8m@GKA_+*8>!f)GKHJ ziH%UhJySH}Nty_xn6`+7i2y$m<)7D%h1SQ=jtH2H=Plz9gel}d2EDxeu(FS^5l4f_ zV8^r0$FxpPj#~9YMkIVL=#Z%`b|INB@7R1eX>fsbb(^e?0bQDkEWq=)cHTPXOhY?k z{{3e5CdN8w!Tw`gWZ=*Nl*XE@2KDz!t%NPZ$l~%SdTMbuCht1Gi8;>|qLYDdEMR5K zDBSp}vh$LZdrNVw$TZEh(A5YM{@R6%I??1p;|?(`X)3{bA<)56d3iLzVOr=LT6Ghn zv z--Fsi#2^Kc39oqyreS|ZKD6YUF<+l(a&*-ko8e`xffRRgDMOj_DflOyx@YKqr*tycSbMe5%sXO{o^2Se~bJsr1t$x2D> z+?_51=V)Gs=2M^^87%CymX@8pefRwQT{1WRzq(`)egV+x?fm;LUq1q(ogvWhFskdTOdAoqpc zYFQe{NKt1s%c{5<94(jL9I7jAj_!E|umY_2vQFU^uzBt2|YrTMn`Z*~b)TPtC3W zjiy*UKuj1F&w1t~7Tu7d2pE>Xm~e3zyhy|0YG{epSj;~^!Yl^R&tmyzUvA3=Kxh3Y zIXdjf7HFnjMXs)t3rPL|=aFDK^QBGaOBD4Omje1}e=QW1AOxV1_RyUF)kxFB$67UA z<6SC@m?Etyr2j96bVL4>n<1S3!LQ{zn2Z|xTIwkfVf1*-f58iRbDV=L zHOs_^hgf{#?NYj!-JFv9&;JI0Y|Y#w*1Njtb0Rd@8MP+c zF(f>g9ODZBc?XbEWQWHOE{awX2^M2<2DnGvQY4X1=X2SLef)Hh9=&T)+n`%^LNlEn zgz}crI9}RiHF3Pc(7Kb^7#MP?3+l-U;nZU;AmiT2OMQ&znW2VbCi)AMnNZDU(zjF-wnG$ zzxejVPPN46>lLoG&6Kd-sVNCxkr_X0>X->hIa4!W@8^sxe~5?1 zm$l`agXv7M!sV^v^N|s;BiGxSCjIo}Kt%g1_RuDN;_xA&x~uHvRCb=YS+H)6=p8$C zWO-SF>-i<} zEB>=?yb?n)7CP=4>}RT7o$UzwAhnvS;Z+1M`2Om77?IntBEsnG*OAD)6!CDW^fBts zY8o~j!mbyCkWb3-x%bSR%R~nVloD-Tav7 zw7Ft3Dm$dc@FET`h9t%Z(u@uZ`AnDUP?e6Ic3#Q%Yq%9i7rak@e4ii}#;N7#7k|iU z{B-a{n=Sg~*rx4rmD{-eoq`^3K3{$0!wYa9%w}sxzITxFY^747C|{?snBsWqigbNC zS;gMzAC1chYD>h{u}xRfg9m#S^I1#5Lc8PU1ir87Huy%ULm%I{ zA}gdV6!^2SBHUz*ZeLvBO!@tCm(H{QZ(w7apJlD3v@G)qnciF_Uo)Pfjol4;f5u)b z!Pql0*@Wdi5n=re!napp1m{-N0TQa@XY*yMN7Dmq2;`stLJez@2nA3Ig-S=AU9C>= zDhwxxLR68*@Ii$IPQ^GsBaX@ijGX*0*VtjhtHmCjZZud+wc=|&uoVNm&-xksMDq2- z%3C$v`VEpNPhF07c?;_im)|KDPtgAb?x@HstLf#{dac7D@1=aGz4#Rq;iqk2wV?bm zw~NV+a?sxpNTj+y``JI8e>6?wo)GKX2Vehdo(H2RO2m{4*k_xS_BA0g;Gg{1;1o|^ zsRiC&kkDHn(P}O%_K3&+k_t1!Vtb6)EJ#dQtSpQ^yWxx>zBBK7Yc!dC{PwxwOrzkm zF6Z^2Qtjea_o%l*Z}{YkzI3}8k%;KWAmwqrS@+D#vHs6<+$d1{3-4o03ke>quRK^% z#DcNm-pTw9qze%cz8cG3#?vXn=Iz(e4ki&M;&Y~NY3xzycF8tm;3(j(Vzdh7lO7I% zF++J1?6>Db?-x6!Of&VvVwUVY6v5+x<92+srv>}SeS&M>K_tn=y_oD7z8)~y+D%E#KOyd3%kaB;A0*M! z2`u=YtJv&r{EfO;Wy@Hr^zO=jnpv!J;Na;j=^8RqQ1v3s{Fq*dC{woRd+pv??Rn0Q zRo5|gvS~AI(Gi#(#$N5cPTW@h8p|X=K&JIN{en|bZSF+UzE?qRI)V0NuFPEHj#998 z(Ay@>!&&D=#=lJQ%}RmS_qiVR_ZRb3)h8()$&G=|T8ne;y_?x8$F4KY<=D|TGpGm7 z!OYE0%e~1+XvFKqe%K!GZFz0UJ`oakN)*E#85fw*)jvK~2)`y=XdMmKNc6W5K?u-t z0kfeOua(JLPY2)egOwt}OW9S^)=c{5z#CK&`dl<)g4K2>A8pc-+{Be0RI)4YsZ9Ig z7~Ml7T_)ptw@BaG_E{KxOYU<`z#SRIt5X+|d14t*|OKY8!pT7ybUZ-Gs1} z@b9-Wcc+(CKC1N`#`Y4CTBl&5osM>Yr-xSE|hyMaU3+{*pwLxgnG#GOQ5$v ziAfKw&*#4UaX!pRm3+R`o{S`h0v+oU<9}fb)})c=nZ$NM5zw~0WM*4ElYSa%#lAYe zrSRZ)_#!>xwsj;I3iDcUp%$h=r&SjfSLP-G}DZ6KBJ#P>F7=KJv9JT=vU{T{`_wEx=xes8W?vRi{OyN_Abggj`LEl4SGWxoW=F zM83_#FVmlv>l0Zb=Zar_VZ`@Oibt9{RG~XhI@IjGR7rrqjM`)`9VU-avU`KeoNr5y zEJCey+xalJMYqGB-x~L^U^1jyQ<>3IW+wDCQnj_(4r(0HQR!Q@uGX2~!mWpTRd|2S zMyX*9X+F6?ds_(%H%qEC+n?g;Jz-B7Ifb*&!Ca}8${?P*LuO_;JXCnR5v$nUbWxhT z{S3>kg_`esy&PXkPPeri+;EeCfwp0XwprKbGEq)>uXV|klhgEs=+9irzo%*cgeCm* zq@A{5(LF*mVyYL*BD}h{XsU>*x_8Z;F{E8@VbR?txad>S?@uRZZN#P{zD2I6KhDkx zqJrE_Oia$sR^F{xEc8N}Goa2YhHACYj1#cLtEZ^Dw$m}3Ie7{?)@HjQp)@pBMiok! zN9m=5BV5xLx5vuD(X4F`6WELbcNVxw$t#Ggsl7|Bb@t3h*<{#hN5bQ*6np#CwqG@2 z&f|n3W*ZqCBDU&~C*jS(NEsQ*RLmjV#ENezR17+B1rCxZ%sn5XM(tvtZ&l z2BN0?I<~mQMRl+(PvA!k&iPZR86&^PnnTaO&S&EL1-rIP5^Lg=%Xhzd zb_x~mJov{sNJ@4$|FnB*Z8M(#YxUyzD$)`|>g2)86m9KeX-zJsv$JSKF4F2w#`Y8G z@^~_lB3EqceuNE2!j5cl-mtefbWtMu;)Hra>a=>nnv=?M$Ru~mQW%4|;Se8>IN2+v zBHXewqS9;qPogA`uD2JFf^7U&5Ix)E6O9om+gCt9d7|l?lMn){E7ySFXA^Gx;If)* z_T^f1TcVVyoyv^Fhazp##QY>|$?TShyzIpCXGicCL7^1XLd#oyY!;5&{fWNi3%0QR zwSMA*Nt;j38d#Im1M%*6PZufsxeD@CN<0#D>U~cgt^AoMV2|O>7mCCtyA_P z{PZo2nBB?9Ttljh<@OqNLGmej066fI%CY0a-&-$x;Q9o* z5wil~@6$^%f`WqXjo>)r#&eN-fCZPR1uB9gw+W5%B1vU(qkg0Wpk>LG%1;QDiyEjV z6LUo71>PNG<@Js-ye^2z1XKQ4|CGzB#%#Jab@HBdwU8x8JGA~Li{*SNaosE-s=O%i z8D1Pdy(XS48ht`)^Jh@Va>I<}F%1^OLjrf$5sTFl4&-T_4g_9342IbVw)je-b4#8$ zk0k|2d}tjuAJ)qFRcJ{lRkh8O`xKio_gDu3S96Wz)r%$j8+*61FYF;?r_@D&pQ3xx zpJd9)p`vwjQ%nD5Yklk6y${O;^c!g|8WizN(sV*xp)3f6)%+FkP+rKr3uNIvBYP~K z{Xe|$m7&5GIf{_1>gKs2!2B>U(VsKrLX2PyB)oaTpCZIqw!hoK(=SFY|Bm<2d;hu~ zT9!lcGRjP04a(Y#c59-AFziO2Fq;0rl7d1YGWI{1JIkmzx<*R}LLgXh_u%gC5Zv7% zXyfi4G`PFFTX1)6+}+*XWjgOSbH7=0@65VC=NDA1>N?uheV*QD?^j9uQ=O4=eso3G z9(H90pWYL71{M}^t&c;T>@38rtp|qIA$zc81naP>6mW*`J~O{O>r07noFQjAg2ld3 zJ)Az2EbFHza?BSgRWQs?B#-{t`C_^;!0vVO<1PA)yK-yhO-B+82-qFaUI?JC?Y9b= z3-dMair|vGq{Yf+1WhF5hy)0bqFA0WwIN0tfr6jkI2h`(_AsXiiYh^s94s0I zSsn}1gdro^iv$Rc>NrUyA;Q;ojdS&=zs;ISJo1JzoO56%d-p9Orom=kwBMPHzH#AumRSjzjuOnSZgv5s-RT6*Hxjf4Ka?K_8SFknKMqxBq6cq)@&DbKM` zWO#?E8i6@HGJ^o^@$4J+g2C)LvJRK^Sa@qHP^O5W&SHnht_K8-_WtrPO?z(Z-bb(R zwUySkvpM$L$11R%Tt8ryr+=WtP~Gv#iw_K*s1>97=LG3FFZ{vPSlMb6TmLZS9b3N9 zK5Ogrur)$nM;7pxmK?N?b5dSd&<$|w)$u}+&uZd|R++t#$#74<5+WGs{Sb0NX#MBT z>7{O!jPOK=tOzX=$Q1R`@gdhv-vxYn)Pp=0PUrB@Fj0yA{(1Rrt` zdLrgP2U+(ljYX#LHPP$@CyxVMXU0wLMBkR_W zWR5`Adp5)?9>ua6nj0n_@cQ=8_gUAlMa<98R0g>_j0}?a36Fhy@6cW&QKU-G{mYX% z@#Hexv!kw=B7cgGs`caB`BGE&$`tZuw2_b5`{fV_GpTPx8Tl*GdbxMSHOvA}Ho9%5&^}_=L*S}T zzgH=hFVF>$1i#;Bw<*2MGrWq>=?S90@bb3&+*&wTj~T*Mz)g&nu#PZxQjE;si^w&Nko~Lk0f& z$qa6LcHaWM9oOYd;tM$$pul|22utyu_Iz3-lh>oc^ZnKBX)KMsMGKZQR`Z+Ayae5< zW2C28K^plk1kytku)rsSlzCt0!vtt;Q8nB++v4%qZJ^153x-wB}KQ;(nlmi}~GtERJ0BS-`WTL%qwyNr*Vc)!V7Uype{ zNr#Ij?y+ANh-?69pU2`5R^gL+2{IBeJ|>0Fn;%ot@mQ6DjC0*c39!&8l1`f?ymRM= zCK^1+lZtti*HL2J*N2%r-=IR0qCVaeR;{k!If*zWoaA(u8^d_EFM`d0w`R$&JXC^z z%a|kmyjQqJHdOZBP96-g5sy%XOWkP0t*q-#t($19G0(F?A9cK{gkQ7u2NxNMOmE|@ zXte@ZbzKQK0+|#I6>D!Jyc0q_#z#{-r&3)sVSnfMauwB`uZlcXvMBdt(R|Ogm(w>* zCTn263s*hhB11`SKIJ_eT2dj&oemE$}yk)D%o|^BZly; zAfP&%2OPDYUp?TH9^8@433y1E59!M>9OiW_*3HN6%A8%YM||$mY}j`B$&FPQ zCc5WZ^hFQ6E%i$L@C}sW6l$)V=eGSvABl#n=6E_* zW>b)y?p*qLB0QXs&dJ>Lda=g!=~=Pa-WcSxGPN*K%KrTLqaw3NLY-T~_M=guj^HDm z!wZK8+ChQ)!yrH?{+;g%gx-gN4lMky%KnHzr6^!70uz3<`#Pgxh;w z;uHKE5xE|9cmxZ&DhvM2e23FTnq5Vl%pDY`XhcaZ1^fNG-Z9yM22u=t&7ZnSnRmim z=^0?C{aDx!P+SR-6zG=^yN7q-wOyW*^S9upX09VLA4G-1BV&=~eUa~=;FahCPgso2 z=>(jXVYm4LYW7Q7Z2|Tt|KCh9^wcA)^vHsGpd6FE-DCt8cECLzDoWYQH~ikUF)Z>y z&lU}WAMs|I8Y-1;F<<}Ir&)83>Y9p*OAe~U3o7c0iYgU!;@ISkJXadU*r|D+^>2Zf z3M>|=Uy*4vJ2Gbu==MSaO+j_%^g2flORR#TEP?wYuS=u!__&vv^jqs5)DNa0S5NW7 zIDmG$U0TJ;!}aza^_mPHwQ3?ds5J^z&T~<0x9JNbsDFyIZ(xu>0XvVy>9{u`pIU{XtCef|9_k~JR$?d>KGMFl20_b@33`83AtTeCs;d2g5U_q zItisC5O#AnS&m%`(Vq98W|`i9!Q0WlG<*$1FZ|)3yQr>pY#p2T<44CXXk<@UJ-&iQ z2-H`_ts#WF<_4~yaf>pTX;>o^UWlZn)al_Lg!24^V<9D(bXjCEm`F&T;ZNu(`p+x@ zp22bj1vX>VmmaKV+E*N-)iAId>P<4P(FhLJ|7#uv^0^K4ZVoncZIYL%w0}qNCqQ}L zO|ecS+?D*-EUH{@itw50X&G)#1pNUGmKM7PqCM%~nhz<08h3T=xF9oL-^Q~B?TuQR zM)S2f_MbUZfO~vwwSuLZ}Cq%C}NK)l+&p{@S ztsaww0sOqMT85N-*n)_4yV2PM6YoR`SjFi*CD1C93uEZ^n9zn*k}MXbh1n&)sg~sW z@501PYj?OXc6M1fq3x#9+noYy8!H*tT3LXp3HdD{kKqu4;v_*2fge96YVkimv-fG$ zP5wyIL;$)|d?l zhG{zdT-@AlK=FB=e_FFKTkZ+W0ZU_!gOt>x-wv=d0hekQP7WP}YRVXD_D1!S8qD>q*eg#cfkEEYxk%Hn!pMFyNSsL+iaZvA>A2VLJ+d@L^1+bt@D!rmzM6G-tzlx6tN}s4XJC&O%DFm3LXi*`<2Kl3 ziYoLh_IbqD#mSDRsehT<>Kb$#)AQHDGD#T&ukge|5*GHkqSZ05| zPte+n)i^*tsYMqfde~z=fO99CV|rEg!=DUX{+3kh5mvY??^upcv#WegUs}=g)LY&@ z1*12JG(V9KoVkX;6<<{4yF@+ll<@`83PL@;EC^)MXoya;!ualQX?C1+M62Bm)}CDo zHhgGCO!9Z^9r#y?>lu&yz{?VE&9rb;`T(%u^YnGA5SztrAVQ~9pkn}6@z2br?Yilq?;jofbJ56}Yo@f3DOzWJ!X^bNo^x9>3*Y*A- zspMj7E`#71&xrd`59J@#JY};*CyS@v)#&VjHE9FwGK<*m0^YvgncqDtgUkEME)_J} zGbaFkXN3;;7}IP0rru2dJKL#qx_=|~)@ku2vno^ysD?acPuA-9&F-gx9i0s3@brqo z*po*Hg8o^Bx?(6ww8|7N7tW6qi5rHL>U0}xsrW0qUg49G#JMfYCj68>0WW#r9ACI60@~S;wuT3J-}0>y*Poc6E-X&EyIEV9$Gw-P+!1inm6_*1mM^{@&?` zVzVj%CTiI?DoE}2Tet|^{wXsb#OZ4&&DQ-*D%GJl`%8Ak5JUeeQ?1FbBo5%3Y+dAB znTl)f^2>@~L76Ppn{vDTVGw0tweIdL4vu!y)%P!2048syKSO+Ft7(CjcdCA~& z^cBP`@jT7g@~Qi)Yyb;y5W0au$X0v8So{FXGi^%MvTp^JB$EMGhb71l$fT4%ZTywG z?O93_35>6ENIWiX5~@oV!Y)RZvwwtGCCszfw)YR;C}6RaLgJ?>|{&kW6%Px&6= zLO4|OW6+d=nSCsK>d9=#{LH2zoJ%mU;}>7e!9K&gA|WxiN7$1R(cp0Rh6J=2AUIw% zq^Aejffs632VU`djD|MaAWzA?sT2TMYIEimqubbCe+ypqK=hYLbB!i$cHg7K-;<1y zD@)0{IQ|uOt-VcmQF_jEb8%amXxdN5r0vvL-Z(ZER z%IjAikDg&GVsd^QKe`%xV$Qh56+V&;13PPCy9IDrGYX_2Mwu^#)pUKeIOtKfo(^(G%b3xIT^g?YVU`ZCG#K2uW|`z4ZOLO(HbWZdK?>q2HDs2C3()B;&j~FZ+GjRC4VIxydwJs zcRNGJn#77-k)sHYT_5{;_F<%tQN{90hUt%_W_q3oid>s0LVLJs6%d<6oMJj6Ph30} zoRajdcbt)x)+!ViMFtKM6Pv8)L_gb0+ng1@*yc2&J2EBnakd)?vKPqs|YX!8eQ3D9AUmelX zRk{Rxw5sLaNp;JvswTCaG@>dMz{43oL($UUv7(uHOz1{qPPKo2jDO<3K56W{>`ih? zDZh{%vl&#_=`-!1b`K>VZEV$Rhl$x$1pbLE7^ z*o<&?teX7;ObS`ILl&1!b#eRLd}s|e$*n*|e?Yrqs3O1KlH&C8o{9L@nL>1&uBoN) z-JynAW}}t$wy@d)^CQzex^7aOyXq4k{>02)$$8d+kTOvy+OyBHCN}sLz%g=W8h9nVf_q+Dx86Pc-(My57@oCuQ|-kJUls@X5E5YwuIJ>v!!X|6cVcDP^CpW3d8`(X%~-_I z_SuANO*q?$i{H1$#;HNCOv6&sUnc6Jxv<{9n(sLSBb>~yIu_+~UwCf=lP<-!^&*(z zwrI0&4PQ%45%A3;$Ou)V2SEg1BCvQ*xkXiyg zxYXYP;6;UT>XdTEr+V!r%sem!R)SQGn1i8wb2W*ZomJX1y`54Bo{5QmH)8DkY{6D5NrJTqnzmei{y<+6#+vGq3%^UUZ>+hW04Jm^JUIR(hMe+ z=`Ru-L>FVEH}vrBKqHa&*gGu#dK^AU$DnBb{U?}`c;#aC#KfeBKV(m;;-6+A&U9ru z{IS1p9HQ6ZlLC_pcC$n9g95ZZYQU}GdFk` zmXjen9wLzTn2zn#Y$p6Nh*D(}eQl&5kt0wN%{Po1KzJBy#0d*fF8i<9$$ohPZRyF( zQ|{iE4lbUk`T6F}*jWhXDjDK?*7e~L*+?6N>mC5@bvHD)TGme8xp})IY7<(?z&ko0 z>d*i^@IRPI;qHN8I9^jSV6QV@jhH~XhrY&a%YMAcd+b&)p*o~}G_e9{x9Tt~?Fi=_ zUjsNg7gcgQ!_o5O{pwCS;}FUVd}Kpm!0+?}^M*wHpwGjW?Y4e4ct(vRHZ>C4N6Q?W zj-=a89jo|DU+(!}g4_WaK`2OWbS^86MWCI-TgW5$(TQ zL|vaA84WaQ$%4FV`Nq6nhDi!2=YVR)3QiL&52pvpu{tV{k%~2@S0)4AAL;A^PZXLZ z)P~%ueWKu~Fu8O#KVJ(u`-TPw-n=V+ zeEgy{%bp#~eO!<>B?j+^X5LN7uHs@&BJ!v(Tdv0aVujM=VvA%5;LGp%jgBh8FG2N{ zGc}=>fZE-i`SKY)apUXOZmn8C395Rkmg4l9|9n5J{EQ|)20W!yvisb2YnH`ThBdlx z3_YIDlm8zAQriEe1&C}p%1Y@6u` zJ8nvvj8!oPsR6FOZN2sb&#IaElgS#N4J`C9+^510S~I9uoYqaFT(j*?;DUd=<2S!ctYPK{5LJtQ`>*hlJt~N-t!if!tF@M5PGj&%{R>=i za_*ymDI?l{{qIAiJ~5qkz3Wqr@5)r=!a`l$VD;-_UfloS4f~NMjjG=lpz;dZ67?F?FR<>% zCeT8a-z}7Xl#xio#qZ9R>D}IbprjlEsgE|AkVRfKnNJ=e-Bl|m7UQlykwCx~{pg>< z1$h&tT)KsX`G=t7{1kjVq5lf&4@}a({FyrtMNUNpa;M3ADVfj-Pj|7Tt6$;z zfIwJ~*L}QO@d5$T6}a#FTj%uf@M4`AtdedV(VW`=l=twO_h9ly9}6SxJ<|-glYYvZ z?fiskq(=jW4VhDrYQ|mI6N`Cc`k+qzJ*31f@am?U)G<`=cFRds)cATSHe{7A^P*AX zx_2Z)xq+>lNmZn_&>SY!L|%PK^xsr&TJ%1k$#i_ZrDsWNA^BV<)p$%&acx%#-=cIC zt>AWq$#LhKdx?>J20*i@=EsA^*zeG1UvMQcV%KltqNcJ{`n~OBo;w9vIDPh>d!qQ5 zm_G~RZaQ|8)S50S`0r8^y4Mt-Ii}6CtIkb&4i0+)`*L1BLpeH3Gkk;I8cCoA&3tKT zX$Cg7ai`9K1Vgi)Mb=V&2W32sYpq&2#LJDWOgZ+%GjqWzv)2|(>YrY-{ha`?Pj{G;dVpHXg01}}-r2_kJ~^hdVGCEs1625= z!7G=d&{>B0u?g?yGW6K+nunpN#zqW~p@I4#C4-Cj^U4a!;I3+xx4z`ly75?Q7|FM$ zqS#)STE`+%u=fwK6AnQUaL}@5H#{*d8a|WPKa)4dXxIhP^Apxr1cZa(IC79dMTlO? zD3hJG7Du!`c_`yn6<<6PaBCqu2i{s&*VV&gYtJO&R}X|oR9|O%dwPv{~(+7Q1;~%5_+4g7gG52B(Y$q!1B5?r<;-B zhDVIzWrdR0@$AR+?u~j`_Ty(`$g2ZA9pwjWS|@b&Isv;l740Uxj}MMOghUeZOfK?C zC-lnvbf=&O%v@@p1{z`K?rLaEU6~RX0fEnJY2DVtObBcS%U022nV!SQ(~Cm25#Dm- z`p8*0+3s9Y3g)3)T0xXsMic2{w((~Q^*Wll4&Cmv zMwK~S?$&C!b)RhlZRR)GWlymsIpenB*4@)ljKbP$I2hu-U1!Yz(-`t;66eo~e*Kh=!|oB;>OdjXQb zA#bBcC!MR>*XHb=DSHF?JYV^qs*)yUFajH8u?4_S?jo1lGp2X+v?B3``rN0Si@KIe z^vxE&olADNR8BAPl(T0TZ|2Axr7xS#kn@s=dh-83k9OKAbN-Rc_zKR8$bOL*0O0OD zDr*Aa7FTV@`JlIl)uU>7|Fxtqylq_kaCxsDEq%6v5Q4tGTW6e_Rjmj_9y%=$8$Jjg56Am${1TGT z_umfzU(k}~>BvS}I4!7Giq0z9cCamUcRtlFq)i&`AY!|dR(Ag-eK=)R`U`J#x8n$e z`ieUikg6`y+VKFL)QjhNQ-R8`Z9AKBbLp617#0)Bk}NA%^JR^`HI7XJ5{2o);wHroZi_Zo>DS>I~&# zM5Np}NJ(OSnl+KH!m~`S_LutnnIeOXijuLRdSF%j7fFh~p;aK?W#Tu!PmF>oXPtyO zQN4_JbRy6QTBFqkrD5mzOhuutpnJlT7t2tJsXw5PWhELT^uGDnk)MCGh>bJq^d5p zjxl98)GC8wIu)^S>*OYiF$=;*PTQY8v5M3&G37Y+6h*5@B4~T<&|u7xK9%HJS80#= z1Jy#{z7;y8+?BW;a~SL{2fXVb5uW#*ZlL(_A@t#^t}=%*vJi+6THz>sd^C~0u7?(e6Y-$*fU!Ydme2sKoT9P%h{ zHL?0!1{O5zDrh!dw}QUUI2)kHv6@!rOa-99(Zt-F2zbFl#Y^%ok3I+g31+KtopM~J z*A-ppL}zMhJMaJQshq|xoJ4nd{dPe=5&!jCL-r5FVD*uI)6~A0`FSh;2Z&)s)oGa>m>9Lt_6WiJ_7qTE+wX2{4De z4{zSn_J>%5v;9lv1!r05ztoy7BEJ8dT9f&;4=y5tVL@ip1j~~o3q@G6!6HOzQgUEy zy|3)~tisk{32w&mpN5$=U4sA0}r8 zVe0C7(lI~c22VsTi+H*%r4V*n&djHnk)VK=SDk08Pko-r6W0)o=aMp`c6W96AR2`54~FqE!;K+j{^v zz=dficnMeP)7)6asJdG+b+>*1e@l0LH2We4cRrR0D&HSg3xR|dHcsLgHa4Ey%Sjn; z?x~p%agtN>h@bN=-%fGXgZan%+itLx{x7OR-HM`u;kLyqoL<#eV0)2VQ_X=3S(QprqetxKFGsT4|FMmYYT-@PuGNa&ssy=CMK&ce2-{dOM_@lWr2Nw^wJ!B&6^WbF6wm85gz zk_+G3GbrsUcUea&^O$Z!XEfIqkEy0=ZZNDm-GAXduj}lzyr2hunBmN4yc1^P^`!a0 z86W8qBi+--m@d2$O7{-0rH(yrPbQBgZptf=Sng(LfYDlryfmnU!RbE7;D)bG-p{Cb zYkfIp^l6XN+yUd&!uzi_j)d1&XbAn;hCnHton=>ku2lQxq39rd7E6EY%+j*__ixv3 z(DK5mc70@EUl^a;F#LnPllj~n2hxi>{q>}9nkLQyPJ}O2I$dg(ekXY;4~*CVzJ^{t zmEQf$H{{23bvXXJj{ByACEVEH8u|EgFjxBlLrc5Xz1sAJ4xrz`QOLnuTKrur#NlAK zD7#dT7# z%maaCZGJiPS|>@~!!?JJ$GeDaIN$x3kx7GN`Z}lQXctw*90Lta-F0B9=@}BjKZ3!F z?4Tj`7GfgzcpAOL$R#fGct#0Xeoo@AZos1%`DXj=+S@n@)RVA#peCV=IO-+Qt^K zxZp}o&CO{dv5Caz6N4a&*z}BB@sSOI4 z%2QZx9rSW>iBv7^Qvv|uB}oH&dN;5yv$!}mFK12LuB*#drLFJ z;WmxwMo#LUK}smG)A7f9Wq*oW0I44L{C{O5VDj@-6U2IY zGVKLYPV7(usuYV#jdXa-Lm0gPzssju`+GwXIU7jb&hBd*qIA#uP=*9>DbUw}7LUmm zS1@zUlY?UJn!oI+tE=min3&k>>nn&{kg~C%J2*JN5b#I#N8q%ieZI6wVG1|^7NwWDD_M!|TU|{D{{pkQyBi=`(8ECY4cK7i#QvFZzAqp{mEquqJh$2XTXWkS2F_2%gUMi!R7b(Wnh?gT*|Z#BdKTrtqChK3$CgoOqW2$z=a``5xqMI`s||q#aj)Ju7?|X>}a17GVwi5=0)V>5VSyhVpdnHt84ww*PPh* z9GCup*1aHv^rH(TEgMAaeeuh-8h~>J(z=ULtL-P$v+k3T{f#C&Jq?eELAu`T{y~{Q zaWJ+M7=u&r*p03%}2 zt}?Zjl251K;C@(vtV0V({~9rJaQyrk{ahh4E^goN}$2Txn(DO1(d*7o-G1%T`# zNhErPhQ1ma8X{eS1Wt^9=aoi~_Z#xZ!dNVcGpnhuq8tJ!hK+}px2C>c26uiTN1lR# znYnj#R2l>+|27>Z!mrvK4VSkx4W?^JvB33sHvrUW@JL{H%EZm?EH__aCh>$A{$oehEIaz5xPCjx?VHxENg%kZ!; z*viUE0}&9~%lh)SEU^OjlbgFaNm7rKIpGpz15mmgD3!6HptI7`7Z7I{@wQJ{BB zW@aYHV^mzXhi)E+~0&uy489pr|S>sa?6s&n?%ve~ydMmx9K#c&!|o?VPi6kvabUku)vvIbfshLIa*Un9*)nxEb=N(j+tVYr{3`k?9pYv-7>^j zQN~$tJDXI=ICG7eOXfH3fvjH=)Lk;6ljc8T>Q?rYv2Z&x0lbh#uhMDSg800t6cR%1 zCh!W_@I{}&n>5QYMT3HNfk_CU=Y*Y{ccigE0fFkJ)Y$HXSkKTn=L3`{XAt~K!{mDp zH51N9+@5+Q-iFB7f)mH=BJ6>jdOdWr);P?wJ!We|dS8Kx&xm!_z<&FL+4RVJ?|$8^ zdELwBtVqZ^9~`j>BKw!CB63Pp23tZGY}W1PyOSTHq6QW6AYW&xU*KPclIXLVMChTI z$C3zaE+)(>0!Mpc1#jDm@hq zMRGhqOv9+pW9Zn%@iNcn!ekZuoxcQhKo4S9|BFJmiF{BNrV zF9{ZD8Xg)v`FQnZD!J;-WVagL3CX)UM$Ae|N}y-^-(=AD_jizKj#9ZgUOYVRq8!+q^haO9WDb$wMboo-;=uD*j`u zo{kP6P;35(PAMDG(*F2nyST!Q_@C8`xgNY7{?E`e-}p&*jK%eO3e>H}oot2%5`UFj z%tafvr!f!D5Z3Pycj^yrh2eUffCM!A_VSZz4n8kzbgmGJRnd%KcNT^&);K;;owPObDbk-XETrGnDPe=ZoHN;MK} zPWCiVuz&P5;n6FgAN3a+-W(npi275Carl_CdW9aYzmuXkd44~0uiTP(%UW{1M1)d{ z$d~Z$g%f2n%6z*a){E@)yT~rU>y;RcZ5q4L;h!?=!5evR@*^H>U~WxF zHQtE$X?P5ZGi@3#uX?FjYT~VRhOo07llPp6DmWlGQ0P3k>eOp4ZL0GmMWO}#p*}=} zB11oz4v3*?e={?uEl>;r1+0F7MJFL7^aX|Q?(FRaCL|<$eQZ`=ohm42eNRnj{bp-^ z^1yLM(3>nX5e>#dl+IN~XnRQW4$al|+%b-e&zm?$q`4q6OXQv9opo%uV0(KBNj4X1 zq>x2aK3e@Avh`TSi|IKU;SK9zciaWuQNIH8^_FV70nvObV|?w=Pn_GSIV(OI!f{S&7=RoR(oe zA|-XOJgWn}`OQZ9rS$vyJsSsFsdTM*=Am`yGZ+p!epls*t0)VNUtR@@2+lWsZLy14 ztGNda_7}pyXSsZv2=LunyF%sQ_c|B8@p<8xkc6znJ?HGTQqu7R<$J zDw!9H-K0;vkss|qm7Y>v`VMLfe`L}I70sEhJ9P31u>$VG)9(_<0|Nt~FOvFZW|ZjX zdoWk0INFimeBL1+ubPZEs^(+ax0VCGvLcLe0uu#%XXco8_p@lopW;Oh`HslBRPXx7 z#_>1M&%V~R4Fuwp@H%j=`$6^wP4$7I6I#J%LGZ7V4zO6w%%Sr}9DMfk-W|nV8e6D0 zH*%5daoSQ`EmUt~ypkmho|*V&*Nh{F3-%#%ol~k4C1+DHT}8)ys{4_2#ae_UQ*6Y9 zQQP(Txq{f$FFFO6xu~k8C4$!FdM002k#L4y)L%d>(ef?LV&isDj{UH$>fZvv^z#1@ z2qvcp*nawi@g(s>P#OFBvp5GAcYd88Dtcn_3Fqc{D$gLbzKPi{RGhJseAKzxT1(y5 z4B{jkyNh?>bKc+G`7$OzyShHTtx;nss)xIS3?lL^t|V&>1(V;6^PCiR5B5@T-0#>J z)}ju#2kws%QnK+1{R2C9EV%Fk!y&$@P)SwDSh&&$OeacW=(BcxL-o)zm*@MN9!X{3 zY6uInRwNdu<7Tu#L)~WYNb?G3H0}i9 zxBcRRDEf*r6+(eVxsa$Ob%eKESRfI%@kAV7*omJ1WqR2=GfK>rCF_FSOgwIbd*k9F zZG)Z+W`hrbuj_}eVY7vs)f~CyN^RC>sBeEd`+x{S>!p&){E!cDZlov7M;n8qWx=6e zqopGAftf@Z6WJ~6E~y9|kOK$=J#+6~ue(oUub|&r zyjj;1S&7C)$)UaI^{RAxy=}mNl}CerlN5vZ{X~|7lSCN;W42(w&R3a)+_3mq*Ip0eYtbJN?YGiH|`wsQN6DO9|lBLlV z#{RR*mQ9cP*5j(wgeGwxsRUB!{leV$)0DKvE4w#y@lysi@y?XeY&rVZVob=@@lf*0 z{_BR#M zolac5v1L!4&7HXmEVyJ zS^Ks1Q7R{@jIojp_%^1bt7y4aMXeQx0Oy9PN!XLVq_#J2=(ls%Umq=OM)ls=z6;)O z7j2F1)SY;ql%irJ->4|d-~@y&NiS%r;3B1QC_j0FN8}if=gPTbopf@D_eK}S*!TXj z+EoTH)3$oa{jxdHoOi3*J}S6r?tv&yIOWz2!(N&dBNEtjJTf_#xQJI|GsRac8>KXA zl3J?0z&!3sj+=VOS@+*dx z&7#YN_Z{}84aUx!wc7BE3r6fcwecbande+=ZBUtDp{=qkl=8lKljlj-bg{QV8_#R- z!L+7TCM!n7WYgiA8k7%2!*aJWkbx?fSm}$m?B?D-awzDZ+$-zde8oVz+?Y)liX@Sk zNFW-(0h_Vin+v$%F6ZU@jpOZz<@KlbXwCJAIdKWJ&9mcNhi$=+&W)lMrDH1sZ9~4o zuk+O5{q|H88zb!VVY;=!;^09Vf}*0jbV4Nt^M2&k(DlakWSX8sahqSynGayfi{8$2 zM7vVTY(pvAq2+h!n%wz2SC>>bl+Sh`Em4_Eg6ZlM{ORH==a+slii){5hr9L^#shnp z#E&4T^~X^Ef&$!8jlqri`aeP4w$KYQz|F7^jgi#eI{{zAmCS=E8v?TtdoMlfWJce& ziFF|Hg}0RclEQU|CQu1BvC%%CF>uI^IoVtb*!$2nMD9i!kH0=lUPZef!;S!Tal=jU z5$L8H$bly}?0tQGEvIuG<*teK#e$Nzb3V)NEa zJLS*2d;>a8(EL89Nw`fP7~$S);nZed8&_Ep!tsLT)`aYIhVdNKZpxr4^(~Jp+OE%a z;GVV&%jL5+WB5PPsXy|ty`_M`d>x-={~H5uSCfw=@5z5cZW*M77?_&fWy zI{{8SD~p0z19f_WleRO5Zr5=hAIk6x@^$;?J&<8Pu5m;g8rTIf24}^x3f#B8XJ&e^BFv_Q zjA4)La-;vWc-rUX?eE9idAZ&WwOPX9T1JSkJ?u|%gP|W}sr?j67s|OqUudJ{9fe4Q zs=~YWT7f83x3=C6^;fAf7^P;Bra9Lx*EG|$kkvk+LV#}it$QUlR~?IApXow-Uo;Yj za#>19&yyblTwWDYEE0kq9zHrAwXLuJSI!Q3MSy7*q_g$L=xKekr$$i&mtbMzfZa-G z1i;KE38I689Qir-X1N_lwJJ!Z>?bhs=VYU3k?`3gA-Ltjx#>b$-06))yd^gl6AD+Jzfu6AgP(QQ6i_8-8spv$N}=#u91Z9+O55PbFB$ULQbp? z9hdGlH%v=5&go1

    &cQdakIuldVjTpC_tTQmricMLS-HMB%k2`V82luYrhbnE@S# zu6zWeSqKw6c~+eC#{&_)A0yQ2+dGUy9X>=q*vUY*P}RU%wf$_lT5QExC2M4&c(>4r z%xd(NEKWl7P3X6^gpi(Nx<8cuD#v1{-io~-3kNQ0=POfXS!IuTz2qeyxM{SS5Nyi5AhL2C;~UAQBth zYSCNNU>9Kpkyvf@-fKkftE}#?Y_#ZowdkD{?|7c~|Ka`q&NE-;&fIg)x%ZrV?wLDt ze#?FR7|-2iT6%i7r4Dk(N-D6szG$;h`_{U4Pv0%1>NK^2OKKV#5vCy= zOE;Ko|B9Ov4l?mSQ|cy_4=9R0IT~S+atSCZ;!niUgWc~^UvR)qc7m<7QbT@Wa#wIm zzSrI_?*CTfVbCvS7Ag1zf&R!d6ISDsl;4PjqylP>cm2n&bO@`!D ztwL4S+S6NFwgwWvg^cN3uV?3_4=uVhfX2o~$H!gqXP;p5=?FB?lHGOOyU-e`_~DT8 zmT3hS(~%)4d<-BhZD+T44jUaE1^6e!=BllS@A2|sKMZOZFwMAW?O8*D^V96+=13%v zAtdQqCmVq3JST^P9ty_S{Px3Q+k(IRIIVZkcliXB9WxXl(xEGxP=7=f8Fka9sLfr2 zOGo$1k{S+NK==naGrc ztr;qjv7^1vZvAnINd-^Iv7U0iHcuSa+(~ZxuMaOAPe4QTD+kYc{XMj`m1Q~ALc`hR z9uww|geignA&7gAfX=BBcg%In$_^?%4xywp@!ye75V;LQh3EVI_SM{@f?xJpD9&y9Leyhn6L zvKOeS@j6~@reO$~CB(Ner{|`>a~4##24xqQk=0{jch=qi_78ShiJR9>W4De)e*>zj z52)&M+F)Q>S)cZ?n_XGSYb6zCGHVUU+se$!szU9$KN5@aDMm3A(*dGjZDNOSD&3gS z%ldOG$3hHzq(uQp0UUx+TzIg9Pwc=#L+r4if#NezHw<^`Wa9}U!Y7H}Oi`v7PChwHc zFm^t^u(lx57!)eF(>!X}IU97h_E%$_#Ag+4#TxF#d;+^Yk7?Ptu9k-k<4wk)Q~+LZ z`{0u2`^zc&v#Ii_e@5r`NlcPOf(+ur3krB|0FGY0ifnZbNjr6vVLY?j>L;)6$8m2eP=e={{cf||GG2*#nYR=oWY3C9}gR`o{IXE}~FfC3_&fEDT zd|&2Yaz1d%oLN?lMptU{ot`n4yM)&$lDz;XR;rj@gj*jiMVX$Wv3pg`dDCIiK$DCc z_dErYva&K!Z*Q;V$B!U-`Vg$ms3*Pk-V!b=5`HmV=9vPN&+Kl$1A~o)W;|{c%`Zo$;UTJ2)nuie5*o>~a}! z0uCT{)``cqhw7UN9K|X*|9!%4%+pq~#bn4j-nh%{5T~6Oix}AeP!?0s@Jk>|b;PVw zyzP}IFjn^kr)W~+vq-Kr!8SdcaO|QEBsVYbYkNC5!eL(XFZ5r#%GN}-v(2!loa{I7 z;N$pTX86xV+1cfK0?H~XQ2@l6l@&LD3k8VU<8?6IEA1at!zEK_p%pO}r!2`cKSIx{ zsZGm5LAtTA0X*|IA*nA(zcTbsUDT*h3zx-&;CGX<6RQEDBcB5?vB}w5A>WIm%)yNg zOVP!e=}(Qb0BTxPbTk;)N-h}%^xqKZtC3#@rCeNG3ocSFjk7G<*r4qRBMdH@TEH9l zB!K_dhY!@B@KOyg0_;M9_#0WZbZF`J_dh><09Y+|OxRf{nUNs9Q*AN=K{VqeNfDy- zV4Ix1;Thon3K_H>KA5no1hKMe0O)wYt0R`(vGC1JyFPn+z5}2Aa~RPrLLG=o*#wQF zxVdN|zy|ONmzs_)xPP^M)%9j;s@F0a+f0=;9WzXy8r^FNl$zB}har*qKYvmnyMwxy z+k8cjuKW~=ip+%>gwyW9lLx-eI(6Gs1LRh8>cM0nFrZNe0Qi|`B4B_(hb_3v>|b6H z-TLxA8wP=3H{1bKG0l98sj#Uq1J^p>H0Xc~G%z8c6l>FAUY^11ylkmHyYBLdK7t2#`;zn-b^aILi1FCY6%~un@Gjc zL@QSN&sBVt(pp6Hp4$(PPE^UvyS5!4NA)$Tg3`q+p>O9oMrgUGf=$9rs|c#BFhTCP z4MxH~X7hRxdxd1L^J?S4Cs12H^>Lfx)X>_mbh~3V#b6_4(ffnHhff>=lQW;I^>wXmT^sQtV|} z0zM^j^GpsLWuntM1M|z6g9<>ox{nZhs15883>LKNi^cB}$ zYcu)xY|@G| zKmybQjKj{KYLqGxvBRU=JO2SZm_x+P!(!PDqI>)5FI#_P7WIzcJ8XT-XFn7E>gzuP zXKQjq(bW19jcnKY<-zB&Oa>{s!e(!s=jsOAnagm(*6GNzzqAiD!n=&11smR;x4OS2 zc>9xc6Te{p^onf`y+qVv?E9T&Y7kr%^!+H9$}G#GGk2Xn!+XQlNO}Y$8OO4#Z?#l(3<2Ds3T+ssTLK(si?)+C?tNZ=;Q7aJN$(BoD z^_n6hxg1nf&0v?tvbj`)pCqMo@uH1}oHTURZQ>>6_H%op0>UCW`96D?4wLbWS8njw zlS6%>wL#EY*bV=SX0EQw1f0;4r)vdw7S__C@$WAyrSe|Vm*Yn_Jy1>U2AfRI)-J-& ztH1o%)lIjmDvpLO*lx1zz0)IBdg?<9%Vbq7U7Ib1;CEalo8|X@bu(f{bC&V*>O5q; zR)T8JmIv4SBmQYv_@pW#Mdp=bZ+T=Y!Qn)=Y2Yw)g9O(KgaRcFXRwv*Y)3l%RohKT z#lyV%8A;f0f)_H-g9!P3Bi2G5pNrgBP3NL5S`;&hq4y43wFak`|D&qgR>lEe#kdNg zz7@kGc{zR9?Z+^QXJPhB6z`{Hc?6!)m3{ zneT1%P19BalTkE`9|jFf8@_whB9J^^uU>b&`nss9MK{##QKk^0ZjY9eCZyAJF10(S zmcPKx&a@Tr4}Tgdbpdk^U@aw1DT|wN6{D#rVK`6%eqYZ15Whb@_i#p{RRzxWWJ}>^ z2AFuSBELiHbzovc-?x}bkoE9eRXym7B)zv%pyme36qLdPS}5r^!#KNR{YLu-oZ;QHyLb|L=!jotyh0` zAwh)lvql|lC2!IaS8(R}VX?|QV%(?ZCichy=zx9tgy>4q+zdSG$LEmX#rR`$MSpmY zvQmJfZ}G2Vt(68F){OkqJ$ENHyVZXL?h?3}ST!F_c`bT=W&Qg%CyDL}`KLk49DwIm zT58e`u`b=gAp?EFU0GP{#GUsEa^lgCLzlPhb6m(UMdLh;X3k6I-xtugH`hQe>>{ldx&^r>5$Lf@yTqG9@39Dehcgj zNl;HVD%58uZB`q4MV`OoOFha6T=G@chHMWCvm>PB*6{bIqRGr2eg>USj2~iDyd9)5 zG6)x`lNCKjHFq~)J&FKAI~riENCpI>?10+bTvkMCkzu)CHU|o2q%Ah?%^F_S7)96G z7MtY-XiuP3BC_mbZejurpE}2k*BS11Mbvm%^30psHZjxP`8MiVG|??FHa~8H6%9Wb z(Wtq737a*qmCoS2VPFxcrOIu`jELL?;*Y8PHFz@b=~-0jWoj7s4I-`SF}vyshy!tB znNz30r0(@>MgL?=OqgM-6VRFKtzjgkK~RAgAMDH~A<8>lQ5v{d2X z0vO=nzQPtCVN+kBaB$vSaBxRo;NXO_;ou0}@;fy}VGGC>%JQ;sZ~tAzJ(U@-88kNq z15Y?OtfBuJ{HSY{6>Jj4OHmbo0!6{YMCFC2`Og_!zoM*^j^FZWkN>v<+u(x-|Mi!i zr`kYAePDI-w~t02TdkLpr);>mQV}ueFzp#tqOG7aws-;3MTKC`02^W6sT|Mf)KoVG zgu}=T9BDATG@Oht*CN%9Nh7=Rf}vKXgPF_POYakJ=xX}UM*4Yn;4aJ3%_n)~p1Xy> zqPyU}JA)9AD=xOg^DnCi%#WH2o$#bTIh(KEI?j5Z7CPBUe^N`lUZjLs2cV)UEIs>1 z2qG_+V=19Y(V@}C$IK=CzOkvop=eC#fwT;K*!KE&?C?! zppKOM*%(lF*zKXYOd8%xQ%}M(eTM<}2Oy}9ib|`910YOJ%J)m-e4F3k5->9KNDjSU zd7G4x5Nq#bzd3$hDhesIO-bT-S}^PwgWeOs;aisJ9AQa39h_YzoxSYxcQpvID8p`$ za2O{N7o7QZ{b$@UGC_Xozi(1RVHIC-a5vs=L$^S06B07jF&nSvBFrCbJ_YY%NW4AZ zdkI=#c+oBL2#wv3*-zn+Zp!jWq-p$7GDA zgr!*>%usn|SmuB7%zc+4Hr?Ori-3b9Ua3Y=c`{g-=cAQPV(C;d*6JJ)bXDIsW?9J+ zbZJSsnGkyEAF>tvmR?Id!#4n3GH3B71YIpPI-@FI_#fUg|Ikpd^6;u~PA(Ev?G5CO z2sUwi2{QG}!Xj?`B+B>3`S8%-|JNWdDhgT5L^0s6+?6-{-V%4A$fpr`@oVwIkZ10Y z8TwY6|)!gyWS^4ViEW3O6;DozWXWl^Aqg1 zuJ zeC`mhx~u=y_YEDm%q1c27hNSF51H7P9)+=7lbsi=Y6t{-guj}C49FRlrSp3Op1UIa1I|J=EOzc9XC zr@Sc;Ok||6&IQFWh^ggM3}Dl{zEQ4&j9ga+(hjgMz>H>_mPPksA;+|5d%z;f{xo6o z2R2TMpm<>JpUOALhPASKvVs6o-n92GU{liJA#-8qzG8AgL1|CfI}^c#f)liA1Z7NZlm7 zo=Af&A;OORcv7g6CZaU-!H1UQ-LG2S-zAo` z*ZVuqH=(aQC@BR1UZ;OO2Wo{v=e#~^okbn9_+%nt(WTX>@Y0&xs`xUHxbnu;=3rj4 zr{lg&$G3ahXrEI#+S1Ttwe{e);LlQV5>E+zR#p!1*6tSgk?CP!;>nc$@U&}+>Ksv- zV{T_+zF-J={E!xOx!R!FsF?Tmy75XnlAA(9Kmag!Hhu?==WX`p-FVvHxGEdP!Uf|F>ekRc@UP$7c?mnR55YLbf*BIs;GvI9W2=vmY0RbPMJ98i~D3NS*4}0 z<_qyAmjJJ?UCS69FYmQu7TqVD=?G$EI142qd>$rZetZ6ZP4X_3!S@02g+E7lLE`G2 zmiQtlU7x(5IEBC3cWwo_{cjQRJ*{;B=1+BbhkweMCRN+!ze+h_{+%v$S$sv-XL`|b2-W@<_O4}8{#4G`M9^*7~{(BnWZmG`>-1*W^`Gj-S7 z$GV7wWz{6D!4E4q0Nlbe+H%CYn`i|czyMcbOYg}-3fg@T_^-=5ED6V;|Sg*XZiv}z!6rKxg519!nB z$r0c1Drdi#m-G)xrzy2WA9uDF_ANjH!tlY`LEBvt`(+!CxS_9uTv7?01vx}}<=_L! zXtGZp-yDXFZhgb4Hq+!oe=nu&-F;bj$Bs>0{ukjUAW3`FY+Iuv(c0j11CeQuT!{{S zhEn?3scn_u#14pp0g^?Hj! zekXRKzzzdLc0?dm;uSm?EE}K_ns;cGQ zvQB@nXKDc_gGyo#0tpfT7_8CcO^0@_qkNb&^#dnCVM`tUctEMq6g!S$BpeC(3?Q197oo5pbq+2!+B?Wh&L)+?b?Kbek35~z#MJ`72N&Ulb2+KK@~O%g zd9)dt758Xim=l#|AA>)-&reL3)3je`d_W4!f#=Oh)c(x0^#pH`8PGR46{-~ueBB;P)FuI4yJQK4pY z63lv&pQ0AV%!%weqtBk$(JYX<3UK#4q7qElWj0DQ*aXdL zbRdt*MhqA-6qLj}d85-jx@I8}M;>#>-h`JI^D5{}{^59=fOrDUH`K6)Ux&=-+Dicb`Q=esKNjAgtH4 zw&{&5sZk&(<@yrffH$u;yOcGYLRAo}Su=kw4Lv;^toi7FnRBohxMJ#%$&#akpepEg ztJtvS-Iwf-C1+GR?}(8nK~tONzsmb!lz@@eqxN$(vPnEIGJ>^>>$8ni z(^y5NIvk$R87a0kNv81iLZ8S~G6|1J1=LtIyl8Q4@YQPfnG5n2GVQ@{V$z}?rl!Rw za=Xh~vL&+kxR&_ZRw7T(e}@AL^$kW8q!FA!@V!qa**Wkg^8c2jo@+OxgP=08S1yh` zyYiLtpY*R53*)Z9Tb_w}uJjo_je9Mc?A*fQQQGy~_VkLm;aWqq_-$yBzlVnr)p`b% zM`O4x+%K01^hA>?fO9qUY6Lc#x=CCZOdk^LeA2m4V@KIwA*rE3(Tf@=LSb)I_V*mf zhLJJZvID7U*P^zr{^p1kB^~C(kwPV{OQ6HQxjAq!zIR0s1G1pga#EVP&N8KDN2fs$ z`yG7dN7@7iH~Tsd*09gGA+$Pg$jwyI@V{^Cl%&aH%p|GoYfH%9Z}L9YV|nk16ZK;S z-^+U+R}$K_*dUa1yI$e=*22YuK=~#l`h1=~WZ{8V=!bAH$9x@ncQ%9ZF7i*$i&)U{ z2^-4vl$-J!T+hYc)L67VJ}>{D4~kvRn~xL^PPrZp3c?!zeSJp!GE9#L(Q%dNWT*I? z2c+$Bj0da?3!n-OMcL;%@ceo-qjx}Hpau=LD)^U$KzyPG0g|quCJ9ABPu_Wf@ZVqd zpcZpxczA#Xcb;)?fgw<`3fkOe&GcPas7_v9Ul8b(o8NOu&uIJ`^X(6taGsJP5uoa* zhLJ^+AY4O(!(pbJrmg&&td=P%sEcI~=XI(tOyULnJ%w563bcLOT%@G=_(y+C>>Li^ z{9Td!bRxGNcDt)G<;%D-=eW%QIvxJS`zI_ObYgPS%CaVu2|HvmK$@)5N5;Z*rgXy2 z!wLBs&fua0|Eg-GvaK(pP6X7cjSrpQaA!p22>_@7cw&?LOEXbASxv8TY73WMNzsp8 z+kda(UGDX5F191ve-Py+>2SKA%wv9#E;c<5aIyOFNhQCshdku%ZVOnsX|#bL$@$&A z@0P#%ZbO|XO%meuZ$rHO1n6y2x$efLTK4eeL*`U)Z~}JK!@LlsA_L)BQfaqnm^MLq zj@KUE-TC%i!QG%5-8SKLdF=kNG!tPm8o+)%_`)M-a^yh#&7V*LNQHXw0;lSDs=0AL zG2PIxpT8x##OCEI<9e3f7KhKs1e#1$Y3}7rQ(|BuNKjD)t+#WdX{D<$%-jgZQ}NY) z63sstM)N!2=K4PUUX(emJCmLJ10dCP0#9yMS9NCL9n5J!gI@au5;qrIp5V}I87F0p z-qwfxed$n%g2QXw;9>qLcNZ>~XV%k0>VWfs^3mQa^80;3&S#;bag88Imz`svozDVb~Rb^%j88V2BlK)g#P(451 zjLruzkCDsMu{4g7K*D7Qh`Z01b5`Q{-O(aZVJVj&SO03@#>D13Y_7$PzU`~Wkp3WZ zcvY|-A67l1L&#S>*Hp)e=Id8T6ct>eQ&#K7lb90a18Vt&`zjY*4ydW6CSiEwwdmEN zKee}e)T={_o+2g9*cfZQN(D5z)k$IVKDmb#FY=p*NmquWbn5XD4a7TYRio&MY%7PC z?fEG*CGWVH)yBPJv4kmp#>lvjGiFB!8Xe}588*~=R(325>#B~T;_8k&t8$~OnZAqF zS65GEYO&t^+C%>IfkNz@ukEBKs$q|H9y2vRQnaC;2@Yl&VwkC#;=XjUcD2g9Hxq2yk1~iHyjRx$dd|o(d=Bcn zsCGx+7)||-6xT0X>a`o#UVY8ZUrR!KD(ghI5(mHTaFUm3c*fDhrKXPqnOWwM4|T{S zP&N5K0K#pEV#g|VuwzG@Wudsy@FP)3G{E!iVb8gjR3?NURyG0Y7Ufc+Hq_;^5KJ9- zX~@N~E=d?wUOX-!U8zNm2Tw&+-O?eP2?O|TV$PACj5Bh^I;3QBpM3?|7yqZ z)(umiF@_cJHWNH|CCD2yuHORS={^r?$jS zV9ARtDpsjQi6)aK^OvR4#>0no_0WXNG8C8ESS;E(1DE`URp5UECl}iNj)691a4QuK_cuy_{R5Pm-rXyFSys z2X2LjDU-$R1rc6wV;KYF$ajR8P;w%T`b^b5qfo*`=Pd;=TovVuJ?ON{9r%~$g7D?I zm0b3#eKw)Zso?3V;+nf6y(y^_-1DEjv#qn&`nQZY&>MA80JKl*sVg|L=y~@8rbaaR z!R?BR{H#~xw}b~#fc9oZ*yq(Eg=}GK{YLNNl$kqjr}wx~C+nW?<75*(I)2a02*4gu zPWi0Np6^bD0Pw{T9n-wAyq*-~t;t`&bbb+$YS<%XBoLuA+*)EXyp6_^iGJbN{Xmv# z_j?`*!DPhcAQLSJn*h_fpsPT!U(6HvW`{B+0>!=e9BCU{Joa*oHnKB0035kb|pf3l8*iLS<;(p~9ioJ{CqzZX~ za7(<{J6s6G^*xZrA57zh92;2$2ILfRZu+lBnT+azf@?)6EiULF0fkhkGkh)O^o-rf zCph{E4S|B|-}@3THzSDNZa22~uBs~4d4sQ+$nyljg|0*HtE2(~L#>k^M$&q>kfds( z-S;up-(eRAUnDTuPJb=MDHM`A|L0oDNk%EJD`mX8aLJoYhJ70Vpa$us@IoG_0f34A7Zquv`6Z&D- zzrp3Ul%q)u&lv0-a-n`N7QmCR8M6ttAz@@WD?-k@;VluyrQ@Ka6!XgMOY88jeP zTwI=BnZ&>$DQi~=tSWQp$`i&XLd1ObSH^OWueugJYNFM9hsUho0h&vV)^Mu2Kmr@4 z!0_qYlhTBoejZG+QEP_th8@N5e%g(7sWQ`YL)YnrsM1uW@+w`{;T<%k5u_8@_%UCc zT&c~#=DlTZh=OQEb-44@6?cq8NUwBW`7hqG272e2ofOZ_oSl=kE)?o_T89`(0ZB)L zWR~wSTd#L>@;PTWR^rSV$2b_o#DsVTD?>eS%myXp2}6V4LOgyyK6x~gedp%qpZM4F zL?m{JfkF|O-n;IzZ+pOv&s;GIf+I=O;PR59NgJvCUNwI_IhpBq6?|v;h=fJ{DXxx0 zL6yEhg-6gkS?&k80Hno6$oygA$6o`Tsm&=@|MwNI%LbgB0H&>EtO65*q)MA0=_S7I z4%7b0VWy_{)=n!GLV|IG)x+A%rb42sL{Vh^uQ)FvE?cL4ZlnnJ0~cVj-1^I~+O_BN zVSCedXF=DqUg7V($BGHz8jEu)BeMrs7TE&sO|om4OQJLCEruv7#q8i{0*(5tbK{s! z(%JPw`KI*U6)iq=evbzqj~q5F+)0p136#N}Hu*rPn8?e=XSNHLL~3Wuk$-QUTSlj; zKtr$FoiXkYXKmn{!F)e4C&^Dl2DP>EAk&G^5lyZ>9!_^p#m#m33t90V(6*NkB&87= zN&%^*CRZAvV;R2J`_h@kM}oH^ze@MEj#$dnmFaQX=P`xrFh=PT(I#OB9So7?B zY&CmB3#74Fszf&j`a-d5QImHfi@hBg3IZ=2DnrJeAYaCBDhtxmXca8bc%U6ksiteO zop5v=by+MGhNey?7wU``Ie^VYs)ppzVz}iv@Ofueo6NN8s<4E8b)~8IS)~56r1hsk zu5PE)X(bqJj$Zv@51c|em)p<1<J^-|t97M@1zqZwQi% z)2;WtLb6v{Ywz_rIb+js<3r!>$oh^su4^#d{KaPSFO7#jGwjj#X+ZY#SU5=)Djvo2 z`d+;&d{4eSwL1T7=IraH`thT1$|C4U+i9bZvLoD(xSkMERsZ?XVkst5bnptktJS&0 zaT!SyH5Yg1MlOO1LqA9j&O|qE#3|Cx+lEN9zAR+(U3;>puGmwfC#n%d@#hYSCIlaJ z1zcbqX2-Widc`?FD?@GDPo1>Rk~ITOaTdRqn(XZC$T)cN!@T?3@KH0el1YE9hFt>K zE%gGY7XcFwXmA(jpdgHe|M>j#%MwFw z#b2Srzw`6sb90E%_P9~$pBt1I8X~kA)o~(O(h_Gdlg2!AvJ1q&gsxZj-xe$P`xiK&y33i}zA&+~mj%h48 zc@UmL()2%5uPHd<%ds5p-^UayyxdrciJo;wsZ$(+Y^a0%Wv0G|3crad@+!30G(3YY z3rw=(WooxF;(LUJvf}F(b9{?rB9J6gel+08hklE%Sfq+%F^U8U0 za>`5#M;i60+#iOMVfF@oY7xdDxIjT)clKts*dTq*u39==mPqj{8fl|dbU}=W)>fZw zG*YB0-5LUA`el(W7zO1o07OZGy*mQ~W|D~FX;9yN2aXdXw>gc>AszficUlvOBv(&U z`)v<8IJZH+zOm-U%=j!C9sa`*sPS`dY|mqAtllunq9M{|SRdlzfarN!s}28 z0Ok`j9LTLEkD@&Bn?dFjS=Zn*QX`@cWR`l{hh;t054_6Ytsqwn)eITrL==PqtJcN(LQ4Y7_Uy}r5TCi3z5JXc;GY#V_Zu99A z{~K9yj_hxBc3NR5u%}Ss)T`)BSCqhz`I|%LyRoG9yj|6n;9+TudHmbiR!lEjkzt!4 zo<5w)uGN*^OdMX5NYgi;{uY+*79&JO*+^f0FiMf-O)9BiS!|eB*Z$>#*g(Op8euE| zZf0rKNWaKLErIc1j&V4~NUEX{SZgkf;Q0wL7#y*5h))RA z_JssQ@LS8^kg}Ouj(v{i!Z1ocC5R8V&Jpx7o%m04+_)p0z_(`ygvx8mmK)L*O_+LM z@5+6V!O<@^2G$C_H)+tRFsw~etOxNxCT2Z0_We1w_zedPNAAdu^fg_obW54GXYL6k zgv5U5@0eW#vrb7@I+B?C?Fi$y1hv4vyvz}|SBn7y6(p-%hb>)!!63Vcv2Yqsi2tWm zR*>-Y;-XLmd6^b-h6)2PYeE)vI}R~y1#VuFT9%0E$1DUqu)0Oa{88Cy z!&5{gFe6cA(y~T889T^(GbTK;oTp2JmK-c3s9P-deITAO&GenBAdvs4 zxn(cANG#Fjw;~;Q*Yl}kVOwM@m9kK1LSbr$yvHEK>xj+vY<+@#i8YWDsdoYjWg1k% z1tSfr6mrsg#(`p)CPD5ebEv01@2r{(oIJgqi6IGDNNFn8&;csq6l$Ewsi{;2>v1E2 zBnKqgEGw?O@=$HTi*`wC@-vN-IZtR=7jup)-i< zQ=6n{R>?o)>uWD?l_2zJNme)m5RGg6irbv5vD635aK!*!LZN&j0Z-6m_A?ryd+`c# zc{^c~0%w&e5dQ6*sbR6S$3P#%?}s?xGqhPtVpf2y3)qe zIP4*y6iEywJ9iO5$7yk^;s;+vcvR~P>8-O7d$j>g=_iZakrjM`O~|c$s_iSj`JC)O zIP??@NpPAC4ZI{gR!kemG0MD)d|fGv*Nj5|U+A?koL3NX!>+}AoF>dl+S0Qd=zLfG z30n-4R1*9vAn(}UZ);)8=<22)lHIL(s(Y60Z{u^S{Wk5ew_ZeZS#Gf$f8fx6t(84(UfwynnYaU=^D~diYaeTD+ki*~JxMYx>7g0jp{-;15 za+6)eDUgs?#qtnzJE+w@e(l&NG0ge5BFd&WSLJX%M-l1u+B9B!y_ zh7fQE9oK%|0*|_B-cJR)Zqv$$)v(4cjeBr z{R?g*PMrjSw39H{RLw8@%jWXGwmb9udSP&(F!cBC&O#ls={b{lq`hCiE1vC77|AB1 zsIc7Vt>N*5p{u$&BRP48&DNvB_FTN^?J#fmv5D&r%ElW-?uSa49HL@7!=L0wGvyrU z>v_3|8y$mrqQgjj>hG~chf*jM%RxS!r2f^R(Gh}0GLL{l5t`N7%61d*ZuACvcv^0p zU7>~j%Q*w~r;hK8j^8;SB(LQ$b9|fe$_VKBlanzzdn(jf=XtQ!Cn-)odPgq)cJG;g z53H^}-%Q9|fs1G)?xk2Zo+w@){sc-JYkv%+M&#waQc(wK zF@3{{mz-BceheTYC8w99El8x*De&Tv>(Lv<4x*dMI{UJcC6(?@3U207$s6dU*#F3a zaeKF=qnwziT4IM>jggbX&R5`OHGI8`7^RhITt{wVpt2h+4MRfvrEBN)xf5;zDJGSV%VmSVeFLIM-!#>$v2?BLj_CflW}GD^*c(+Z-x0R`~<{PguT zS&LzWF^7ymhP1BMYG|lP@4?oCc(gUXAIFUYE;GjMzcrc3*7lo)6_`vZfeIg2%Hrka zHOptN=rGTs#XW@2F}d0MQNPQ3npGiPOU^*6bXjaEJ#(%1C;Y+57;tWXxue4c)-Vb^8ojOnU?vQ(}f9Xnc zoJu<84B?i73%z92VPqtJ$uu)RAoneo2TU_2yF4HU3 z_=&5|ph)i&SsLcFFwlK+A{JlO(&o841S@ms+DLM)E2Q_bu*j7zQDDfhaB&G6kotA= zwGyjmxGv9?I^)-jcL5g$^Rya|cEaLnnuS;6%%os>m0iL(i18!(bLG1jArl|J(PZc6 zf6g-5$1@+gyp{Lnh~!hqW%$|t0);XM*@i5^*SB8OWvHO5b5X()sMnnrub_XjQf(N8 za)#<>S?Qg9F+p&)&_sf~nie*_Z8D|QET$89ckDe1E;{N+MH8(u5uz*%%MX^({w?+u zMS92WGi01UfOvIkW|!7_ss$M_WCWa#D#~afeAF?xnDx@YZ7xCX!7J^iW?!F1F5WQ0 zucQE#0^YdNSbR?M3ePK?yY&W?uWygfxV`=X@n)-kM~cMUV*{T8JGz2j0AJfgt@26p zikq4u#^bmdevcYd34663xS0@A_ut3}3kyTXTDZkN{XUUKoBuUV=lo|6PYN-*Zng@- zZRs9)?fx9ABCNV8e4kd_=8M0ilju;MNU4OdG4d;ej*T4D6(p%Dno&~OcGo$qGY#V8 z5^R%f_-x8H^b-LW6H*Ctx-{;-kN#fg80*3h!Ah3szCEOwZr4noApQnfU42pulWzI( znCz=wAS&~c_r&QcMT%yPo;wLvyiGCl)U#q8VYDk<*Ha45%j9Zh$u_LL0 zcZ2IavB%%++nSmR#>a_2evF5)W}Y0n>U3Czlg>}Se7{MXi7ygK(Glj^Ldi00X|Q6K zqZSsM=e_aMm<=!9N*0b7LXziO6OpAnqtKprs|s0vVkp8T?%xS{p^Db~vwf$1o{33) z+ma}DUT$7sH_qaUcN>gt?|q$=5X>sS9F>UPcy-Rs{u~e#LUE&PR?5vQb6(DA-co<| zg-BO3w*E>7{F7a{+ zYTLl-yAnCi0rgv8$@9mfQU=5-mHb+$?b-65PsNSg`lG#P(zXDMJtUq>@Z=PK6}lIH z{_VE9lYWWf$+5(RcWf5V1ID^Btd!4NlPm z#{S~xt0zwS!fFqj12sAE2gTc-Q|Fp2=y8KKK>TWkxLVC`%^^-{Gj59~*dRf@H~3{y z!v$3eRd?ihn2~AShZMZ=fc4s7$roANZHe+2eAf{A7Q$20z9(jKYj=;kY{5^U=qcQ^ zycUR~^g98<`F&yDO$HSqSFT{Sz&CxdEhV5u2`3uE@T2>Rsn+8cew^(+b7=&3Wm?yo zM1obDOb0X*;)Jm~AmSJ1Uo-7hgN1$%MOU6UGWv=n;nKl}3$Ma?(yKz@LMg!N?0R!@ zO=fdP-}K-Dh$zu1<=jWHNV5~tMst67!?oVO4qiK%UCNG zDM3^=%coDknT$3rzNmlGL}*5|-?^%U#jA1VdXD+DO_GjHj*)*Va~L`}#BX+NA+Z$x z5Gm)?^g8_WIZ|ruK1lMf4^V{K-pFzQ?NIS(avmXn3AyctF^5_Bo9K8@OMEHN3M1^Z ztK(F{BF-?qkeP_`-|H(O{*`=6mG8!gT-q0$K?98O6bM3Xn^ZW7gk+Ilm!%_$I;a(O zc{FdoBOMV4xDr22K&6CR-={CH#K?grveA literal 0 HcmV?d00001 From d12a48b85631182a9330702dae8bc452c42474e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 15:30:20 +0200 Subject: [PATCH 095/185] Release version 1.3.0 (2024071800) --- version.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/version.php b/version.php index b7da506..da9d154 100644 --- a/version.php +++ b/version.php @@ -25,8 +25,8 @@ defined('MOODLE_INTERNAL') || die(); $plugin->component = 'quiz_archiver'; -$plugin->release = '1.2.10'; -$plugin->version = 2024070900; +$plugin->release = '1.3.0'; +$plugin->version = 2024071800; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; $plugin->maturity = MATURITY_STABLE; From 560be66bc88aae39105e9a5e0cb858ec5aca6b68 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 15:33:06 +0200 Subject: [PATCH 096/185] Fix missing Moodle version number in CHANGELOG for v1.3.0 release --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4e53a68..3f76b3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Version 1.3.0 (XXXXXXXXXX) +## Version 1.3.0 (2024071800) - Optionally scale down large images within quiz reports to preserve space and keep PDF files compact - Optionally compress images within quiz reports to preserve space and keep PDF files compact From aee5632f6dc4893ce308e6a210fca0416bcfad56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 18 Jul 2024 15:37:20 +0200 Subject: [PATCH 097/185] Add note about minimum quiz archive worker version to CHANGELOG for v1.3.0 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f76b3e..1904986 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,9 @@ - Fix conditional hide/show of retention time in quiz archive form when locked - Optimize order of settings in quiz archive form and plugin admin settings +**Note:** Use of [moodle-quiz-archive-worker](https://github.com/ngandrass/moodle-quiz-archive-worker) `>= v1.5.0` +is required. + ## Version 1.2.10 (2024070900) From 94779395f331e96e2bed5bf1f3cc5df7895e6b54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 22 Jul 2024 17:49:42 +0200 Subject: [PATCH 098/185] Define additional job status values: WAITING_FOR_BACKUP, FINALIZING --- classes/ArchiveJob.php | 4 ++++ lang/de/quiz_archiver.php | 2 ++ lang/en/quiz_archiver.php | 2 ++ 3 files changed, 8 insertions(+) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index aa894a4..74bc46a 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -75,6 +75,10 @@ class ArchiveJob { const STATUS_AWAITING_PROCESSING = 'AWAITING_PROCESSING'; /** @var string Job status: Running */ const STATUS_RUNNING = 'RUNNING'; + /** @var string Job status: Waiting for backup */ + const STATUS_WAITING_FOR_BACKUP = 'WAITING_FOR_BACKUP'; + /** @var string Job status: Finalizing */ + const STATUS_FINALIZING = 'FINALIZING'; /** @var string Job status: Finished */ const STATUS_FINISHED = 'FINISHED'; /** @var string Job status: Failed */ diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index b145cbd..6cd3028 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -149,6 +149,8 @@ $string['job_status_UNINITIALIZED'] = 'Neu'; $string['job_status_AWAITING_PROCESSING'] = 'Wartend'; $string['job_status_RUNNING'] = 'Läuft'; +$string['job_status_WAITING_FOR_BACKUP'] = 'Backup ausstehend'; +$string['job_status_FINALIZING'] = 'Finalisieren'; $string['job_status_FINISHED'] = 'Fertig'; $string['job_status_FAILED'] = 'Fehler'; $string['job_status_TIMEOUT'] = 'Zeitüberschreitung'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index e133b71..48c39ca 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -149,6 +149,8 @@ $string['job_status_UNINITIALIZED'] = 'Uninitialized'; $string['job_status_AWAITING_PROCESSING'] = 'Queued'; $string['job_status_RUNNING'] = 'Running'; +$string['job_status_WAITING_FOR_BACKUP'] = 'Backup wait'; +$string['job_status_FINALIZING'] = 'Finalizing'; $string['job_status_FINISHED'] = 'Finished'; $string['job_status_FAILED'] = 'Failed'; $string['job_status_TIMEOUT'] = 'Timeout'; From 7e6c7475a83a11f11fb8b7001b91b5b17a9547be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 22 Jul 2024 17:50:23 +0200 Subject: [PATCH 099/185] Keep track of and report progress of running jobs --- classes/ArchiveJob.php | 58 +++++++++++++++++++++----- classes/external/update_job_status.php | 26 +++++++++++- classes/output/job_overview_table.php | 19 +++++++-- db/install.xml | 3 +- db/upgrade.php | 20 +++++++++ templates/job_details.mustache | 6 +++ 6 files changed, 114 insertions(+), 18 deletions(-) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index 74bc46a..c984096 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -455,7 +455,7 @@ public static function get_metadata_for_jobs(int $courseid, int $cmid, int $quiz 'id' => $j->id, 'jobid' => $j->jobid, 'status' => $j->status, - 'status_display_args' => self::get_status_display_args($j->status), + 'status_display_args' => self::get_status_display_args($j->status, json_decode($j->statusextras, true)), 'timecreated' => $j->timecreated, 'timemodified' => $j->timemodified, 'retentiontime' => $j->retentiontime, @@ -689,6 +689,7 @@ public function get_retentiontime(): ?int { * Updates the status of this ArchiveJob * * @param string $status New job status + * @param array|null $statusextras Optional additional status information * @param bool $deletewstokenifcompleted If true, delete associated wstoken * if this status change completed the job * @param bool $deletetemporaryfilesifcompleted If true, all linked @@ -698,16 +699,27 @@ public function get_retentiontime(): ?int { */ public function set_status( string $status, + ?array $statusextras = null, bool $deletewstokenifcompleted = true, bool $deletetemporaryfilesifcompleted = true ): void { global $DB; + + // Prepare statusextras data. + $statusextrasjson = null; + if ($statusextras !== null) { + $statusextrasjson = json_encode($statusextras); + } + + // Update status in database. $DB->update_record(self::JOB_TABLE_NAME, (object) [ 'id' => $this->id, 'status' => $status, + 'statusextras' => $statusextrasjson, 'timemodified' => time(), ]); + // Handle post status change actions. if ($this->is_complete()) { if ($deletewstokenifcompleted) { $this->delete_webservice_token(); @@ -737,30 +749,54 @@ public function get_status(): string { * Returns the status indicator display arguments based on the given job status * * @param string $status JOB_STATUS value to convert + * @param array|null $statusextras Additional status information to display * @return array Status of this job, translated for display * @throws \coding_exception */ - public static function get_status_display_args(string $status): array { + public static function get_status_display_args(string $status, ?array $statusextras = null): array { + $res = []; + + // Translate status to display text and color. switch ($status) { case self::STATUS_UNKNOWN: - return ['color' => 'warning', 'text' => get_string('job_status_UNKNOWN', 'quiz_archiver')]; + $res = ['color' => 'warning', 'text' => get_string('job_status_UNKNOWN', 'quiz_archiver')]; + break; case self::STATUS_UNINITIALIZED: - return ['color' => 'secondary', 'text' => get_string('job_status_UNINITIALIZED', 'quiz_archiver')]; + $res = ['color' => 'secondary', 'text' => get_string('job_status_UNINITIALIZED', 'quiz_archiver')]; + break; case self::STATUS_AWAITING_PROCESSING: - return ['color' => 'secondary', 'text' => get_string('job_status_AWAITING_PROCESSING', 'quiz_archiver')]; + $res = ['color' => 'secondary', 'text' => get_string('job_status_AWAITING_PROCESSING', 'quiz_archiver')]; + break; case self::STATUS_RUNNING: - return ['color' => 'primary', 'text' => get_string('job_status_RUNNING', 'quiz_archiver')]; + $res = ['color' => 'primary', 'text' => get_string('job_status_RUNNING', 'quiz_archiver')]; + break; + case self::STATUS_WAITING_FOR_BACKUP: + $res = ['color' => 'info', 'text' => get_string('job_status_WAITING_FOR_BACKUP', 'quiz_archiver')]; + break; + case self::STATUS_FINALIZING: + $res = ['color' => 'info', 'text' => get_string('job_status_FINALIZING', 'quiz_archiver')]; + break; case self::STATUS_FINISHED: - return ['color' => 'success', 'text' => get_string('job_status_FINISHED', 'quiz_archiver')]; + $res = ['color' => 'success', 'text' => get_string('job_status_FINISHED', 'quiz_archiver')]; + break; case self::STATUS_FAILED: - return ['color' => 'danger', 'text' => get_string('job_status_FAILED', 'quiz_archiver')]; + $res = ['color' => 'danger', 'text' => get_string('job_status_FAILED', 'quiz_archiver')]; + break; case self::STATUS_TIMEOUT: - return ['color' => 'danger', 'text' => get_string('job_status_TIMEOUT', 'quiz_archiver')]; + $res = ['color' => 'danger', 'text' => get_string('job_status_TIMEOUT', 'quiz_archiver')]; + break; case self::STATUS_DELETED: - return ['color' => 'secondary', 'text' => get_string('job_status_DELETED', 'quiz_archiver')]; + $res = ['color' => 'secondary', 'text' => get_string('job_status_DELETED', 'quiz_archiver')]; + break; default: - return ['color' => 'light', 'text' => $status]; + $res = ['color' => 'light', 'text' => $status]; + break; } + + // Add additional status information if present. + $res['statusextras'] = $statusextras ?? []; + + return $res; } /** diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index 81fb0da..0b40cd2 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -56,6 +56,11 @@ public static function execute_parameters(): external_function_parameters { 'New status to set for job with UUID of jobid', VALUE_REQUIRED ), + 'statusextras' => new external_value( + PARAM_RAW, + 'JSON containing additional information for the new job status', + VALUE_OPTIONAL + ) ]); } @@ -77,6 +82,7 @@ public static function execute_returns(): external_single_structure { * * @param string $jobidraw * @param string $statusraw + * @param string $statusextrasraw * @return array * @throws \invalid_parameter_exception * @throws \required_capability_exception @@ -84,12 +90,14 @@ public static function execute_returns(): external_single_structure { */ public static function execute( string $jobidraw, - string $statusraw + string $statusraw, + string $statusextrasraw = '' ): array { // Validate request. $params = self::validate_parameters(self::execute_parameters(), [ 'jobid' => $jobidraw, 'status' => $statusraw, + 'statusextras' => $statusextrasraw, ]); try { @@ -111,11 +119,25 @@ public static function execute( ]; } - $job->set_status($params['status']); + // Prepare statusextras. + $statusextras = null; + if ($params['statusextras']) { + $statusextras = json_decode($params['statusextras'], true, 16, JSON_THROW_ON_ERROR); + } + + // Update job status. + $job->set_status( + $params['status'], + $statusextras + ); } catch (\dml_exception $e) { return [ 'status' => 'E_UPDATE_FAILED', ]; + } catch (\JsonException $e) { + return [ + 'status' => 'E_INVALID_STATUSEXTRAS_JSON', + ]; } // Report success. diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index aa22fdc..f67c6a5 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -70,7 +70,7 @@ public function __construct(string $uniqueid, int $courseid, int $cmid, int $qui ]); $this->set_sql( - 'j.jobid, j.userid, j.timecreated, j.timemodified, j.status, j.retentiontime, j.artifactfilechecksum, '. + 'j.jobid, j.userid, j.timecreated, j.timemodified, j.status, j.statusextras, j.retentiontime, j.artifactfilechecksum, '. 'f.pathnamehash, f.filesize, u.username', '{'.ArchiveJob::JOB_TABLE_NAME.'} j '. 'JOIN {user} u ON j.userid = u.id '. @@ -107,9 +107,20 @@ public function col_timecreated($values) { * @throws \coding_exception */ public function col_status($values) { - $s = ArchiveJob::get_status_display_args($values->status); - return ''.$s['text'].'
    '. - ''.date('H:i:s', $values->timemodified).''; + $html = ''; + $s = ArchiveJob::get_status_display_args($values->status, json_decode($values->statusextras, true)); + + $html .= ''.$s['text'].'
    '; + + if (isset($s['statusextras']['progress'])) { + $html .= ''; + $html .= ' '.$s['statusextras']['progress'].'%'; + $html .= '
    '; + } + + $html .= ''.date('H:i:s', $values->timemodified).''; + + return $html; } /** diff --git a/db/install.xml b/db/install.xml index db3cd94..f1a537f 100644 --- a/db/install.xml +++ b/db/install.xml @@ -1,5 +1,5 @@ - + @@ -10,6 +10,7 @@ + diff --git a/db/upgrade.php b/db/upgrade.php index 1b54503..b7da182 100644 --- a/db/upgrade.php +++ b/db/upgrade.php @@ -30,6 +30,12 @@ * Custom code to be run to update the plugin database. * * @param int $oldversion The version we are upgrading from + * @return true + * @throws ddl_exception + * @throws ddl_field_missing_exception + * @throws ddl_table_missing_exception + * @throws downgrade_exception + * @throws upgrade_exception */ function xmldb_quiz_archiver_upgrade($oldversion) { global $DB; @@ -213,5 +219,19 @@ function xmldb_quiz_archiver_upgrade($oldversion) { upgrade_plugin_savepoint(true, 2024011000, 'quiz', 'archiver'); } + if ($oldversion < 2024072200) { + // Define field statusextras to be added to quiz_archiver_jobs. + $table = new xmldb_table('quiz_archiver_jobs'); + $field = new xmldb_field('statusextras', XMLDB_TYPE_TEXT, null, null, null, null, null, 'status'); + + // Conditionally launch add field statusextras. + if (!$dbman->field_exists($table, $field)) { + $dbman->add_field($table, $field); + } + + // Archiver savepoint reached. + upgrade_plugin_savepoint(true, 2024072200, 'quiz', 'archiver'); + } + return true; } diff --git a/templates/job_details.mustache b/templates/job_details.mustache index 6922008..73292aa 100644 --- a/templates/job_details.mustache +++ b/templates/job_details.mustache @@ -126,6 +126,12 @@ {{status_display_args.text}} + {{#status_display_args.statusextras.progress}} + +  –  {{#str}} progress {{/str}}: + {{status_display_args.statusextras.progress}}% + + {{/status_display_args.statusextras.progress}} From 370ff13ec373a62085b05f5a020240cba5503232 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 11:45:59 +0200 Subject: [PATCH 100/185] Fix passing null values to json_decode() in ArchiveJob --- classes/ArchiveJob.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index c984096..d54bc7d 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -455,7 +455,10 @@ public static function get_metadata_for_jobs(int $courseid, int $cmid, int $quiz 'id' => $j->id, 'jobid' => $j->jobid, 'status' => $j->status, - 'status_display_args' => self::get_status_display_args($j->status, json_decode($j->statusextras, true)), + 'status_display_args' => self::get_status_display_args( + $j->status, + $j->statusextras ? json_decode($j->statusextras, true) : null + ), 'timecreated' => $j->timecreated, 'timemodified' => $j->timemodified, 'retentiontime' => $j->retentiontime, @@ -754,8 +757,6 @@ public function get_status(): string { * @throws \coding_exception */ public static function get_status_display_args(string $status, ?array $statusextras = null): array { - $res = []; - // Translate status to display text and color. switch ($status) { case self::STATUS_UNKNOWN: From c6cb02e9feaef662a2ef95df6377cc7ccc84c5cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 11:46:37 +0200 Subject: [PATCH 101/185] Fix top-level optional webservice function parameter. Migrate to VALUE_DEFAULT --- classes/external/update_job_status.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index 0b40cd2..5dce9da 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -59,7 +59,7 @@ public static function execute_parameters(): external_function_parameters { 'statusextras' => new external_value( PARAM_RAW, 'JSON containing additional information for the new job status', - VALUE_OPTIONAL + VALUE_DEFAULT ) ]); } @@ -82,16 +82,16 @@ public static function execute_returns(): external_single_structure { * * @param string $jobidraw * @param string $statusraw - * @param string $statusextrasraw + * @param string|null $statusextrasraw * @return array + * @throws \coding_exception * @throws \invalid_parameter_exception * @throws \required_capability_exception - * @throws \coding_exception */ public static function execute( string $jobidraw, string $statusraw, - string $statusextrasraw = '' + ?string $statusextrasraw = null ): array { // Validate request. $params = self::validate_parameters(self::execute_parameters(), [ From 92f19dcbe330ee82c2a90cd9ef7c76b30fbd5f1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 12:28:09 +0200 Subject: [PATCH 102/185] Create getter for ArchiveJob statusextras --- classes/ArchiveJob.php | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index d54bc7d..6365a29 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -748,6 +748,25 @@ public function get_status(): string { } } + /** + * Retrieves the statusextras of this job + * + * @return array|null Additional status information of this job, if available + */ + public function get_statusextras(): ?array { + global $DB; + try { + $statusextras = $DB->get_field(self::JOB_TABLE_NAME, 'statusextras', ['jobid' => $this->jobid], MUST_EXIST); + if ($statusextras) { + return json_decode($statusextras, true); + } else { + return null; + } + } catch (\dml_exception $e) { + return null; + } + } + /** * Returns the status indicator display arguments based on the given job status * From 750fc63655747a03bbd008d6bb25b821d247e086 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 12:29:05 +0200 Subject: [PATCH 103/185] Expand unit tests to cover new job status and statusextras --- tests/archivejob_test.php | 180 +++++++++++++++++++--- tests/external/update_job_status_test.php | 135 ++++++++++++++++ 2 files changed, 293 insertions(+), 22 deletions(-) diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index de2f16f..7c64a59 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -346,27 +346,18 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { /** * Test status changes of jobs * - * @covers \quiz_archiver\ArchiveJob::set_status - * @covers \quiz_archiver\ArchiveJob::get_status - * @covers \quiz_archiver\ArchiveJob::is_complete + * @dataProvider set_job_status_data_provider + * @covers \quiz_archiver\ArchiveJob::set_status + * @covers \quiz_archiver\ArchiveJob::get_status + * @covers \quiz_archiver\ArchiveJob::is_complete * + * @param string $status + * @param bool $iscompleted * @return void * @throws \dml_exception * @throws \moodle_exception */ - public function test_set_job_status(): void { - // Job statuses to test and whether they should be considered completed. - $statusesandcompletion = [ - ArchiveJob::STATUS_UNKNOWN => false, - ArchiveJob::STATUS_UNINITIALIZED => false, - ArchiveJob::STATUS_AWAITING_PROCESSING => false, - ArchiveJob::STATUS_RUNNING => false, - ArchiveJob::STATUS_FINISHED => true, - ArchiveJob::STATUS_FAILED => true, - ArchiveJob::STATUS_TIMEOUT => true, - ArchiveJob::STATUS_DELETED => true, - ]; - + public function test_set_job_status(string $status, bool $iscompleted): void { // Create test job. $mocks = $this->generate_mock_quiz(); $expectedjob = ArchiveJob::create( @@ -390,12 +381,100 @@ public function test_set_job_status(): void { ); // Test status changes. - foreach ($statusesandcompletion as $status => $completion) { - $expectedjob->set_status($status); - $actualjob = ArchiveJob::get_by_jobid('40000000-1234-5678-abcd-ef4242424242'); - $this->assertEquals($status, $actualjob->get_status(), 'Job status was not set correctly to '.$status); - $this->assertEquals($completion, $actualjob->is_complete(), 'Job completion was not detected correctly'); - } + $expectedjob->set_status($status); + $actualjob = ArchiveJob::get_by_jobid('40000000-1234-5678-abcd-ef4242424242'); + $this->assertEquals($status, $actualjob->get_status(), 'Job status was not set correctly to '.$status); + $this->assertEquals($iscompleted, $actualjob->is_complete(), 'Job completion was not detected correctly'); + } + + /** + * Data provider for test_set_job_status + * + * @return array[] Test data + */ + public static function set_job_status_data_provider(): array { + return [ + 'STATUS_UNKNOWN' => ['status' => ArchiveJob::STATUS_UNKNOWN, 'iscompleted' => false], + 'STATUS_UNINITIALIZED' => ['status' => ArchiveJob::STATUS_UNINITIALIZED, 'iscompleted' => false], + 'STATUS_AWAITING_PROCESSING' => ['status' => ArchiveJob::STATUS_AWAITING_PROCESSING, 'iscompleted' => false], + 'STATUS_RUNNING' => ['status' => ArchiveJob::STATUS_RUNNING, 'iscompleted' => false], + 'STATUS_WAITING_FOR_BACKUP' => ['status' => ArchiveJob::STATUS_WAITING_FOR_BACKUP, 'iscompleted' => false], + 'STATUS_FINALIZING' => ['status' => ArchiveJob::STATUS_FINALIZING, 'iscompleted' => false], + 'STATUS_FINISHED' => ['status' => ArchiveJob::STATUS_FINISHED, 'iscompleted' => true], + 'STATUS_FAILED' => ['status' => ArchiveJob::STATUS_FAILED, 'iscompleted' => true], + 'STATUS_TIMEOUT' => ['status' => ArchiveJob::STATUS_TIMEOUT, 'iscompleted' => true], + 'STATUS_DELETED' => ['status' => ArchiveJob::STATUS_DELETED, 'iscompleted' => true], + ]; + } + + /** + * Test status changes of jobs with statusextras + * + * @dataProvider set_job_status_with_statusextras_data_provider + * @covers \quiz_archiver\ArchiveJob::set_status + * @covers \quiz_archiver\ArchiveJob::get_status + * @covers \quiz_archiver\ArchiveJob::get_statusextras + * + * @param string $status Job status to set + * @param array|null $statusextras Statusextras to set + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_set_job_status_with_statusextras(string $status, ?array $statusextras): void { + // Create test job. + $mocks = $this->generate_mock_quiz(); + $expectedjob = ArchiveJob::create( + '40000123-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN', + $mocks->attempts, + $mocks->settings, + ArchiveJob::STATUS_UNINITIALIZED + ); + + // Initial job status. + $this->assertEquals( + ArchiveJob::STATUS_UNINITIALIZED, + ArchiveJob::get_by_jobid('40000123-1234-5678-abcd-ef4242424242')->get_status(), + 'Initial job status was not set correctly' + ); + + // Test status changes. + $expectedjob->set_status($status, $statusextras); + $actualjob = ArchiveJob::get_by_jobid('40000123-1234-5678-abcd-ef4242424242'); + $this->assertEquals($status, $actualjob->get_status(), 'Job status was not set correctly to '.$status); + $this->assertEquals($statusextras, $actualjob->get_statusextras(), 'Job statusextras were not set correctly'); + } + + /** + * Data provider for test_set_job_status_with_statusextras + * + * @return array[] Test data + */ + public static function set_job_status_with_statusextras_data_provider(): array { + return [ + 'No statusextras' => [ + 'status' => ArchiveJob::STATUS_AWAITING_PROCESSING, + 'statusextras' => null, + ], + 'Simple progress' => [ + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => ['progress' => 42], + ], + 'Complex data' => [ + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => ['progress' => 100, 'foo' => 'bar'], + ], + 'Nested data' => [ + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => ['progress' => 0, 'nested' => ['foo' => 'bar']], + ], + ]; } /** @@ -1058,6 +1137,8 @@ public static function status_display_args_data_provider(): array { ArchiveJob::STATUS_UNINITIALIZED => ['status' => ArchiveJob::STATUS_UNINITIALIZED], ArchiveJob::STATUS_AWAITING_PROCESSING => ['status' => ArchiveJob::STATUS_AWAITING_PROCESSING], ArchiveJob::STATUS_RUNNING => ['status' => ArchiveJob::STATUS_RUNNING], + ArchiveJob::STATUS_WAITING_FOR_BACKUP => ['status' => ArchiveJob::STATUS_WAITING_FOR_BACKUP], + ArchiveJob::STATUS_FINALIZING => ['status' => ArchiveJob::STATUS_FINALIZING], ArchiveJob::STATUS_FINISHED => ['status' => ArchiveJob::STATUS_FINISHED], ArchiveJob::STATUS_FAILED => ['status' => ArchiveJob::STATUS_FAILED], ArchiveJob::STATUS_TIMEOUT => ['status' => ArchiveJob::STATUS_TIMEOUT], @@ -1065,4 +1146,59 @@ public static function status_display_args_data_provider(): array { ]; } + /** + * Test retrieval of human-readable job status with statusextras + * + * @dataProvider status_display_args_with_statusextras_data_provider + * @covers \quiz_archiver\ArchiveJob::get_status_display_args + * + * @param string $status + * @param array|null $statusextras + * @return void + * @throws \coding_exception + */ + public function test_status_display_args_with_statusextras(string $status, ?array $statusextras): void { + $res = ArchiveJob::get_status_display_args($status, $statusextras); + $this->assertSame( + get_string('job_status_'.$status, 'quiz_archiver'), + $res['text'], + 'Status display args were not returned correctly for status: '.$status + ); + $this->assertNotEmpty( + $res['color'], + 'Status display args did not contain a color for status: '.$status + ); + $this->assertSame( + $statusextras ?? [], + $res['statusextras'], + 'Status display args did not contain expected statusextras' + ); + } + + /** + * Data provider for test_status_display_args_with_statusextras + * + * @return array[] Test data + */ + public static function status_display_args_with_statusextras_data_provider(): array { + return [ + 'No statusextras' => [ + 'status' => ArchiveJob::STATUS_AWAITING_PROCESSING, + 'statusextras' => null, + ], + 'Simple progress' => [ + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => ['progress' => 42], + ], + 'Complex data' => [ + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => ['progress' => 100, 'foo' => 'bar'], + ], + 'Nested data' => [ + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => ['progress' => 0, 'nested' => ['foo' => 'bar']], + ], + ]; + } + } diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 39ce7d4..5bfc360 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -309,4 +309,139 @@ public static function job_status_data_provider(): array { ]; } + /** + * Verifies that statusextras are decoded and stored correctly and that + * invalid JSON is properly rejected + * + * @dataProvider statusextras_data_provider + * @covers \quiz_archiver\external\update_job_status::execute + * + * @param string $jobid + * @param string $status + * @param string|null $statusextras + * @param bool $shouldfail + * @return void + * @throws \coding_exception + * @throws \invalid_parameter_exception + * @throws \required_capability_exception + */ + public function test_statusextras(string $jobid, string $status, ?string $statusextras, bool $shouldfail) { + // Gain privileges. + $this->setAdminUser(); + $_GET['wstoken'] = 'TEST-WS-TOKEN'; + + // Create mock quiz and job. + $mocks = $this->generate_mock_quiz(); + $job = ArchiveJob::create( + '00000000-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN', + [], + [], + ArchiveJob::STATUS_UNINITIALIZED + ); + + // Perform status update. + $result = update_job_status::execute($jobid, $status, $statusextras); + + if ($shouldfail) { + $this->assertSame( + ['status' => 'E_INVALID_STATUSEXTRAS_JSON'], + $result, + 'Invalid statusextras was accepted' + ); + } else { + $this->assertSame( + ['status' => 'OK'], + $result, + 'Valid statusextras was rejected' + ); + $this->assertSame( + $status, + $job->get_status(), + 'Job status was not updated correctly' + ); + if ($statusextras) { + $this->assertSame( + json_decode($statusextras, true), + $job->get_statusextras(), + 'Populated statusextras were not updated correctly' + ); + } else { + $this->assertNull( + $job->get_statusextras(), + 'Empty statusextras were not updated correctly' + ); + } + } + } + + /** + * Data provider for test_statusextras + * + * @return array[] Test data + */ + public static function statusextras_data_provider(): array { + return [ + 'No JSON' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_FINALIZING, + 'statusextras' => null, + 'shouldfail' => false, + ], + 'Valid JSON 1' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => '{"foo": "bar"}', + 'shouldfail' => false, + ], + 'Valid JSON 2' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_RUNNING, + 'statusextras' => '{"foo": "bar", "baz": []}', + 'shouldfail' => false, + ], + 'Invalid JSON 1' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_UNKNOWN, + 'statusextras' => '{"foo": "bar"', + 'shouldfail' => true, + ], + 'Invalid JSON 2' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_UNKNOWN, + 'statusextras' => '{"foo": "bar",}', + 'shouldfail' => true, + ], + 'Invalid JSON 3' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_UNKNOWN, + 'statusextras' => '{"foo": "bar", "baz":}', + 'shouldfail' => true, + ], + 'Invalid JSON 4' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_UNKNOWN, + 'statusextras' => '{"foo": "bar", "baz": []', + 'shouldfail' => true, + ], + 'Invalid JSON 5' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_UNKNOWN, + 'statusextras' => '"foo": "bar", "baz": {}', + 'shouldfail' => true, + ], + 'Invalid JSON 6' => [ + 'jobid' => '00000000-1234-5678-abcd-ef4242424242', + 'status' => ArchiveJob::STATUS_UNKNOWN, + 'statusextras' => '{"foo":', + 'shouldfail' => true, + ], + ]; + } + } From 3c40103cc434da237010025a9317a3d5846e04da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 13:44:39 +0200 Subject: [PATCH 104/185] Prepare CHANGELOG --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1904986..9262c6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## Version X.X.X (XXXXXXXXXX) + +- Show periodically updated progress of running archive jobs in job overview table and job details modal +- Creation of new job status values: + - `WAITING_FOR_BACKUP`: All attempt reports are generated and the archive worker service + is waiting for the Moodle backup to be ready. + - `FINALIZING`: The archive worker service is finalizing the archive creation process (checksums, compression, ...). + + ## Version 1.3.0 (2024071800) - Optionally scale down large images within quiz reports to preserve space and keep PDF files compact From 28827bb5c886702c8c470bae23fac3c3b591ac38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 13:48:39 +0200 Subject: [PATCH 105/185] Bump plugin version to match database version --- version.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.php b/version.php index da9d154..1e6b601 100644 --- a/version.php +++ b/version.php @@ -26,7 +26,7 @@ $plugin->component = 'quiz_archiver'; $plugin->release = '1.3.0'; -$plugin->version = 2024071800; +$plugin->version = 2024072200; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; $plugin->maturity = MATURITY_STABLE; From 7856a7b47ed1f20da6a0064cde4862491112c7b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 13:59:20 +0200 Subject: [PATCH 106/185] Fix PHP CS missing comma in multi-line array --- classes/external/update_job_status.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index 5dce9da..9da3f91 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -60,7 +60,7 @@ public static function execute_parameters(): external_function_parameters { PARAM_RAW, 'JSON containing additional information for the new job status', VALUE_DEFAULT - ) + ), ]); } From be4d068838ae69dddb9ce3f8bdae47364099804b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 14:04:11 +0200 Subject: [PATCH 107/185] Fix missing return type for update_job_status_test::test_statusextras() --- tests/external/update_job_status_test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 5bfc360..8c99968 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -325,7 +325,7 @@ public static function job_status_data_provider(): array { * @throws \invalid_parameter_exception * @throws \required_capability_exception */ - public function test_statusextras(string $jobid, string $status, ?string $statusextras, bool $shouldfail) { + public function test_statusextras(string $jobid, string $status, ?string $statusextras, bool $shouldfail): void { // Gain privileges. $this->setAdminUser(); $_GET['wstoken'] = 'TEST-WS-TOKEN'; From f5a73be1748c61038f9a01e3913223c1fab36fc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 14:13:04 +0200 Subject: [PATCH 108/185] Create test for util class and fix duration to human readable string conversion --- classes/local/util.php | 22 ++++++-- tests/local/util_test.php | 114 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 tests/local/util_test.php diff --git a/classes/local/util.php b/classes/local/util.php index c405d92..9f4a87f 100644 --- a/classes/local/util.php +++ b/classes/local/util.php @@ -37,10 +37,20 @@ class util { public static function duration_to_human_readable(int $duration): string { // Calculate isolated time units. $years = floor($duration / YEARSECS); - $months = floor(($duration % YEARSECS) / (YEARSECS / 12)); - $days = floor(($duration % (YEARSECS / 12)) / DAYSECS); - $hours = floor(($duration % DAYSECS) / HOURSECS); - $minutes = floor(($duration % HOURSECS) / MINSECS); + $duration -= $years * YEARSECS; + + $months = floor($duration / (YEARSECS / 12)); + $duration -= $months * (YEARSECS / 12); + + $days = floor($duration / DAYSECS); + $duration -= $days * DAYSECS; + + $hours = floor($duration / HOURSECS); + $duration -= $hours * HOURSECS; + + $minutes = floor($duration / MINSECS); + $duration -= $minutes * MINSECS; + $seconds = floor($duration % MINSECS); // Generate human readable string. @@ -64,6 +74,10 @@ public static function duration_to_human_readable(int $duration): string { $humanreadable .= $seconds . 's '; } + if (!$humanreadable) { + $humanreadable = '0s'; + } + return trim($humanreadable); } diff --git a/tests/local/util_test.php b/tests/local/util_test.php new file mode 100644 index 0000000..24f6d96 --- /dev/null +++ b/tests/local/util_test.php @@ -0,0 +1,114 @@ +. + +/** + * Tests for the util class + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\local; + +/** + * Tests for the autoinstall class + */ +final class util_test extends \advanced_testcase { + + /** + * Tests the duration_to_human_readable util function + * + * @dataProvider duration_to_human_readable_data_provider + * @covers \quiz_archiver\local\util::duration_to_human_readable + * + * @param int $duration + * @param string $expected + * @return void + */ + public function test_duration_to_human_readable(int $duration, string $expected): void { + $this->assertEquals($expected, util::duration_to_human_readable($duration)); + } + + /** + * Data provider for test_duration_to_human_readable + * + * @return array[] Test data + */ + public static function duration_to_human_readable_data_provider(): array { + return [ + '0 seconds' => [0, '0s'], + '1 second' => [1, '1s'], + '59 seconds' => [59, '59s'], + '1 minute' => [MINSECS, '1m'], + '1 minute 1 second' => [MINSECS + 1, '1m 1s'], + '1 minute 59 seconds' => [MINSECS + 59, '1m 59s'], + '2 minutes' => [2 * MINSECS, '2m'], + '59 minutes 59 seconds' => [HOURSECS - 1, '59m 59s'], + '1 hour' => [HOURSECS, '1h'], + '1 hour 1 second' => [HOURSECS + 1, '1h 1s'], + '1 hour 1 minute' => [HOURSECS + MINSECS, '1h 1m'], + '1 hour 1 minute 1 second' => [HOURSECS + MINSECS + 1, '1h 1m 1s'], + '23 hours' => [23 * HOURSECS, '23h'], + '23 hours 59 minutes 59 seconds' => [DAYSECS - 1, '23h 59m 59s'], + '1 day' => [DAYSECS, '1d'], + '10 days' => [10 * DAYSECS, '10d'], + '1 month' => [YEARSECS / 12, '1m'], + '1 year' => [YEARSECS, '1y'], + '1 year 4 months 2 days 13 hours 37 minutes' => [ + YEARSECS + 4 * (YEARSECS / 12) + 2 * DAYSECS + 13 * HOURSECS + 37 * MINSECS, + '1y 4m 2d 13h 37m', + ], + ]; + } + + /** + * Tests the duration_to_unit util function + * + * @dataProvider duration_to_unit_data_provider + * @covers \quiz_archiver\local\util::duration_to_unit + * + * @param int $duration + * @param int $expectedvalue + * @param string $expectedunit + * @return void + * @throws \coding_exception + */ + public function test_duration_to_unit(int $duration, int $expectedvalue, string $expectedunit): void { + $this->assertEquals( + [$expectedvalue, get_string($expectedunit)], + util::duration_to_unit($duration) + ); + } + + /** + * Data provider for test_duration_to_unit + * + * @return array[] Test data + */ + public static function duration_to_unit_data_provider(): array { + return [ + '1 week' => [WEEKSECS, 1, 'weeks'], + '1 day' => [DAYSECS, 1, 'days'], + '1 hour' => [HOURSECS, 1, 'hours'], + '1 minute' => [MINSECS, 1, 'minutes'], + '1 second' => [1, 1, 'seconds'], + '61 seconds' => [61, 61, 'seconds'], + '42 hours' => [42 * HOURSECS, 42, 'hours'], + ]; + } + +} From e6a0307718b28a056bc458505d3058a4eb08cbf0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 14:13:45 +0200 Subject: [PATCH 109/185] Fix and extend unit test coverage PHPDoc metadata --- tests/archivejob_test.php | 88 ++++++++++++++++++- tests/backupmanager_test.php | 11 +++ .../external/generate_attempt_report_test.php | 3 + tests/external/get_attempts_metadata_test.php | 3 + tests/external/get_backup_status_test.php | 3 + .../process_uploaded_artifact_test.php | 3 + tests/external/update_job_status_test.php | 3 + tests/filemanager_test.php | 3 + tests/report_test.php | 8 +- tests/timestampprotocolclient_test.php | 2 + 10 files changed, 123 insertions(+), 4 deletions(-) diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index 7c64a59..51ac8ef 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -155,6 +155,52 @@ public function test_create_archive_job(): void { ); } + /** + * Tests the retrieval of an archive job by its internal database ID + * + * @dataProvider job_get_by_id_data_provider + * @covers \quiz_archiver\ArchiveJob::get_id + * @covers \quiz_archiver\ArchiveJob::get_by_id + * + * @param bool $shouldfail Whether the test should fail + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_job_get_by_id(bool $shouldfail): void { + $mocks = $this->generate_mock_quiz(); + $job = ArchiveJob::create( + '10000000-1234-5678-abcd-ef4242123456', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + $jobid = $job->get_id(); + + if ($shouldfail) { + $this->expectException(\dml_exception::class); + $jobid += 100000; + } + $this->assertEquals($job, ArchiveJob::get_by_id($jobid)); + } + + /** + * Data provider for test_job_get_by_id + * + * @return array Test data + */ + public static function job_get_by_id_data_provider(): array { + return [ + 'Existing Job' => ['shouldfail' => false], + 'Non-Existing Job' => ['shouldfail' => true], + ]; + } + /** * Test the deletion of an archive job * @@ -481,6 +527,7 @@ public static function set_job_status_with_statusextras_data_provider(): array { * Test webservice token access checks * * @covers \quiz_archiver\ArchiveJob::has_write_access + * @covers \quiz_archiver\ArchiveJob::has_read_access * * @return void * @throws \dml_exception @@ -516,7 +563,12 @@ public function test_wstoken_access_checks(): void { $this->assertSame( $wstoken === $otherwstoken, $job->has_write_access($otherwstoken), - 'Webservice token access was not validated correctly' + 'Webservice token access was not validated correctly (write access)' + ); + $this->assertSame( + $wstoken === $otherwstoken, + $job->has_read_access($otherwstoken), + 'Webservice token access was not validated correctly (read access)' ); } } @@ -867,6 +919,7 @@ public function test_temporary_file_deletion(): void { * Test archive filename pattern validation * * @covers \quiz_archiver\ArchiveJob::is_valid_archive_filename_pattern + * @covers \quiz_archiver\ArchiveJob::is_valid_filename_pattern * * @dataProvider archive_filename_pattern_data_provider * @@ -934,6 +987,7 @@ function ($carry, $item) { * Test attempt filename pattern validation * * @covers \quiz_archiver\ArchiveJob::is_valid_attempt_filename_pattern + * @covers \quiz_archiver\ArchiveJob::is_valid_filename_pattern * * @dataProvider attempt_filename_pattern_data_provider * @@ -1201,4 +1255,36 @@ public static function status_display_args_with_statusextras_data_provider(): ar ]; } + /** + * Tests the retrieval of a TSPManager instance via an ArchiveJob + * + * @covers \quiz_archiver\ArchiveJob::tspmanager + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_tspmanager_get_instance(): void { + // Generate data. + $mocks = $this->generate_mock_quiz(); + $job = ArchiveJob::create( + 'asn00000-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN', + $mocks->attempts, + $mocks->settings + ); + + // Test TSPManager creation. + $this->assertInstanceOf( + TSPManager::class, + $job->tspmanager(), + 'ArchiveJob::tspmanager() did not return an instance of TSPManager' + ); + } + } diff --git a/tests/backupmanager_test.php b/tests/backupmanager_test.php index 1d85ff3..d749d6a 100644 --- a/tests/backupmanager_test.php +++ b/tests/backupmanager_test.php @@ -83,6 +83,7 @@ protected function generate_mock_quiz(): \stdClass { * Tests the backup of a course * * @covers \quiz_archiver\BackupManager::initiate_course_backup + * @covers \quiz_archiver\BackupManager::initiate_backup * * @return void * @throws \base_setting_exception @@ -113,6 +114,7 @@ public function test_course_backup(): void { * Tests the backup of a quiz * * @covers \quiz_archiver\BackupManager::initiate_quiz_backup + * @covers \quiz_archiver\BackupManager::initiate_backup * * @return void * @throws \base_setting_exception @@ -143,6 +145,7 @@ public function test_quiz_backup(): void { * Tests the backup of a non-existing course * * @covers \quiz_archiver\BackupManager::initiate_course_backup + * @covers \quiz_archiver\BackupManager::initiate_backup * * @return void * @throws \base_setting_exception @@ -161,6 +164,7 @@ public function test_backup_missing_course(): void { * Tests the backup of a non-existing quiz * * @covers \quiz_archiver\BackupManager::initiate_quiz_backup + * @covers \quiz_archiver\BackupManager::initiate_backup * * @return void * @throws \base_setting_exception @@ -179,6 +183,7 @@ public function test_backup_missing_quiz(): void { * Tests backing up a course without the required privileges * * @covers \quiz_archiver\BackupManager::initiate_course_backup + * @covers \quiz_archiver\BackupManager::initiate_backup * * @return void * @throws \base_setting_exception @@ -197,6 +202,7 @@ public function test_backup_course_without_privileges(): void { * Tests backing up a quiz without the required privileges * * @covers \quiz_archiver\BackupManager::initiate_quiz_backup + * @covers \quiz_archiver\BackupManager::initiate_backup * * @return void * @throws \base_setting_exception @@ -215,6 +221,7 @@ public function test_backup_quiz_without_privileges(): void { * Tests the download URL generation with an explicitly given internal_wwwroot * * @covers \quiz_archiver\BackupManager::initiate_course_backup + * @covers \quiz_archiver\BackupManager::initiate_backup * * @return void * @throws \base_setting_exception @@ -239,6 +246,9 @@ public function test_backup_download_url_generation_with_internal_wwwroot(): voi * Tests BackupManager instantiation by backupid * * @covers \quiz_archiver\BackupManager::__construct + * @covers \quiz_archiver\BackupManager::get_backupid + * @covers \quiz_archiver\BackupManager::get_userid + * @covers \quiz_archiver\BackupManager::get_type * * @return void * @throws \base_setting_exception @@ -286,6 +296,7 @@ public function test_initialization_by_non_existing_backupid(): void { /** * Tests access to backup status values * + * @covers \quiz_archiver\BackupManager::get_status * @covers \quiz_archiver\BackupManager::is_finished_successfully * @covers \quiz_archiver\BackupManager::is_failed * @covers \quiz_archiver\BackupManager::get_type diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index 63deb7d..7af4e87 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -110,6 +110,9 @@ public function test_capability_requirement(): void { * * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\generate_attempt_report::execute + * @covers \quiz_archiver\external\generate_attempt_report::validate_parameters + * @covers \quiz_archiver\external\generate_attempt_report::execute_parameters + * @covers \quiz_archiver\external\generate_attempt_report::execute_returns * * @param int $courseid Course ID * @param int $cmid Course module ID diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index 9329544..a00220e 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -100,6 +100,9 @@ public function test_capability_requirement(): void { * * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\get_attempts_metadata::execute + * @covers \quiz_archiver\external\get_attempts_metadata::validate_parameters + * @covers \quiz_archiver\external\get_attempts_metadata::execute_parameters + * @covers \quiz_archiver\external\get_attempts_metadata::execute_returns * * @param int $courseid Course ID * @param int $cmid Course module ID diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index dedf3f0..52e6261 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -95,6 +95,9 @@ public function test_capability_requirement(): void { * * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\get_backup_status::execute + * @covers \quiz_archiver\external\get_backup_status::validate_parameters + * @covers \quiz_archiver\external\get_backup_status::execute_parameters + * @covers \quiz_archiver\external\get_backup_status::execute_returns * * @param string $jobid Job ID * @param string $backupid Backup ID diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 1c4560f..9e3d262 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -129,6 +129,9 @@ public function test_capability_requirement(): void { * * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\process_uploaded_artifact::execute + * @covers \quiz_archiver\external\process_uploaded_artifact::validate_parameters + * @covers \quiz_archiver\external\process_uploaded_artifact::execute_parameters + * @covers \quiz_archiver\external\process_uploaded_artifact::execute_returns * * @param string $jobid Job ID * @param string $artifactcomponent Component name diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 8c99968..9e87c70 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -140,6 +140,9 @@ public function test_wstoken_validation(): void { * * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\update_job_status::execute + * @covers \quiz_archiver\external\update_job_status::validate_parameters + * @covers \quiz_archiver\external\update_job_status::execute_parameters + * @covers \quiz_archiver\external\update_job_status::execute_returns * * @param string $jobid Raw jobid parameter * @param string $status Raw status parameter diff --git a/tests/filemanager_test.php b/tests/filemanager_test.php index 38a4099..9688eee 100644 --- a/tests/filemanager_test.php +++ b/tests/filemanager_test.php @@ -224,6 +224,7 @@ public static function file_path_generator_data_provider(): array { * @covers \quiz_archiver\FileManager::__construct * @covers \quiz_archiver\FileManager::store_uploaded_artifact * @covers \quiz_archiver\FileManager::get_stored_artifacts + * @covers \quiz_archiver\FileManager::get_own_file_path * * @return void * @throws \coding_exception @@ -305,6 +306,8 @@ public function test_hash_file_invalid_algorithm(): void { * * @runInSeparateProcess * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception diff --git a/tests/report_test.php b/tests/report_test.php index 89125ae..afd7032 100644 --- a/tests/report_test.php +++ b/tests/report_test.php @@ -162,7 +162,7 @@ protected static function get_formdata_all_reports_sections_enabled(): object { /** * Tests validation of webservice tokens * - * @covers \quiz_archiver\quiz_archiverReport::has_access + * @covers \quiz_archiver\Report::has_access * * @return void * @throws \dml_exception @@ -197,7 +197,7 @@ public function test_webservice_token_access_validation(): void { /** * Test generation of a full attempt report with all sections * - * @covers \quiz_archiver\quiz_archiverReport::generate + * @covers \quiz_archiver\Report::generate * * @return void * @throws \DOMException @@ -280,6 +280,8 @@ public function test_generate_full_report(): void { * Tests generation of a full page report with all sections * * @covers \quiz_archiver\Report::generate_full_page + * @covers \quiz_archiver\Report::convert_image_to_base64 + * @covers \quiz_archiver\Report::ensure_absolute_url * * @return void * @throws \DOMException @@ -682,7 +684,7 @@ public function test_get_users_with_attempts(): void { /** * Tests to retrieve the latest attemptid of a user * - * @covers \quiz_archiver\Report::get_latest_attemptid_for_user + * @covers \quiz_archiver\Report::get_latest_attempt_for_user * * @return void * @throws \dml_exception diff --git a/tests/timestampprotocolclient_test.php b/tests/timestampprotocolclient_test.php index b07520c..52e92ac 100644 --- a/tests/timestampprotocolclient_test.php +++ b/tests/timestampprotocolclient_test.php @@ -33,6 +33,7 @@ final class timestampprotocolclient_test extends \advanced_testcase { * Tests the creation of a TimeStampProtocolClient instance * * @covers \quiz_archiver\TimeStampProtocolClient::__construct + * @covers \quiz_archiver\TimeStampProtocolClient::get_serverurl * * @return void */ @@ -68,6 +69,7 @@ public function test_generate_nonce(): void { * Tests the generation of a TSP request from valid data * * @covers \quiz_archiver\TimeStampProtocolClient::sign + * @covers \quiz_archiver\TimeStampProtocolClient::create_timestamp_request * * @return void * @throws \coding_exception From e39985662a507cbc23229a1cd6222219f0a1567a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 16:41:14 +0200 Subject: [PATCH 110/185] Further extend coverage information for some tests based on calls to protected functions --- tests/archivejob_test.php | 6 ++++++ tests/filemanager_test.php | 16 ++++++++++++++++ tests/report_test.php | 1 + 3 files changed, 23 insertions(+) diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index 51ac8ef..e0ae9b5 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -114,6 +114,7 @@ protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, * Tests the creation of a new archive job * * @covers \quiz_archiver\ArchiveJob::create + * @covers \quiz_archiver\ArchiveJob::__construct * @covers \quiz_archiver\ArchiveJob::get_by_jobid * * @throws \dml_exception @@ -268,6 +269,7 @@ public function test_delete_archive_job(): void { * @covers \quiz_archiver\ArchiveJob::get_retentiontime * @covers \quiz_archiver\ArchiveJob::is_autodelete_enabled * @covers \quiz_archiver\ArchiveJob::get_settings + * @covers \quiz_archiver\ArchiveJob::convert_archive_settings_for_display * * @return void * @throws \coding_exception @@ -1055,6 +1057,7 @@ function ($carry, $item) { * Test generation of valid archive filenames * * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * @covers \quiz_archiver\ArchiveJob::sanitize_filename * * @return void * @throws \coding_exception @@ -1088,6 +1091,7 @@ public function test_generate_archive_filename(): void { * Test generation of archive filenames without variables * * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * @covers \quiz_archiver\ArchiveJob::sanitize_filename * * @return void * @throws \coding_exception @@ -1112,6 +1116,7 @@ public function test_generate_archive_filename_without_variables(): void { * Test generation of archive filenames with invalid patterns * * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * @covers \quiz_archiver\ArchiveJob::sanitize_filename * * @return void * @throws \coding_exception @@ -1136,6 +1141,7 @@ public function test_generate_archive_filename_invalid_pattern(): void { * Test generation of archive filenames with invalid variables * * @covers \quiz_archiver\ArchiveJob::generate_archive_filename + * @covers \quiz_archiver\ArchiveJob::sanitize_filename * * @return void * @throws \coding_exception diff --git a/tests/filemanager_test.php b/tests/filemanager_test.php index 9688eee..7859cf5 100644 --- a/tests/filemanager_test.php +++ b/tests/filemanager_test.php @@ -357,6 +357,8 @@ public function test_send_virtual_file_tsp_query(): void { * * @runInSeparateProcess * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception @@ -406,6 +408,8 @@ public function test_send_virtual_file_tsp_reply(): void { * the information of the respective job. * * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception @@ -440,6 +444,8 @@ public function test_send_virtual_files_tsp_invalid_job(): void { * Tests sending a virtual TSP file for a job that has no TSP data. * * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception @@ -474,6 +480,8 @@ public function test_send_virtual_files_tsp_unsigned_job(): void { * Tests sending virtual file from invalid filearea. * * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception @@ -491,6 +499,8 @@ public function test_send_virtual_files_invalid_filearea(): void { * Tests sending virtual file from invalid path. * * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception @@ -508,6 +518,8 @@ public function test_send_virtual_files_invalid_path(): void { * Tests sending virtual file with invalid jobid. * * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception @@ -529,6 +541,8 @@ public function test_send_virtual_files_invalid_jobid(): void { * Tests sending virtual file for non-existing job. * * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception @@ -550,6 +564,8 @@ public function test_send_virtual_files_missing_job(): void { * Tests sending virtual file with invalid filename. * * @covers \quiz_archiver\FileManager::send_virtual_file + * @covers \quiz_archiver\FileManager::send_virtual_file_tsp + * @covers \quiz_archiver\FileManager::filearea_is_virtual * * @return void * @throws \dml_exception diff --git a/tests/report_test.php b/tests/report_test.php index afd7032..88a24a9 100644 --- a/tests/report_test.php +++ b/tests/report_test.php @@ -197,6 +197,7 @@ public function test_webservice_token_access_validation(): void { /** * Test generation of a full attempt report with all sections * + * @covers \quiz_archiver\Report::__construct * @covers \quiz_archiver\Report::generate * * @return void From 740bb6e76586124f362a575ed613622e70b0cbde Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 16:41:51 +0200 Subject: [PATCH 111/185] Make unit tests for external services cover parameter definitions --- .../external/generate_attempt_report_test.php | 33 +++++++++++++++++-- tests/external/get_attempts_metadata_test.php | 33 +++++++++++++++++-- tests/external/get_backup_status_test.php | 32 ++++++++++++++++-- .../process_uploaded_artifact_test.php | 33 +++++++++++++++++-- tests/external/update_job_status_test.php | 33 +++++++++++++++++-- 5 files changed, 154 insertions(+), 10 deletions(-) diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index 7af4e87..9c27755 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -77,6 +77,37 @@ protected function generate_valid_request(int $courseid, int $cmid, int $quizid, ]; } + /** + * Tests that the parameter spec is specified correctly and produces no exception. + * + * @covers \quiz_archiver\external\generate_attempt_report::execute_parameters + * + * @return void + */ + public function test_assure_execute_parameter_spec(): void { + $this->resetAfterTest(); + $this->assertInstanceOf( + \core_external\external_function_parameters::class, + generate_attempt_report::execute_parameters(), + 'The execute_parameters() method should return an external_function_parameters.' + ); + } + + /** + * Tests that the return parameters are specified correctly and produce no exception. + * + * @covers \quiz_archiver\external\generate_attempt_report::execute_returns + * + * @return void + */ + public function test_assure_return_parameter_spec(): void { + $this->assertInstanceOf( + \core_external\external_description::class, + generate_attempt_report::execute_returns(), + 'The execute_returns() method should return an external_description.' + ); + } + /** * Test that users without the required capabilities are rejected * @@ -111,8 +142,6 @@ public function test_capability_requirement(): void { * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\generate_attempt_report::execute * @covers \quiz_archiver\external\generate_attempt_report::validate_parameters - * @covers \quiz_archiver\external\generate_attempt_report::execute_parameters - * @covers \quiz_archiver\external\generate_attempt_report::execute_returns * * @param int $courseid Course ID * @param int $cmid Course module ID diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index a00220e..e95707c 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -71,6 +71,37 @@ protected function generate_valid_request(int $courseid, int $cmid, int $quizid) ]; } + /** + * Tests that the parameter spec is specified correctly and produces no exception. + * + * @covers \quiz_archiver\external\get_attempts_metadata::execute_parameters + * + * @return void + */ + public function test_assure_execute_parameter_spec(): void { + $this->resetAfterTest(); + $this->assertInstanceOf( + \core_external\external_function_parameters::class, + get_attempts_metadata::execute_parameters(), + 'The execute_parameters() method should return an external_function_parameters.' + ); + } + + /** + * Tests that the return parameters are specified correctly and produce no exception. + * + * @covers \quiz_archiver\external\get_attempts_metadata::execute_returns + * + * @return void + */ + public function test_assure_return_parameter_spec(): void { + $this->assertInstanceOf( + \core_external\external_description::class, + get_attempts_metadata::execute_returns(), + 'The execute_returns() method should return an external_description.' + ); + } + /** * Test that users without the required capabilities are rejected * @@ -101,8 +132,6 @@ public function test_capability_requirement(): void { * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\get_attempts_metadata::execute * @covers \quiz_archiver\external\get_attempts_metadata::validate_parameters - * @covers \quiz_archiver\external\get_attempts_metadata::execute_parameters - * @covers \quiz_archiver\external\get_attempts_metadata::execute_returns * * @param int $courseid Course ID * @param int $cmid Course module ID diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index 52e6261..4ad3d4d 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -89,6 +89,36 @@ public function test_capability_requirement(): void { get_backup_status::execute($job->get_jobid(), 'f1d2d2f924e986ac86fdf7b36c94bcdf32beec15'); } + /** + * Tests that the parameter spec is specified correctly and produces no exception. + * + * @covers \quiz_archiver\external\get_backup_status::execute_parameters + * + * @return void + */ + public function test_assure_execute_parameter_spec(): void { + $this->resetAfterTest(); + $this->assertInstanceOf( + \core_external\external_function_parameters::class, + get_backup_status::execute_parameters(), + 'The execute_parameters() method should return an external_function_parameters.' + ); + } + + /** + * Tests that the return parameters are specified correctly and produce no exception. + * + * @covers \quiz_archiver\external\get_backup_status::execute_returns + * + * @return void + */ + public function test_assure_return_parameter_spec(): void { + $this->assertInstanceOf( + \core_external\external_description::class, + get_backup_status::execute_returns(), + 'The execute_returns() method should return an external_description.' + ); + } /** * Verifies webservice parameter validation @@ -96,8 +126,6 @@ public function test_capability_requirement(): void { * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\get_backup_status::execute * @covers \quiz_archiver\external\get_backup_status::validate_parameters - * @covers \quiz_archiver\external\get_backup_status::execute_parameters - * @covers \quiz_archiver\external\get_backup_status::execute_returns * * @param string $jobid Job ID * @param string $backupid Backup ID diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 9e3d262..71c1853 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -80,6 +80,37 @@ protected function generate_valid_request(string $jobid, int $cmid, int $userid) ]; } + /** + * Tests that the parameter spec is specified correctly and produces no exception. + * + * @covers \quiz_archiver\external\process_uploaded_artifact::execute_parameters + * + * @return void + */ + public function test_assure_execute_parameter_spec(): void { + $this->resetAfterTest(); + $this->assertInstanceOf( + \core_external\external_function_parameters::class, + process_uploaded_artifact::execute_parameters(), + 'The execute_parameters() method should return an external_function_parameters.' + ); + } + + /** + * Tests that the return parameters are specified correctly and produce no exception. + * + * @covers \quiz_archiver\external\process_uploaded_artifact::execute_returns + * + * @return void + */ + public function test_assure_return_parameter_spec(): void { + $this->assertInstanceOf( + \core_external\external_description::class, + process_uploaded_artifact::execute_returns(), + 'The execute_returns() method should return an external_description.' + ); + } + /** * Test that users without the required capabilities are rejected * @@ -130,8 +161,6 @@ public function test_capability_requirement(): void { * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\process_uploaded_artifact::execute * @covers \quiz_archiver\external\process_uploaded_artifact::validate_parameters - * @covers \quiz_archiver\external\process_uploaded_artifact::execute_parameters - * @covers \quiz_archiver\external\process_uploaded_artifact::execute_returns * * @param string $jobid Job ID * @param string $artifactcomponent Component name diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 9e87c70..6f027ec 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -57,6 +57,37 @@ protected function generate_mock_quiz(): \stdClass { ]; } + /** + * Tests that the parameter spec is specified correctly and produces no exception. + * + * @covers \quiz_archiver\external\update_job_status::execute_parameters + * + * @return void + */ + public function test_assure_execute_parameter_spec(): void { + $this->resetAfterTest(); + $this->assertInstanceOf( + \core_external\external_function_parameters::class, + update_job_status::execute_parameters(), + 'The execute_parameters() method should return an external_function_parameters.' + ); + } + + /** + * Tests that the return parameters are specified correctly and produce no exception. + * + * @covers \quiz_archiver\external\update_job_status::execute_returns + * + * @return void + */ + public function test_assure_return_parameter_spec(): void { + $this->assertInstanceOf( + \core_external\external_description::class, + update_job_status::execute_returns(), + 'The execute_returns() method should return an external_description.' + ); + } + /** * Test that users without the required capabilities are rejected * @@ -141,8 +172,6 @@ public function test_wstoken_validation(): void { * @dataProvider parameter_data_provider * @covers \quiz_archiver\external\update_job_status::execute * @covers \quiz_archiver\external\update_job_status::validate_parameters - * @covers \quiz_archiver\external\update_job_status::execute_parameters - * @covers \quiz_archiver\external\update_job_status::execute_returns * * @param string $jobid Raw jobid parameter * @param string $status Raw status parameter From 11ac297e0296e0b4f73fc53429abf2e5fb0cd84e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 16:42:16 +0200 Subject: [PATCH 112/185] Test error during creation of a job with an already existing UUID --- tests/archivejob_test.php | 45 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index e0ae9b5..daa6419 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -202,6 +202,51 @@ public static function job_get_by_id_data_provider(): array { ]; } + /** + * Tests the duplicate UUID detection during job creation + * + * @covers \quiz_archiver\ArchiveJob::create + * @covers \quiz_archiver\ArchiveJob::get_by_jobid + * @covers \quiz_archiver\ArchiveJob::exists_in_db + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_create_job_duplicate_detection(): void { + // Create mock job. + $mocks = $this->generate_mock_quiz(); + $jobid = '10000000-dupe-dupe-dupe-ef1234567890'; + $job = ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Assert that job was created. + $this->assertNotNull(ArchiveJob::get_by_jobid($jobid), 'Job was not created'); + + // Try to create second job with same UUID + $this->expectException(\moodle_exception::class); + $jobduplicate = ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + } + /** * Test the deletion of an archive job * From cf88d544eb11b3d6a37c919dd6599daac342bf48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 16:42:43 +0200 Subject: [PATCH 113/185] Test retrieval of draft files via the FileManager --- tests/filemanager_test.php | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/tests/filemanager_test.php b/tests/filemanager_test.php index 7859cf5..0ffc08f 100644 --- a/tests/filemanager_test.php +++ b/tests/filemanager_test.php @@ -268,6 +268,45 @@ public function test_artifact_storing_invalid_file(): void { $fm->store_uploaded_artifact($invalidfile); } + /** + * Test retrieval of draft files from the file storage + * + * @covers \quiz_archiver\FileManager::get_draft_file + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_get_draft_file(): void { + // Prepare mocks. + $mocks = $this->generate_mock_quiz(); + $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $draftfile = $this->generate_draft_file('testfile.tar.gz'); + + // Retrieve valid draftfile. + $this->assertEquals( + $draftfile->get_id(), + $fm->get_draft_file( + $draftfile->get_contextid(), + $draftfile->get_itemid(), + $draftfile->get_filepath(), + $draftfile->get_filename() + )->get_id(), + 'Draft file was not returned correctly' + ); + + // Retrieve invalid draftfile. + $this->assertNull( + $fm->get_draft_file( + $draftfile->get_contextid(), + $draftfile->get_itemid(), + $draftfile->get_filepath(), + 'invalidfile.tar.gz' + ), + 'A draft file that should not exist was returned' + ); + } + /** * Tests the hash generation for a valid stored_file * From a34aed69ff4418b330e381383f6aea63b7afbcb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 17:02:08 +0200 Subject: [PATCH 114/185] Exclude purely frontend related code and code that is unreachable by unit tests from coverage checks --- classes/ArchiveJob.php | 3 ++- classes/BackupManager.php | 5 +++-- classes/FileManager.php | 3 ++- classes/RemoteArchiveWorker.php | 4 +++- classes/Report.php | 5 +++-- classes/TSPManager.php | 3 ++- classes/TimeStampProtocolClient.php | 3 ++- classes/external/generate_attempt_report.php | 5 +++-- classes/external/get_attempts_metadata.php | 5 +++-- classes/external/get_backup_status.php | 5 +++-- classes/external/process_uploaded_artifact.php | 5 +++-- classes/external/update_job_status.php | 5 +++-- classes/form/archive_quiz_form.php | 3 ++- classes/form/artifact_delete_form.php | 3 ++- classes/form/autoinstall_form.php | 3 ++- classes/form/job_delete_form.php | 3 ++- classes/form/job_sign_form.php | 3 ++- .../admin/setting/admin_setting_archive_filename_pattern.php | 5 ++++- .../admin/setting/admin_setting_attempt_filename_pattern.php | 5 ++++- .../setting/admin_setting_configcheckbox_alwaystrue.php | 5 ++++- classes/local/autoinstall.php | 5 ++++- classes/local/util.php | 3 ++- classes/output/job_overview_table.php | 3 ++- classes/privacy/provider.php | 5 ++++- classes/task/autodelete_job_artifacts.php | 5 ++++- classes/task/cleanup_temp_files.php | 5 ++++- db/access.php | 3 ++- db/install.php | 3 ++- db/services.php | 3 ++- db/tasks.php | 3 ++- db/uninstall.php | 3 ++- db/upgrade.php | 3 ++- lib.php | 3 ++- patch_401_class_renames.php | 3 ++- report.php | 5 +++-- settings.php | 3 ++- version.php | 3 ++- 37 files changed, 97 insertions(+), 45 deletions(-) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index 6365a29..2b7337d 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -27,7 +27,8 @@ use quiz_archiver\local\util; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** diff --git a/classes/BackupManager.php b/classes/BackupManager.php index 06ef06b..8b67e18 100644 --- a/classes/BackupManager.php +++ b/classes/BackupManager.php @@ -30,9 +30,10 @@ use context_module; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore -require_once($CFG->dirroot.'/backup/util/includes/backup_includes.php'); + +require_once($CFG->dirroot.'/backup/util/includes/backup_includes.php'); // @codeCoverageIgnore /** * Manages everything related to backups via the Moodle Backup API diff --git a/classes/FileManager.php b/classes/FileManager.php index 7bbfe45..d8323c6 100644 --- a/classes/FileManager.php +++ b/classes/FileManager.php @@ -28,7 +28,8 @@ use stored_file; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Manages everything related to file handling via the Moodle File API. diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index b02ee47..5a478d8 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -27,7 +27,7 @@ use curl; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore /** @@ -126,6 +126,7 @@ public function enqueue_archive_job( $data = json_decode($result); // Handle errors. + // @codeCoverageIgnoreStart if ($httpstatus != 200) { if ($data === null) { throw new \UnexpectedValueException("Decoding of the archive worker response failed. HTTP status code $httpstatus"); @@ -139,6 +140,7 @@ public function enqueue_archive_job( // Decoded JSON data containing jobid and job_status returned on success. return $data; + // @codeCoverageIgnoreEnd } } diff --git a/classes/Report.php b/classes/Report.php index 60a2a0c..802eeb3 100644 --- a/classes/Report.php +++ b/classes/Report.php @@ -28,9 +28,10 @@ use mod_quiz\quiz_attempt; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore -require_once("$CFG->dirroot/mod/quiz/locallib.php"); // Required for legacy mod_quiz functions ... +// Required for legacy mod_quiz functions ... +require_once("$CFG->dirroot/mod/quiz/locallib.php"); // @codeCoverageIgnore /** diff --git a/classes/TSPManager.php b/classes/TSPManager.php index 79ecd5f..fbbeb9f 100644 --- a/classes/TSPManager.php +++ b/classes/TSPManager.php @@ -25,7 +25,8 @@ namespace quiz_archiver; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Manages all Time-Stamp Protocol (TSP) related tasks for an ArchiveJob. diff --git a/classes/TimeStampProtocolClient.php b/classes/TimeStampProtocolClient.php index 1e999a3..35ba788 100644 --- a/classes/TimeStampProtocolClient.php +++ b/classes/TimeStampProtocolClient.php @@ -27,7 +27,8 @@ use curl; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * A client implementation for the Time-Stamp Protocol (TSP) as defined by RFC 3161. diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index 75fc8d2..4c1f622 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -24,10 +24,11 @@ namespace quiz_archiver\external; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. -require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); +require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); // @codeCoverageIgnore use core_external\external_api; use core_external\external_function_parameters; diff --git a/classes/external/get_attempts_metadata.php b/classes/external/get_attempts_metadata.php index 909b061..c676016 100644 --- a/classes/external/get_attempts_metadata.php +++ b/classes/external/get_attempts_metadata.php @@ -24,10 +24,11 @@ namespace quiz_archiver\external; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. -require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); +require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); // @codeCoverageIgnore use core_external\external_api; use core_external\external_function_parameters; diff --git a/classes/external/get_backup_status.php b/classes/external/get_backup_status.php index 96a72ef..3d2a561 100644 --- a/classes/external/get_backup_status.php +++ b/classes/external/get_backup_status.php @@ -24,10 +24,11 @@ namespace quiz_archiver\external; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. -require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); +require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); // @codeCoverageIgnore use core_external\external_api; use core_external\external_function_parameters; diff --git a/classes/external/process_uploaded_artifact.php b/classes/external/process_uploaded_artifact.php index 8e6bf5e..444b871 100644 --- a/classes/external/process_uploaded_artifact.php +++ b/classes/external/process_uploaded_artifact.php @@ -24,10 +24,11 @@ namespace quiz_archiver\external; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. -require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); +require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); // @codeCoverageIgnore use core_external\external_api; use core_external\external_function_parameters; diff --git a/classes/external/update_job_status.php b/classes/external/update_job_status.php index 9da3f91..4b97625 100644 --- a/classes/external/update_job_status.php +++ b/classes/external/update_job_status.php @@ -24,10 +24,11 @@ namespace quiz_archiver\external; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. -require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); +require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); // @codeCoverageIgnore use core_external\external_api; use core_external\external_function_parameters; diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index af56e5a..cb730c0 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -28,7 +28,8 @@ use quiz_archiver\local\util; use quiz_archiver\Report; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + require_once($CFG->dirroot.'/lib/formslib.php'); diff --git a/classes/form/artifact_delete_form.php b/classes/form/artifact_delete_form.php index e711ce1..21151d7 100644 --- a/classes/form/artifact_delete_form.php +++ b/classes/form/artifact_delete_form.php @@ -26,7 +26,8 @@ use quiz_archiver\ArchiveJob; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + require_once($CFG->dirroot.'/lib/formslib.php'); diff --git a/classes/form/autoinstall_form.php b/classes/form/autoinstall_form.php index 85fb511..749c862 100644 --- a/classes/form/autoinstall_form.php +++ b/classes/form/autoinstall_form.php @@ -26,7 +26,8 @@ use quiz_archiver\local\autoinstall; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + require_once($CFG->dirroot.'/lib/formslib.php'); require_once($CFG->dirroot.'/mod/quiz/report/archiver/classes/local/autoinstall.php'); diff --git a/classes/form/job_delete_form.php b/classes/form/job_delete_form.php index c98e78b..0699c76 100644 --- a/classes/form/job_delete_form.php +++ b/classes/form/job_delete_form.php @@ -26,7 +26,8 @@ use quiz_archiver\ArchiveJob; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + require_once($CFG->dirroot.'/lib/formslib.php'); diff --git a/classes/form/job_sign_form.php b/classes/form/job_sign_form.php index 6ce74bf..ec0eba6 100644 --- a/classes/form/job_sign_form.php +++ b/classes/form/job_sign_form.php @@ -24,7 +24,8 @@ namespace quiz_archiver\form; -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + require_once($CFG->dirroot.'/lib/formslib.php'); diff --git a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php index 527ff6b..376c91d 100644 --- a/classes/local/admin/setting/admin_setting_archive_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_archive_filename_pattern.php @@ -19,11 +19,14 @@ use quiz_archiver\ArchiveJob; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Custom admin setting for archive filename pattern input fields * + * @codeCoverageIgnore + * * @package quiz_archiver * @copyright 2024 Niels Gandraß * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php index cec59bc..bdbf488 100644 --- a/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php +++ b/classes/local/admin/setting/admin_setting_attempt_filename_pattern.php @@ -19,11 +19,14 @@ use quiz_archiver\ArchiveJob; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Custom admin setting for attempt filename pattern input fields * + * @codeCoverageIgnore + * * @package quiz_archiver * @copyright 2024 Niels Gandraß * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php index bd9e0ba..61d0c66 100644 --- a/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php +++ b/classes/local/admin/setting/admin_setting_configcheckbox_alwaystrue.php @@ -17,11 +17,14 @@ namespace quiz_archiver\local\admin\setting; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Custom read-only admin setting checkbox that is always checked * + * @codeCoverageIgnore + * * @package quiz_archiver * @copyright 2024 Niels Gandraß * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later diff --git a/classes/local/autoinstall.php b/classes/local/autoinstall.php index 31a812c..e167f5e 100644 --- a/classes/local/autoinstall.php +++ b/classes/local/autoinstall.php @@ -17,11 +17,14 @@ namespace quiz_archiver\local; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + +// @codeCoverageIgnoreStart require_once("{$CFG->dirroot}/user/lib.php"); require_once("{$CFG->dirroot}/webservice/lib.php"); require_once("{$CFG->dirroot}/lib/adminlib.php"); +// @codeCoverageIgnoreEnd use coding_exception; use context_system; diff --git a/classes/local/util.php b/classes/local/util.php index 9f4a87f..33df3b1 100644 --- a/classes/local/util.php +++ b/classes/local/util.php @@ -17,7 +17,8 @@ namespace quiz_archiver\local; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Custom util functions diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index f67c6a5..cbe9bee 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -27,7 +27,8 @@ use quiz_archiver\ArchiveJob; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + global $CFG; require_once($CFG->libdir.'/tablelib.php'); diff --git a/classes/privacy/provider.php b/classes/privacy/provider.php index 8da8d29..4ed856d 100644 --- a/classes/privacy/provider.php +++ b/classes/privacy/provider.php @@ -35,10 +35,13 @@ use quiz_archiver\TSPManager; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Privacy provider for quiz_archiver + * + * @codeCoverageIgnore This is handled by Moodle core tests */ class provider implements \core_privacy\local\metadata\provider, diff --git a/classes/task/autodelete_job_artifacts.php b/classes/task/autodelete_job_artifacts.php index 1b0462a..793a016 100644 --- a/classes/task/autodelete_job_artifacts.php +++ b/classes/task/autodelete_job_artifacts.php @@ -27,11 +27,14 @@ use quiz_archiver\ArchiveJob; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Scheduled task to delete job artifacts that have expired their retention time. + * + * @codeCoverageIgnore This is just a wrapper for ArchiveJob::delete_expired_artifacts() */ class autodelete_job_artifacts extends \core\task\scheduled_task { diff --git a/classes/task/cleanup_temp_files.php b/classes/task/cleanup_temp_files.php index 4ee067b..d989804 100644 --- a/classes/task/cleanup_temp_files.php +++ b/classes/task/cleanup_temp_files.php @@ -27,11 +27,14 @@ use quiz_archiver\FileManager; // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Scheduled task to periodically clean up temporary files. + * + * @codeCoverageIgnore This is just a wrapper for FileManager::cleanup_temp_files() */ class cleanup_temp_files extends \core\task\scheduled_task { diff --git a/db/access.php b/db/access.php index c29892f..68e88b6 100644 --- a/db/access.php +++ b/db/access.php @@ -23,7 +23,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + $capabilities = [ // Capability to view the quiz archiver report page. diff --git a/db/install.php b/db/install.php index cb0b665..b32da53 100644 --- a/db/install.php +++ b/db/install.php @@ -24,7 +24,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Custom code to be run on installing the plugin. diff --git a/db/services.php b/db/services.php index 54c76be..3dfa4bc 100644 --- a/db/services.php +++ b/db/services.php @@ -23,7 +23,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + $functions = [ 'quiz_archiver_generate_attempt_report' => [ diff --git a/db/tasks.php b/db/tasks.php index 7a372bf..2e2d2ec 100644 --- a/db/tasks.php +++ b/db/tasks.php @@ -23,7 +23,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + $tasks = [ [ diff --git a/db/uninstall.php b/db/uninstall.php index efa7bde..29dfdb3 100644 --- a/db/uninstall.php +++ b/db/uninstall.php @@ -24,7 +24,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Custom uninstallation procedure. diff --git a/db/upgrade.php b/db/upgrade.php index b7da182..805f72d 100644 --- a/db/upgrade.php +++ b/db/upgrade.php @@ -24,7 +24,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + /** * Custom code to be run to update the plugin database. diff --git a/lib.php b/lib.php index 544821a..be610a1 100644 --- a/lib.php +++ b/lib.php @@ -23,7 +23,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + use quiz_archiver\FileManager; diff --git a/patch_401_class_renames.php b/patch_401_class_renames.php index 68c3459..97d2034 100644 --- a/patch_401_class_renames.php +++ b/patch_401_class_renames.php @@ -25,7 +25,8 @@ */ // @codingStandardsIgnoreLine -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + global $CFG; diff --git a/report.php b/report.php index 8f844cc..83528a8 100644 --- a/report.php +++ b/report.php @@ -22,10 +22,11 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + // TODO (MDL-0): Remove after deprecation of Moodle 4.1 (LTS) on 08-12-2025. -require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); +require_once($CFG->dirroot.'/mod/quiz/report/archiver/patch_401_class_renames.php'); // @codeCoverageIgnore use mod_quiz\local\reports\report_base; use quiz_archiver\ArchiveJob; diff --git a/settings.php b/settings.php index fa080bc..2ebf816 100644 --- a/settings.php +++ b/settings.php @@ -23,7 +23,8 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + require_once(__DIR__ . '/classes/local/autoinstall.php'); diff --git a/version.php b/version.php index 1e6b601..098c4e6 100644 --- a/version.php +++ b/version.php @@ -22,7 +22,8 @@ * @license https://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -defined('MOODLE_INTERNAL') || die(); +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + $plugin->component = 'quiz_archiver'; $plugin->release = '1.3.0'; From 7b0c12e61692d7bbdcf5b67c22ddfb5288e4627f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Tue, 23 Jul 2024 17:47:47 +0200 Subject: [PATCH 115/185] Create basic test for job_overview_table --- classes/output/job_overview_table.php | 8 +- tests/output/job_overview_table_test.php | 100 +++++++++++++++++++++++ 2 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 tests/output/job_overview_table_test.php diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index cbe9bee..c09a885 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -29,9 +29,10 @@ // @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore - +// @codeCoverageIgnoreStart global $CFG; require_once($CFG->libdir.'/tablelib.php'); +// @codeCoverageIgnoreEnd /** @@ -109,7 +110,10 @@ public function col_timecreated($values) { */ public function col_status($values) { $html = ''; - $s = ArchiveJob::get_status_display_args($values->status, json_decode($values->statusextras, true)); + $s = ArchiveJob::get_status_display_args( + $values->status, + $values->statusextras ? json_decode($values->statusextras, true) : null + ); $html .= ''.$s['text'].'
    '; diff --git a/tests/output/job_overview_table_test.php b/tests/output/job_overview_table_test.php new file mode 100644 index 0000000..c45070c --- /dev/null +++ b/tests/output/job_overview_table_test.php @@ -0,0 +1,100 @@ +. + +/** + * Tests for the job_overview_table + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\output; + + +use quiz_archiver\ArchiveJob; + +/** + * Tests for the job_overview_table + */ +final class job_overview_table_test extends \advanced_testcase { + + /** + * Generates a mock quiz to use in the tests + * + * @return \stdClass Created mock objects + */ + protected function generate_mock_quiz(): \stdClass { + // Create course, course module and quiz. + $this->resetAfterTest(); + + // Prepare user and course. + $user = $this->getDataGenerator()->create_user(); + $course = $this->getDataGenerator()->create_course(); + $quiz = $this->getDataGenerator()->create_module('quiz', [ + 'course' => $course->id, + 'grade' => 100.0, + 'sumgrades' => 100, + ]); + + return (object) [ + 'user' => $user, + 'course' => $course, + 'quiz' => $quiz, + 'attempts' => [ + (object) ['userid' => 1, 'attemptid' => 1], + (object) ['userid' => 2, 'attemptid' => 42], + (object) ['userid' => 3, 'attemptid' => 1337], + ], + ]; + } + + /** + * Basic coverage test for table generation logic + * + * @covers \quiz_archiver\output\job_overview_table + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_table_generation(): void { + // Create a mock job to render inside the table. + $mocks = $this->generate_mock_quiz(); + $job = ArchiveJob::create( + '00000000000000000000000001', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_AWAITING_PROCESSING + ); + $job->set_status(ArchiveJob::STATUS_RUNNING, ['progress' => 42]); + + // Create the table and render it. + $table = new job_overview_table(100000, $mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $table->out(50, true); + + $this->assertdebuggingcalledcount(2); + $this->expectOutputRegex('/.*<\/table>/s'); + } + +} From 57ac3556dc1cb3a3d02520955ec563584a017064 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 25 Jul 2024 12:22:47 +0200 Subject: [PATCH 116/185] Move mock data generation code for unit tests into separate generator class to minimize code duplication --- classes/RemoteArchiveWorker.php | 2 + tests/archivejob_test.php | 207 +++++++------ tests/backupmanager_test.php | 73 ++--- .../external/generate_attempt_report_test.php | 32 +- tests/external/get_attempts_metadata_test.php | 32 +- tests/external/get_backup_status_test.php | 35 +-- .../process_uploaded_artifact_test.php | 38 +-- tests/external/update_job_status_test.php | 37 +-- tests/filemanager_test.php | 194 ++++-------- tests/generator/lib.php | 283 ++++++++++++++++++ tests/output/job_overview_table_test.php | 33 +- tests/report_test.php | 150 +++------- tests/tspmanager_test.php | 89 ++---- 13 files changed, 604 insertions(+), 601 deletions(-) create mode 100644 tests/generator/lib.php diff --git a/classes/RemoteArchiveWorker.php b/classes/RemoteArchiveWorker.php index 5a478d8..9817a2d 100644 --- a/classes/RemoteArchiveWorker.php +++ b/classes/RemoteArchiveWorker.php @@ -126,6 +126,7 @@ public function enqueue_archive_job( $data = json_decode($result); // Handle errors. + // @codingStandardsIgnoreLine // @codeCoverageIgnoreStart if ($httpstatus != 200) { if ($data === null) { @@ -140,6 +141,7 @@ public function enqueue_archive_job( // Decoded JSON data containing jobid and job_status returned on success. return $data; + // @codingStandardsIgnoreLine // @codeCoverageIgnoreEnd } diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index daa6419..79c526b 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -24,7 +24,6 @@ namespace quiz_archiver; -use context_course; use context_module; use context_system; @@ -34,80 +33,13 @@ final class archivejob_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object) [ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - 'attempts' => [ - (object) ['userid' => 1, 'attemptid' => 1], - (object) ['userid' => 2, 'attemptid' => 42], - (object) ['userid' => 3, 'attemptid' => 1337], - ], - 'settings' => [ - 'num_attempts' => 3, - 'export_attempts' => 1, - 'export_report_section_header' => 1, - 'export_report_section_quiz_feedback' => 1, - 'export_report_section_question' => 1, - 'export_report_section_question_feedback' => 0, - 'export_report_section_general_feedback' => 1, - 'export_report_section_rightanswer' => 0, - 'export_report_section_history' => 1, - 'export_report_section_attachments' => 1, - 'export_quiz_backup' => 1, - 'export_course_backup' => 0, - 'archive_autodelete' => 1, - 'archive_retention_time' => '42w', - ], - ]; - } - - /** - * Generates a dummy artifact file, stored in the context of the given course. - * - * @param int $courseid ID of the course to store the file in - * @param int $cmid ID of the course module to store the file in - * @param int $quizid ID of the quiz to store the file in - * @param string $filename Name of the file to create - * @return \stored_file The created file handle - * @throws \file_exception - * @throws \stored_file_creation_exception - */ - protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, string $filename): \stored_file { - $this->resetAfterTest(); - $ctx = context_course::instance($courseid); - - return get_file_storage()->create_file_from_string( - [ - 'contextid' => $ctx->id, - 'component' => FileManager::COMPONENT_NAME, - 'filearea' => FileManager::ARTIFACTS_FILEAREA_NAME, - 'itemid' => 0, - 'filepath' => "/{$courseid}/{$cmid}/{$quizid}/", - 'filename' => $filename, - 'timecreated' => time(), - 'timemodified' => time(), - ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. - 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' - ); + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -122,9 +54,10 @@ protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, */ public function test_create_archive_job(): void { global $DB; + $this->resetAfterTest(); // Create new archive job. - $mocks = $this->generate_mock_quiz(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -169,7 +102,8 @@ public function test_create_archive_job(): void { * @throws \moodle_exception */ public function test_job_get_by_id(bool $shouldfail): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242123456', $mocks->course->id, @@ -215,7 +149,8 @@ public static function job_get_by_id_data_provider(): array { */ public function test_create_job_duplicate_detection(): void { // Create mock job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $jobid = '10000000-dupe-dupe-dupe-ef1234567890'; $job = ArchiveJob::create( $jobid, @@ -232,7 +167,7 @@ public function test_create_job_duplicate_detection(): void { // Assert that job was created. $this->assertNotNull(ArchiveJob::get_by_jobid($jobid), 'Job was not created'); - // Try to create second job with same UUID + // Try to create second job with same UUID. $this->expectException(\moodle_exception::class); $jobduplicate = ArchiveJob::create( $jobid, @@ -261,7 +196,8 @@ public function test_delete_archive_job(): void { global $DB; // Create new archive job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -332,7 +268,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { $jobs = []; $artifacts = []; for ($quizidx = 0; $quizidx < 3; $quizidx++) { - $mocks[$quizidx] = $this->generate_mock_quiz(); + $mocks[$quizidx] = $this->getDataGenerator()->create_mock_quiz(); for ($jobidx = 0; $jobidx < 3; $jobidx++) { // Create job. $jobs[$quizidx][$jobidx] = ArchiveJob::create( @@ -348,7 +284,7 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { ); // Attach artifact. - $artifacts[$quizidx][$jobidx] = $this->generate_artifact_file( + $artifacts[$quizidx][$jobidx] = $this->getDataGenerator()->create_artifact_file( $mocks[$quizidx]->course->id, $mocks[$quizidx]->quiz->cmid, $mocks[$quizidx]->quiz->id, @@ -452,7 +388,8 @@ public function test_multiple_jobs_retrieval_and_metadata(): void { */ public function test_set_job_status(string $status, bool $iscompleted): void { // Create test job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $expectedjob = ArchiveJob::create( '40000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -516,7 +453,8 @@ public static function set_job_status_data_provider(): array { */ public function test_set_job_status_with_statusextras(string $status, ?array $statusextras): void { // Create test job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $expectedjob = ArchiveJob::create( '40000123-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -589,7 +527,8 @@ public function test_wstoken_access_checks(): void { md5('TEST-WS-TOKEN-4'), md5('TEST-WS-TOKEN-5'), ]; - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); // Create jobs and test all tokens against each job. foreach ($wstokens as $wstoken) { @@ -656,7 +595,8 @@ public function test_delete_webservice_token(): void { } // Create job and test token access. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( 'xxx-'.$wstoken, $mocks->course->id, @@ -691,7 +631,8 @@ public function test_delete_webservice_token(): void { */ public function test_job_timeout(): void { // Prepare job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '12300000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -736,7 +677,8 @@ public function test_job_timeout(): void { */ public function test_artifact_linking(): void { // Create test job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '60000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -752,7 +694,12 @@ public function test_artifact_linking(): void { $this->assertFalse($job->has_artifact(), 'New job believes that it has an artifact file'); // Create and link artifact file. - $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test.tar.gz' + ); $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); @@ -775,8 +722,14 @@ public function test_artifact_linking(): void { */ public function test_artifact_deletion(): void { // Create test job and link dummy artifact file. - $mocks = $this->generate_mock_quiz(); - $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test.tar.gz' + ); $job = ArchiveJob::create( '70000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -813,8 +766,14 @@ public function test_artifact_deletion(): void { */ public function test_delete_expired_artifacts(): void { // Create test job that instantly expires and link dummy artifact file. - $mocks = $this->generate_mock_quiz(); - $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test.tar.gz' + ); $job = ArchiveJob::create( '80000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -848,7 +807,8 @@ public function test_delete_expired_artifacts(): void { */ public function test_artifact_checksum_non_existing(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '99000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -879,11 +839,27 @@ public function test_artifact_checksum_non_existing(): void { */ public function test_temporary_file_linking(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $tmpfiles = [ - $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), - $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test2.tar.gz'), - $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), + $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test1.tar.gz' + ), + $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test2.tar.gz' + ), + $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test3.tar.gz' + ), ]; // Create job. @@ -926,11 +902,27 @@ public function test_temporary_file_linking(): void { */ public function test_temporary_file_deletion(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $tmpfiles = [ - $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test1.tar.gz'), - $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test2.tar.gz'), - $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test3.tar.gz'), + $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test1.tar.gz' + ), + $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test2.tar.gz' + ), + $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test3.tar.gz' + ), ]; // Create job and link files. @@ -1110,7 +1102,8 @@ function ($carry, $item) { */ public function test_generate_archive_filename(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Full pattern. @@ -1144,7 +1137,8 @@ public function test_generate_archive_filename(): void { */ public function test_generate_archive_filename_without_variables(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Full pattern. @@ -1169,7 +1163,8 @@ public function test_generate_archive_filename_without_variables(): void { */ public function test_generate_archive_filename_invalid_pattern(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Test filename generation. @@ -1194,7 +1189,8 @@ public function test_generate_archive_filename_invalid_pattern(): void { */ public function test_generate_archive_filename_invalid_variables(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $cm = context_module::instance($mocks->quiz->cmid); // Test filename generation. @@ -1317,7 +1313,8 @@ public static function status_display_args_with_statusextras_data_provider(): ar */ public function test_tspmanager_get_instance(): void { // Generate data. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( 'asn00000-1234-5678-abcd-ef4242424242', $mocks->course->id, diff --git a/tests/backupmanager_test.php b/tests/backupmanager_test.php index d749d6a..0373624 100644 --- a/tests/backupmanager_test.php +++ b/tests/backupmanager_test.php @@ -34,49 +34,13 @@ final class backupmanager_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object) [ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - 'attempts' => [ - (object) ['userid' => 1, 'attemptid' => 1], - (object) ['userid' => 2, 'attemptid' => 42], - (object) ['userid' => 3, 'attemptid' => 1337], - ], - 'settings' => [ - 'num_attempts' => 3, - 'export_attempts' => 1, - 'export_report_section_header' => 1, - 'export_report_section_quiz_feedback' => 1, - 'export_report_section_question' => 1, - 'export_report_section_question_feedback' => 0, - 'export_report_section_general_feedback' => 1, - 'export_report_section_rightanswer' => 0, - 'export_report_section_history' => 1, - 'export_report_section_attachments' => 1, - 'export_quiz_backup' => 1, - 'export_course_backup' => 0, - 'archive_autodelete' => 1, - 'archive_retention_time' => '42w', - ], - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -93,7 +57,8 @@ protected function generate_mock_quiz(): \stdClass { public function test_course_backup(): void { // Initiate a mock course backup. $this->setAdminUser(); - $mock = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mock = $this->getDataGenerator()->create_mock_quiz(); $mock->user = get_admin(); $backup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); @@ -124,7 +89,8 @@ public function test_course_backup(): void { public function test_quiz_backup(): void { // Initiate a mock course backup. $this->setAdminUser(); - $mock = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mock = $this->getDataGenerator()->create_mock_quiz(); $mock->user = get_admin(); $backup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); @@ -191,7 +157,8 @@ public function test_backup_missing_quiz(): void { * @throws \dml_exception */ public function test_backup_course_without_privileges(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $this->expectException(\backup_controller_exception::class); $this->expectExceptionMessageMatches('/backup_user_missing_capability/'); @@ -210,7 +177,8 @@ public function test_backup_course_without_privileges(): void { * @throws \dml_exception */ public function test_backup_quiz_without_privileges(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $this->expectException(\backup_controller_exception::class); $this->expectExceptionMessageMatches('/backup_user_missing_capability/'); @@ -230,7 +198,8 @@ public function test_backup_quiz_without_privileges(): void { */ public function test_backup_download_url_generation_with_internal_wwwroot(): void { $this->setAdminUser(); - $mock = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mock = $this->getDataGenerator()->create_mock_quiz(); $mock->user = get_admin(); set_config('internal_wwwroot', 'http://my-internal-hostname', 'quiz_archiver'); @@ -258,7 +227,8 @@ public function test_backup_download_url_generation_with_internal_wwwroot(): voi public function test_initialization_by_existing_backupid(): void { // Prepare a course and a quiz backup. $this->setAdminUser(); - $mock = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mock = $this->getDataGenerator()->create_mock_quiz(); $mock->user = get_admin(); $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); @@ -309,7 +279,8 @@ public function test_initialization_by_non_existing_backupid(): void { public function test_backup_status(): void { // Prepare a course and a quiz backup. $this->setAdminUser(); - $mock = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mock = $this->getDataGenerator()->create_mock_quiz(); $mock->user = get_admin(); $expectedcoursebackup = BackupManager::initiate_course_backup($mock->course->id, $mock->user->id); $expectedquizbackup = BackupManager::initiate_quiz_backup($mock->quiz->cmid, $mock->user->id); @@ -341,7 +312,8 @@ public function test_backup_status(): void { public function test_backup_job_association(): void { // Prepare a course and a quiz backup. $this->setAdminUser(); - $mock = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mock = $this->getDataGenerator()->create_mock_quiz(); $mock->user = get_admin(); $job = ArchiveJob::create( '90000000-1234-5678-abcd-ef4242424242', @@ -386,7 +358,8 @@ public function test_backup_job_association(): void { public function test_backup_invalid_job_association(): void { // Prepare a course and a quiz backup. $this->setAdminUser(); - $mock = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mock = $this->getDataGenerator()->create_mock_quiz(); $mock->user = get_admin(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index 9c27755..a80da3d 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -32,28 +32,13 @@ final class generate_attempt_report_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object)[ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -123,7 +108,8 @@ public function test_capability_requirement(): void { $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $r = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); generate_attempt_report::execute( $r['courseid'], @@ -165,6 +151,8 @@ public function test_parameter_validation( bool $attachments, bool $shouldfail ): void { + $this->resetAfterTest(); + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } @@ -184,7 +172,7 @@ public function test_parameter_validation( */ public static function parameter_data_provider(): array { $self = new self(); - $mocks = $self->generate_mock_quiz(); + $mocks = $self->getDataGenerator()->create_mock_quiz(); $base = $self->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); return [ 'Valid' => array_merge($base, [ diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index e95707c..4648bae 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -30,28 +30,13 @@ final class get_attempts_metadata_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object)[ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -116,7 +101,8 @@ public function test_capability_requirement(): void { $this->expectException(\required_capability_exception::class); $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $r = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); get_attempts_metadata::execute( $r['courseid'], @@ -148,6 +134,8 @@ public function test_parameter_validation( array $attemptids, bool $shouldfail ): void { + $this->resetAfterTest(); + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } @@ -167,7 +155,7 @@ public function test_parameter_validation( */ public static function parameter_data_provider(): array { $self = new self(); - $mocks = $self->generate_mock_quiz(); + $mocks = $self->getDataGenerator()->create_mock_quiz(); $base = $self->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); return [ 'Valid' => array_merge($base, ['shouldfail' => false]), diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index 4ad3d4d..f0536ab 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -33,28 +33,13 @@ final class get_backup_status_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object)[ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -69,7 +54,8 @@ protected function generate_mock_quiz(): \stdClass { */ public function test_capability_requirement(): void { // Create job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -140,6 +126,8 @@ public function test_parameter_validation( string $backupid, bool $shouldfail ): void { + $this->resetAfterTest(); + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } @@ -162,7 +150,7 @@ public function test_parameter_validation( public static function parameter_data_provider(): array { // Create job. $self = new self(); - $mocks = $self->generate_mock_quiz(); + $mocks = $self->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -203,7 +191,8 @@ public function test_wstoken_access_check(): void { $this->setAdminUser(); // Create job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', $mocks->course->id, diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 71c1853..f98c734 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -34,28 +34,13 @@ final class process_uploaded_artifact_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object)[ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -126,7 +111,8 @@ public function test_capability_requirement(): void { $this->expectExceptionMessageMatches('/.*mod\/quiz_archiver:use_webservice.*/'); // Create job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -190,6 +176,8 @@ public function test_parameter_validation( string $artifactsha256sum, bool $shouldfail ): void { + $this->resetAfterTest(); + if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } @@ -214,7 +202,7 @@ public function test_parameter_validation( */ public static function parameter_data_provider(): array { $self = new self(); - $mocks = $self->generate_mock_quiz(); + $mocks = $self->getDataGenerator()->create_mock_quiz(); $base = $self->generate_valid_request('xxx', $mocks->quiz->cmid, $mocks->user->id); return [ 'Valid' => array_merge($base, [ @@ -261,7 +249,8 @@ public static function parameter_data_provider(): array { */ public function test_rejection_of_artifacts_for_complete_jobs(): void { // Create job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -305,7 +294,8 @@ public function test_rejection_of_artifacts_for_complete_jobs(): void { */ public function test_invalid_file_metadata(): void { // Create job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', $mocks->course->id, diff --git a/tests/external/update_job_status_test.php b/tests/external/update_job_status_test.php index 6f027ec..c774e78 100644 --- a/tests/external/update_job_status_test.php +++ b/tests/external/update_job_status_test.php @@ -33,28 +33,13 @@ final class update_job_status_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object)[ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -99,7 +84,8 @@ public function test_assure_return_parameter_spec(): void { */ public function test_capability_requirement(): void { // Create mock quiz and job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -136,7 +122,8 @@ public function test_wstoken_validation(): void { $this->setAdminUser(); // Create mock quiz and job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -241,7 +228,8 @@ public function test_update_job_status(string $originstatus, string $targetstatu $_GET['wstoken'] = 'TEST-WS-TOKEN'; // Create mock quiz and job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -363,7 +351,8 @@ public function test_statusextras(string $jobid, string $status, ?string $status $_GET['wstoken'] = 'TEST-WS-TOKEN'; // Create mock quiz and job. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000-1234-5678-abcd-ef4242424242', $mocks->course->id, diff --git a/tests/filemanager_test.php b/tests/filemanager_test.php index 0ffc08f..fe86405 100644 --- a/tests/filemanager_test.php +++ b/tests/filemanager_test.php @@ -24,123 +24,19 @@ namespace quiz_archiver; -use context_user; - /** * Tests for the FileManager class */ final class filemanager_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests - * - * @return \stdClass Created mock objects - */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object) [ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - 'attempts' => [ - (object) ['userid' => 1, 'attemptid' => 1], - (object) ['userid' => 2, 'attemptid' => 42], - (object) ['userid' => 3, 'attemptid' => 1337], - ], - ]; - } - - /** - * Imports the reference quiz artifact from the test fixtures directory into - * the a Moodle stored_file residing inside a users draft filearea. - * - * @return \stored_file - * @throws \file_exception - * @throws \stored_file_creation_exception - */ - protected function import_reference_quiz_artifact(): \stored_file { - $this->resetAfterTest(); - $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); - - return get_file_storage()->create_file_from_pathname([ - 'contextid' => $ctx->id, - 'component' => 'user', - 'filearea' => 'draft', - 'itemid' => 0, - 'filepath' => "/", - 'filename' => 'reference_quiz_artifact.tar.gz', - 'timecreated' => time(), - 'timemodified' => time(), - ], __DIR__.'/fixtures/referencequiz-artifact.tar.gz'); - } - - /** - * Generates a dummy draft file, stored in the draft filearea of a user. - * - * @param string $filename Name of the file to create - * @param string $filearea Filearea to store the file in - * @return \stored_file The created file handle - * @throws \file_exception - * @throws \stored_file_creation_exception - */ - protected function generate_draft_file(string $filename, string $filearea = 'draft'): \stored_file { - $this->resetAfterTest(); - $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); - - return get_file_storage()->create_file_from_string( - [ - 'contextid' => $ctx->id, - 'component' => 'user', - 'filearea' => $filearea, - 'itemid' => 0, - 'filepath' => "/", - 'filename' => $filename, - 'timecreated' => time(), - 'timemodified' => time(), - ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. - 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' - ); - } - - /** - * Generates a dummy file inside the temp filearea of this plugin. + * Returns the data generator for the quiz_archiver plugin * - * @param string $filename - * @param int $expiry - * @return \stored_file - * @throws \file_exception - * @throws \stored_file_creation_exception + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_temp_file(string $filename, int $expiry): \stored_file { - $this->resetAfterTest(); - $ctx = context_user::instance($this->getDataGenerator()->create_user()->id); - - return get_file_storage()->create_file_from_string( - [ - 'contextid' => $ctx->id, - 'component' => FileManager::COMPONENT_NAME, - 'filearea' => FileManager::TEMP_FILEAREA_NAME, - 'itemid' => 0, - 'filepath' => '/'.$expiry.'/', - 'filename' => $filename, - 'timecreated' => time(), - 'timemodified' => time(), - ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. - 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' - ); + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -232,9 +128,10 @@ public static function file_path_generator_data_provider(): array { * @throws \stored_file_creation_exception */ public function test_artifact_storing(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - $draftfile = $this->generate_draft_file('testfile.tar.gz'); + $draftfile = $this->getDataGenerator()->create_draft_file('testfile.tar.gz'); $draftfilehash = $draftfile->get_contenthash(); // Store draftfile as artifact. @@ -259,9 +156,10 @@ public function test_artifact_storing(): void { * @throws \stored_file_creation_exception */ public function test_artifact_storing_invalid_file(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - $invalidfile = $this->generate_draft_file('invalidfile.tar.gz', 'invalidarea'); + $invalidfile = $this->getDataGenerator()->create_draft_file('invalidfile.tar.gz', 'invalidarea'); $this->expectException(\file_exception::class); $this->expectExceptionMessageMatches('/draftfile/'); @@ -279,9 +177,10 @@ public function test_artifact_storing_invalid_file(): void { */ public function test_get_draft_file(): void { // Prepare mocks. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); - $draftfile = $this->generate_draft_file('testfile.tar.gz'); + $draftfile = $this->getDataGenerator()->create_draft_file('testfile.tar.gz'); // Retrieve valid draftfile. $this->assertEquals( @@ -317,7 +216,8 @@ public function test_get_draft_file(): void { * @throws \stored_file_creation_exception */ public function test_hash_valid_file(): void { - $file = $this->generate_draft_file('testartifact.tar.gz'); + $this->resetAfterTest(); + $file = $this->getDataGenerator()->create_draft_file('testartifact.tar.gz'); $defaulthash = FileManager::hash_file($file); $this->assertNotEmpty($defaulthash, 'Default hash is empty'); $this->assertSame(64, strlen($defaulthash), 'Default hash length is not 64 bytes, as expected from SHA256'); @@ -336,7 +236,8 @@ public function test_hash_valid_file(): void { * @throws \stored_file_creation_exception */ public function test_hash_file_invalid_algorithm(): void { - $file = $this->generate_draft_file('testartifact.tar.gz'); + $this->resetAfterTest(); + $file = $this->getDataGenerator()->create_draft_file('testartifact.tar.gz'); $this->assertNull(FileManager::hash_file($file, 'invalid-algorithm'), 'Invalid algorithm did not return null'); } @@ -360,7 +261,8 @@ public function test_send_virtual_file_tsp_query(): void { $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); } - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000001', $mocks->course->id, @@ -411,7 +313,8 @@ public function test_send_virtual_file_tsp_reply(): void { $this->markTestSkipped('This test requires Moodle 4.4 or higher. PHPUnit process isolation does not work properly with older versions.'); } - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000002', $mocks->course->id, @@ -455,7 +358,8 @@ public function test_send_virtual_file_tsp_reply(): void { * @throws \moodle_exception */ public function test_send_virtual_files_tsp_invalid_job(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000003', $mocks->course->id, @@ -491,7 +395,8 @@ public function test_send_virtual_files_tsp_invalid_job(): void { * @throws \moodle_exception */ public function test_send_virtual_files_tsp_unsigned_job(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000004', $mocks->course->id, @@ -526,7 +431,8 @@ public function test_send_virtual_files_tsp_unsigned_job(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_filearea(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test invalid filearea. @@ -545,7 +451,8 @@ public function test_send_virtual_files_invalid_filearea(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_path(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test invalid path. @@ -564,7 +471,8 @@ public function test_send_virtual_files_invalid_path(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_jobid(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test invalid job-id. @@ -587,7 +495,8 @@ public function test_send_virtual_files_invalid_jobid(): void { * @throws \dml_exception */ public function test_send_virtual_files_missing_job(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test missing job. @@ -610,7 +519,8 @@ public function test_send_virtual_files_missing_job(): void { * @throws \dml_exception */ public function test_send_virtual_files_invalid_filename(): void { - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); // Test missing job. @@ -633,7 +543,8 @@ public function test_send_virtual_files_invalid_filename(): void { */ public function test_extract_attempt_data_from_artifact(): void { // Prepare a finished archive job that has a valid artifact file. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000042', $mocks->course->id, @@ -647,7 +558,7 @@ public function test_extract_attempt_data_from_artifact(): void { ArchiveJob::STATUS_FINISHED ); - $draftartifact = $this->import_reference_quiz_artifact(); + $draftartifact = $this->getDataGenerator()->import_reference_quiz_artifact_as_draft(); $attemptid = 13775; $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); @@ -676,7 +587,8 @@ public function test_extract_attempt_data_from_artifact(): void { */ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { // Prepare a finished archive job that has a valid artifact file. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000021', $mocks->course->id, @@ -689,7 +601,7 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { [], ArchiveJob::STATUS_FINISHED ); - $draftartifact = $this->import_reference_quiz_artifact(); + $draftartifact = $this->getDataGenerator()->import_reference_quiz_artifact_as_draft(); $fm = new FileManager($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); $fm->store_uploaded_artifact($draftartifact); $storedartifacts = $fm->get_stored_artifacts(); @@ -715,7 +627,8 @@ public function test_extract_attempt_data_for_nonexisting_attemptid(): void { */ public function test_extract_attempt_data_from_invalid_artifact(): void { // Prepare an unfinished archive job that has no artifact file. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000043', $mocks->course->id, @@ -733,7 +646,11 @@ public function test_extract_attempt_data_from_invalid_artifact(): void { // Attempt to extract data from nonexisting artifact. $this->expectException(\moodle_exception::class); $this->expectExceptionMessageMatches('/Error processing archive file/'); - $fm->extract_attempt_data_from_artifact($this->generate_draft_file('not-an-artifact.tar.gz'), $job->get_id(), 1337); + $fm->extract_attempt_data_from_artifact( + $this->getDataGenerator()->create_draft_file('not-an-artifact.tar.gz'), + $job->get_id(), + 1337 + ); } /** @@ -748,15 +665,16 @@ public function test_extract_attempt_data_from_invalid_artifact(): void { */ public function test_cleanup_temp_files(): void { // Prepare tempfiles. + $this->resetAfterTest(); $overduetempfiles = [ - $this->generate_temp_file('tempfile1.tar.gz', 0), - $this->generate_temp_file('tempfile2.tar.gz', 0), - $this->generate_temp_file('tempfile3.tar.gz', 0), + $this->getDataGenerator()->create_temp_file('tempfile1.tar.gz', 0), + $this->getDataGenerator()->create_temp_file('tempfile2.tar.gz', 0), + $this->getDataGenerator()->create_temp_file('tempfile3.tar.gz', 0), ]; $activetempfiles = [ - $this->generate_temp_file('tempfile4.tar.gz', time() + 3600), - $this->generate_temp_file('tempfile5.tar.gz', time() + 3600), - $this->generate_temp_file('tempfile6.tar.gz', time() + 3600), + $this->getDataGenerator()->create_temp_file('tempfile4.tar.gz', time() + 3600), + $this->getDataGenerator()->create_temp_file('tempfile5.tar.gz', time() + 3600), + $this->getDataGenerator()->create_temp_file('tempfile6.tar.gz', time() + 3600), ]; // Perform cleanup. diff --git a/tests/generator/lib.php b/tests/generator/lib.php new file mode 100644 index 0000000..4063d6c --- /dev/null +++ b/tests/generator/lib.php @@ -0,0 +1,283 @@ +. + +use quiz_archiver\FileManager; + +// @codingStandardsIgnoreLine +defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore + +/** + * Tests generator for the quiz_archiver plugin + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class quiz_archiver_generator extends \testing_data_generator { + + /** @var string[] Question types present in the reference quiz */ + const QUESTION_TYPES_IN_REFERENCE_QUIZ = [ + 'description', + 'multichoice', + 'truefalse', + 'match', + 'shortanswer', + 'numerical', + 'essay', + 'calculated', + 'calculatedmulti', + 'calculatedsimple', + 'ddwtos', + 'ddmarker', + 'ddimageortext', + 'multianswer', + 'gapselect', + ]; + + /** + * Creates a course that contains a quiz module as a new user. + * + * @return stdClass The user, course and quiz, as well as mock attempts and + * archive job settings. + */ + public function create_mock_quiz(): \stdClass { + // Prepare user and course. + $user = $this->create_user(); + $course = $this->create_course(); + $quiz = $this->create_module('quiz', [ + 'course' => $course->id, + 'grade' => 100.0, + 'sumgrades' => 100, + ]); + + return (object) [ + 'user' => $user, + 'course' => $course, + 'quiz' => $quiz, + 'attempts' => [ + (object) ['userid' => 1, 'attemptid' => 1], + (object) ['userid' => 2, 'attemptid' => 42], + (object) ['userid' => 3, 'attemptid' => 1337], + ], + 'settings' => [ + 'num_attempts' => 3, + 'export_attempts' => 1, + 'export_report_section_header' => 1, + 'export_report_section_quiz_feedback' => 1, + 'export_report_section_question' => 1, + 'export_report_section_question_feedback' => 0, + 'export_report_section_general_feedback' => 1, + 'export_report_section_rightanswer' => 0, + 'export_report_section_history' => 1, + 'export_report_section_attachments' => 1, + 'export_quiz_backup' => 1, + 'export_course_backup' => 0, + 'archive_autodelete' => 1, + 'archive_retention_time' => '42w', + ], + ]; + } + + /** + * Generates a dummy artifact file, stored in the context of the given course. + * + * @param int $courseid ID of the course to store the file in + * @param int $cmid ID of the course module to store the file in + * @param int $quizid ID of the quiz to store the file in + * @param string $filename Name of the file to create + * @return \stored_file The created file handle + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function create_artifact_file(int $courseid, int $cmid, int $quizid, string $filename): \stored_file { + $ctx = context_course::instance($courseid); + + return get_file_storage()->create_file_from_string( + [ + 'contextid' => $ctx->id, + 'component' => FileManager::COMPONENT_NAME, + 'filearea' => FileManager::ARTIFACTS_FILEAREA_NAME, + 'itemid' => 0, + 'filepath' => "/{$courseid}/{$cmid}/{$quizid}/", + 'filename' => $filename, + 'timecreated' => time(), + 'timemodified' => time(), + ], + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. + 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' + ); + } + + /** + * Generates a dummy draft file, stored in the given filearea (default: user + * draft filearea). + * + * @param string $filename Name of the file to create + * @param string $filearea Filearea to store the file in + * @return \stored_file The created file handle + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function create_draft_file(string $filename, string $filearea = 'draft'): \stored_file { + $ctx = context_user::instance($this->create_user()->id); + + return get_file_storage()->create_file_from_string( + [ + 'contextid' => $ctx->id, + 'component' => 'user', + 'filearea' => $filearea, + 'itemid' => 0, + 'filepath' => "/", + 'filename' => $filename, + 'timecreated' => time(), + 'timemodified' => time(), + ], + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. + 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' + ); + } + + /** + * Imports the reference course into a new course and returns the reference + * quiz, the respective cm, and the course itself. + * + * @throws \restore_controller_exception + * @throws \dml_exception + * @throws \moodle_exception + * @return \stdClass Object with keys 'quiz' (the reference quiz), 'cm' (the + * respective cm), 'course' (the course itself), 'attemptids' (array of all + * attempt ids inside the reference quiz), 'userids' (array of all user ids + * with attempts in the reference quiz) + */ + public function import_reference_course(): \stdClass { + global $DB; + + // Prepare backup of reference course for restore. + $backupid = 'referencequiz'; + $backuppath = make_backup_temp_directory($backupid); + get_file_packer('application/vnd.moodle.backup')->extract_to_pathname( + __DIR__."/../fixtures/referencequiz.mbz", + $backuppath + ); + + // Restore reference course as a new course with default settings. + $categoryid = $DB->get_field('course_categories', 'MIN(id)', []); + $newcourseid = \restore_dbops::create_new_course('Reference Course', 'REF', $categoryid); + $rc = new \restore_controller( + $backupid, + $newcourseid, + \backup::INTERACTIVE_NO, + \backup::MODE_GENERAL, + get_admin()->id, + \backup::TARGET_NEW_COURSE + ); + + if (!$rc->execute_precheck()) { + throw new \restore_controller_exception('Backup restore precheck failed.'); + } + $rc->execute_plan(); + if ($rc->get_status() != backup::STATUS_FINISHED_OK) { + throw new \restore_controller_exception('Restore of reference course failed.'); + } + + // 2024-05-14: Do not destroy restore_controller. This will drop temptables without removing them from + // $DB->temptables properly, causing DB reset to fail in subsequent tests due to missing tables. Destroying the + // restore_controller is optional and not necessary for this test. + // $rc->destroy();. + + // Get course and find the reference quiz. + $course = get_course($rc->get_courseid()); + $modinfo = get_fast_modinfo($course); + $cms = $modinfo->get_cms(); + $cm = null; + foreach ($cms as $curcm) { + if ($curcm->modname == 'quiz' && strpos($curcm->name, 'Reference Quiz') === 0) { + $cm = $curcm; + break; + } + } + $quiz = $DB->get_record('quiz', ['id' => $cm->instance], '*', MUST_EXIST); + $attemptids = array_values(array_map( + fn($r): int => $r->id, + $DB->get_records('quiz_attempts', ['quiz' => $quiz->id], '', 'id') + )); + + $userids = array_values(array_map( + fn($r): int => $r->userid, + $DB->get_records('quiz_attempts', ['quiz' => $quiz->id], '', 'userid') + )); + + return (object) [ + 'course' => $course, + 'cm' => $cm, + 'quiz' => $quiz, + 'attemptids' => $attemptids, + 'userids' => $userids, + ]; + } + + /** + * Imports the reference quiz artifact from the test fixtures directory into + * the a Moodle stored_file residing inside a users draft filearea. + * + * @return \stored_file + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function import_reference_quiz_artifact_as_draft(): \stored_file { + $ctx = context_user::instance($this->create_user()->id); + + return get_file_storage()->create_file_from_pathname([ + 'contextid' => $ctx->id, + 'component' => 'user', + 'filearea' => 'draft', + 'itemid' => 0, + 'filepath' => "/", + 'filename' => 'reference_quiz_artifact.tar.gz', + 'timecreated' => time(), + 'timemodified' => time(), + ], __DIR__.'/../fixtures/referencequiz-artifact.tar.gz'); + } + + /** + * Generates a dummy file inside the temp filearea of this plugin. + * + * @param string $filename + * @param int $expiry + * @return \stored_file + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function create_temp_file(string $filename, int $expiry): \stored_file { + $ctx = context_user::instance($this->create_user()->id); + + return get_file_storage()->create_file_from_string( + [ + 'contextid' => $ctx->id, + 'component' => FileManager::COMPONENT_NAME, + 'filearea' => FileManager::TEMP_FILEAREA_NAME, + 'itemid' => 0, + 'filepath' => '/'.$expiry.'/', + 'filename' => $filename, + 'timecreated' => time(), + 'timemodified' => time(), + ], + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. + 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' + ); + } + +} diff --git a/tests/output/job_overview_table_test.php b/tests/output/job_overview_table_test.php index c45070c..462f99f 100644 --- a/tests/output/job_overview_table_test.php +++ b/tests/output/job_overview_table_test.php @@ -33,33 +33,13 @@ final class job_overview_table_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object) [ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - 'attempts' => [ - (object) ['userid' => 1, 'attemptid' => 1], - (object) ['userid' => 2, 'attemptid' => 42], - (object) ['userid' => 3, 'attemptid' => 1337], - ], - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -74,7 +54,8 @@ protected function generate_mock_quiz(): \stdClass { */ public function test_table_generation(): void { // Create a mock job to render inside the table. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '00000000000000000000000001', $mocks->course->id, diff --git a/tests/report_test.php b/tests/report_test.php index 88a24a9..505d376 100644 --- a/tests/report_test.php +++ b/tests/report_test.php @@ -37,100 +37,14 @@ */ final class report_test extends \advanced_testcase { - /** @var string[] Question types present in the reference quiz */ - const QUESTION_TYPES_IN_REFERENCE_QUIZ = [ - 'description', - 'multichoice', - 'truefalse', - 'match', - 'shortanswer', - 'numerical', - 'essay', - 'calculated', - 'calculatedmulti', - 'calculatedsimple', - 'ddwtos', - 'ddmarker', - 'ddimageortext', - 'multianswer', - 'gapselect', - ]; - /** - * Imports the reference course into a new course and returns the reference - * quiz, the respective cm, and the course itself. + * Returns the data generator for the quiz_archiver plugin * - * @throws \restore_controller_exception - * @throws \dml_exception - * @throws \moodle_exception - * @return \stdClass Object with keys 'quiz' (the reference quiz), 'cm' (the - * respective cm), 'course' (the course itself), 'attemptids' (array of all - * attempt ids inside the reference quiz), 'userids' (array of all user ids - * with attempts in the reference quiz) + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function prepare_reference_course(): \stdClass { - global $DB, $USER; - $this->resetAfterTest(); - $this->setAdminUser(); - - // Prepare backup of reference course for restore. - $backupid = 'referencequiz'; - $backuppath = make_backup_temp_directory($backupid); - get_file_packer('application/vnd.moodle.backup')->extract_to_pathname( - __DIR__ . "/fixtures/referencequiz.mbz", - $backuppath - ); - - // Restore reference course as a new course with default settings. - $categoryid = $DB->get_field('course_categories', 'MIN(id)', []); - $newcourseid = \restore_dbops::create_new_course('Reference Course', 'REF', $categoryid); - $rc = new \restore_controller( - $backupid, - $newcourseid, - \backup::INTERACTIVE_NO, - \backup::MODE_GENERAL, - $USER->id, - \backup::TARGET_NEW_COURSE - ); - - $this->assertTrue($rc->execute_precheck()); - $rc->execute_plan(); - $this->assertSame(backup::STATUS_FINISHED_OK, $rc->get_status(), 'Restore of reference course failed.'); - - // 2024-05-14: Do not destroy restore_controller. This will drop temptables without removing them from - // $DB->temptables properly, causing DB reset to fail in subsequent tests due to missing tables. Destroying the - // restore_controller is optional and not necessary for this test. - // $rc->destroy();. - - // Get course and find the reference quiz. - $course = get_course($rc->get_courseid()); - $modinfo = get_fast_modinfo($course); - $cms = $modinfo->get_cms(); - $cm = null; - foreach ($cms as $curcm) { - if ($curcm->modname == 'quiz' && strpos($curcm->name, 'Reference Quiz') === 0) { - $cm = $curcm; - break; - } - } - $quiz = $DB->get_record('quiz', ['id' => $cm->instance], '*', MUST_EXIST); - $attemptids = array_values(array_map( - fn($r): int => $r->id, - $DB->get_records('quiz_attempts', ['quiz' => $quiz->id], '', 'id') - )); - - $userids = array_values(array_map( - fn($r): int => $r->userid, - $DB->get_records('quiz_attempts', ['quiz' => $quiz->id], '', 'userid') - )); - - return (object) [ - 'course' => $course, - 'cm' => $cm, - 'quiz' => $quiz, - 'attemptids' => $attemptids, - 'userids' => $userids, - ]; + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -170,7 +84,8 @@ protected static function get_formdata_all_reports_sections_enabled(): object { * @throws \restore_controller_exception */ public function test_webservice_token_access_validation(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $validtoken = md5("VALID-TEST-TOKEN"); $invalidtoken = md5("INVALID-TEST-TOKEN"); @@ -207,7 +122,8 @@ public function test_webservice_token_access_validation(): void { * @throws \moodle_exception */ public function test_generate_full_report(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate full report with all sections. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -240,7 +156,7 @@ public function test_generate_full_report(): void { ) . '\s*<\/th>/', $html, 'Overall feedback header not found'); // Verify questions. - foreach (self::QUESTION_TYPES_IN_REFERENCE_QUIZ as $qtype) { + foreach ($this->getDataGenerator()::QUESTION_TYPES_IN_REFERENCE_QUIZ as $qtype) { $this->assertMatchesRegularExpression( '/<[^<>]*class="[^\"<>]*que[^\"<>]*' . preg_quote($qtype, '/') . '[^\"<>]*"[^<>]*>/', $html, @@ -292,7 +208,8 @@ public function test_generate_full_report(): void { * @throws \restore_controller_exception */ public function test_generate_full_page_stub(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $html = $report->generate_full_page( $rc->attemptids[0], @@ -315,7 +232,8 @@ public function test_generate_full_page_stub(): void { * @throws \moodle_exception */ public function test_generate_report_no_header(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate report without a header. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -351,7 +269,8 @@ public function test_generate_report_no_header(): void { * @throws \restore_controller_exception */ public function test_generate_report_no_quiz_feedback(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate report without quiz feedback. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -386,7 +305,8 @@ public function test_generate_report_no_quiz_feedback(): void { * @throws \restore_controller_exception */ public function test_generate_report_no_questions(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate report without questions. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -437,7 +357,8 @@ public function test_generate_report_no_questions(): void { * @throws \restore_controller_exception */ public function test_generate_report_no_question_feedback(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate report without question feedback. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -466,7 +387,8 @@ public function test_generate_report_no_question_feedback(): void { * @throws \restore_controller_exception */ public function test_generate_report_no_general_feedback(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate report without general feedback. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -495,7 +417,8 @@ public function test_generate_report_no_general_feedback(): void { * @throws \restore_controller_exception */ public function test_generate_report_no_rightanswers(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate report without right answers. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -524,7 +447,8 @@ public function test_generate_report_no_rightanswers(): void { * @throws \restore_controller_exception */ public function test_generate_report_no_history(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); // Generate report without answer history. $report = new Report($rc->course, $rc->cm, $rc->quiz); @@ -552,7 +476,8 @@ public function test_generate_report_no_history(): void { * @throws \restore_controller_exception */ public function test_get_attempt_attachments(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attachments = $report->get_attempt_attachments($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); @@ -578,7 +503,8 @@ public function test_get_attempt_attachments(): void { * @throws \restore_controller_exception */ public function test_get_attempt_attachments_metadata(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $attachments = $report->get_attempt_attachments_metadata($rc->attemptids[0]); $this->assertNotEmpty($attachments, 'No attachments found'); @@ -612,7 +538,9 @@ public function test_get_attempt_attachments_metadata(): void { * @throws \restore_controller_exception */ public function test_get_attempts(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); + $report = new Report($rc->course, $rc->cm, $rc->quiz); $attempts = $report->get_attempts(); @@ -631,7 +559,8 @@ public function test_get_attempts(): void { * @throws \restore_controller_exception */ public function test_get_attempts_metadata(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); // Test without filters. @@ -674,7 +603,8 @@ public function test_get_attempts_metadata(): void { * @throws \restore_controller_exception */ public function test_get_users_with_attempts(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $users = $report->get_users_with_attempts(); @@ -693,7 +623,8 @@ public function test_get_users_with_attempts(): void { * @throws \restore_controller_exception */ public function test_get_latest_attempt_for_user(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $latestattempt = $report->get_latest_attempt_for_user($rc->userids[0]); @@ -714,7 +645,8 @@ public function test_get_latest_attempt_for_user(): void { * @throws \restore_controller_exception */ public function test_attempt_exists(): void { - $rc = $this->prepare_reference_course(); + $this->resetAfterTest(); + $rc = $this->getDataGenerator()->import_reference_course(); $report = new Report($rc->course, $rc->cm, $rc->quiz); $this->assertTrue($report->attempt_exists($rc->attemptids[0]), 'Existing attempt not found'); diff --git a/tests/tspmanager_test.php b/tests/tspmanager_test.php index 3f5b260..83d9976 100644 --- a/tests/tspmanager_test.php +++ b/tests/tspmanager_test.php @@ -32,59 +32,13 @@ final class tspmanager_test extends \advanced_testcase { /** - * Generates a mock quiz to use in the tests + * Returns the data generator for the quiz_archiver plugin * - * @return \stdClass Created mock objects + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin */ - protected function generate_mock_quiz(): \stdClass { - // Create course, course module and quiz. - $this->resetAfterTest(); - - // Prepare user and course. - $user = $this->getDataGenerator()->create_user(); - $course = $this->getDataGenerator()->create_course(); - $quiz = $this->getDataGenerator()->create_module('quiz', [ - 'course' => $course->id, - 'grade' => 100.0, - 'sumgrades' => 100, - ]); - - return (object) [ - 'user' => $user, - 'course' => $course, - 'quiz' => $quiz, - ]; - } - - /** - * Generates a dummy artifact file, stored in the context of the given course. - * - * @param int $courseid ID of the course to store the file in - * @param int $cmid ID of the course module to store the file in - * @param int $quizid ID of the quiz to store the file in - * @param string $filename Name of the file to create - * @return \stored_file The created file handle - * @throws \file_exception - * @throws \stored_file_creation_exception - */ - protected function generate_artifact_file(int $courseid, int $cmid, int $quizid, string $filename): \stored_file { - $this->resetAfterTest(); - $ctx = context_course::instance($courseid); - - return get_file_storage()->create_file_from_string( - [ - 'contextid' => $ctx->id, - 'component' => FileManager::COMPONENT_NAME, - 'filearea' => FileManager::ARTIFACTS_FILEAREA_NAME, - 'itemid' => 0, - 'filepath' => "/{$courseid}/{$cmid}/{$quizid}/", - 'filename' => $filename, - 'timecreated' => time(), - 'timemodified' => time(), - ], - 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do '. - 'eiusmod tempor incididunt ut labore et dolore magna aliqua.' - ); + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); } /** @@ -146,7 +100,8 @@ public function test_tsp_timestamp(): void { set_config('tsp_enable', true, 'quiz_archiver'); // Generate job with artifact. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '10000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -160,7 +115,12 @@ public function test_tsp_timestamp(): void { ArchiveJob::STATUS_FINISHED ); - $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test.tar.gz' + ); $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); @@ -216,7 +176,8 @@ public function test_delete_tsp_data(): void { set_config('tsp_enable', true, 'quiz_archiver'); // Generate job with artifact. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '20000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -230,7 +191,12 @@ public function test_delete_tsp_data(): void { ArchiveJob::STATUS_FINISHED ); - $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test.tar.gz' + ); $sha256dummy = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256dummy); @@ -260,7 +226,8 @@ public function test_signing_invalid_artifact(): void { set_config('tsp_enable', true, 'quiz_archiver'); // Generate job without artifact. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '30000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -298,7 +265,8 @@ public function test_signing_disabled(): void { set_config('tsp_enable', false, 'quiz_archiver'); // Generate job with artifact. - $mocks = $this->generate_mock_quiz(); + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); $job = ArchiveJob::create( '40000000-1234-5678-abcd-ef4242424242', $mocks->course->id, @@ -312,7 +280,12 @@ public function test_signing_disabled(): void { ArchiveJob::STATUS_FINISHED ); - $artifact = $this->generate_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'test.tar.gz'); + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'test.tar.gz' + ); $sha256sum = hash('sha256', 'foo bar baz'); $job->link_artifact($artifact->get_id(), $sha256sum); From 7bc39a2583d871a63eb44fbc91b3ad05feeadbf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 25 Jul 2024 14:01:51 +0200 Subject: [PATCH 117/185] Create unit tests for all form elements since they can contain logic --- classes/form/archive_quiz_form.php | 2 +- classes/form/artifact_delete_form.php | 2 +- classes/form/autoinstall_form.php | 4 +- classes/form/job_delete_form.php | 2 +- classes/form/job_sign_form.php | 2 +- .../archive_quiz_form_request_valid.json | 69 ++++++ tests/form/archive_quiz_form_test.php | 225 ++++++++++++++++++ tests/form/artifact_delete_form_test.php | 92 +++++++ tests/form/autoinstall_form_test.php | 47 ++++ tests/form/job_delete_form_test.php | 90 +++++++ tests/form/job_sign_form_test.php | 49 ++++ 11 files changed, 578 insertions(+), 6 deletions(-) create mode 100644 tests/fixtures/archive_quiz_form_request_valid.json create mode 100644 tests/form/archive_quiz_form_test.php create mode 100644 tests/form/artifact_delete_form_test.php create mode 100644 tests/form/autoinstall_form_test.php create mode 100644 tests/form/job_delete_form_test.php create mode 100644 tests/form/job_sign_form_test.php diff --git a/classes/form/archive_quiz_form.php b/classes/form/archive_quiz_form.php index cb730c0..cbfb07f 100644 --- a/classes/form/archive_quiz_form.php +++ b/classes/form/archive_quiz_form.php @@ -31,7 +31,7 @@ defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore -require_once($CFG->dirroot.'/lib/formslib.php'); +require_once($CFG->dirroot.'/lib/formslib.php'); // @codeCoverageIgnore /** diff --git a/classes/form/artifact_delete_form.php b/classes/form/artifact_delete_form.php index 21151d7..b9aa5fd 100644 --- a/classes/form/artifact_delete_form.php +++ b/classes/form/artifact_delete_form.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore -require_once($CFG->dirroot.'/lib/formslib.php'); +require_once($CFG->dirroot.'/lib/formslib.php'); // @codeCoverageIgnore /** diff --git a/classes/form/autoinstall_form.php b/classes/form/autoinstall_form.php index 749c862..6f0d16a 100644 --- a/classes/form/autoinstall_form.php +++ b/classes/form/autoinstall_form.php @@ -29,8 +29,8 @@ defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore -require_once($CFG->dirroot.'/lib/formslib.php'); -require_once($CFG->dirroot.'/mod/quiz/report/archiver/classes/local/autoinstall.php'); +require_once($CFG->dirroot.'/lib/formslib.php'); // @codeCoverageIgnore +require_once($CFG->dirroot.'/mod/quiz/report/archiver/classes/local/autoinstall.php'); // @codeCoverageIgnore /** diff --git a/classes/form/job_delete_form.php b/classes/form/job_delete_form.php index 0699c76..0abaa40 100644 --- a/classes/form/job_delete_form.php +++ b/classes/form/job_delete_form.php @@ -29,7 +29,7 @@ defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore -require_once($CFG->dirroot.'/lib/formslib.php'); +require_once($CFG->dirroot.'/lib/formslib.php'); // @codeCoverageIgnore /** diff --git a/classes/form/job_sign_form.php b/classes/form/job_sign_form.php index ec0eba6..ff3eb8d 100644 --- a/classes/form/job_sign_form.php +++ b/classes/form/job_sign_form.php @@ -27,7 +27,7 @@ defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore -require_once($CFG->dirroot.'/lib/formslib.php'); +require_once($CFG->dirroot.'/lib/formslib.php'); // @codeCoverageIgnore /** diff --git a/tests/fixtures/archive_quiz_form_request_valid.json b/tests/fixtures/archive_quiz_form_request_valid.json new file mode 100644 index 0000000..7164f4f --- /dev/null +++ b/tests/fixtures/archive_quiz_form_request_valid.json @@ -0,0 +1,69 @@ +{ + "id": "23", + "mode": "archiver", + "mform_isexpanded_id_header_advanced_settings": "1", + "archive_retention_time": "94608000", + "sesskey": "0", + "_qf__quiz_archiver_form_archive_quiz_form": "1", + "mform_isexpanded_id_header_settings": "1", + "export_attempts": "1", + "export_report_section_header": [ + "0", + "1" + ], + "export_report_section_quiz_feedback": [ + "0", + "1" + ], + "export_report_section_question": [ + "0", + "1" + ], + "export_report_section_question_feedback": [ + "0", + "1" + ], + "export_report_section_general_feedback": [ + "0", + "1" + ], + "export_report_section_rightanswer": [ + "0", + "1" + ], + "export_report_section_history": [ + "0", + "1" + ], + "export_report_section_attachments": [ + "0", + "1" + ], + "export_quiz_backup": [ + "0", + "1" + ], + "export_course_backup": [ + "0", + "1" + ], + "export_attempts_paper_format": "A4", + "archive_filename_pattern": "quiz-archive-${courseshortname}-${courseid}-${quizname}-${quizid}_${date}-${time}", + "export_attempts_filename_pattern": "attempt-${attemptid}-${username}_${date}-${time}", + "export_attempts_image_optimize": [ + "0", + "1" + ], + "export_attempts_image_optimize_width": "1280", + "export_attempts_image_optimize_height": "1280", + "export_attempts_image_optimize_quality": "85", + "export_attempts_keep_html_files": [ + "0", + "1" + ], + "archive_autodelete": [ + "0", + "1" + ], + "submitbutton": "Archive+quiz" +} \ No newline at end of file diff --git a/tests/form/archive_quiz_form_test.php b/tests/form/archive_quiz_form_test.php new file mode 100644 index 0000000..caef0c3 --- /dev/null +++ b/tests/form/archive_quiz_form_test.php @@ -0,0 +1,225 @@ +. + +/** + * Tests for the archive_quiz_form + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\form; + + +use quiz_archiver\ArchiveJob; + +/** + * Tests for the archive_quiz_form + */ +final class archive_quiz_form_test extends \advanced_testcase { + + /** + * Returns the data generator for the quiz_archiver plugin + * + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin + */ + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); + } + + /** + * Basic code coverage to verify validity of form definition and detect + * possible errors during form element definition. + * + * @covers \quiz_archiver\form\archive_quiz_form::__construct + * @covers \quiz_archiver\form\archive_quiz_form::definition + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_form_definition(): void { + // Create a mock archive job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '10000000-0000-0000-0000-0123456789ab'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Create the form and define it. + $form = new archive_quiz_form($mocks->quiz->name, count($mocks->attempts)); + $this->assertInstanceOf(\moodleform::class, $form); + } + + /** + * Test the custom form validation + * + * @dataProvider form_validation_data_provider + * @covers \quiz_archiver\form\archive_quiz_form::validation + * + * @param array $formdata + * @param bool $isvalid + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_form_validation(array $formdata, bool $isvalid): void { + // Create a mock archive job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '20000000-0000-0000-0000-0123456789ab'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Test that invalid filename patterns are filtered out. + $form = new archive_quiz_form($mocks->quiz->name, count($mocks->attempts)); + $errors = $form->validation($formdata, []); + if ($isvalid) { + $this->assertEmpty($errors, 'Form validation failed for valid input data.'); + } else { + $this->assertNotEmpty($errors, 'Form validation succeeded for invalid input data.'); + } + } + + /** + * Data provider for test_form_validation + * + * @return array[] Test data + */ + public static function form_validation_data_provider(): array { + return [ + 'Valid data' => [ + [ + 'archive_filename_pattern' => 'archive-${courseshortname}', + 'export_attempts_filename_pattern' => 'attempt-${attemptid}', + ], + true, + ], + 'Invalid archive filename pattern' => [ + [ + 'archive_filename_pattern' => 'archive-${courseshortname', + 'export_attempts_filename_pattern' => 'attempt-${attemptid}', + ], + false, + ], + 'Invalid attempt filename pattern' => [ + [ + 'archive_filename_pattern' => 'archive-${courseshortname}', + 'export_attempts_filename_pattern' => 'attempt-${attemptid', + ], + false, + ], + ]; + } + + /** + * Test custom form data overrides. Tests that locked settings can not be + * overridden by spoofed POST data. + * + * @dataProvider get_data_data_provider + * @covers \quiz_archiver\form\archive_quiz_form::get_data + * + * @param string $optionkey Job option key to test + * @param mixed $optionpresetvalue Preset value for the job option + * @param mixed $postvalue Value to be provided via POST + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_get_data(string $optionkey, mixed $optionpresetvalue, mixed $postvalue): void { + global $USER; + + // Create a mock archive job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '30000000-0000-0000-0000-0123456789ab'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Prepare locked preset value. + set_config("job_preset_{$optionkey}", $optionpresetvalue, 'quiz_archiver'); + set_config("job_preset_{$optionkey}_locked", 1, 'quiz_archiver'); + + // Load valid form POST data and create form. + $USER->ignoresesskey = true; + $validpostdata = json_decode( + file_get_contents(__DIR__.'/../fixtures/archive_quiz_form_request_valid.json'), + true + ); + foreach ($validpostdata as $key => $value) { + $_POST[$key] = $value; + } + $_POST[$optionkey] = $postvalue; + $form = new archive_quiz_form($mocks->quiz->name, count($mocks->attempts)); + + // Verify that the preset value is locked and cannot be overridden, even if different data is provided via POST. + $this->assertEquals( + $optionpresetvalue, + $form->get_data()->{$optionkey}, + "Preset value for {$optionkey} was overridden even though is is locked." + ); + } + + /** + * Data provider for test_get_data + * + * @return array[] Test data + */ + public static function get_data_data_provider(): array { + return [ + 'Job preset locked: Export quiz attempts' => ['export_attempts', '1', '0'], + 'Job preset locked: Include correct answers' => ['export_report_section_rightanswer', '0', '1'], + 'Job preset locked: Include answer history' => ['export_report_section_history', '0', '1'], + 'Job preset locked: Include file attachments' => ['export_report_section_attachments', '1', '0'], + 'Job preset locked: Export quiz backup' => ['export_quiz_backup', '1', '0'], + 'Job preset locked: Export course backup' => ['export_course_backup', '0', '1'], + 'Job preset locked: Optimize images' => ['export_attempts_image_optimize', '1', '0'], + 'Job preset locked: Automatic deletion' => ['archive_autodelete', '0', '1'], + 'Job preset locked: Retention time' => ['archive_retention_time', '315360000', '60'], + ]; + } + +} diff --git a/tests/form/artifact_delete_form_test.php b/tests/form/artifact_delete_form_test.php new file mode 100644 index 0000000..85f5b5d --- /dev/null +++ b/tests/form/artifact_delete_form_test.php @@ -0,0 +1,92 @@ +. + +/** + * Tests for the artifact_delete_form + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\form; + + +use quiz_archiver\ArchiveJob; + +/** + * Tests for the artifact_delete_form + */ +final class artifact_delete_form_test extends \advanced_testcase { + + /** + * Returns the data generator for the quiz_archiver plugin + * + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin + */ + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); + } + + /** + * Basic code coverage to verify validity of form definition and detect + * possible errors during form element definition. + * + * @covers \quiz_archiver\form\artifact_delete_form::__construct + * @covers \quiz_archiver\form\artifact_delete_form::definition + * + * @return void + * @throws \dml_exception + * @throws \file_exception + * @throws \moodle_exception + * @throws \stored_file_creation_exception + */ + public function test_form_definition(): void { + // Create a mock archive job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '10000000-0000-0000-0000-0123456789ab'; + $job = ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + 3600, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Create a mock artifact file. + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'testartifact.tar.gz' + ); + $sha256dummy = hash('sha256', 'foo bar baz'); + $job->link_artifact($artifact->get_id(), $sha256dummy); + $job->set_status(ArchiveJob::STATUS_FINISHED); + + // Create the form and define it. + $_POST['jobid'] = $jobid; + $form = new artifact_delete_form(); + $this->assertInstanceOf(\moodleform::class, $form); + } + +} diff --git a/tests/form/autoinstall_form_test.php b/tests/form/autoinstall_form_test.php new file mode 100644 index 0000000..142aa34 --- /dev/null +++ b/tests/form/autoinstall_form_test.php @@ -0,0 +1,47 @@ +. + +/** + * Tests for the autoinstall_form + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\form; + + +/** + * Tests for the autoinstall_form + */ +final class autoinstall_form_test extends \advanced_testcase { + + /** + * Basic code coverage to verify validity of form definition and detect + * possible errors during form element definition. + * + * @covers \quiz_archiver\form\autoinstall_form::__construct + * @covers \quiz_archiver\form\autoinstall_form::definition + * + * @return void + */ + public function test_form_definition(): void { + $form = new autoinstall_form(); + $this->assertInstanceOf(\moodleform::class, $form); + } + +} diff --git a/tests/form/job_delete_form_test.php b/tests/form/job_delete_form_test.php new file mode 100644 index 0000000..6c4f812 --- /dev/null +++ b/tests/form/job_delete_form_test.php @@ -0,0 +1,90 @@ +. + +/** + * Tests for the job_delete_form + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\form; + + +use quiz_archiver\ArchiveJob; + +/** + * Tests for the job_delete_form + */ +final class job_delete_form_test extends \advanced_testcase { + + /** + * Returns the data generator for the quiz_archiver plugin + * + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin + */ + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); + } + + /** + * Basic code coverage to verify validity of form definition and detect + * possible errors during form element definition. + * + * @covers \quiz_archiver\form\job_delete_form::__construct + * @covers \quiz_archiver\form\job_delete_form::definition + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_form_definition(): void { + // Create a mock archive job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '10000000-0000-0000-0000-0123456789ab'; + $job = ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + 3600, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Create a mock artifact file. + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + 'testartifact.tar.gz' + ); + $sha256dummy = hash('sha256', 'foo bar baz'); + $job->link_artifact($artifact->get_id(), $sha256dummy); + $job->set_status(ArchiveJob::STATUS_FINISHED); + + // Create and define the form. + $_POST['jobid'] = $jobid; + $form = new job_delete_form(); + $this->assertInstanceOf(\moodleform::class, $form); + } + +} diff --git a/tests/form/job_sign_form_test.php b/tests/form/job_sign_form_test.php new file mode 100644 index 0000000..ce4e235 --- /dev/null +++ b/tests/form/job_sign_form_test.php @@ -0,0 +1,49 @@ +. + +/** + * Tests for the job_sign_form + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver\form; + + +/** + * Tests for the job_sign_form + */ +final class job_sign_form_test extends \advanced_testcase { + + /** + * Basic code coverage to verify validity of form definition and detect + * possible errors during form element definition. + * + * @covers \quiz_archiver\form\job_sign_form::__construct + * @covers \quiz_archiver\form\job_sign_form::definition + * + * @return void + */ + public function test_form_definition(): void { + // Create the form and define it. + $_POST['jobid'] = '10000000-0000-0000-0000-0123456789ab'; + $form = new job_sign_form(); + $this->assertInstanceOf(\moodleform::class, $form); + } + +} From b4471bae89ab01346ab90467a7fba10016ad7f25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 25 Jul 2024 15:56:08 +0200 Subject: [PATCH 118/185] Provide translation for core language string 'progress' (Missing in <= 4.1) --- classes/output/job_overview_table.php | 2 +- lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 1 + templates/job_details.mustache | 2 +- 4 files changed, 4 insertions(+), 2 deletions(-) diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index c09a885..edb8c59 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -118,7 +118,7 @@ public function col_status($values) { $html .= ''.$s['text'].'
    '; if (isset($s['statusextras']['progress'])) { - $html .= ''; + $html .= ''; $html .= ' '.$s['statusextras']['progress'].'%'; $html .= '
    '; } diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 6cd3028..17309ae 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -39,6 +39,7 @@ $string['quiz_archiver:use_webservice'] = 'Webservice des Quiz Archivers nutzen (lesend und schreibend)'; // General. +$string['progress'] = 'Fortschritt'; $string['quiz_archive'] = 'Testarchiv'; $string['quiz_archive_details'] = 'Details des Testarchivs'; $string['quiz_archive_not_found'] = 'Testarchiv nicht gefunden'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 48c39ca..f32265f 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -39,6 +39,7 @@ $string['quiz_archiver:use_webservice'] = 'Use the quiz archiver webservice (read and write)'; // General. +$string['progress'] = 'Progress'; $string['quiz_archive'] = 'Quiz archive'; $string['quiz_archive_details'] = 'Quiz archive details'; $string['quiz_archive_not_found'] = 'Quiz archive not found'; diff --git a/templates/job_details.mustache b/templates/job_details.mustache index 73292aa..029ad8e 100644 --- a/templates/job_details.mustache +++ b/templates/job_details.mustache @@ -128,7 +128,7 @@
    {{#status_display_args.statusextras.progress}} -  –  {{#str}} progress {{/str}}: +  –  {{#str}} progress, quiz_archiver {{/str}}: {{status_display_args.statusextras.progress}}% {{/status_display_args.statusextras.progress}} From 547661e910f72f9d674e363a7b7a7273e3cb04d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 25 Jul 2024 16:02:16 +0200 Subject: [PATCH 119/185] Remove mixed type definition for archive_quiz_form_test data provider due to PHP 7.4 compatibility issues --- tests/form/archive_quiz_form_test.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/form/archive_quiz_form_test.php b/tests/form/archive_quiz_form_test.php index caef0c3..316d1fb 100644 --- a/tests/form/archive_quiz_form_test.php +++ b/tests/form/archive_quiz_form_test.php @@ -160,7 +160,7 @@ public static function form_validation_data_provider(): array { * @throws \dml_exception * @throws \moodle_exception */ - public function test_get_data(string $optionkey, mixed $optionpresetvalue, mixed $postvalue): void { + public function test_get_data(string $optionkey, $optionpresetvalue, $postvalue): void { global $USER; // Create a mock archive job. From 566e4b644e47dbd4bc639a6d935dd2b396411af2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 25 Jul 2024 18:13:41 +0200 Subject: [PATCH 120/185] Improve parameter validation tests and overall coverage within external web service functions --- CHANGELOG.md | 4 + classes/external/generate_attempt_report.php | 17 +- classes/external/get_attempts_metadata.php | 12 +- classes/external/get_backup_status.php | 7 + .../external/process_uploaded_artifact.php | 7 + .../external/generate_attempt_report_test.php | 141 ++++++++++----- tests/external/get_attempts_metadata_test.php | 161 ++++++++++++++---- tests/external/get_backup_status_test.php | 12 +- .../process_uploaded_artifact_test.php | 98 +++++++++++ 9 files changed, 375 insertions(+), 84 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9262c6e..090a1f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ - `WAITING_FOR_BACKUP`: All attempt reports are generated and the archive worker service is waiting for the Moodle backup to be ready. - `FINALIZING`: The archive worker service is finalizing the archive creation process (checksums, compression, ...). +- Add additional soft error handling to some web service functions +- Expanding unit test coverage to include the whole plugin logic +- Optimizing unit test code to improve readability and maintainability +- Minor compatibility fixes for PHP 7.4 and Moodle 4.1 (LTS) ## Version 1.3.0 (2024071800) diff --git a/classes/external/generate_attempt_report.php b/classes/external/generate_attempt_report.php index 4c1f622..50a4421 100644 --- a/classes/external/generate_attempt_report.php +++ b/classes/external/generate_attempt_report.php @@ -214,15 +214,22 @@ public static function execute( ]); // Check capabilities. - $context = \context_module::instance($params['cmid']); + try { + $context = \context_module::instance($params['cmid']); + } catch (\dml_exception $e) { + throw new \invalid_parameter_exception("No module context with given cmid found"); + } require_capability('mod/quiz_archiver:use_webservice', $context); // Acquire required data objects. if (!$course = $DB->get_record('course', ['id' => $params['courseid']])) { throw new \invalid_parameter_exception("No course with given courseid found"); } - if (!$cm = get_coursemodule_from_instance("quiz", $params['quizid'], $params['courseid'])) { + if (!$cm = get_coursemodule_from_id("quiz", $params['cmid'])) { + // @codeCoverageIgnoreStart + // This should be covered by the context query above but stays as a safeguard nonetheless. throw new \invalid_parameter_exception("No course module with given cmid found"); + // @codeCoverageIgnoreEnd } if (!$quiz = $DB->get_record('quiz', ['id' => $params['quizid']])) { throw new \invalid_parameter_exception("No quiz with given quizid found"); @@ -244,6 +251,10 @@ public static function execute( // Forcefully set URL in $PAGE to the webservice handler to prevent further warnings. $PAGE->set_url(new \moodle_url('/webservice/rest/server.php', ['wsfunction' => 'quiz_archiver_generate_attempt_report'])); + // The following code is tested covered by more specific tests. + // @codingStandardsIgnoreLine + // @codeCoverageIgnoreStart + // Generate report. $report = new Report($course, $cm, $quiz); if (!$report->has_access(optional_param('wstoken', null, PARAM_TEXT))) { @@ -277,6 +288,8 @@ public static function execute( $res['status'] = 'OK'; return $res; + // @codingStandardsIgnoreLine + // @codeCoverageIgnoreEnd } } diff --git a/classes/external/get_attempts_metadata.php b/classes/external/get_attempts_metadata.php index c676016..de98eeb 100644 --- a/classes/external/get_attempts_metadata.php +++ b/classes/external/get_attempts_metadata.php @@ -36,6 +36,7 @@ use core_external\external_single_structure; use core_external\external_value; use quiz_archiver\Report; +use Random\RandomError; /** * API endpoint to access quiz attempt metadata @@ -181,15 +182,22 @@ public static function execute(int $courseidraw, int $cmidraw, int $quizidraw, a ]); // Check capabilities. - $context = \context_module::instance($params['cmid']); + try { + $context = \context_module::instance($params['cmid']); + } catch (\dml_exception $e) { + throw new \invalid_parameter_exception("No module context with given cmid found"); + } require_capability('mod/quiz_archiver:use_webservice', $context); // Acquire required data objects. if (!$course = $DB->get_record('course', ['id' => $params['courseid']])) { throw new \invalid_parameter_exception("No course with given courseid found"); } - if (!$cm = get_coursemodule_from_instance("quiz", $params['quizid'], $params['courseid'])) { + if (!$cm = get_coursemodule_from_id("quiz", $params['cmid'])) { + // @codeCoverageIgnoreStart + // This should be covered by the context query above but stays as a safeguard nonetheless. throw new \invalid_parameter_exception("No course module with given cmid found"); + // @codeCoverageIgnoreEnd } if (!$quiz = $DB->get_record('quiz', ['id' => $params['quizid']])) { throw new \invalid_parameter_exception("No quiz with given quizid found"); diff --git a/classes/external/get_backup_status.php b/classes/external/get_backup_status.php index 3d2a561..c95186c 100644 --- a/classes/external/get_backup_status.php +++ b/classes/external/get_backup_status.php @@ -112,6 +112,10 @@ public static function execute( $context = \context_module::instance($job->get_cmid()); require_capability('mod/quiz_archiver:use_webservice', $context); + // The following code is tested covered by more specific tests. + // @codingStandardsIgnoreLine + // @codeCoverageIgnoreStart + // Get backup. try { $bm = new BackupManager($params['backupid']); @@ -133,6 +137,9 @@ public static function execute( // Report success. return ['status' => 'SUCCESS']; + + // @codingStandardsIgnoreLine + // @codeCoverageIgnoreEnd } } diff --git a/classes/external/process_uploaded_artifact.php b/classes/external/process_uploaded_artifact.php index 444b871..efc5c7e 100644 --- a/classes/external/process_uploaded_artifact.php +++ b/classes/external/process_uploaded_artifact.php @@ -200,6 +200,10 @@ public static function execute( ]; } + // The following code is tested covered by more specific tests. + // @codingStandardsIgnoreLine + // @codeCoverageIgnoreStart + // Store uploaded file. $fm = new FileManager($job->get_courseid(), $job->get_cmid(), $job->get_quizid()); try { @@ -234,6 +238,9 @@ public static function execute( return [ 'status' => 'OK', ]; + + // @codingStandardsIgnoreLine + // @codeCoverageIgnoreEnd } } diff --git a/tests/external/generate_attempt_report_test.php b/tests/external/generate_attempt_report_test.php index a80da3d..e20cb20 100644 --- a/tests/external/generate_attempt_report_test.php +++ b/tests/external/generate_attempt_report_test.php @@ -24,6 +24,7 @@ namespace quiz_archiver\external; +use quiz_archiver\ArchiveJob; use quiz_archiver\Report; /** @@ -122,47 +123,109 @@ public function test_capability_requirement(): void { ); } + /** + * Test web service part of processing of a valid request + * + * @covers \quiz_archiver\external\generate_attempt_report::execute + * + * @return void + * @throws \DOMException + * @throws \coding_exception + * @throws \dml_exception + * @throws \dml_transaction_exception + * @throws \moodle_exception + */ + public function test_execute(): void { + // Create mock quiz and archive job. + $this->resetAfterTest(); + $this->setAdminUser(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '10000000-0000-0000-0000-0123456789ab'; + $wstoken = 'TEST-WS-TOKEN-1'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Create a valid request. + $r = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + $_GET['wstoken'] = $wstoken; + + // Execute the request. + $this->expectException(\invalid_parameter_exception::class); + $this->expectExceptionMessage('No attempt with given attemptid found'); + generate_attempt_report::execute( + $r['courseid'], + $r['cmid'], + $r['quizid'], + $r['attemptid'], + $r['filenamepattern'], + $r['sections'], + $r['attachments'] + ); + } + /** * Verifies webservice parameter validation * - * @dataProvider parameter_data_provider + * @dataProvider parameter_validation_data_provider * @covers \quiz_archiver\external\generate_attempt_report::execute * @covers \quiz_archiver\external\generate_attempt_report::validate_parameters * - * @param int $courseid Course ID - * @param int $cmid Course module ID - * @param int $quizid Quiz ID - * @param int $attemptid Attempt ID - * @param string $filenamepattern Filename pattern - * @param array $sections Sections settings array - * @param bool $attachments Whether to include attachments - * @param bool $shouldfail Whether a failure is expected + * @param string $invalidparameterkey Key of the parameter to invalidate * @return void * @throws \DOMException + * @throws \dml_exception + * @throws \dml_transaction_exception * @throws \moodle_exception */ - public function test_parameter_validation( - int $courseid, - int $cmid, - int $quizid, - int $attemptid, - string $filenamepattern, - array $sections, - bool $attachments, - bool $shouldfail - ): void { + public function test_parameter_validation(string $invalidparameterkey): void { + // Create mock quiz and archive job. $this->resetAfterTest(); + $this->setAdminUser(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '20000000-0000-0000-0000-0123456789ab'; + $wstoken = 'TEST-WS-TOKEN-2'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-2', + $mocks->attempts, + $mocks->settings + ); - if ($shouldfail) { - $this->expectException(\invalid_parameter_exception::class); - } + // Create a request. + $r = $this->generate_valid_request( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->attempts[0]->attemptid + ); + $_GET['wstoken'] = $wstoken; - try { - generate_attempt_report::execute($courseid, $cmid, $quizid, $attemptid, $filenamepattern, $sections, $attachments); - // @codingStandardsIgnoreLine - } catch (\dml_missing_record_exception $e) { - // Ignore. - } + // Execute the request. + $this->expectException(\invalid_parameter_exception::class); + $this->expectExceptionMessageMatches('/.*'.$invalidparameterkey.'.*/'); + generate_attempt_report::execute( + $invalidparameterkey == 'courseid' ? 0 : $r['courseid'], + $invalidparameterkey == 'cmid' ? 0 : $r['cmid'], + $invalidparameterkey == 'quizid' ? 0 : $r['quizid'], + $invalidparameterkey == 'attemptid' ? 0 : $r['attemptid'], + $invalidparameterkey == 'filename pattern' ? 'invalid-${pattern' : $r['filenamepattern'], + $invalidparameterkey == 'sections' ? [] : $r['sections'], + $r['attachments'] + ); } /** @@ -170,22 +233,14 @@ public function test_parameter_validation( * * @return array[] Test data */ - public static function parameter_data_provider(): array { - $self = new self(); - $mocks = $self->getDataGenerator()->create_mock_quiz(); - $base = $self->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + public static function parameter_validation_data_provider(): array { return [ - 'Valid' => array_merge($base, [ - 'shouldfail' => false, - ]), - 'Invalid filenamepattern' => array_merge($base, [ - 'filenamepattern' => 'Foo', - 'shouldfail' => true, - ]), - 'Invalid sections' => array_merge($base, [ - 'sections' => ['foo' => true], - 'shouldfail' => true, - ]), + 'Invalid courseid' => ['courseid'], + 'Invalid cmid' => ['cmid'], + 'Invalid quizid' => ['quizid'], + 'Invalid attemptid' => ['attemptid'], + 'Invalid filenamepattern' => ['filename pattern'], + 'Invalid sections' => ['sections'], ]; } diff --git a/tests/external/get_attempts_metadata_test.php b/tests/external/get_attempts_metadata_test.php index 4648bae..354153e 100644 --- a/tests/external/get_attempts_metadata_test.php +++ b/tests/external/get_attempts_metadata_test.php @@ -24,6 +24,8 @@ namespace quiz_archiver\external; +use quiz_archiver\ArchiveJob; + /** * Tests for the get_attempts_metadata external service */ @@ -112,40 +114,144 @@ public function test_capability_requirement(): void { ); } + /** + * Tests that only web service tokens with read access to a job can request + * attempt metadata + * + * @covers \quiz_archiver\external\get_attempts_metadata::execute + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \invalid_parameter_exception + * @throws \moodle_exception + * @throws \required_capability_exception + */ + public function test_wstoken_write_access_check(): void { + // Create job. + $this->resetAfterTest(); + $this->setAdminUser(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + ArchiveJob::create( + '11000000-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN', + [], + [] + ); + + // Execute test call. + $_GET['wstoken'] = 'INVALID-WS-TOKEN'; + $r = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $res = get_attempts_metadata::execute( + $r['courseid'], + $r['cmid'], + $r['quizid'], + $r['attemptids'], + ); + + // Ensure that the access was denied. + $this->assertSame(['status' => 'E_ACCESS_DENIED'], $res, 'Websertice token without access rights was falsely accepted'); + } + + /** + * Test web service part of processing of a valid request + * + * @covers \quiz_archiver\external\get_attempts_metadata::execute + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \dml_transaction_exception + * @throws \moodle_exception + */ + public function test_execute(): void { + // Create mock quiz and archive job. + $this->resetAfterTest(); + $this->setAdminUser(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '10000000-0000-0000-0000-0123456789ab'; + $wstoken = 'TEST-WS-TOKEN-1'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Create a valid request. + $r = $this->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); + $_GET['wstoken'] = $wstoken; + + // Execute the request. + $res = get_attempts_metadata::execute( + $r['courseid'], + $r['cmid'], + $r['quizid'], + $r['attemptids'], + ); + $this->assertSame('OK', $res['status'], 'The status should be OK.'); + $this->assertArrayHasKey('attempts', $res, 'The response should contain an attempts key.'); + } + /** * Verifies webservice parameter validation * - * @dataProvider parameter_data_provider + * @dataProvider parameter_validation_data_provider * @covers \quiz_archiver\external\get_attempts_metadata::execute * @covers \quiz_archiver\external\get_attempts_metadata::validate_parameters * - * @param int $courseid Course ID - * @param int $cmid Course module ID - * @param int $quizid Quiz ID - * @param array $attemptids Array of attempt IDs - * @param bool $shouldfail Whether a failure is expected + * @param string $invalidparameterkey Key of the parameter to invalidate * @return void + * @throws \dml_exception + * @throws \dml_transaction_exception * @throws \moodle_exception */ - public function test_parameter_validation( - int $courseid, - int $cmid, - int $quizid, - array $attemptids, - bool $shouldfail - ): void { + public function test_parameter_validation(string $invalidparameterkey): void { + // Create mock quiz and archive job. $this->resetAfterTest(); + $this->setAdminUser(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '20000000-0000-0000-0000-0123456789ab'; + $wstoken = 'TEST-WS-TOKEN-2'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-2', + $mocks->attempts, + $mocks->settings + ); - if ($shouldfail) { - $this->expectException(\invalid_parameter_exception::class); - } + // Create a request. + $r = $this->generate_valid_request( + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id + ); + $_GET['wstoken'] = $wstoken; - try { - get_attempts_metadata::execute($courseid, $cmid, $quizid, $attemptids); - // @codingStandardsIgnoreLine - } catch (\dml_exception $e) { - // Ignore. - } + // Execute the request. + $this->expectException(\invalid_parameter_exception::class); + $this->expectExceptionMessageMatches('/.*'.$invalidparameterkey.'.*/'); + get_attempts_metadata::execute( + $invalidparameterkey == 'courseid' ? 0 : $r['courseid'], + $invalidparameterkey == 'cmid' ? 0 : $r['cmid'], + $invalidparameterkey == 'quizid' ? 0 : $r['quizid'], + $r['attemptids'] + ); } /** @@ -153,14 +259,11 @@ public function test_parameter_validation( * * @return array[] Test data */ - public static function parameter_data_provider(): array { - $self = new self(); - $mocks = $self->getDataGenerator()->create_mock_quiz(); - $base = $self->generate_valid_request($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 1); + public static function parameter_validation_data_provider(): array { return [ - 'Valid' => array_merge($base, ['shouldfail' => false]), - 'Invalid attemptids (simple)' => array_merge($base, ['attemptids' => ['a'], 'shouldfail' => true]), - 'Invalid attemptids (mixed)' => array_merge($base, ['attemptids' => [1, 2, 3, 4, 5, 'a'], 'shouldfail' => true]), + 'Invalid courseid' => ['courseid'], + 'Invalid cmid' => ['cmid'], + 'Invalid quizid' => ['quizid'], ]; } diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index f0536ab..65fb9c5 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -110,14 +110,15 @@ public function test_assure_return_parameter_spec(): void { * Verifies webservice parameter validation * * @dataProvider parameter_data_provider - * @covers \quiz_archiver\external\get_backup_status::execute - * @covers \quiz_archiver\external\get_backup_status::validate_parameters + * @covers \quiz_archiver\external\get_backup_status::execute + * @covers \quiz_archiver\external\get_backup_status::validate_parameters * * @param string $jobid Job ID * @param string $backupid Backup ID * @param bool $shouldfail Whether a failure is expected * @return void * @throws \coding_exception + * @throws \dml_exception * @throws \invalid_parameter_exception * @throws \required_capability_exception */ @@ -132,12 +133,7 @@ public function test_parameter_validation( $this->expectException(\invalid_parameter_exception::class); } - try { - get_backup_status::execute($jobid, $backupid); - // @codingStandardsIgnoreLine - } catch (\dml_exception $e) { - // Ignore. - } + get_backup_status::execute($jobid, $backupid); } /** diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index f98c734..09f348b 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -141,6 +141,54 @@ public function test_capability_requirement(): void { ); } + /** + * Tests that only web service tokens with write access to a job can trigger + * artifact upload processing + * + * @covers \quiz_archiver\external\process_uploaded_artifact::execute + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \invalid_parameter_exception + * @throws \moodle_exception + * @throws \required_capability_exception + */ + public function test_wstoken_write_access_check(): void { + // Create job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $job = ArchiveJob::create( + '11000000-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN', + [], + [] + ); + + // Execute test call. + $_GET['wstoken'] = 'INVALID-WS-TOKEN'; + $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); + $res = process_uploaded_artifact::execute( + $r['jobid'], + $r['artifact_component'], + $r['artifact_contextid'], + $r['artifact_userid'], + $r['artifact_filearea'], + $r['artifact_filename'], + $r['artifact_filepath'], + $r['artifact_itemid'], + $r['artifact_sha256sum'] + ); + + // Ensure that the access was denied. + $this->assertSame(['status' => 'E_ACCESS_DENIED'], $res, 'Websertice token without access rights was falsely accepted'); + } + /** * Verifies webservice parameter validation * @@ -327,4 +375,54 @@ public function test_invalid_file_metadata(): void { )); } + /** + * Tests rejection of artifacts with mismatching checksums + * + * @covers \quiz_archiver\external\process_uploaded_artifact::execute + * + * @return void + * @throws \coding_exception + * @throws \dml_exception + * @throws \file_exception + * @throws \invalid_parameter_exception + * @throws \moodle_exception + * @throws \required_capability_exception + * @throws \stored_file_creation_exception + */ + public function test_rejection_of_artifacts_with_checksum_mismatch(): void { + // Create job and draft artifact. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $job = ArchiveJob::create( + '40000000-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN', + [], + [] + ); + $artifact = $this->getDataGenerator()->create_draft_file('testartifact.tar.gz'); + + // Gain access. + $_GET['wstoken'] = 'TEST-WS-TOKEN'; + $this->setAdminUser(); + + // Execute test call. + $r = $this->generate_valid_request($job->get_jobid(), $mocks->quiz->cmid, $mocks->user->id); + $this->assertSame(['status' => 'E_ARTIFACT_CHECKSUM_INVALID'], process_uploaded_artifact::execute( + $r['jobid'], + $artifact->get_component(), + $artifact->get_contextid(), + (int) $artifact->get_userid(), // Int cast is required since Moodle likes to return strings here... + $artifact->get_filearea(), + $artifact->get_filename(), + $artifact->get_filepath(), + $artifact->get_itemid(), + '1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' + )); + } + } From 1a331608fdb4c688ea3bd43e0066f1554bce9fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 12:46:14 +0200 Subject: [PATCH 121/185] Create unit test for data generator --- tests/generator_test.php | 239 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 239 insertions(+) create mode 100644 tests/generator_test.php diff --git a/tests/generator_test.php b/tests/generator_test.php new file mode 100644 index 0000000..83670e6 --- /dev/null +++ b/tests/generator_test.php @@ -0,0 +1,239 @@ +. + +/** + * Tests for the quiz_archiver test data generator + * + * @package quiz_archiver + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace quiz_archiver; + + +/** + * Tests for the quiz_archiver_generator class + */ +final class generator_test extends \advanced_testcase { + + /** + * Returns the data generator for the quiz_archiver plugin + * + * @return \quiz_archiver_generator The data generator for the quiz_archiver plugin + */ + // @codingStandardsIgnoreLine + public static function getDataGenerator(): \quiz_archiver_generator { + return parent::getDataGenerator()->get_plugin_generator('quiz_archiver'); + } + + /** + * Tests that the generator can create a mock quiz + * + * @covers \quiz_archiver_generator::create_mock_quiz + * + * @return void + * @throws \dml_exception + */ + public function test_create_mock_quiz(): void { + global $DB; + + // Generate mock quiz. + $generator = self::getDataGenerator(); + $this->resetAfterTest(); + $mocks = $generator->create_mock_quiz(); + + // Test generic object. + $this->assertNotEmpty($mocks, 'The mocks were not created'); + + // Check user. + $this->assertNotEmpty($mocks->user, 'The user was not created'); + $this->assertNotEmpty($DB->get_record('user', ['id' => $mocks->user->id]), 'The user was not created correctly'); + + // Check course. + $this->assertNotEmpty($mocks->course, 'The course was not created'); + $this->assertNotEmpty($DB->get_record('course', ['id' => $mocks->course->id]), 'The course was not created correctly'); + + // Check quiz. + $this->assertNotEmpty($mocks->quiz, 'The quiz was not created'); + $this->assertNotEmpty($DB->get_record('quiz', ['id' => $mocks->quiz->id]), 'The quiz was not created correctly'); + + // Check attempts and settings. + $this->assertCount(3, $mocks->attempts, 'The mock attempts were not created correctly'); + $this->assertSame(count($mocks->attempts), $mocks->settings['num_attempts'], 'The job settings attempt count is incorrect'); + $this->assertGreaterThan(10, count($mocks->settings), 'The job settings are incomplete'); + } + + /** + * Tests the creation of an artifact file associated with a quiz + * + * @covers \quiz_archiver_generator::create_artifact_file + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_create_artifact_file(): void { + // Create mock quiz and artifact file. + $generator = self::getDataGenerator(); + $this->resetAfterTest(); + $mocks = $generator->create_mock_quiz(); + $artifact = $generator->create_artifact_file($mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id, 'testfile.txt'); + + // Verify artifact file. + $this->assertNotEmpty($artifact, 'The artifact file was not created'); + $this->assertEquals('testfile.txt', $artifact->get_filename(), 'The artifact file has the wrong filename'); + $this->assertEquals( + FileManager::COMPONENT_NAME, + $artifact->get_component(), + 'The artifact file has the wrong component' + ); + $this->assertEquals( + FileManager::ARTIFACTS_FILEAREA_NAME, + $artifact->get_filearea(), + 'The artifact file has the wrong filearea' + ); + $this->assertEquals( + "/{$mocks->course->id}/{$mocks->quiz->cmid}/{$mocks->quiz->id}/", + $artifact->get_filepath(), + 'The artifact file has the wrong filepath' + ); + $this->assertStringContainsString( + 'Lorem ipsum dolor sit amet', + $artifact->get_content(), + 'The artifact file has the wrong content' + ); + } + + /** + * Tests the creation of a draft file + * + * @covers \quiz_archiver_generator::create_draft_file + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_create_draft_file(): void { + // Create new draft file. + $generator = self::getDataGenerator(); + $this->resetAfterTest(); + $draftfile = $generator->create_draft_file('drafttestfile.txt'); + + // Verify draft file. + $this->assertNotEmpty($draftfile, 'The draft file was not created'); + $this->assertEquals('drafttestfile.txt', $draftfile->get_filename(), 'The draft file has the wrong filename'); + $this->assertEquals('user', $draftfile->get_component(), 'The draft file has the wrong component'); + $this->assertEquals('draft', $draftfile->get_filearea(), 'The draft file has the wrong filearea'); + $this->assertStringContainsString( + 'Lorem ipsum dolor sit amet', + $draftfile->get_content(), + 'The draft file has the wrong content' + ); + } + + /** + * Tests the import of the reference course + * + * @covers \quiz_archiver_generator::import_reference_course + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + * @throws \restore_controller_exception + */ + public function test_import_reference_course(): void { + // Import reference course. + $generator = self::getDataGenerator(); + $this->resetAfterTest(); + $rc = $generator->import_reference_course(); + + // Verify reference quiz. + $this->assertNotEmpty($rc, 'The reference quiz was not imported'); + $this->assertNotEmpty($rc->course, 'The reference course was not imported'); + $this->assertNotEmpty($rc->cm, 'The reference course module was not imported'); + $this->assertNotEmpty($rc->quiz, 'The reference quiz was not imported'); + $this->assertCount(1, $rc->attemptids, 'The reference quiz attempts were not imported'); + $this->assertCount(1, $rc->userids, 'The reference user IDs were not imported'); + + $this->assertStringContainsString('Reference Quiz', $rc->quiz->name, 'The reference quiz has the wrong name'); + } + + /** + * Tests the import of the reference quiz artifact file into the draft + * filearea + * + * @covers \quiz_archiver_generator::import_reference_quiz_artifact_as_draft + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_import_reference_quiz_artifact_as_draft(): void { + // Import reference quiz artifact as draft. + $generator = self::getDataGenerator(); + $this->resetAfterTest(); + $artifact = $generator->import_reference_quiz_artifact_as_draft(); + + // Verify artifact file. + $this->assertNotEmpty($artifact, 'The artifact file was not imported'); + $this->assertEquals( + 'reference_quiz_artifact.tar.gz', + $artifact->get_filename(), + 'The artifact file has the wrong filename' + ); + $this->assertEquals( + 'user', + $artifact->get_component(), + 'The artifact file has the wrong component' + ); + $this->assertEquals( + 'draft', + $artifact->get_filearea(), + 'The artifact file has the wrong filearea' + ); + $this->assertGreaterThan(16384, $artifact->get_filesize(), 'The artifact file is too small'); + } + + /** + * Tests the creation of a temp file with an expiry date + * + * @covers \quiz_archiver_generator::create_temp_file + * + * @return void + * @throws \file_exception + * @throws \stored_file_creation_exception + */ + public function test_create_temp_file(): void { + // Create a new temp file with an expiry date. + $generator = self::getDataGenerator(); + $this->resetAfterTest(); + $tempfile = $generator->create_temp_file('tempfile.txt', 1337); + + // Verify temp file. + $this->assertNotEmpty($tempfile, 'The temp file was not created'); + $this->assertEquals('tempfile.txt', $tempfile->get_filename(), 'The temp file has the wrong filename'); + $this->assertEquals(FileManager::COMPONENT_NAME, $tempfile->get_component(), 'The temp file has the wrong component'); + $this->assertEquals(FileManager::TEMP_FILEAREA_NAME, $tempfile->get_filearea(), 'The temp file has the wrong filearea'); + $this->assertEquals('/1337/', $tempfile->get_filepath(), 'The temp file has the wrong filepath / expiry date'); + $this->assertStringContainsString( + 'Lorem ipsum dolor sit amet', + $tempfile->get_content(), + 'The temp file has the wrong content' + ); + } + +} From 3446603984c78117088ff81c905050fa56e12f2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 12:46:41 +0200 Subject: [PATCH 122/185] Fix backup restore includes --- tests/generator/lib.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/generator/lib.php b/tests/generator/lib.php index 4063d6c..ded1417 100644 --- a/tests/generator/lib.php +++ b/tests/generator/lib.php @@ -19,6 +19,9 @@ // @codingStandardsIgnoreLine defined('MOODLE_INTERNAL') || die(); // @codeCoverageIgnore +global $CFG; // @codeCoverageIgnore +require_once($CFG->dirroot . '/backup/util/includes/restore_includes.php'); // @codeCoverageIgnore + /** * Tests generator for the quiz_archiver plugin * @@ -186,11 +189,11 @@ public function import_reference_course(): \stdClass { ); if (!$rc->execute_precheck()) { - throw new \restore_controller_exception('Backup restore precheck failed.'); + throw new \restore_controller_exception('Backup restore precheck failed.'); // @codeCoverageIgnore } $rc->execute_plan(); if ($rc->get_status() != backup::STATUS_FINISHED_OK) { - throw new \restore_controller_exception('Restore of reference course failed.'); + throw new \restore_controller_exception('Restore of reference course failed.'); // @codeCoverageIgnore } // 2024-05-14: Do not destroy restore_controller. This will drop temptables without removing them from From 5389c94f92013478f09931794b0d3007f28bb15e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 12:47:13 +0200 Subject: [PATCH 123/185] Improve test coverage in some conditional UI paths --- tests/form/archive_quiz_form_test.php | 40 ++++++++++++++++++++++++ tests/form/artifact_delete_form_test.php | 37 ++++++++++++++++++++++ tests/local/autoinstall_test.php | 25 +++++++++++++++ tests/output/job_overview_table_test.php | 22 +++++++++++++ 4 files changed, 124 insertions(+) diff --git a/tests/form/archive_quiz_form_test.php b/tests/form/archive_quiz_form_test.php index 316d1fb..942ca2d 100644 --- a/tests/form/archive_quiz_form_test.php +++ b/tests/form/archive_quiz_form_test.php @@ -75,6 +75,46 @@ public function test_form_definition(): void { $this->assertInstanceOf(\moodleform::class, $form); } + /** + * Basic code coverage to verify validity of form definition and detect + * possible errors during form element definition with locked job presets. + * + * @covers \quiz_archiver\form\archive_quiz_form::__construct + * @covers \quiz_archiver\form\archive_quiz_form::definition + * + * @return void + * @throws \dml_exception + * @throws \moodle_exception + */ + public function test_form_definition_all_locked(): void { + // Create a mock archive job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '10000001-0000-0000-0000-0123456789ab'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Lock all lockable settings. + foreach (get_config('quiz_archiver') as $key => $value) { + if (strpos($key, '_locked') !== false) { + set_config($key, 1, 'quiz_archiver'); + } + } + + // Create the form and define it. + $form = new archive_quiz_form($mocks->quiz->name, count($mocks->attempts)); + $this->assertInstanceOf(\moodleform::class, $form); + } + /** * Test the custom form validation * diff --git a/tests/form/artifact_delete_form_test.php b/tests/form/artifact_delete_form_test.php index 85f5b5d..33e44b6 100644 --- a/tests/form/artifact_delete_form_test.php +++ b/tests/form/artifact_delete_form_test.php @@ -89,4 +89,41 @@ public function test_form_definition(): void { $this->assertInstanceOf(\moodleform::class, $form); } + /** + * Basic code coverage to verify validity of form definition and detect + * possible errors during form element definition for jobs without + * quiz archives. + * + * @covers \quiz_archiver\form\artifact_delete_form::__construct + * @covers \quiz_archiver\form\artifact_delete_form::definition + * + * @return void + * @throws \dml_exception + * @throws \file_exception + * @throws \moodle_exception + * @throws \stored_file_creation_exception + */ + public function test_form_definition_no_archive(): void { + // Create a mock archive job. + $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $jobid = '20000000-0000-0000-0000-0123456789ab'; + ArchiveJob::create( + $jobid, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + 3600, + 'TEST-WS-TOKEN-1', + $mocks->attempts, + $mocks->settings + ); + + // Create the form and define it. + $_POST['jobid'] = $jobid; + $form = new artifact_delete_form(); + $this->assertInstanceOf(\moodleform::class, $form); + } + } diff --git a/tests/local/autoinstall_test.php b/tests/local/autoinstall_test.php index cf2b280..5651570 100644 --- a/tests/local/autoinstall_test.php +++ b/tests/local/autoinstall_test.php @@ -29,6 +29,20 @@ */ final class autoinstall_test extends \advanced_testcase { + /** + * Tests that the autoinstall process checks user privileges + * + * @covers \quiz_archiver\local\autoinstall::execute + * + * @return void + */ + public function test_autoinstall_requires_admin(): void { + $this->resetAfterTest(); + list($success, $log) = autoinstall::execute('http://foo.bar:1337'); + $this->assertFalse($success, 'Autoinstall was successful without admin privileges'); + $this->assertStringContainsString('Error: You need to be a site administrator', $log, 'Error message was not displayed'); + } + /** * Test one full autoinstall process * @@ -138,6 +152,17 @@ public function test_autoinstall_detection(): void { list($success, $log) = autoinstall::execute('http://foo.bar:1337'); $this->assertFalse($success, 'Second autoinstall was successful'); $this->assertNotEmpty($log, 'Second autoinstall returned empty log'); + + // Try with force. + list($success, $log) = autoinstall::execute( + 'http://foo.bar:1337', + 'anotherwsname', + 'anotherroleshortname', + 'anotherusername', + true + ); + $this->assertTrue($success, 'Forced autoinstall failed'); + $this->assertNotEmpty($log, 'Forced autoinstall returned empty log'); } } diff --git a/tests/output/job_overview_table_test.php b/tests/output/job_overview_table_test.php index 462f99f..9846aba 100644 --- a/tests/output/job_overview_table_test.php +++ b/tests/output/job_overview_table_test.php @@ -70,6 +70,28 @@ public function test_table_generation(): void { ); $job->set_status(ArchiveJob::STATUS_RUNNING, ['progress' => 42]); + // Create a second job that is finished and has an artifact. + $mocks2 = $this->getDataGenerator()->create_mock_quiz(); + $job2 = ArchiveJob::create( + '00000000000000000000000002', + $mocks2->course->id, + $mocks2->quiz->cmid, + $mocks2->quiz->id, + 2, + 0, + 'wstoken', + [], + [], + ArchiveJob::STATUS_FINISHED + ); + $artifact = $this->getDataGenerator()->create_artifact_file( + $mocks2->course->id, + $mocks2->quiz->cmid, + $mocks2->quiz->id, + 'testartifact.tar.gz' + ); + $job2->link_artifact($artifact->get_id(), 'sha256dummy'); + // Create the table and render it. $table = new job_overview_table(100000, $mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); $table->out(50, true); From 8fd376f52770f25b4d4f116b3bbafb606ec45de8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 13:13:12 +0200 Subject: [PATCH 124/185] Fix job association in job_overview_table_test --- tests/form/archive_quiz_form_test.php | 2 +- tests/output/job_overview_table_test.php | 15 +++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/tests/form/archive_quiz_form_test.php b/tests/form/archive_quiz_form_test.php index 942ca2d..aa6b0cc 100644 --- a/tests/form/archive_quiz_form_test.php +++ b/tests/form/archive_quiz_form_test.php @@ -97,7 +97,7 @@ public function test_form_definition_all_locked(): void { $mocks->quiz->cmid, $mocks->quiz->id, $mocks->user->id, - null, + 3600, 'TEST-WS-TOKEN-1', $mocks->attempts, $mocks->settings diff --git a/tests/output/job_overview_table_test.php b/tests/output/job_overview_table_test.php index 9846aba..845b1ff 100644 --- a/tests/output/job_overview_table_test.php +++ b/tests/output/job_overview_table_test.php @@ -71,26 +71,25 @@ public function test_table_generation(): void { $job->set_status(ArchiveJob::STATUS_RUNNING, ['progress' => 42]); // Create a second job that is finished and has an artifact. - $mocks2 = $this->getDataGenerator()->create_mock_quiz(); $job2 = ArchiveJob::create( '00000000000000000000000002', - $mocks2->course->id, - $mocks2->quiz->cmid, - $mocks2->quiz->id, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, 2, 0, 'wstoken', [], [], - ArchiveJob::STATUS_FINISHED ); $artifact = $this->getDataGenerator()->create_artifact_file( - $mocks2->course->id, - $mocks2->quiz->cmid, - $mocks2->quiz->id, + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, 'testartifact.tar.gz' ); $job2->link_artifact($artifact->get_id(), 'sha256dummy'); + $job2->set_status(ArchiveJob::STATUS_FINISHED); // Create the table and render it. $table = new job_overview_table(100000, $mocks->course->id, $mocks->quiz->cmid, $mocks->quiz->id); From 98f5e39046f46ad39ccd3370a8f1c2ac771d3bc2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 13:36:24 +0200 Subject: [PATCH 125/185] Create hover tooltip with help text for all job status values --- classes/ArchiveJob.php | 62 ++++++++++++++++++++++----- classes/output/job_overview_table.php | 3 +- lang/de/quiz_archiver.php | 10 +++++ lang/en/quiz_archiver.php | 10 +++++ templates/job_details.mustache | 7 ++- 5 files changed, 79 insertions(+), 13 deletions(-) diff --git a/classes/ArchiveJob.php b/classes/ArchiveJob.php index 2b7337d..8790737 100644 --- a/classes/ArchiveJob.php +++ b/classes/ArchiveJob.php @@ -780,37 +780,77 @@ public static function get_status_display_args(string $status, ?array $statusext // Translate status to display text and color. switch ($status) { case self::STATUS_UNKNOWN: - $res = ['color' => 'warning', 'text' => get_string('job_status_UNKNOWN', 'quiz_archiver')]; + $res = [ + 'color' => 'warning', + 'text' => get_string('job_status_UNKNOWN', 'quiz_archiver'), + 'help' => get_string('job_status_UNKNOWN_help', 'quiz_archiver'), + ]; break; case self::STATUS_UNINITIALIZED: - $res = ['color' => 'secondary', 'text' => get_string('job_status_UNINITIALIZED', 'quiz_archiver')]; + $res = [ + 'color' => 'secondary', + 'text' => get_string('job_status_UNINITIALIZED', 'quiz_archiver'), + 'help' => get_string('job_status_UNINITIALIZED_help', 'quiz_archiver'), + ]; break; case self::STATUS_AWAITING_PROCESSING: - $res = ['color' => 'secondary', 'text' => get_string('job_status_AWAITING_PROCESSING', 'quiz_archiver')]; + $res = [ + 'color' => 'secondary', + 'text' => get_string('job_status_AWAITING_PROCESSING', 'quiz_archiver'), + 'help' => get_string('job_status_AWAITING_PROCESSING_help', 'quiz_archiver'), + ]; break; case self::STATUS_RUNNING: - $res = ['color' => 'primary', 'text' => get_string('job_status_RUNNING', 'quiz_archiver')]; + $res = [ + 'color' => 'primary', + 'text' => get_string('job_status_RUNNING', 'quiz_archiver'), + 'help' => get_string('job_status_RUNNING_help', 'quiz_archiver'), + ]; break; case self::STATUS_WAITING_FOR_BACKUP: - $res = ['color' => 'info', 'text' => get_string('job_status_WAITING_FOR_BACKUP', 'quiz_archiver')]; + $res = [ + 'color' => 'info', + 'text' => get_string('job_status_WAITING_FOR_BACKUP', 'quiz_archiver'), + 'help' => get_string('job_status_WAITING_FOR_BACKUP_help', 'quiz_archiver'), + ]; break; case self::STATUS_FINALIZING: - $res = ['color' => 'info', 'text' => get_string('job_status_FINALIZING', 'quiz_archiver')]; + $res = [ + 'color' => 'info', + 'text' => get_string('job_status_FINALIZING', 'quiz_archiver'), + 'help' => get_string('job_status_FINALIZING_help', 'quiz_archiver'), + ]; break; case self::STATUS_FINISHED: - $res = ['color' => 'success', 'text' => get_string('job_status_FINISHED', 'quiz_archiver')]; + $res = [ + 'color' => 'success', + 'text' => get_string('job_status_FINISHED', 'quiz_archiver'), + 'help' => get_string('job_status_FINISHED_help', 'quiz_archiver'), + ]; break; case self::STATUS_FAILED: - $res = ['color' => 'danger', 'text' => get_string('job_status_FAILED', 'quiz_archiver')]; + $res = [ + 'color' => 'danger', + 'text' => get_string('job_status_FAILED', 'quiz_archiver'), + 'help' => get_string('job_status_FAILED_help', 'quiz_archiver'), + ]; break; case self::STATUS_TIMEOUT: - $res = ['color' => 'danger', 'text' => get_string('job_status_TIMEOUT', 'quiz_archiver')]; + $res = [ + 'color' => 'danger', + 'text' => get_string('job_status_TIMEOUT', 'quiz_archiver'), + 'help' => get_string('job_status_TIMEOUT_help', 'quiz_archiver'), + ]; break; case self::STATUS_DELETED: - $res = ['color' => 'secondary', 'text' => get_string('job_status_DELETED', 'quiz_archiver')]; + $res = [ + 'color' => 'secondary', + 'text' => get_string('job_status_DELETED', 'quiz_archiver'), + 'help' => get_string('job_status_DELETED_help', 'quiz_archiver'), + ]; break; default: - $res = ['color' => 'light', 'text' => $status]; + $res = ['color' => 'light', 'text' => $status, 'help' => $status]; break; } diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index edb8c59..8443a2b 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -115,7 +115,8 @@ public function col_status($values) { $values->statusextras ? json_decode($values->statusextras, true) : null ); - $html .= ''.$s['text'].'
    '; + $statustooltiphtml = 'data-toggle="tooltip" data-placement="top" title="'.$s['help'].'"'; + $html .= ''.$s['text'].'
    '; if (isset($s['statusextras']['progress'])) { $html .= ''; diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 17309ae..a16bbf4 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -147,15 +147,25 @@ $string['jobid'] = 'Auftrags-ID'; $string['job_created_successfully'] = 'Neuer Archivierungsauftrag erfolgreich erstellt: {$a}'; $string['job_status_UNKNOWN'] = 'Unbekannt'; +$string['job_status_UNKNOWN_help'] = 'Der Status dieses Auftrags ist unbekannt. Bitte melden Sie dieses Problem, wenn es weiterhin besteht.'; $string['job_status_UNINITIALIZED'] = 'Neu'; +$string['job_status_UNINITIALIZED_help'] = 'Der Auftrag wurde noch nicht initialisiert.'; $string['job_status_AWAITING_PROCESSING'] = 'Wartend'; +$string['job_status_AWAITING_PROCESSING_help'] = 'Der Auftrag wurde erfasst und wartet auf die Verarbeitung durch den Archive Worker Service.'; $string['job_status_RUNNING'] = 'Läuft'; +$string['job_status_RUNNING_help'] = 'Der Auftrag wird derzeit vom Archive Worker Service verarbeitet. Der Fortschritt des Auftrags wird periodisch aktualisiert (Standard: alle 15 Sekunden).'; $string['job_status_WAITING_FOR_BACKUP'] = 'Backup ausstehend'; +$string['job_status_WAITING_FOR_BACKUP_help'] = 'Der Auftrag wartet auf die Erstellung eines Moodle-Backups. Dies kann je nach Kursgröße einige Zeit in Anspruch nehmen.'; $string['job_status_FINALIZING'] = 'Finalisieren'; +$string['job_status_FINALIZING_help'] = 'Der Archive Worker Service finalisiert das Archiv und überträgt es an Moodle. Dies kann je nach Größe des Archivs einige Zeit in Anspruch nehmen.'; $string['job_status_FINISHED'] = 'Fertig'; +$string['job_status_FINISHED_help'] = 'Der Auftrag wurde erfolgreich abgeschlossen. Das Archiv ist bereit zum Download.'; $string['job_status_FAILED'] = 'Fehler'; +$string['job_status_FAILED_help'] = 'Der Auftrag ist fehlgeschlagen. Bitte versuchen Sie es erneut und kontaktieren Sie Ihren Systemadministrator, wenn das Problem weiterhin besteht.'; $string['job_status_TIMEOUT'] = 'Zeitüberschreitung'; +$string['job_status_TIMEOUT_help'] = 'Der Auftrag wurde aufgrund einer Zeitüberschreitung abgebrochen. Dies kann bei sehr großen Tests passieren. Bitte kontaktieren Sie Ihren Systemadministrator, wenn das Problem weiterhin besteht.'; $string['job_status_DELETED'] = 'Gelöscht'; +$string['job_status_DELETED_help'] = 'Das Testarchiv und alle zugehörigen Daten wurden entfernt. Die Auftragsmetadaten existieren weiterhin und können mit der Schaltfläche "Auftrag löschen" endgültig gelöscht werden.'; // Job details. $string['archive_already_signed'] = 'Testarchiv ist bereits signiert'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index f32265f..a7d04c8 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -147,15 +147,25 @@ $string['jobid'] = 'Job ID'; $string['job_created_successfully'] = 'New archive job created successfully: {$a}'; $string['job_status_UNKNOWN'] = 'Unknown'; +$string['job_status_UNKNOWN_help'] = 'The status of this job is unknown. Please open a bug report if this problem persists.'; $string['job_status_UNINITIALIZED'] = 'Uninitialized'; +$string['job_status_UNINITIALIZED_help'] = 'The job has not been initialized yet.'; $string['job_status_AWAITING_PROCESSING'] = 'Queued'; +$string['job_status_AWAITING_PROCESSING_help'] = 'The job registered by the archive worker service and is waiting to be processed.'; $string['job_status_RUNNING'] = 'Running'; +$string['job_status_RUNNING_help'] = 'The job is currently being processed by the archive worker service. The job progress is updated periodically (default: every 15 seconds).'; $string['job_status_WAITING_FOR_BACKUP'] = 'Backup wait'; +$string['job_status_WAITING_FOR_BACKUP_help'] = 'The job is waiting for a Moodle backup to be created. This can take some time depending on the size of the course.'; $string['job_status_FINALIZING'] = 'Finalizing'; +$string['job_status_FINALIZING_help'] = 'The archive worker is finalizing the archive and transfers it to Moodle. This can take some time depending on the size of the archive.'; $string['job_status_FINISHED'] = 'Finished'; +$string['job_status_FINISHED_help'] = 'The job has been successfully completed. The archive is ready for download.'; $string['job_status_FAILED'] = 'Failed'; +$string['job_status_FAILED_help'] = 'The job has failed. Please try again and contact your system administrator if this problem persists.'; $string['job_status_TIMEOUT'] = 'Timeout'; +$string['job_status_TIMEOUT_help'] = 'The job has been aborted due to a timeout. This can happen for very large quizzes. Please contact your system administrator if this problem persists.'; $string['job_status_DELETED'] = 'Deleted'; +$string['job_status_DELETED_help'] = 'The quiz archive and all associated data has been removed. The job metadata still exists and can be fully deleted using the "Delete job" button.'; // Job details. $string['archive_already_signed'] = 'Archive is already signed'; diff --git a/templates/job_details.mustache b/templates/job_details.mustache index 029ad8e..05170bc 100644 --- a/templates/job_details.mustache +++ b/templates/job_details.mustache @@ -123,7 +123,12 @@
    {{#str}} status {{/str}} - + {{status_display_args.text}} {{#status_display_args.statusextras.progress}} From 1a9bc607d2e508022937ac72463f8d3918393ebe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 13:37:17 +0200 Subject: [PATCH 126/185] Update unit tests to check new status display args --- tests/archivejob_test.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tests/archivejob_test.php b/tests/archivejob_test.php index 79c526b..8d545e1 100644 --- a/tests/archivejob_test.php +++ b/tests/archivejob_test.php @@ -1225,6 +1225,10 @@ public function test_status_display_args(string $status): void { $res['color'], 'Status display args did not contain a color for status: '.$status ); + $this->assertNotEmpty( + $res['help'], + 'Status display args did not contain help text for status: '.$status + ); } /** @@ -1269,6 +1273,10 @@ public function test_status_display_args_with_statusextras(string $status, ?arra $res['color'], 'Status display args did not contain a color for status: '.$status ); + $this->assertNotEmpty( + $res['help'], + 'Status display args did not contain help text for status: '.$status + ); $this->assertSame( $statusextras ?? [], $res['statusextras'], From aed57d575e1866ea913ad90da31a591ea1a5d991 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 13:37:34 +0200 Subject: [PATCH 127/185] Prepare CHANGELOG --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 090a1f4..d0acd9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ - `WAITING_FOR_BACKUP`: All attempt reports are generated and the archive worker service is waiting for the Moodle backup to be ready. - `FINALIZING`: The archive worker service is finalizing the archive creation process (checksums, compression, ...). +- Create hover tooltip with help text for all job status values - Add additional soft error handling to some web service functions - Expanding unit test coverage to include the whole plugin logic - Optimizing unit test code to improve readability and maintainability From 16f4b23b50f1956e7f1e55153d0213f865129162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 29 Jul 2024 13:45:26 +0200 Subject: [PATCH 128/185] Release version 1.4.0 --- CHANGELOG.md | 11 +++++++---- version.php | 4 ++-- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d0acd9f..722bd6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## Version X.X.X (XXXXXXXXXX) +## Version 1.4.0 (2024072900) - Show periodically updated progress of running archive jobs in job overview table and job details modal - Creation of new job status values: @@ -9,9 +9,13 @@ - `FINALIZING`: The archive worker service is finalizing the archive creation process (checksums, compression, ...). - Create hover tooltip with help text for all job status values - Add additional soft error handling to some web service functions +- Minor compatibility fixes for PHP 7.4 and Moodle 4.1 (LTS) - Expanding unit test coverage to include the whole plugin logic - Optimizing unit test code to improve readability and maintainability -- Minor compatibility fixes for PHP 7.4 and Moodle 4.1 (LTS) +- Create generic testing data generator +- Code quality improvements + +**Note:** Use of [moodle-quiz-archive-worker](https://github.com/ngandrass/moodle-quiz-archive-worker) `>= v1.6.0` is required. ## Version 1.3.0 (2024071800) @@ -22,8 +26,7 @@ - Fix conditional hide/show of retention time in quiz archive form when locked - Optimize order of settings in quiz archive form and plugin admin settings -**Note:** Use of [moodle-quiz-archive-worker](https://github.com/ngandrass/moodle-quiz-archive-worker) `>= v1.5.0` -is required. +**Note:** Use of [moodle-quiz-archive-worker](https://github.com/ngandrass/moodle-quiz-archive-worker) `>= v1.5.0` is required. ## Version 1.2.10 (2024070900) diff --git a/version.php b/version.php index 098c4e6..058c7e6 100644 --- a/version.php +++ b/version.php @@ -26,8 +26,8 @@ $plugin->component = 'quiz_archiver'; -$plugin->release = '1.3.0'; -$plugin->version = 2024072200; +$plugin->release = '1.4.0'; +$plugin->version = 2024072900; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; $plugin->maturity = MATURITY_STABLE; From 541825e79f444daffdafc52e844a4e30d787bca8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 11:00:30 +0200 Subject: [PATCH 129/185] Improve form data handling: Redirect to new page after processing submitted data to prevent refreshing and URL issues --- lang/de/quiz_archiver.php | 3 +- lang/en/quiz_archiver.php | 3 +- report.php | 466 +++++++++++++++++++++----------------- 3 files changed, 267 insertions(+), 205 deletions(-) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index a16bbf4..7dd8ed0 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -57,6 +57,8 @@ $string['create_quiz_archive'] = 'Neues Testarchiv erstellen'; $string['archive_quiz_form_desc'] = 'Verwenden Sie dieses Formular um den ausgewählten Test zu archivieren. Die Archivierung findet asynchron statt und kann einige Zeit in Anspruch nehmen. Sie können den aktuellen Status jederzeit auf dieser Seite überprüfen sowie fertige Archive herunterladen.'; $string['error_archive_quiz_form_validation_failed'] = 'Validierung der gesendeten Formulardaten fehlgeschlagen. Bitte überprüfen Sie Ihre Eingaben.'; +$string['error_plugin_is_not_configured'] = 'Fehler: Das Quiz Archiver Plugin ist noch nicht konfiguriert. Bitte kontaktieren Sie Ihren Website-Administrator.'; +$string['error_quiz_cannot_be_archived_unknown'] = 'Dieser Test kann aufgrund eines unbekannten Fehlers nicht archiviert werden. Bitte melden Sie dieses Problem an die Plugin-Entwickler.'; $string['export_attempts'] = 'Testversuche exportieren'; $string['export_attempts_help'] = 'Es werden stets alle Testversuche exportiert'; $string['export_attempts_num'] = 'Testversuche ({$a}) exportieren'; @@ -98,7 +100,6 @@ $string['export_report_section_attachments_help'] = 'Alle Dateiabgaben (z.B. von Freitextaufgaben) im Archiv einschließen. Warnung: Dies kann die Archivgröße erheblich erhöhen.'; $string['job_overview'] = 'Testarchive'; $string['num_attempts'] = 'Anzahl der Testversuche'; -$string['error_plugin_is_not_configured'] = 'Fehler: Das Quiz Archiver Plugin ist noch nicht konfiguriert. Bitte kontaktieren Sie Ihren Website-Administrator.'; // Job creation form: Filename pattern. $string['archive_filename_pattern'] = 'Archivname'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index a7d04c8..2065802 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -57,6 +57,8 @@ $string['create_quiz_archive'] = 'Create new quiz archive'; $string['archive_quiz_form_desc'] = 'Trigger the creation of a new quiz archive by submitting this form. This will spawn an asynchronous job which will take some time to complete. You can always check the current status on this page and download finished archives.'; $string['error_archive_quiz_form_validation_failed'] = 'Form data validation failed. Please correct your input and try again.'; +$string['error_plugin_is_not_configured'] = 'Error: The quiz archiver plugin is not configured yet. Please contact your site administrator.'; +$string['error_quiz_cannot_be_archived_unknown'] = 'This quiz can not be archived due to an unknown error. Please report this problem to the plugin developers.'; $string['export_attempts'] = 'Export quiz attempts'; $string['export_attempts_help'] = 'Quiz attempts will always be exported'; $string['export_attempts_num'] = 'Export quiz attempts ({$a})'; @@ -98,7 +100,6 @@ $string['export_report_section_attachments_help'] = 'Include all file attachments (e.g., essay file submissions) inside the archive. Warning: This can significantly increase the archive size.'; $string['job_overview'] = 'Archives'; $string['num_attempts'] = 'Number of attempts'; -$string['error_plugin_is_not_configured'] = 'Error: The quiz archiver plugin is not configured yet. Please contact your site administrator.'; // Job creation form: Filename pattern. $string['archive_filename_pattern'] = 'Archive name'; diff --git a/report.php b/report.php index 83528a8..fed210d 100644 --- a/report.php +++ b/report.php @@ -69,6 +69,16 @@ public function __construct() { $this->config = get_config('quiz_archiver'); } + /** + * Determines if the quiz with the given ID can be archived. + * + * @param $quizid int The quiz ID to check. + * @return bool True if the quiz can be archived, false otherwise. + */ + public static function quiz_can_be_archived($quizid): bool { + return quiz_has_questions($quizid) && quiz_has_attempts($quizid); + } + /** * Display the report. * @@ -90,229 +100,105 @@ public function display($quiz, $cm, $course): bool { $this->context = context_module::instance($cm->id); require_capability('mod/quiz_archiver:view', $this->context); + // Handle forms before output starts. + $formhtml = $this->handle_posted_forms(); + + // Housekeeping for jobs associated with this quiz. + foreach (ArchiveJob::get_jobs($this->course->id, $this->cm->id, $this->quiz->id) as $job) { + $job->timeout_if_overdue($this->config->job_timeout_min); + } + // Start output. $this->print_header_and_tabs($cm, $course, $quiz, 'archiver'); $tplctx = [ 'baseurl' => $this->base_url(), - 'jobOverviewTable' => "", ]; - // Handle job delete form. - if (optional_param('action', null, PARAM_TEXT) === 'delete_job') { - $jobdeleteform = new job_delete_form(); - - if ($jobdeleteform->is_cancelled()) { - redirect($this->base_url()); - } - - if ($jobdeleteform->is_submitted()) { - // Check permissions. - require_capability('mod/quiz_archiver:delete', $this->context); - - // Execute deletion. - $formdata = $jobdeleteform->get_data(); - ArchiveJob::get_by_jobid($formdata->jobid)->delete(); - } else { - $jobdeleteform->display(); - return true; - } - } - - // Handle artifact delete form. - if (optional_param('action', null, PARAM_TEXT) === 'delete_artifact') { - $arfifactdeleteform = new artifact_delete_form(); - - if ($arfifactdeleteform->is_cancelled()) { - redirect($this->base_url()); - } - - if ($arfifactdeleteform->is_submitted()) { - // Check permissions. - require_capability('mod/quiz_archiver:delete', $this->context); - - // Execute deletion. - $formdata = $arfifactdeleteform->get_data(); - ArchiveJob::get_by_jobid($formdata->jobid)->delete_artifact(); - } else { - $arfifactdeleteform->display(); - return true; - } - } - - // Handle job sign form. - if (optional_param('action', null, PARAM_TEXT) === 'sign_job') { - $jobsignform = new job_sign_form(); - - if ($jobsignform->is_cancelled()) { - redirect($this->base_url()); - } - - if ($jobsignform->is_submitted()) { - // Check permissions. - require_capability('mod/quiz_archiver:create', $this->context); - - // Execute signing. - $formdata = $jobsignform->get_data(); - $tspmanager = ArchiveJob::get_by_jobid($formdata->jobid)->tspmanager(); - $jobidlogstr = ' ('.get_string('jobid', 'quiz_archiver').': '.$formdata->jobid.')'; - if ($tspmanager->has_tsp_timestamp()) { - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "dismissible" => true, - "message" => get_string('archive_already_signed', 'quiz_archiver').$jobidlogstr, - ]; - } else { - try { - $tspmanager->timestamp(); - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "success", - "dismissible" => true, - "message" => get_string('archive_signed_successfully', 'quiz_archiver').$jobidlogstr, - ]; - } catch (RuntimeException $e) { - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "dismissible" => true, - "message" => get_string('archive_signing_failed_no_artifact', 'quiz_archiver').$jobidlogstr, - ]; - } catch (Exception $e) { - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "dismissible" => true, - "message" => get_string('archive_signing_failed', 'quiz_archiver').': '.$e->getMessage().$jobidlogstr, - ]; - } - } - } else { - $jobsignform->display(); - return true; - } + // Check if we need to display a form output and abort the rest of the page rendering. + // If rendering should continue the form must redirect to a new page without POST data + // to avoid re-execution of the form handling logic. + if ($formhtml) { + echo $formhtml; + return true; } - // Determine page to display. - if (!quiz_has_questions($quiz->id)) { - $tplctx['quizMissingSomethingWarning'] = quiz_no_questions_message($quiz, $cm, $this->context); - } else { - if (!quiz_has_attempts($quiz->id)) { + // Check if this quiz can be archived. + if (!self::quiz_can_be_archived($quiz->id)) { + if (!quiz_has_questions($quiz->id)) { + $tplctx['quizMissingSomethingWarning'] = quiz_no_questions_message($quiz, $cm, $this->context); + } else if (!quiz_has_attempts($quiz->id)) { $tplctx['quizMissingSomethingWarning'] = $OUTPUT->notification( get_string('noattempts', 'quiz'), \core\output\notification::NOTIFY_ERROR, false ); - } - } - - // Archive quiz form. - if (!array_key_exists('quizMissingSomethingWarning', $tplctx)) { - $archivequizform = new archive_quiz_form( - $this->quiz->name, - count($this->report->get_attempts()) - ); - if ($archivequizform->is_submitted()) { - $job = null; - try { - if (!$archivequizform->is_validated()) { - throw new RuntimeException(get_string('error_archive_quiz_form_validation_failed', 'quiz_archiver')); - } - - $formdata = $archivequizform->get_data(); - $job = $this->initiate_archive_job( - $formdata->export_attempts, - Report::build_report_sections_from_formdata($formdata), - $formdata->export_attempts_keep_html_files, - $formdata->export_attempts_paper_format, - $formdata->export_quiz_backup, - $formdata->export_course_backup, - $formdata->archive_filename_pattern, - $formdata->export_attempts_filename_pattern, - $formdata->export_attempts_image_optimize ? [ - 'width' => (int) $formdata->export_attempts_image_optimize_width, - 'height' => (int) $formdata->export_attempts_image_optimize_height, - 'quality' => (int) $formdata->export_attempts_image_optimize_quality, - ] : null, - $formdata->archive_autodelete ? $formdata->archive_retention_time : null, - ); - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "success", - "message" => get_string('job_created_successfully', 'quiz_archiver', $job->get_jobid()), - "returnMessage" => get_string('continue'), - ]; - } catch (RuntimeException $e) { - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "message" => $e->getMessage(), - "returnMessage" => get_string('retry'), - ]; - } - - // Do not print job overview table if job creation failed. - if ($job == null) { - unset($tplctx['jobOverviewTable']); - } } else { - $tplctx['jobInitiationForm'] = $archivequizform->render(); + $tplctx['quizMissingSomethingWarning'] = $OUTPUT->notification( + get_string('error_quiz_cannot_be_archived_unknown', 'quiz_archiver'), + \core\output\notification::NOTIFY_ERROR, + false + ); } } + // Render quiz archive form. Logic is handled in handle_posted_forms() above. + $archivequizform = new archive_quiz_form( + $this->quiz->name, + count($this->report->get_attempts()) + ); + $archivequizform->display(); + // Job overview table. - if (array_key_exists('jobOverviewTable', $tplctx)) { - // Generate table. - $jobtbl = new job_overview_table('job_overview_table', $this->course->id, $this->cm->id, $this->quiz->id); - $jobtbl->define_baseurl($this->base_url()); - ob_start(); - $jobtbl->out(10, true); - $jobtblhtml = ob_get_contents(); - ob_end_clean(); - $tplctx['jobOverviewTable'] = $jobtblhtml; - - // Prepare job metadata for job detail modals. - $tplctx['jobs'] = array_map(function($jm): array { - // Generate action URLs. - $jm['action_urls'] = [ - 'delete_job' => (new moodle_url($this->base_url(), [ - 'id' => optional_param('id', null, PARAM_INT), - 'mode' => 'archiver', - 'action' => 'delete_job', - 'jobid' => $jm['jobid'], - ]))->out(), - 'delete_artifact' => (new moodle_url($this->base_url(), [ - 'id' => optional_param('id', null, PARAM_INT), - 'mode' => 'archiver', - 'action' => 'delete_artifact', - 'jobid' => $jm['jobid'], - ]))->out(), - 'sign_artifact' => (new moodle_url('', [ - 'id' => optional_param('id', null, PARAM_INT), - 'mode' => 'archiver', - 'action' => 'sign_job', - 'jobid' => $jm['jobid'], - ]))->out(), - 'course' => (new moodle_url('/course/view.php', [ - 'id' => $this->course->id, - ]))->out(), - 'quiz' => (new moodle_url('/mod/quiz/view.php', [ - 'id' => $this->cm->id, - ]))->out(), - 'user' => (new moodle_url('/user/profile.php', [ - 'id' => $jm['user']['id'], - ]))->out(), - ]; - - // Inject global TSP settings. - // Moodle stores checkbox values as '0' and '1'. Mustache interprets '0' as true. - $jm['tsp_enabled'] = ($this->config->tsp_enable == true); - - return [ + $jobtbl = new job_overview_table('job_overview_table', $this->course->id, $this->cm->id, $this->quiz->id); + $jobtbl->define_baseurl($this->base_url()); + ob_start(); + $jobtbl->out(10, true); + $jobtblhtml = ob_get_contents(); + ob_end_clean(); + $tplctx['jobOverviewTable'] = $jobtblhtml; + + // Prepare job metadata for job detail modals. + $tplctx['jobs'] = array_map(function($jm): array { + // Generate action URLs. + $jm['action_urls'] = [ + 'delete_job' => (new moodle_url($this->base_url(), [ + 'id' => optional_param('id', null, PARAM_INT), + 'mode' => 'archiver', + 'action' => 'delete_job', 'jobid' => $jm['jobid'], - 'json' => json_encode($jm), - ]; - }, ArchiveJob::get_metadata_for_jobs($this->course->id, $this->cm->id, $this->quiz->id)); - } + ]))->out(), + 'delete_artifact' => (new moodle_url($this->base_url(), [ + 'id' => optional_param('id', null, PARAM_INT), + 'mode' => 'archiver', + 'action' => 'delete_artifact', + 'jobid' => $jm['jobid'], + ]))->out(), + 'sign_artifact' => (new moodle_url('', [ + 'id' => optional_param('id', null, PARAM_INT), + 'mode' => 'archiver', + 'action' => 'sign_job', + 'jobid' => $jm['jobid'], + ]))->out(), + 'course' => (new moodle_url('/course/view.php', [ + 'id' => $this->course->id, + ]))->out(), + 'quiz' => (new moodle_url('/mod/quiz/view.php', [ + 'id' => $this->cm->id, + ]))->out(), + 'user' => (new moodle_url('/user/profile.php', [ + 'id' => $jm['user']['id'], + ]))->out(), + ]; - // Housekeeping for jobs associated with this quiz. - foreach (ArchiveJob::get_jobs($this->course->id, $this->cm->id, $this->quiz->id) as $job) { - $job->timeout_if_overdue($this->config->job_timeout_min); - } + // Inject global TSP settings. + // Moodle stores checkbox values as '0' and '1'. Mustache interprets '0' as true. + $jm['tsp_enabled'] = ($this->config->tsp_enable == true); + + return [ + 'jobid' => $jm['jobid'], + 'json' => json_encode($jm), + ]; + }, ArchiveJob::get_metadata_for_jobs($this->course->id, $this->cm->id, $this->quiz->id)); // Render output. echo $OUTPUT->render_from_template('quiz_archiver/overview', $tplctx); @@ -487,6 +373,180 @@ protected function initiate_archive_job( return $job; } + /** + * Handles submitted forms. + * + * @return string|null HTML form rendering to display, if required. + * + * @throws coding_exception + * @throws dml_exception + * @throws moodle_exception + * @throws required_capability_exception + */ + protected function handle_posted_forms(): ?string { + // Job delete form. + if (optional_param('action', null, PARAM_TEXT) === 'delete_job') { + $jobdeleteform = new job_delete_form(); + + if ($jobdeleteform->is_cancelled()) { + redirect($this->base_url()); + } + + if ($jobdeleteform->is_submitted()) { + // Check permissions. + require_capability('mod/quiz_archiver:delete', $this->context); + + // Execute deletion. + $formdata = $jobdeleteform->get_data(); + ArchiveJob::get_by_jobid($formdata->jobid)->delete(); + + // TODO: Add status reporting + redirect($this->base_url()); + } else { + return $jobdeleteform->render(); + } + } + + // Artifact delete form. + if (optional_param('action', null, PARAM_TEXT) === 'delete_artifact') { + $artifactdeleteform = new artifact_delete_form(); + + if ($artifactdeleteform->is_cancelled()) { + redirect($this->base_url()); + } + + if ($artifactdeleteform->is_submitted()) { + // Check permissions. + require_capability('mod/quiz_archiver:delete', $this->context); + + // Execute deletion. + $formdata = $artifactdeleteform->get_data(); + ArchiveJob::get_by_jobid($formdata->jobid)->delete_artifact(); + + // TODO: Add status reporting + redirect($this->base_url()); + } else { + return $artifactdeleteform->render(); + } + } + + // Job sign form. + if (optional_param('action', null, PARAM_TEXT) === 'sign_job') { + $jobsignform = new job_sign_form(); + + if ($jobsignform->is_cancelled()) { + redirect($this->base_url()); + } + + if ($jobsignform->is_submitted()) { + // Check permissions. + require_capability('mod/quiz_archiver:create', $this->context); + + // Execute signing. + $formdata = $jobsignform->get_data(); + $tspmanager = ArchiveJob::get_by_jobid($formdata->jobid)->tspmanager(); + $jobidlogstr = ' ('.get_string('jobid', 'quiz_archiver').': '.$formdata->jobid.')'; + if ($tspmanager->has_tsp_timestamp()) { + // TODO: Move to GET parameter + $tplctx['jobInitiationStatusAlert'] = [ + "color" => "danger", + "dismissible" => true, + "message" => get_string('archive_already_signed', 'quiz_archiver').$jobidlogstr, + ]; + echo "TODO: FAILED!"; + } else { + try { + $tspmanager->timestamp(); + // TODO: Move to GET parameter + $tplctx['jobInitiationStatusAlert'] = [ + "color" => "success", + "dismissible" => true, + "message" => get_string('archive_signed_successfully', 'quiz_archiver').$jobidlogstr, + ]; + redirect($this->base_url()); + } catch (RuntimeException $e) { + // TODO: Move to GET parameter + $tplctx['jobInitiationStatusAlert'] = [ + "color" => "danger", + "dismissible" => true, + "message" => get_string('archive_signing_failed_no_artifact', 'quiz_archiver').$jobidlogstr, + ]; + echo "TODO: FAILED!"; + } catch (Exception $e) { + // TODO: Move to GET parameter + $tplctx['jobInitiationStatusAlert'] = [ + "color" => "danger", + "dismissible" => true, + "message" => get_string('archive_signing_failed', 'quiz_archiver').': '.$e->getMessage().$jobidlogstr, + ]; + echo "TODO: FAILED!"; + } + } + } else { + return $jobsignform->render(); + } + } + + // Archive quiz form. + if (self::quiz_can_be_archived($this->quiz->id)) { + $archivequizform = new archive_quiz_form( + $this->quiz->name, + count($this->report->get_attempts()) + ); + + if ($archivequizform->is_submitted()) { + $job = null; + try { + if (!$archivequizform->is_validated()) { + throw new RuntimeException(get_string('error_archive_quiz_form_validation_failed', 'quiz_archiver')); + } + + $formdata = $archivequizform->get_data(); + $job = $this->initiate_archive_job( + $formdata->export_attempts, + Report::build_report_sections_from_formdata($formdata), + $formdata->export_attempts_keep_html_files, + $formdata->export_attempts_paper_format, + $formdata->export_quiz_backup, + $formdata->export_course_backup, + $formdata->archive_filename_pattern, + $formdata->export_attempts_filename_pattern, + $formdata->export_attempts_image_optimize ? [ + 'width' => (int) $formdata->export_attempts_image_optimize_width, + 'height' => (int) $formdata->export_attempts_image_optimize_height, + 'quality' => (int) $formdata->export_attempts_image_optimize_quality, + ] : null, + $formdata->archive_autodelete ? $formdata->archive_retention_time : null, + ); + // TODO: Move to GET parameter + $tplctx['jobInitiationStatusAlert'] = [ + "color" => "success", + "message" => get_string('job_created_successfully', 'quiz_archiver', $job->get_jobid()), + "returnMessage" => get_string('continue'), + ]; + redirect($this->base_url()); + } catch (RuntimeException $e) { + // TODO: Move to GET parameter + $tplctx['jobInitiationStatusAlert'] = [ + "color" => "danger", + "message" => $e->getMessage(), + "returnMessage" => get_string('retry'), + ]; + } + + // Do not print job overview table if job creation failed. + if ($job == null) { + unset($tplctx['jobOverviewTable']); + } + } else { + // This form is rendered on the main report page if no other form requires rendering. + return null; + } + } + + return null; + } + /** * Get the URL of the front page of the report that lists all the questions. * From 96f340786204d322ceb2f9b1fdce1d3e816ea374 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 11:04:52 +0200 Subject: [PATCH 130/185] Reduce complexity of quiz_archiver_report::display() --- report.php | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/report.php b/report.php index fed210d..f093928 100644 --- a/report.php +++ b/report.php @@ -156,9 +156,25 @@ public function display($quiz, $cm, $course): bool { $jobtblhtml = ob_get_contents(); ob_end_clean(); $tplctx['jobOverviewTable'] = $jobtblhtml; + $tplctx['jobs'] = $this->generate_job_metadata_tplctx(); - // Prepare job metadata for job detail modals. - $tplctx['jobs'] = array_map(function($jm): array { + // Render output. + echo $OUTPUT->render_from_template('quiz_archiver/overview', $tplctx); + + return true; + } + + /** + * Generates the template context data for all jobs associated with this quiz + * to be displayed inside the job details modal dialogs. + * + * @return array Array of job metadata arrays to be passed to the Mustache template + * @throws coding_exception + * @throws dml_exception + * @throws moodle_exception + */ + protected function generate_job_metadata_tplctx(): array { + return array_map(function($jm): array { // Generate action URLs. $jm['action_urls'] = [ 'delete_job' => (new moodle_url($this->base_url(), [ @@ -199,11 +215,6 @@ public function display($quiz, $cm, $course): bool { 'json' => json_encode($jm), ]; }, ArchiveJob::get_metadata_for_jobs($this->course->id, $this->cm->id, $this->quiz->id)); - - // Render output. - echo $OUTPUT->render_from_template('quiz_archiver/overview', $tplctx); - - return true; } /** From 30a72199310f05dc91f992ae3a528ba884e5dec4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 12:42:18 +0200 Subject: [PATCH 131/185] Append status notification data to form redirects and display status messages accordingly. --- CHANGELOG.md | 6 ++ lang/de/quiz_archiver.php | 11 ++- lang/en/quiz_archiver.php | 9 +- report.php | 167 ++++++++++++++++++++++-------------- templates/overview.mustache | 31 ------- 5 files changed, 126 insertions(+), 98 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 722bd6d..ac0397b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## Version X.X.X (XXXXXXXXXX) + +- Improve status and error notifications for all actions (job creation, deletion, ...) +- Prevent form data resubmission on page reload + + ## Version 1.4.0 (2024072900) - Show periodically updated progress of running archive jobs in job overview table and job details modal diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 7dd8ed0..6b4230e 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -39,6 +39,7 @@ $string['quiz_archiver:use_webservice'] = 'Webservice des Quiz Archivers nutzen (lesend und schreibend)'; // General. +$string['a'] = '{$a}'; $string['progress'] = 'Fortschritt'; $string['quiz_archive'] = 'Testarchiv'; $string['quiz_archive_details'] = 'Details des Testarchivs'; @@ -141,12 +142,14 @@ // Job. $string['delete_artifact'] = 'Testarchiv löschen'; +$string['delete_artifact_success'] = 'Testarchiv des Archivierungsauftrags mit der ID {$a} wurde erfolgreich gelöscht. Die Auftragsmetadaten existieren weiterhin und können mit der Schaltfläche "Archivierungsauftrag löschen" endgültig gelöscht werden.'; $string['delete_artifact_warning'] = 'Sind Sie sicher, dass Sie dieses Testarchiv inklusive aller archivierten Daten löschen möchten?. Die Metadaten des Archivierungsauftrags werden hierbei nicht gelöscht.'; $string['delete_job'] = 'Archivierungsauftrag löschen'; +$string['delete_job_success'] = 'Archivierungsauftrag mit der ID {$a} wurde erfolgreich gelöscht.'; $string['delete_job_warning'] = 'Sind Sie sicher, dass Sie diesen Archivierungsauftrag inklusive aller archivierten Daten löschen möchten?'; $string['delete_job_warning_retention'] = 'Achtung: Dieser Archivierungsauftrag ist für die automatische Löschung am {$a} vorgesehen. Sind Sie absolut sicher, dass Sie ihn vor Ablauf seiner geplanten Lebensdauer löschen möchten?'; $string['jobid'] = 'Auftrags-ID'; -$string['job_created_successfully'] = 'Neuer Archivierungsauftrag erfolgreich erstellt: {$a}'; +$string['job_created_successfully'] = 'Neuer Archivierungsauftrag erfolgreich erstellt. Auftrags-ID: {$a}'; $string['job_status_UNKNOWN'] = 'Unbekannt'; $string['job_status_UNKNOWN_help'] = 'Der Status dieses Auftrags ist unbekannt. Bitte melden Sie dieses Problem, wenn es weiterhin besteht.'; $string['job_status_UNINITIALIZED'] = 'Neu'; @@ -170,6 +173,7 @@ // Job details. $string['archive_already_signed'] = 'Testarchiv ist bereits signiert'; +$string['archive_already_signed_with_jobid'] = 'Testarchiv des Archivierungsauftrag mit der ID {$a} ist bereits signiert.'; $string['archive_autodelete_deleted'] = 'Testarchive wurde automatisch gelöscht'; $string['archive_autodelete_in'] = 'Testarchiv wird gelöscht in {$a}'; $string['archive_autodelete_disabled'] = 'Deaktiviert'; @@ -178,9 +182,12 @@ $string['archive_not_signed'] = 'Testarchiv ist nicht signiert'; $string['archive_signature'] = 'Signatur'; $string['archive_signed_successfully'] = 'Testarchiv erfolgreich signiert'; +$string['archive_signed_successfully_with_jobid'] = 'Testarchiv des Archivierungsauftrag mit der ID {$a} wurde erfolgreich signiert.'; $string['archive_signing_failed'] = 'Signierung des Testarchivs fehlgeschlagen'; +$string['archive_signing_failed_with_jobid'] = 'Signierung des Testarchivs des Archivierungsauftrags mit der ID {$a} ist aufgrund eines generischen Fehlers fehlgeschlagen. Bitte überprüfen Sie die Plugin-Einstellungen und versuchen Sie es erneut.'; $string['archive_signing_failed_no_artifact'] = 'Keine gültige Archivdatei gefunden'; -$string['archive_signing_failed_tsp_disabled'] = 'Signierung global ist deaktiviert'; +$string['archive_signing_failed_no_artifact_with_jobid'] = 'Signierung des Testarchivs des Archivierungsauftrags mit der ID {$a} ist fehlgeschlagen. Keine gültige Archivdatei gefunden.'; +$string['archive_signing_failed_tsp_disabled'] = 'Signierung ist global deaktiviert'; $string['sign_archive'] = 'Testarchiv jetzt signieren'; $string['sign_archive_warning'] = 'Sind Sie sicher, dass Sie dieses Testarchiv jetzt signieren möchten?'; $string['signed_on'] = 'Signiert am'; diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index 2065802..a94366e 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -39,6 +39,7 @@ $string['quiz_archiver:use_webservice'] = 'Use the quiz archiver webservice (read and write)'; // General. +$string['a'] = '{$a}'; $string['progress'] = 'Progress'; $string['quiz_archive'] = 'Quiz archive'; $string['quiz_archive_details'] = 'Quiz archive details'; @@ -141,12 +142,14 @@ // Job. $string['delete_artifact'] = 'Delete quiz archive'; +$string['delete_artifact_success'] = 'Quiz archive for Job with ID {$a} was deleted successfully. The job metadata still exists and can be fully deleted using the "Delete job" button.'; $string['delete_artifact_warning'] = 'Are you sure that you want to delete this quiz archive including all archived data?. The job metadate will be kept.'; $string['delete_job'] = 'Delete archive job'; +$string['delete_job_success'] = 'Archive job with ID {$a} was deleted successfully.'; $string['delete_job_warning'] = 'Are you sure that you want to delete this archive job including all archived data?'; $string['delete_job_warning_retention'] = 'Attention: This archive job is scheduled for automatic deletion on {$a}. Are you absolutely sure that you want to delete it before its scheduled lifetime expired?'; $string['jobid'] = 'Job ID'; -$string['job_created_successfully'] = 'New archive job created successfully: {$a}'; +$string['job_created_successfully'] = 'New archive job created successfully. Job ID: {$a}'; $string['job_status_UNKNOWN'] = 'Unknown'; $string['job_status_UNKNOWN_help'] = 'The status of this job is unknown. Please open a bug report if this problem persists.'; $string['job_status_UNINITIALIZED'] = 'Uninitialized'; @@ -170,6 +173,7 @@ // Job details. $string['archive_already_signed'] = 'Archive is already signed'; +$string['archive_already_signed_with_jobid'] = 'Quiz archive for job with ID {$a} is already signed.'; $string['archive_autodelete_deleted'] = 'Archive was automatically deleted'; $string['archive_autodelete_in'] = 'Archive will be deleted in {$a}'; $string['archive_autodelete_disabled'] = 'Disabled'; @@ -178,8 +182,11 @@ $string['archive_not_signed'] = 'Archive is unsigned'; $string['archive_signature'] = 'Signature'; $string['archive_signed_successfully'] = 'Archive signed successfully'; +$string['archive_signed_successfully_with_jobid'] = 'Quiz archive for job with ID {$a} was signed successfully.'; $string['archive_signing_failed'] = 'Archive signing failed'; +$string['archive_signing_failed_with_jobid'] = 'Signing the quiz archive for job with ID {$a} failed due to a generic error. Please make sure that TSP archive signing is enabled within the plugin settings.'; $string['archive_signing_failed_no_artifact'] = 'No valid artifact file found'; +$string['archive_signing_failed_no_artifact_with_jobid'] = 'Signing the quiz archive for job with ID {$a} failed. No valid artifact file found.'; $string['archive_signing_failed_tsp_disabled'] = 'TSP signing is disabled globally'; $string['sign_archive'] = 'Sign archive now'; $string['sign_archive_warning'] = 'Are you sure that you want to sign this archive now?'; diff --git a/report.php b/report.php index f093928..e35d661 100644 --- a/report.php +++ b/report.php @@ -110,9 +110,6 @@ public function display($quiz, $cm, $course): bool { // Start output. $this->print_header_and_tabs($cm, $course, $quiz, 'archiver'); - $tplctx = [ - 'baseurl' => $this->base_url(), - ]; // Check if we need to display a form output and abort the rest of the page rendering. // If rendering should continue the form must redirect to a new page without POST data @@ -122,18 +119,31 @@ public function display($quiz, $cm, $course): bool { return true; } + // Handle GET-based alerts + if (optional_param('al', null, PARAM_TEXT) !== null) { + echo $OUTPUT->notification( + get_string( + urldecode(required_param('asid', PARAM_TEXT)), + 'quiz_archiver', + urldecode(optional_param('aa', null, PARAM_TEXT)) + ), + urldecode(required_param('al', PARAM_TEXT)), + optional_param('ac', 0, PARAM_INT) === 1 + ); + } + // Check if this quiz can be archived. if (!self::quiz_can_be_archived($quiz->id)) { if (!quiz_has_questions($quiz->id)) { - $tplctx['quizMissingSomethingWarning'] = quiz_no_questions_message($quiz, $cm, $this->context); + echo quiz_no_questions_message($quiz, $cm, $this->context); } else if (!quiz_has_attempts($quiz->id)) { - $tplctx['quizMissingSomethingWarning'] = $OUTPUT->notification( + echo $OUTPUT->notification( get_string('noattempts', 'quiz'), \core\output\notification::NOTIFY_ERROR, false ); } else { - $tplctx['quizMissingSomethingWarning'] = $OUTPUT->notification( + echo $OUTPUT->notification( get_string('error_quiz_cannot_be_archived_unknown', 'quiz_archiver'), \core\output\notification::NOTIFY_ERROR, false @@ -155,11 +165,13 @@ public function display($quiz, $cm, $course): bool { $jobtbl->out(10, true); $jobtblhtml = ob_get_contents(); ob_end_clean(); - $tplctx['jobOverviewTable'] = $jobtblhtml; - $tplctx['jobs'] = $this->generate_job_metadata_tplctx(); // Render output. - echo $OUTPUT->render_from_template('quiz_archiver/overview', $tplctx); + echo $OUTPUT->render_from_template('quiz_archiver/overview', [ + 'baseurl' => $this->base_url(), + 'jobOverviewTable' => $jobtblhtml, + 'jobs' => $this->generate_job_metadata_tplctx(), + ]); return true; } @@ -223,15 +235,16 @@ protected function generate_job_metadata_tplctx(): array { * @param bool $exportattempts Quiz attempts will be archives if true * @param array $reportsections Sections to export during attempt report generation * @param bool $reportkeephtmlfiles If true, HTML files are kept alongside PDFs - * within the created archive + * within the created archive * @param string $paperformat Paper format to use for attempt report generation * @param bool $exportquizbackup Complete quiz backup will be archived if true * @param bool $exportcoursebackup Complete course backup will be archived if true * @param string $archivefilenamepattern Filename pattern to use for archive generation * @param string $attemptsfilenamepattern Filename pattern to use for attempt report generation - * @param array|null $imageoptimize If set, images in the attempt report will be optimized according to the passed array - * containing 'width', 'height', and 'quality' - * @param int|null $retentionseconds If set, the archive will be deleted automatically this many seconds after creation + * @param array|null $imageoptimize If set, images in the attempt report will be optimized + * according to the passed array containing 'width', 'height', and 'quality' + * @param int|null $retentionseconds If set, the archive will be deleted automatically this + * many seconds after creation * @return ArchiveJob|null Created ArchiveJob on success * @throws coding_exception Handled by Moodle * @throws dml_exception Handled by Moodle @@ -411,8 +424,12 @@ protected function handle_posted_forms(): ?string { $formdata = $jobdeleteform->get_data(); ArchiveJob::get_by_jobid($formdata->jobid)->delete(); - // TODO: Add status reporting - redirect($this->base_url()); + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_SUCCESS, + true, + 'delete_job_success', + $formdata->jobid + )); } else { return $jobdeleteform->render(); } @@ -434,8 +451,12 @@ protected function handle_posted_forms(): ?string { $formdata = $artifactdeleteform->get_data(); ArchiveJob::get_by_jobid($formdata->jobid)->delete_artifact(); - // TODO: Add status reporting - redirect($this->base_url()); + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_SUCCESS, + true, + 'delete_artifact_success', + $formdata->jobid + )); } else { return $artifactdeleteform->render(); } @@ -458,39 +479,35 @@ protected function handle_posted_forms(): ?string { $tspmanager = ArchiveJob::get_by_jobid($formdata->jobid)->tspmanager(); $jobidlogstr = ' ('.get_string('jobid', 'quiz_archiver').': '.$formdata->jobid.')'; if ($tspmanager->has_tsp_timestamp()) { - // TODO: Move to GET parameter - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "dismissible" => true, - "message" => get_string('archive_already_signed', 'quiz_archiver').$jobidlogstr, - ]; - echo "TODO: FAILED!"; + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_ERROR, + true, + 'archive_already_signed_with_jobid', + $formdata->jobid + )); } else { try { $tspmanager->timestamp(); - // TODO: Move to GET parameter - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "success", - "dismissible" => true, - "message" => get_string('archive_signed_successfully', 'quiz_archiver').$jobidlogstr, - ]; - redirect($this->base_url()); + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_SUCCESS, + true, + 'archive_signed_successfully_with_jobid', + $formdata->jobid + )); } catch (RuntimeException $e) { - // TODO: Move to GET parameter - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "dismissible" => true, - "message" => get_string('archive_signing_failed_no_artifact', 'quiz_archiver').$jobidlogstr, - ]; - echo "TODO: FAILED!"; + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_ERROR, + true, + 'archive_signing_failed_no_artifact_with_jobid', + $formdata->jobid + )); } catch (Exception $e) { - // TODO: Move to GET parameter - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "dismissible" => true, - "message" => get_string('archive_signing_failed', 'quiz_archiver').': '.$e->getMessage().$jobidlogstr, - ]; - echo "TODO: FAILED!"; + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_ERROR, + true, + 'archive_signing_failed_with_jobid', + $formdata->jobid + )); } } } else { @@ -529,25 +546,19 @@ protected function handle_posted_forms(): ?string { ] : null, $formdata->archive_autodelete ? $formdata->archive_retention_time : null, ); - // TODO: Move to GET parameter - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "success", - "message" => get_string('job_created_successfully', 'quiz_archiver', $job->get_jobid()), - "returnMessage" => get_string('continue'), - ]; - redirect($this->base_url()); + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_SUCCESS, + true, + 'job_created_successfully', + $job->get_jobid() + )); } catch (RuntimeException $e) { - // TODO: Move to GET parameter - $tplctx['jobInitiationStatusAlert'] = [ - "color" => "danger", - "message" => $e->getMessage(), - "returnMessage" => get_string('retry'), - ]; - } - - // Do not print job overview table if job creation failed. - if ($job == null) { - unset($tplctx['jobOverviewTable']); + redirect($this->base_url_with_alert( + \core\output\notification::NOTIFY_ERROR, + true, + 'a', + $e->getMessage() + )); } } else { // This form is rendered on the main report page if no other form requires rendering. @@ -561,11 +572,39 @@ protected function handle_posted_forms(): ?string { /** * Get the URL of the front page of the report that lists all the questions. * - * @return moodle_url the URL + * @return moodle_url The URL * @throws moodle_exception */ protected function base_url(): moodle_url { return new moodle_url('/mod/quiz/report.php', ['id' => $this->cm->id, 'mode' => 'archiver']); } + /** + * Get the URL of the front page of the report with GET params to display an alert message. + * + * @param string $level Alert level \core\output\notification::NOTIFY_* + * @param bool $closebutton If true, a close button is displayed in the alert message + * @param string $stridentifier Identifier of the alert message string from language file + * @param string|null $additional Additional context ($a) that is passed to get_string() + * + * @return moodle_url The URL including the alert message params + * @throws moodle_exception + */ + protected function base_url_with_alert( + string $level, + bool $closebutton, + string $stridentifier, + ?string $additional = null + ): moodle_url { + $url = $this->base_url(); + $url->param('al', urlencode($level)); + $url->param('ac', $closebutton ? '1' : '0'); + $url->param('asid', urlencode($stridentifier)); + if ($additional !== null) { + $url->param('aa', urlencode($additional)); + } + + return $url; + } + } diff --git a/templates/overview.mustache b/templates/overview.mustache index c4d37b3..1b2c33f 100644 --- a/templates/overview.mustache +++ b/templates/overview.mustache @@ -22,13 +22,6 @@ Example context (json): { "baseurl": "https://example.com/mod/quiz/archiver/", - "jobInitiationForm": "
    [...]
    ", - "jobInitiationStatusAlert": { - "color": "success", - "dismissible": true, - "message": "Job initiated successfully.", - "returnMessage": "Return to the overview page." - }, "jobOverviewTable": "", "jobs": [ { @@ -40,32 +33,8 @@ "json": "{...}" } ], - "quizMissingSomethingWarning": "
    [...]
    " } }} -{{#quizMissingSomethingWarning}} - {{{quizMissingSomethingWarning}}} -

    -{{/quizMissingSomethingWarning}} - -{{! Archive quiz form }} -
    - {{{jobInitiationForm}}} - {{#jobInitiationStatusAlert}} - - {{/jobInitiationStatusAlert}} -
    {{! List of existing archives }} {{#jobOverviewTable}} From 6c94897fe2388e5d9af476a62acee4cf18dfbedc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 12:45:57 +0200 Subject: [PATCH 132/185] Do not render quiz archive form if quiz is not ready to be archived (no questions, no attempts) --- report.php | 1 + 1 file changed, 1 insertion(+) diff --git a/report.php b/report.php index e35d661..12e115b 100644 --- a/report.php +++ b/report.php @@ -149,6 +149,7 @@ public function display($quiz, $cm, $course): bool { false ); } + return true; } // Render quiz archive form. Logic is handled in handle_posted_forms() above. From d730285c09b4919add205232d17be1f64330976f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 13:09:35 +0200 Subject: [PATCH 133/185] Replace alert building inside form classes with $OUTPUT->notification() --- classes/form/artifact_delete_form.php | 16 +++++++--------- classes/form/job_delete_form.php | 14 ++++++-------- classes/form/job_sign_form.php | 14 ++++++-------- report.php | 2 +- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/classes/form/artifact_delete_form.php b/classes/form/artifact_delete_form.php index b9aa5fd..e80960e 100644 --- a/classes/form/artifact_delete_form.php +++ b/classes/form/artifact_delete_form.php @@ -44,7 +44,8 @@ class artifact_delete_form extends \moodleform { * @throws \coding_exception */ public function definition() { - $mform = $this->_form; + global $OUTPUT; + $mform = $this->_form; // Find job. $job = ArchiveJob::get_by_jobid($this->optional_param('jobid', null, PARAM_TEXT)); @@ -77,14 +78,11 @@ public function definition() { } // Print warning element. - $mform->addElement('html', << -

    $warnhead

    - $warnmsg -
    - $warndetails - - EOD); + $mform->addElement('html', $OUTPUT->notification( + "

    $warnhead

    $warnmsg
    $warndetails", + \core\output\notification::NOTIFY_WARNING, + false, + )); // Preserve internal information of mod_quiz. $mform->addElement('hidden', 'id', $this->optional_param('id', null, PARAM_INT)); diff --git a/classes/form/job_delete_form.php b/classes/form/job_delete_form.php index 0abaa40..290fbbf 100644 --- a/classes/form/job_delete_form.php +++ b/classes/form/job_delete_form.php @@ -44,6 +44,7 @@ class job_delete_form extends \moodleform { * @throws \coding_exception */ public function definition() { + global $OUTPUT; $mform = $this->_form; // Find job. @@ -75,14 +76,11 @@ public function definition() { } // Print warning element. - $mform->addElement('html', << -

    $warnhead

    - $warnmsg -
    - $warndetails - - EOD); + $mform->addElement('html', $OUTPUT->notification( + "

    $warnhead

    $warnmsg
    $warndetails", + \core\output\notification::NOTIFY_WARNING, + false, + )); // Preserve internal information of mod_quiz. $mform->addElement('hidden', 'id', $this->optional_param('id', null, PARAM_INT)); diff --git a/classes/form/job_sign_form.php b/classes/form/job_sign_form.php index ff3eb8d..71c7a1a 100644 --- a/classes/form/job_sign_form.php +++ b/classes/form/job_sign_form.php @@ -41,20 +41,18 @@ class job_sign_form extends \moodleform { * @throws \coding_exception */ public function definition() { + global $OUTPUT; $mform = $this->_form; // Warning message. $warnhead = get_string('areyousure', 'moodle'); $warnmsg = get_string('sign_archive_warning', 'quiz_archiver', $this->optional_param('jobid', null, PARAM_TEXT)); $warndetails = get_string('jobid', 'quiz_archiver').': '.$this->optional_param('jobid', null, PARAM_TEXT); - $mform->addElement('html', << -

    $warnhead

    - $warnmsg -
    - $warndetails - - EOD); + $mform->addElement('html', $OUTPUT->notification( + "

    $warnhead

    $warnmsg
    $warndetails", + \core\output\notification::NOTIFY_INFO, + false, + )); // Preserve internal information of mod_quiz. $mform->addElement('hidden', 'id', $this->optional_param('id', null, PARAM_INT)); diff --git a/report.php b/report.php index 12e115b..fc7492e 100644 --- a/report.php +++ b/report.php @@ -119,7 +119,7 @@ public function display($quiz, $cm, $course): bool { return true; } - // Handle GET-based alerts + // Handle GET-based alerts. if (optional_param('al', null, PARAM_TEXT) !== null) { echo $OUTPUT->notification( get_string( From 96c1e36b8c0cf89d23f178b55b621886cfba19b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 13:24:34 +0200 Subject: [PATCH 134/185] Fix moodle-plugin-ci nvm issue on current GitHub action runners --- .github/workflows/moodle-plugin-ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/moodle-plugin-ci.yml b/.github/workflows/moodle-plugin-ci.yml index 7c6fab0..b692acf 100644 --- a/.github/workflows/moodle-plugin-ci.yml +++ b/.github/workflows/moodle-plugin-ci.yml @@ -82,7 +82,10 @@ jobs: echo $(cd ci/bin; pwd) >> $GITHUB_PATH echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH sudo locale-gen en_AU.UTF-8 - echo "NVM_DIR=$HOME/.nvm" >> $GITHUB_ENV + + # Install nvm v0.39.7 as a temporary workaround for issue: + # https://github.com/moodlehq/moodle-plugin-ci/issues/309 + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - name: Install moodle-plugin-ci run: moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 From d1178896ccc91c1288f9bf7e48af1a297574f843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 13:24:34 +0200 Subject: [PATCH 135/185] Fix moodle-plugin-ci nvm issue on current GitHub action runners --- .github/workflows/moodle-plugin-ci.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/moodle-plugin-ci.yml b/.github/workflows/moodle-plugin-ci.yml index 7c6fab0..b692acf 100644 --- a/.github/workflows/moodle-plugin-ci.yml +++ b/.github/workflows/moodle-plugin-ci.yml @@ -82,7 +82,10 @@ jobs: echo $(cd ci/bin; pwd) >> $GITHUB_PATH echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH sudo locale-gen en_AU.UTF-8 - echo "NVM_DIR=$HOME/.nvm" >> $GITHUB_ENV + + # Install nvm v0.39.7 as a temporary workaround for issue: + # https://github.com/moodlehq/moodle-plugin-ci/issues/309 + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash - name: Install moodle-plugin-ci run: moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 From 1ae4021c0e76fd4ea9cc51c951f082994d7dd14f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 13:41:36 +0200 Subject: [PATCH 136/185] Specify parameter types in quiz_archiver_report::quiz_can_be_archived() --- report.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/report.php b/report.php index fc7492e..9201bfd 100644 --- a/report.php +++ b/report.php @@ -75,7 +75,7 @@ public function __construct() { * @param $quizid int The quiz ID to check. * @return bool True if the quiz can be archived, false otherwise. */ - public static function quiz_can_be_archived($quizid): bool { + public static function quiz_can_be_archived(int $quizid): bool { return quiz_has_questions($quizid) && quiz_has_attempts($quizid); } From 9ca3b9f359374bf330531f39b52c9514609c2f9e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 14:02:30 +0200 Subject: [PATCH 137/185] Fix PHPDoc param declaration for quiz_archiver_report::quiz_can_be_archived() --- report.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/report.php b/report.php index 9201bfd..ece6245 100644 --- a/report.php +++ b/report.php @@ -72,7 +72,7 @@ public function __construct() { /** * Determines if the quiz with the given ID can be archived. * - * @param $quizid int The quiz ID to check. + * @param int $quizid The quiz ID to check. * @return bool True if the quiz can be archived, false otherwise. */ public static function quiz_can_be_archived(int $quizid): bool { From c3d915d83dc87e8b6b6498acd2e5686cab667e2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 14:07:56 +0200 Subject: [PATCH 138/185] Fix templates/overview.mustache example JSON to conform with RFC 8259 --- templates/overview.mustache | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/overview.mustache b/templates/overview.mustache index 1b2c33f..a046865 100644 --- a/templates/overview.mustache +++ b/templates/overview.mustache @@ -32,7 +32,7 @@ "jobid": "45edd9f6-3784-11ee-be56-0242ac120002", "json": "{...}" } - ], + ] } }} From a4e7c2d7ee3f35e07b2b380e43d88f1d3e446552 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 17:14:31 +0200 Subject: [PATCH 139/185] Add tooltip to archive overview refresh button and list time of last page refresh --- CHANGELOG.md | 1 + lang/de/quiz_archiver.php | 1 + lang/en/quiz_archiver.php | 1 + report.php | 1 + templates/overview.mustache | 15 +++++++++++++-- 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ac0397b..61a13f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Improve status and error notifications for all actions (job creation, deletion, ...) - Prevent form data resubmission on page reload +- Add tooltip to archive overview refresh button and list time of last page refresh ## Version 1.4.0 (2024072900) diff --git a/lang/de/quiz_archiver.php b/lang/de/quiz_archiver.php index 6b4230e..217c54e 100644 --- a/lang/de/quiz_archiver.php +++ b/lang/de/quiz_archiver.php @@ -100,6 +100,7 @@ $string['export_report_section_attachments'] = 'Dateiabgaben einschließen'; $string['export_report_section_attachments_help'] = 'Alle Dateiabgaben (z.B. von Freitextaufgaben) im Archiv einschließen. Warnung: Dies kann die Archivgröße erheblich erhöhen.'; $string['job_overview'] = 'Testarchive'; +$string['last_updated'] = 'Zuletzt aktualisiert'; $string['num_attempts'] = 'Anzahl der Testversuche'; // Job creation form: Filename pattern. diff --git a/lang/en/quiz_archiver.php b/lang/en/quiz_archiver.php index a94366e..166135f 100644 --- a/lang/en/quiz_archiver.php +++ b/lang/en/quiz_archiver.php @@ -100,6 +100,7 @@ $string['export_report_section_attachments'] = 'Include file attachments'; $string['export_report_section_attachments_help'] = 'Include all file attachments (e.g., essay file submissions) inside the archive. Warning: This can significantly increase the archive size.'; $string['job_overview'] = 'Archives'; +$string['last_updated'] = 'Last updated'; $string['num_attempts'] = 'Number of attempts'; // Job creation form: Filename pattern. diff --git a/report.php b/report.php index ece6245..4629a50 100644 --- a/report.php +++ b/report.php @@ -172,6 +172,7 @@ public function display($quiz, $cm, $course): bool { 'baseurl' => $this->base_url(), 'jobOverviewTable' => $jobtblhtml, 'jobs' => $this->generate_job_metadata_tplctx(), + 'time' => time(), ]); return true; diff --git a/templates/overview.mustache b/templates/overview.mustache index a046865..fe32fbc 100644 --- a/templates/overview.mustache +++ b/templates/overview.mustache @@ -32,7 +32,8 @@ "jobid": "45edd9f6-3784-11ee-be56-0242ac120002", "json": "{...}" } - ] + ], + "time": 0 } }} @@ -40,10 +41,20 @@ {{#jobOverviewTable}}

    {{#str}} job_overview, quiz_archiver {{/str}} - +

    +
    + {{#str}} last_updated, quiz_archiver {{/str}}: + {{#userdate}} {{time}}, %T {{/userdate}} +
    {{{jobOverviewTable}}}
    From 5ea6793463b9e96899a765f1f935e775be821426 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 17:58:26 +0200 Subject: [PATCH 140/185] Improve visual representation of the quiz archive overview table and creation form --- CHANGELOG.md | 2 ++ classes/output/job_overview_table.php | 4 +-- report.php | 4 +-- styles.css | 40 +++++++++++++++++++++++++++ templates/overview.mustache | 8 +++++- 5 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 styles.css diff --git a/CHANGELOG.md b/CHANGELOG.md index 61a13f3..e86b027 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,8 @@ - Improve status and error notifications for all actions (job creation, deletion, ...) - Prevent form data resubmission on page reload - Add tooltip to archive overview refresh button and list time of last page refresh +- Improve visual presentation of the quiz archive overview table +- Improve visual presentation of the quiz archive creation form ## Version 1.4.0 (2024072900) diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index 8443a2b..a8f9ddb 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -55,18 +55,18 @@ public function __construct(string $uniqueid, int $courseid, int $cmid, int $qui parent::__construct($uniqueid); $this->define_columns([ 'timecreated', - 'status', 'user', 'jobid', + 'status', 'filesize', 'actions', ]); $this->define_headers([ get_string('task_starttime', 'admin'), - get_string('status'), get_string('user'), get_string('jobid', 'quiz_archiver'), + get_string('status'), get_string('size'), '', ]); diff --git a/report.php b/report.php index 4629a50..70a748c 100644 --- a/report.php +++ b/report.php @@ -152,12 +152,11 @@ public function display($quiz, $cm, $course): bool { return true; } - // Render quiz archive form. Logic is handled in handle_posted_forms() above. + // Quiz archive form. Logic is handled in handle_posted_forms() above. $archivequizform = new archive_quiz_form( $this->quiz->name, count($this->report->get_attempts()) ); - $archivequizform->display(); // Job overview table. $jobtbl = new job_overview_table('job_overview_table', $this->course->id, $this->cm->id, $this->quiz->id); @@ -169,6 +168,7 @@ public function display($quiz, $cm, $course): bool { // Render output. echo $OUTPUT->render_from_template('quiz_archiver/overview', [ + 'archiveQuizForm' => $archivequizform->render(), 'baseurl' => $this->base_url(), 'jobOverviewTable' => $jobtblhtml, 'jobs' => $this->generate_job_metadata_tplctx(), diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..2225beb --- /dev/null +++ b/styles.css @@ -0,0 +1,40 @@ +/* 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 . + */ + +/** + * Custom style definitions for the quiz_archiver plugin. + * + * @copyright 2024 Niels Gandraß + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +/* Archive creation form */ +.quiz_archiver-archive-quiz-form > form > fieldset:last-of-type { + border-bottom: 0 !important; +} + +/* Job overview table */ +.quiz_archiver-job-overview-table > .pagination:nth-of-type(1) { + display: none !important; +} + +.quiz_archiver-job-overview-table th { + border-top: 0 !important; +} + +.quiz_archiver-job-overview-table th > a { + display: inline-block; +} diff --git a/templates/overview.mustache b/templates/overview.mustache index fe32fbc..1f641c9 100644 --- a/templates/overview.mustache +++ b/templates/overview.mustache @@ -21,6 +21,7 @@ Example context (json): { + "archiveQuizForm": "", "baseurl": "https://example.com/mod/quiz/archiver/", "jobOverviewTable": "", "jobs": [ @@ -37,6 +38,11 @@ } }} +{{! Quiz archive form }} +
    + {{{archiveQuizForm}}} +
    + {{! List of existing archives }} {{#jobOverviewTable}}

    @@ -55,7 +61,7 @@ {{#str}} last_updated, quiz_archiver {{/str}}: {{#userdate}} {{time}}, %T {{/userdate}} -
    +
    {{{jobOverviewTable}}}
    From 8c3293a844ec7671150aea4ea70088f2eaff12c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 18:10:34 +0200 Subject: [PATCH 141/185] Narrow down custom CSS selectors to get rid of !important to make Grunt happy --- styles.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/styles.css b/styles.css index 2225beb..0224b6b 100644 --- a/styles.css +++ b/styles.css @@ -23,16 +23,16 @@ /* Archive creation form */ .quiz_archiver-archive-quiz-form > form > fieldset:last-of-type { - border-bottom: 0 !important; + border-bottom: 0; } /* Job overview table */ .quiz_archiver-job-overview-table > .pagination:nth-of-type(1) { - display: none !important; + display: none; } -.quiz_archiver-job-overview-table th { - border-top: 0 !important; +.quiz_archiver-job-overview-table th.header { + border-top: 0; } .quiz_archiver-job-overview-table th > a { From 82f0dbc6fad1ae72a30b0468bc8187e34318d1fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Mon, 12 Aug 2024 18:13:51 +0200 Subject: [PATCH 142/185] Move job status column directly besides action buttons in overview table --- classes/output/job_overview_table.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/output/job_overview_table.php b/classes/output/job_overview_table.php index a8f9ddb..64b807c 100644 --- a/classes/output/job_overview_table.php +++ b/classes/output/job_overview_table.php @@ -57,8 +57,8 @@ public function __construct(string $uniqueid, int $courseid, int $cmid, int $qui 'timecreated', 'user', 'jobid', - 'status', 'filesize', + 'status', 'actions', ]); @@ -66,8 +66,8 @@ public function __construct(string $uniqueid, int $courseid, int $cmid, int $qui get_string('task_starttime', 'admin'), get_string('user'), get_string('jobid', 'quiz_archiver'), - get_string('status'), get_string('size'), + get_string('status'), '', ]); From fd381bbc2ec38ee9bd1407e43a0a4b6fc9562fdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 14 Aug 2024 13:59:12 +0200 Subject: [PATCH 143/185] Remove old reference course (Git LFS migration) --- res/backup-moodle2-course-qa-ref.mbz | Bin 1076862 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 res/backup-moodle2-course-qa-ref.mbz diff --git a/res/backup-moodle2-course-qa-ref.mbz b/res/backup-moodle2-course-qa-ref.mbz deleted file mode 100644 index e82f38bffb35ca5d78eb5d2c77101a0cd1cacf14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1076862 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�>_+u7OO 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

    Q8Kpf#V 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 z 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

    qiX4OgHTGO?w_O#2 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
  • 1LHqP5Cdb= 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

    >+(tubMPOSYeg1E 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 Date: Wed, 14 Aug 2024 14:00:54 +0200 Subject: [PATCH 144/185] Add complex examples (large image compression, GeoGebra applets) to new quiz in reference course --- .gitattributes | 1 + CHANGELOG.md | 2 ++ res/backup-moodle2-course-qa-ref.mbz | 3 +++ 3 files changed, 6 insertions(+) create mode 100644 .gitattributes create mode 100644 res/backup-moodle2-course-qa-ref.mbz diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..d7373c1 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +res/backup-moodle2-course-qa-ref.mbz filter=lfs diff=lfs merge=lfs -text diff --git a/CHANGELOG.md b/CHANGELOG.md index e86b027..a243ea9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ - Add tooltip to archive overview refresh button and list time of last page refresh - Improve visual presentation of the quiz archive overview table - Improve visual presentation of the quiz archive creation form +- Add complex examples (large image compression, GeoGebra applets) to reference course + ## Version 1.4.0 (2024072900) diff --git a/res/backup-moodle2-course-qa-ref.mbz b/res/backup-moodle2-course-qa-ref.mbz new file mode 100644 index 0000000..8d90597 --- /dev/null +++ b/res/backup-moodle2-course-qa-ref.mbz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb585c02815c73db2b2c331e18336377d48b8a455ae3fe117e98e0139dc0d18c +size 18810807 From 622cd07ac7b7c4f88bc932ca78b31d673930e0af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 21 Aug 2024 13:09:45 +0200 Subject: [PATCH 145/185] Describe plugin versioning method and worker service compatibility in README --- CHANGELOG.md | 2 +- README.md | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a243ea9..671317d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## Version X.X.X (XXXXXXXXXX) +- Switch to semantic versioning (see README.md, Section: "Versioning and Compatibility") - Improve status and error notifications for all actions (job creation, deletion, ...) - Prevent form data resubmission on page reload - Add tooltip to archive overview refresh button and list time of last page refresh @@ -10,7 +11,6 @@ - Add complex examples (large image compression, GeoGebra applets) to reference course - ## Version 1.4.0 (2024072900) - Show periodically updated progress of running archive jobs in job overview table and job details modal diff --git a/README.md b/README.md index ff7713a..9db17f4 100644 --- a/README.md +++ b/README.md @@ -87,6 +87,44 @@ the job to restrict queryable data to the required minimum. ----- +## Versioning and Compatibility + +The [quiz_archiver Moodle Plugin](https://github.com/ngandrass/moodle-quiz_archiver) +and its corresponding [Quiz Archive Worker](https://github.com/ngandrass/moodle-quiz-archive-worker) +both use [Semantic Versioning 2.0.0](https://semver.org/). + +This means that their version numbers are structured as `MAJOR.MINOR.PATCH`. The +Moodle plugin and the archive worker service are compatible as long as they use +the same `MAJOR` version number. Minor and patch versions can differ between the +two components without breaking compatibility. + +However, it is **recommended to always use the latest version** of both the +Moodle plugin and the archive worker service to ensure you get all the latest +bug fixes, features, and optimizations. + + +### Compatibility Examples + +| Moodle Plugin | Archive Worker | Compatible | +|------------|----------------|------------| +| 1.0.0 | 1.0.0 | Yes | +| 1.2.3 | 1.0.0 | Yes | +| 1.0.0 | 1.1.2 | Yes | +| 2.1.4 | 2.0.1 | Yes | +| | | | +| 2.0.0 | 1.0.0 | No | +| 1.0.0 | 2.0.0 | No | +| 2.4.2 | 1.4.2 | No | + + +### Development / Testing Versions + +Special development versions, used for testing, can be created but will never be +published to the Moodle plugin directory. Such development versions are marked +by a `+dev-[TIMESTAMP]` suffix, e.g., `2.4.2+dev-2022010100`. + +----- + ## Installation You can install this plugin like any other Moodle plugin, as described below. From 03e20776b0b9db6f6495b695d407678c64a742bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 21 Aug 2024 13:26:53 +0200 Subject: [PATCH 146/185] Release version 2.0.0 (2024082100) --- CHANGELOG.md | 6 +++++- version.php | 4 ++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 671317d..fe87f3a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,10 @@ # Changelog -## Version X.X.X (XXXXXXXXXX) +## Version 2.0.0 (2024082100) - Switch to semantic versioning (see README.md, Section: "Versioning and Compatibility") +- Fix rendering of GeoGebra applets under certain conditions +- Improve robustness of attempt page rendering state detection ("ready for export" detection) - Improve status and error notifications for all actions (job creation, deletion, ...) - Prevent form data resubmission on page reload - Add tooltip to archive overview refresh button and list time of last page refresh @@ -10,6 +12,8 @@ - Improve visual presentation of the quiz archive creation form - Add complex examples (large image compression, GeoGebra applets) to reference course +**Note:** Use of [moodle-quiz-archive-worker](https://github.com/ngandrass/moodle-quiz-archive-worker) `>= v2.0.0` is required. + ## Version 1.4.0 (2024072900) diff --git a/version.php b/version.php index 058c7e6..93d2d7b 100644 --- a/version.php +++ b/version.php @@ -26,8 +26,8 @@ $plugin->component = 'quiz_archiver'; -$plugin->release = '1.4.0'; -$plugin->version = 2024072900; +$plugin->release = '2.0.0'; +$plugin->version = 2024082100; $plugin->requires = 2022112800; $plugin->supported = [401, 404]; $plugin->maturity = MATURITY_STABLE; From 04ddeeac49e2fabcfd5871d2223708d48966196f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 22 Aug 2024 11:53:27 +0200 Subject: [PATCH 147/185] Create basic mkdocs boilerplate --- .gitignore | 1 + docs/changelog.md | 1 + docs/configuration/capabilities.md | 1 + docs/configuration/index.md | 1 + docs/configuration/initialconfig/automatic.md | 1 + docs/configuration/initialconfig/manual.md | 1 + docs/configuration/initialconfig/pitfalls.md | 1 + docs/configuration/presets.md | 1 + docs/development/codecoverage.md | 1 + docs/development/index.md | 1 + docs/development/testdata.md | 1 + docs/development/unittests.md | 1 + docs/index.md | 3 + docs/installation/archiveworker.md | 1 + docs/installation/index.md | 5 ++ docs/installation/moodleplugin.md | 1 + docs/screenshots.md | 1 + docs/usage/archivingbasic.md | 1 + docs/usage/automaticdeletion.md | 1 + docs/usage/imageoptimization.md | 1 + docs/usage/index.md | 1 + docs/usage/tsp.md | 1 + mkdocs.yml | 85 +++++++++++++++++++ 23 files changed, 113 insertions(+) create mode 120000 docs/changelog.md create mode 100644 docs/configuration/capabilities.md create mode 100644 docs/configuration/index.md create mode 100644 docs/configuration/initialconfig/automatic.md create mode 100644 docs/configuration/initialconfig/manual.md create mode 100644 docs/configuration/initialconfig/pitfalls.md create mode 100644 docs/configuration/presets.md create mode 100644 docs/development/codecoverage.md create mode 100644 docs/development/index.md create mode 100644 docs/development/testdata.md create mode 100644 docs/development/unittests.md create mode 100644 docs/index.md create mode 100644 docs/installation/archiveworker.md create mode 100644 docs/installation/index.md create mode 100644 docs/installation/moodleplugin.md create mode 100644 docs/screenshots.md create mode 100644 docs/usage/archivingbasic.md create mode 100644 docs/usage/automaticdeletion.md create mode 100644 docs/usage/imageoptimization.md create mode 100644 docs/usage/index.md create mode 100644 docs/usage/tsp.md create mode 100644 mkdocs.yml diff --git a/.gitignore b/.gitignore index caa32e6..311f248 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.cache .idea/ *.iml \ No newline at end of file diff --git a/docs/changelog.md b/docs/changelog.md new file mode 120000 index 0000000..04c99a5 --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1 @@ +../CHANGELOG.md \ No newline at end of file diff --git a/docs/configuration/capabilities.md b/docs/configuration/capabilities.md new file mode 100644 index 0000000..b402dab --- /dev/null +++ b/docs/configuration/capabilities.md @@ -0,0 +1 @@ +# Capabilities diff --git a/docs/configuration/index.md b/docs/configuration/index.md new file mode 100644 index 0000000..a025a48 --- /dev/null +++ b/docs/configuration/index.md @@ -0,0 +1 @@ +# Configuration diff --git a/docs/configuration/initialconfig/automatic.md b/docs/configuration/initialconfig/automatic.md new file mode 100644 index 0000000..ae7d917 --- /dev/null +++ b/docs/configuration/initialconfig/automatic.md @@ -0,0 +1 @@ +# Automatic Configuration diff --git a/docs/configuration/initialconfig/manual.md b/docs/configuration/initialconfig/manual.md new file mode 100644 index 0000000..23685c0 --- /dev/null +++ b/docs/configuration/initialconfig/manual.md @@ -0,0 +1 @@ +# Manual Configuration diff --git a/docs/configuration/initialconfig/pitfalls.md b/docs/configuration/initialconfig/pitfalls.md new file mode 100644 index 0000000..77d1c78 --- /dev/null +++ b/docs/configuration/initialconfig/pitfalls.md @@ -0,0 +1 @@ +# Known Pitfalls diff --git a/docs/configuration/presets.md b/docs/configuration/presets.md new file mode 100644 index 0000000..8a80ccc --- /dev/null +++ b/docs/configuration/presets.md @@ -0,0 +1 @@ +# Job Presets diff --git a/docs/development/codecoverage.md b/docs/development/codecoverage.md new file mode 100644 index 0000000..d392208 --- /dev/null +++ b/docs/development/codecoverage.md @@ -0,0 +1 @@ +# Code Coverage \ No newline at end of file diff --git a/docs/development/index.md b/docs/development/index.md new file mode 100644 index 0000000..459110d --- /dev/null +++ b/docs/development/index.md @@ -0,0 +1 @@ +# Development diff --git a/docs/development/testdata.md b/docs/development/testdata.md new file mode 100644 index 0000000..1b328d0 --- /dev/null +++ b/docs/development/testdata.md @@ -0,0 +1 @@ +# Reference Course / Test Data diff --git a/docs/development/unittests.md b/docs/development/unittests.md new file mode 100644 index 0000000..8cee326 --- /dev/null +++ b/docs/development/unittests.md @@ -0,0 +1 @@ +# PHPUnit tests diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000..c9f0f07 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,3 @@ +# Moodle Quiz Archiver + +TODO diff --git a/docs/installation/archiveworker.md b/docs/installation/archiveworker.md new file mode 100644 index 0000000..8c2a978 --- /dev/null +++ b/docs/installation/archiveworker.md @@ -0,0 +1 @@ +# Quiz Archive Worker Service diff --git a/docs/installation/index.md b/docs/installation/index.md new file mode 100644 index 0000000..f066ff7 --- /dev/null +++ b/docs/installation/index.md @@ -0,0 +1,5 @@ +# Installation + +## Overview + +## Requirements diff --git a/docs/installation/moodleplugin.md b/docs/installation/moodleplugin.md new file mode 100644 index 0000000..b122bf3 --- /dev/null +++ b/docs/installation/moodleplugin.md @@ -0,0 +1 @@ +# Moodle Plugin diff --git a/docs/screenshots.md b/docs/screenshots.md new file mode 100644 index 0000000..32eed45 --- /dev/null +++ b/docs/screenshots.md @@ -0,0 +1 @@ +# Screenshots diff --git a/docs/usage/archivingbasic.md b/docs/usage/archivingbasic.md new file mode 100644 index 0000000..511f16d --- /dev/null +++ b/docs/usage/archivingbasic.md @@ -0,0 +1 @@ +# Creating Quiz Archives diff --git a/docs/usage/automaticdeletion.md b/docs/usage/automaticdeletion.md new file mode 100644 index 0000000..ac9cb18 --- /dev/null +++ b/docs/usage/automaticdeletion.md @@ -0,0 +1 @@ +# Automatic Deletion (GDPR Compliance) diff --git a/docs/usage/imageoptimization.md b/docs/usage/imageoptimization.md new file mode 100644 index 0000000..da418ae --- /dev/null +++ b/docs/usage/imageoptimization.md @@ -0,0 +1 @@ +# Image optimization diff --git a/docs/usage/index.md b/docs/usage/index.md new file mode 100644 index 0000000..8f04b05 --- /dev/null +++ b/docs/usage/index.md @@ -0,0 +1 @@ +# Usage diff --git a/docs/usage/tsp.md b/docs/usage/tsp.md new file mode 100644 index 0000000..77054cd --- /dev/null +++ b/docs/usage/tsp.md @@ -0,0 +1 @@ +# Quiz Archive Signing (TSP) diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 0000000..9859de2 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,85 @@ +site_name: Moodle Quiz Archiver Documentation +site_url: http://localhost/ +repo_url: https://github.com/ngandrass/moodle-quiz_archiver +edit_uri: edit/master/docs/ + +copyright: "Copyright © 2023 - 2024 Niels Gandraß
    License: GNU General Public License v3.0" + +extra: + social: + - icon: simple/moodle + link: https://moodle.org/plugins/quiz_archiver + name: "Moodle Plugin Directory: quiz_archiver" + - icon: fontawesome/brands/github + link: https://github.com/ngandrass/moodle-quiz_archiver + name: "GitHub: moodle-quiz_archiver" + - icon: fontawesome/brands/github + link: https://github.com/ngandrass/moodle-quiz-archive-worker + name: "GitHub: moodle-quiz-archive-worker" + - icon: fontawesome/brands/docker + link: https://hub.docker.com/r/ngandrass/moodle-quiz-archive-worker + - icon: fontawesome/solid/bug + link: https://github.com/ngandrass/moodle-quiz-archive-worker/issues + name: "Report a Bug" +# version: +# provider: mike +plugins: + # - mike + - search + - social +theme: + name: material + icon: + repo: fontawesome/brands/github + features: + - content.action.edit + - navigation.expand + - navigation.indexes + - navigation.sections + - navigation.tracking + - navigation.top + - search.suggest + palette: + # Palette toggle for light mode + - scheme: default + toggle: + icon: material/brightness-7 + name: Switch to dark mode + + # Palette toggle for dark mode + - scheme: slate + toggle: + icon: material/brightness-4 + name: Switch to light mode + +nav: + - "Introduction": index.md + - "Screenshots": screenshots.md + - "Changelog": changelog.md + + - "Installation": + - installation/index.md + - "Moodle Plugin": installation/moodleplugin.md + - "Archive Worker Service": installation/archiveworker.md + + - "Configuration": + - configuration/index.md + - "Initial Setup": + - "Automatic Configuration": configuration/initialconfig/automatic.md + - "Manual Configuration": configuration/initialconfig/manual.md + - "Pitfalls": configuration/initialconfig/pitfalls.md + - "Job Presets / Policies": configuration/presets.md + - "Capabilities": configuration/capabilities.md + + - "Usage": + - usage/index.md + - "Creating Quiz Archives": usage/archivingbasic.md + - "Automatic Deletion (GDPR)": usage/automaticdeletion.md + - "Image Optimization": usage/imageoptimization.md + - "Quiz Archive Signing (TSP)": usage/tsp.md + + - "Development": + - development/index.md + - "Reference Course / Test Data": development/testdata.md + - "Unit Tests": development/unittests.md + - "Code Coverage": development/codecoverage.md \ No newline at end of file From 2ab8a1609308fcbf5f47c2e8968c7e5bdb298b43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 4 Sep 2024 14:46:45 +0200 Subject: [PATCH 148/185] Remove DB modifications inside get_backup_status_test::parameter_data_provider() --- tests/external/get_backup_status_test.php | 69 ++++++++++++++--------- 1 file changed, 41 insertions(+), 28 deletions(-) diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index 65fb9c5..941d25c 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -113,8 +113,8 @@ public function test_assure_return_parameter_spec(): void { * @covers \quiz_archiver\external\get_backup_status::execute * @covers \quiz_archiver\external\get_backup_status::validate_parameters * - * @param string $jobid Job ID - * @param string $backupid Backup ID + * @param string|null $jobid Job ID to check + * @param string|null $backupid Backup ID to check * @param bool $shouldfail Whether a failure is expected * @return void * @throws \coding_exception @@ -123,17 +123,37 @@ public function test_assure_return_parameter_spec(): void { * @throws \required_capability_exception */ public function test_parameter_validation( - string $jobid, - string $backupid, - bool $shouldfail + ?string $jobid, + ?string $backupid, + bool $shouldfail ): void { + // Gain webservice permission. + $this->setAdminUser(); + + // Create mock quiz. $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $job = ArchiveJob::create( + '20000000-1234-5678-abcd-ef4242424242', + $mocks->course->id, + $mocks->quiz->cmid, + $mocks->quiz->id, + $mocks->user->id, + null, + 'TEST-WS-TOKEN', + [], + [] + ); + $_GET['wstoken'] = 'TEST-WS-TOKEN'; if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } - get_backup_status::execute($jobid, $backupid); + get_backup_status::execute( + $jobid === null ? $job->get_jobid() : $jobid, + $backupid === null ? 'f1d2d2f924e986ac86fdf7b36c94bcdf32beec15' : $backupid + ); } /** @@ -144,29 +164,22 @@ public function test_parameter_validation( * @throws \moodle_exception */ public static function parameter_data_provider(): array { - // Create job. - $self = new self(); - $mocks = $self->getDataGenerator()->create_mock_quiz(); - $job = ArchiveJob::create( - '20000000-1234-5678-abcd-ef4242424242', - $mocks->course->id, - $mocks->quiz->cmid, - $mocks->quiz->id, - $mocks->user->id, - null, - 'TEST-WS-TOKEN', - [], - [] - ); - $base = [ - 'jobid' => $job->get_jobid(), - 'backupid' => 'f1d2d2f924e986ac86fdf7b36c94bcdf32beec15', - ]; - return [ - 'Valid' => array_merge($base, ['shouldfail' => false]), - 'Invalid jobid' => array_merge($base, ['jobid' => 'Foo', 'shouldfail' => true]), - 'Invalid backupid' => array_merge($base, ['backupid' => 'Bar', 'shouldfail' => true]), + 'Valid' => array_merge([ + 'jobid' => null, + 'backupid' => null, + 'shouldfail' => false + ]), + 'Invalid jobid' => array_merge([ + 'jobid' => 'Foo', + 'backupid' => null, + 'shouldfail' => true + ]), + 'Invalid backupid' => array_merge([ + 'jobid' => null, + 'backupid' => 'Bar', + 'shouldfail' => true + ]), ]; } From fe788aedcc4099192eb43f7424e735df9c5df907 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 4 Sep 2024 14:47:51 +0200 Subject: [PATCH 149/185] Remove DB modifications inside process_uploaded_artifact_test::parameter_data_provider() --- .../process_uploaded_artifact_test.php | 76 +++++++++++-------- 1 file changed, 45 insertions(+), 31 deletions(-) diff --git a/tests/external/process_uploaded_artifact_test.php b/tests/external/process_uploaded_artifact_test.php index 09f348b..fa79de3 100644 --- a/tests/external/process_uploaded_artifact_test.php +++ b/tests/external/process_uploaded_artifact_test.php @@ -196,15 +196,15 @@ public function test_wstoken_write_access_check(): void { * @covers \quiz_archiver\external\process_uploaded_artifact::execute * @covers \quiz_archiver\external\process_uploaded_artifact::validate_parameters * - * @param string $jobid Job ID - * @param string $artifactcomponent Component name - * @param int $artifactcontextid Context ID - * @param int $artifactuserid User ID - * @param string $artifactfilearea File area name - * @param string $artifactfilename File name - * @param string $artifactfilepath File path - * @param int $artifactitemid Item ID - * @param string $artifactsha256sum SHA256 checksum + * @param string|null $jobid Job ID + * @param string|null $artifactcomponent Component name + * @param int|null $artifactcontextid Context ID + * @param int|null $artifactuserid User ID + * @param string|null $artifactfilearea File area name + * @param string|null $artifactfilename File name + * @param string|null $artifactfilepath File path + * @param int|null $artifactitemid Item ID + * @param string|null $artifactsha256sum SHA256 checksum * @param bool $shouldfail Whether a failure is expected * @return void * @throws \coding_exception @@ -213,33 +213,36 @@ public function test_wstoken_write_access_check(): void { * @throws \required_capability_exception */ public function test_parameter_validation( - string $jobid, - string $artifactcomponent, - int $artifactcontextid, - int $artifactuserid, - string $artifactfilearea, - string $artifactfilename, - string $artifactfilepath, - int $artifactitemid, - string $artifactsha256sum, - bool $shouldfail + ?string $jobid, + ?string $artifactcomponent, + ?int $artifactcontextid, + ?int $artifactuserid, + ?string $artifactfilearea, + ?string $artifactfilename, + ?string $artifactfilepath, + ?int $artifactitemid, + ?string $artifactsha256sum, + bool $shouldfail ): void { + // Create mock quiz. $this->resetAfterTest(); + $mocks = $this->getDataGenerator()->create_mock_quiz(); + $base = $this->generate_valid_request('xxx', $mocks->quiz->cmid, $mocks->user->id); if ($shouldfail) { $this->expectException(\invalid_parameter_exception::class); } process_uploaded_artifact::execute( - $jobid, - $artifactcomponent, - $artifactcontextid, - $artifactuserid, - $artifactfilearea, - $artifactfilename, - $artifactfilepath, - $artifactitemid, - $artifactsha256sum + $jobid === null ? $base['jobid'] : $jobid, + $artifactcomponent === null ? $base['artifact_component'] : $artifactcomponent, + $artifactcontextid === null ? $base['artifact_contextid'] : $artifactcontextid, + $artifactuserid === null ? $base['artifact_userid'] : $artifactuserid, + $artifactfilearea === null ? $base['artifact_filearea'] : $artifactfilearea, + $artifactfilename === null ? $base['artifact_filename'] : $artifactfilename, + $artifactfilepath === null ? $base['artifact_filepath'] : $artifactfilepath, + $artifactitemid === null ? $base['artifact_itemid'] : $artifactitemid, + $artifactsha256sum === null ? $base['artifact_sha256sum'] : $artifactsha256sum ); } @@ -249,9 +252,20 @@ public function test_parameter_validation( * @return array[] Test data */ public static function parameter_data_provider(): array { - $self = new self(); - $mocks = $self->getDataGenerator()->create_mock_quiz(); - $base = $self->generate_valid_request('xxx', $mocks->quiz->cmid, $mocks->user->id); + // Create base data (no modification). + $base = [ + "jobid" => null, + "artifact_component" => null, + "artifact_contextid" => null, + "artifact_userid" => null, + "artifact_filearea" => null, + "artifact_filename" => null, + "artifact_filepath" => null, + "artifact_itemid" => null, + "artifact_sha256sum" => null, + ]; + + // Define test datasets. return [ 'Valid' => array_merge($base, [ 'shouldfail' => false, From b2a1fcdd3035a25267053f5037de3fdbcca6736d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Wed, 4 Sep 2024 15:13:00 +0200 Subject: [PATCH 150/185] Fix coding style in get_backup_status_test --- tests/external/get_backup_status_test.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/external/get_backup_status_test.php b/tests/external/get_backup_status_test.php index 941d25c..0a81203 100644 --- a/tests/external/get_backup_status_test.php +++ b/tests/external/get_backup_status_test.php @@ -168,17 +168,17 @@ public static function parameter_data_provider(): array { 'Valid' => array_merge([ 'jobid' => null, 'backupid' => null, - 'shouldfail' => false + 'shouldfail' => false, ]), 'Invalid jobid' => array_merge([ 'jobid' => 'Foo', 'backupid' => null, - 'shouldfail' => true + 'shouldfail' => true, ]), 'Invalid backupid' => array_merge([ 'jobid' => null, 'backupid' => 'Bar', - 'shouldfail' => true + 'shouldfail' => true, ]), ]; } From f3a39df84cc8c25d560ee5a0e82ac46d769a621e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 11:23:13 +0200 Subject: [PATCH 151/185] New docs WIP --- README.md | 86 +++++++++--------- .../configuration_archive_job_presets_2.png | Bin ...figuration_archive_job_presets_2_thumb.png | Bin .../configuration_archive_job_presets_3.png | Bin ...figuration_archive_job_presets_3_thumb.png | Bin .../configuration_assign_role_1.png | Bin .../configuration_assign_role_1_thumb.png | Bin .../configuration_assign_role_2.png | Bin .../configuration_assign_role_2_thumb.png | Bin .../configuration_assign_role_3.png | Bin .../configuration_assign_role_3_thumb.png | Bin ...guration_assign_webservice_functions_1.png | Bin ...on_assign_webservice_functions_1_thumb.png | Bin ...guration_assign_webservice_functions_2.png | Bin ...on_assign_webservice_functions_2_thumb.png | Bin ...guration_assign_webservice_functions_3.png | Bin ...on_assign_webservice_functions_3_thumb.png | Bin ...guration_assign_webservice_functions_4.png | Bin ...on_assign_webservice_functions_4_thumb.png | Bin .../configuration_create_moodle_user_1.png | Bin ...nfiguration_create_moodle_user_1_thumb.png | Bin .../configuration_create_moodle_user_2.png | Bin ...nfiguration_create_moodle_user_2_thumb.png | Bin .../configuration_create_role_1.png | Bin .../configuration_create_role_1_thumb.png | Bin .../configuration_create_role_2.png | Bin .../configuration_create_role_2_thumb.png | Bin .../configuration_create_role_3.png | Bin .../configuration_create_role_3_thumb.png | Bin .../configuration_create_role_4.png | Bin .../configuration_create_role_4_thumb.png | Bin .../configuration_create_webservice_1.png | Bin ...onfiguration_create_webservice_1_thumb.png | Bin .../configuration_create_webservice_2.png | Bin ...onfiguration_create_webservice_2_thumb.png | Bin .../configuration_create_webservice_3.png | Bin ...onfiguration_create_webservice_3_thumb.png | Bin .../configuration_enable_webservices_1.png | Bin ...nfiguration_enable_webservices_1_thumb.png | Bin .../configuration_enable_webservices_2.png | Bin ...nfiguration_enable_webservices_2_thumb.png | Bin .../configuration_enable_webservices_3.png | Bin ...nfiguration_enable_webservices_3_thumb.png | Bin .../configuration_enable_webservices_4.png | Bin ...nfiguration_enable_webservices_4_thumb.png | Bin .../configuration_job_autodelete.png | Bin .../configuration_job_autodelete_thumb.png | Bin .../configuration_job_image_optimization.png | Bin ...iguration_job_image_optimization_thumb.png | Bin .../configuration_plugin_autoinstall_2.png | Bin ...nfiguration_plugin_autoinstall_2_thumb.png | Bin .../configuration_plugin_autoinstall_3.png | Bin ...nfiguration_plugin_autoinstall_3_thumb.png | Bin .../configuration_plugin_autoinstall_4.png | Bin ...nfiguration_plugin_autoinstall_4_thumb.png | Bin .../configuration_plugin_settings_1.png | Bin .../configuration_plugin_settings_1_thumb.png | Bin .../configuration_plugin_settings_2.png | Bin .../configuration_plugin_settings_2_thumb.png | Bin .../configuration_tsp_settings_2.png | Bin .../configuration_tsp_settings_2_thumb.png | Bin .../moodle-plugin-directory-button.png | Bin .../quiz_archiver_job_details_modal.png | Bin ..._archiver_job_details_modal_autodelete.png | Bin ...iz_archiver_job_details_modal_tsp_data.png | Bin .../quiz_archiver_new_job_queued.png | Bin .../quiz_archiver_overview_page.png | Bin ...uiz_archiver_report_example_pdf_header.png | Bin ...archiver_report_example_pdf_question_1.png | Bin ...archiver_report_example_pdf_question_2.png | Bin ...archiver_report_example_pdf_question_3.png | Bin docs/bugreport.md | 7 ++ docs/configuration/index.md | 16 ++++ docs/configuration/initialconfig/automatic.md | 66 ++++++++++++++ docs/index.md | 52 ++++++++++- docs/installation/archiveworker.md | 8 ++ docs/installation/index.md | 57 ++++++++++++ docs/installation/moodleplugin.md | 35 +++++++ docs/screenshots.md | 15 +++ mkdocs.yml | 1 + 80 files changed, 299 insertions(+), 44 deletions(-) rename {doc => docs/assets}/configuration/configuration_archive_job_presets_2.png (100%) rename {doc => docs/assets}/configuration/configuration_archive_job_presets_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_archive_job_presets_3.png (100%) rename {doc => docs/assets}/configuration/configuration_archive_job_presets_3_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_role_1.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_role_1_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_role_2.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_role_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_role_3.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_role_3_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_1.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_1_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_2.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_3.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_3_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_4.png (100%) rename {doc => docs/assets}/configuration/configuration_assign_webservice_functions_4_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_moodle_user_1.png (100%) rename {doc => docs/assets}/configuration/configuration_create_moodle_user_1_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_moodle_user_2.png (100%) rename {doc => docs/assets}/configuration/configuration_create_moodle_user_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_1.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_1_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_2.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_3.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_3_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_4.png (100%) rename {doc => docs/assets}/configuration/configuration_create_role_4_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_webservice_1.png (100%) rename {doc => docs/assets}/configuration/configuration_create_webservice_1_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_webservice_2.png (100%) rename {doc => docs/assets}/configuration/configuration_create_webservice_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_create_webservice_3.png (100%) rename {doc => docs/assets}/configuration/configuration_create_webservice_3_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_1.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_1_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_2.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_3.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_3_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_4.png (100%) rename {doc => docs/assets}/configuration/configuration_enable_webservices_4_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_job_autodelete.png (100%) rename {doc => docs/assets}/configuration/configuration_job_autodelete_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_job_image_optimization.png (100%) rename {doc => docs/assets}/configuration/configuration_job_image_optimization_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_autoinstall_2.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_autoinstall_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_autoinstall_3.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_autoinstall_3_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_autoinstall_4.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_autoinstall_4_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_settings_1.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_settings_1_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_settings_2.png (100%) rename {doc => docs/assets}/configuration/configuration_plugin_settings_2_thumb.png (100%) rename {doc => docs/assets}/configuration/configuration_tsp_settings_2.png (100%) rename {doc => docs/assets}/configuration/configuration_tsp_settings_2_thumb.png (100%) rename {doc => docs/assets}/moodle-plugin-directory-button.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_job_details_modal.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_job_details_modal_autodelete.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_job_details_modal_tsp_data.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_new_job_queued.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_overview_page.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_report_example_pdf_header.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_report_example_pdf_question_1.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_report_example_pdf_question_2.png (100%) rename {doc => docs/assets}/screenshots/quiz_archiver_report_example_pdf_question_3.png (100%) create mode 100644 docs/bugreport.md diff --git a/README.md b/README.md index 9db17f4..a0c8106 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ number of software dependencies on the webserver. It can easily be [deployed using Docker](https://github.com/ngandrass/moodle-quiz-archive-worker#installation). Available via the [Moodle Plugin Directory](https://moodle.org/plugins/quiz_archiver):\ -[![Moodle Plugin Directory](doc/moodle-plugin-directory-button.png)](https://moodle.org/plugins/quiz_archiver) +[![Moodle Plugin Directory](docs/assets/moodle-plugin-directory-button.png)](https://moodle.org/plugins/quiz_archiver) ----- @@ -192,10 +192,10 @@ Moodle admin interface. 6. Close the window (7) 7. (Optional) Adjust the default plugin setting on the plugin settings page -[![Screenshot: Configuration - Automatic Configuration 1](doc/configuration/configuration_plugin_settings_1_thumb.png)](doc/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - Automatic Configuration 2](doc/configuration/configuration_plugin_autoinstall_2_thumb.png)](doc/configuration/configuration_plugin_autoinstall_2.png) -[![Screenshot: Configuration - Automatic Configuration 3](doc/configuration/configuration_plugin_autoinstall_3_thumb.png)](doc/configuration/configuration_plugin_autoinstall_3.png) -[![Screenshot: Configuration - Automatic Configuration 4](doc/configuration/configuration_plugin_autoinstall_4_thumb.png)](doc/configuration/configuration_plugin_autoinstall_4.png) +[![Screenshot: Configuration - Automatic Configuration 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) +[![Screenshot: Configuration - Automatic Configuration 2](docs/assets/configuration/configuration_plugin_autoinstall_2_thumb.png)](docs/assets/configuration/configuration_plugin_autoinstall_2.png) +[![Screenshot: Configuration - Automatic Configuration 3](docs/assets/configuration/configuration_plugin_autoinstall_3_thumb.png)](docs/assets/configuration/configuration_plugin_autoinstall_3.png) +[![Screenshot: Configuration - Automatic Configuration 4](docs/assets/configuration/configuration_plugin_autoinstall_4_thumb.png)](docs/assets/configuration/configuration_plugin_autoinstall_4.png) #### Using the Command Line Interface (CLI) @@ -257,8 +257,8 @@ Options: lastname (5), and a hidden email address (6) 3. Create the user (7) - [![Screenshot: Configuration - Create Moodle User 1](doc/configuration/configuration_create_moodle_user_1_thumb.png)](doc/configuration/configuration_create_moodle_user_1.png) - [![Screenshot: Configuration - Create Moodle User 2](doc/configuration/configuration_create_moodle_user_2_thumb.png)](doc/configuration/configuration_create_moodle_user_2.png) + [![Screenshot: Configuration - Create Moodle User 1](docs/assets/configuration/configuration_create_moodle_user_1_thumb.png)](docs/assets/configuration/configuration_create_moodle_user_1.png) + [![Screenshot: Configuration - Create Moodle User 2](docs/assets/configuration/configuration_create_moodle_user_2_thumb.png)](docs/assets/configuration/configuration_create_moodle_user_2.png) 2. Create a global role to handle permissions for the `quiz_archiver` Moodle user 1. Navigate to _Site Administration_ > _Users_ (1) > _Permissions_ > _Define roles_ (2) @@ -271,10 +271,10 @@ Options: 5. Click on _Continue_ (6) to import the role definitions for review 6. Optionally change the role name or description and create the role (7) - [![Screenshot: Configuration - Create Role 1](doc/configuration/configuration_create_role_1_thumb.png)](doc/configuration/configuration_create_role_1.png) - [![Screenshot: Configuration - Create Role 2](doc/configuration/configuration_create_role_2_thumb.png)](doc/configuration/configuration_create_role_2.png) - [![Screenshot: Configuration - Create Role 3](doc/configuration/configuration_create_role_3_thumb.png)](doc/configuration/configuration_create_role_3.png) - [![Screenshot: Configuration - Create Role 4](doc/configuration/configuration_create_role_4_thumb.png)](doc/configuration/configuration_create_role_4.png) + [![Screenshot: Configuration - Create Role 1](docs/assets/configuration/configuration_create_role_1_thumb.png)](docs/assets/configuration/configuration_create_role_1.png) + [![Screenshot: Configuration - Create Role 2](docs/assets/configuration/configuration_create_role_2_thumb.png)](docs/assets/configuration/configuration_create_role_2.png) + [![Screenshot: Configuration - Create Role 3](docs/assets/configuration/configuration_create_role_3_thumb.png)](docs/assets/configuration/configuration_create_role_3.png) + [![Screenshot: Configuration - Create Role 4](docs/assets/configuration/configuration_create_role_4_thumb.png)](docs/assets/configuration/configuration_create_role_4.png) 3. Assign the `quiz_archiver` Moodle user to the created role 1. Navigate to _Site Administration_ > _Users_ (1) > _Permissions_ > _Assign system roles_ (2) @@ -282,9 +282,9 @@ Options: 3. Search the created `quiz_archiver` Moodle user (4), select it in the list of potential users (5), and add it to the role (6) - [![Screenshot: Configuration - Assign Role 1](doc/configuration/configuration_assign_role_1_thumb.png)](doc/configuration/configuration_assign_role_1.png) - [![Screenshot: Configuration - Assign Role 2](doc/configuration/configuration_assign_role_2_thumb.png)](doc/configuration/configuration_assign_role_2.png) - [![Screenshot: Configuration - Assign Role 3](doc/configuration/configuration_assign_role_3_thumb.png)](doc/configuration/configuration_assign_role_3.png) + [![Screenshot: Configuration - Assign Role 1](docs/assets/configuration/configuration_assign_role_1_thumb.png)](docs/assets/configuration/configuration_assign_role_1.png) + [![Screenshot: Configuration - Assign Role 2](docs/assets/configuration/configuration_assign_role_2_thumb.png)](docs/assets/configuration/configuration_assign_role_2.png) + [![Screenshot: Configuration - Assign Role 3](docs/assets/configuration/configuration_assign_role_3_thumb.png)](docs/assets/configuration/configuration_assign_role_3.png) ### 2. Setup Webservice @@ -296,10 +296,10 @@ Options: 4. Click on _Enable protocols_ (6), enable the _REST protocol_ (7), and save the changes (8) - [![Screenshot: Configuration - Enable Webservices 1](doc/configuration/configuration_enable_webservices_1_thumb.png)](doc/configuration/configuration_enable_webservices_1.png) - [![Screenshot: Configuration - Enable Webservices 2](doc/configuration/configuration_enable_webservices_2_thumb.png)](doc/configuration/configuration_enable_webservices_2.png) - [![Screenshot: Configuration - Enable Webservices 3](doc/configuration/configuration_enable_webservices_3_thumb.png)](doc/configuration/configuration_enable_webservices_3.png) - [![Screenshot: Configuration - Enable Webservices 4](doc/configuration/configuration_enable_webservices_4_thumb.png)](doc/configuration/configuration_enable_webservices_4.png) + [![Screenshot: Configuration - Enable Webservices 1](docs/assets/configuration/configuration_enable_webservices_1_thumb.png)](docs/assets/configuration/configuration_enable_webservices_1.png) + [![Screenshot: Configuration - Enable Webservices 2](docs/assets/configuration/configuration_enable_webservices_2_thumb.png)](docs/assets/configuration/configuration_enable_webservices_2.png) + [![Screenshot: Configuration - Enable Webservices 3](docs/assets/configuration/configuration_enable_webservices_3_thumb.png)](docs/assets/configuration/configuration_enable_webservices_3.png) + [![Screenshot: Configuration - Enable Webservices 4](docs/assets/configuration/configuration_enable_webservices_4_thumb.png)](docs/assets/configuration/configuration_enable_webservices_4.png) 2. Create an external webservice for the quiz archive worker to use 1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _External services_ (2) @@ -308,9 +308,9 @@ Options: 4. Expand the additional settings (6), enable file up- and download (7) 5. Create the new webservice by clicking _Add service_ (8) - [![Screenshot: Configuration - Create Webservice 1](doc/configuration/configuration_create_webservice_1_thumb.png)](doc/configuration/configuration_create_webservice_1.png) - [![Screenshot: Configuration - Create Webservice 2](doc/configuration/configuration_create_webservice_2_thumb.png)](doc/configuration/configuration_create_webservice_2.png) - [![Screenshot: Configuration - Create Webservice 3](doc/configuration/configuration_create_webservice_3_thumb.png)](doc/configuration/configuration_create_webservice_3.png) + [![Screenshot: Configuration - Create Webservice 1](docs/assets/configuration/configuration_create_webservice_1_thumb.png)](docs/assets/configuration/configuration_create_webservice_1.png) + [![Screenshot: Configuration - Create Webservice 2](docs/assets/configuration/configuration_create_webservice_2_thumb.png)](docs/assets/configuration/configuration_create_webservice_2.png) + [![Screenshot: Configuration - Create Webservice 3](docs/assets/configuration/configuration_create_webservice_3_thumb.png)](docs/assets/configuration/configuration_create_webservice_3.png) 3. Add all `quiz_archiver_*` webservice functions to the `quiz_archiver` external service @@ -320,10 +320,10 @@ Options: 4. Search for `quiz_archiver` (5) and add all `quiz_archiver_*` functions 5. Save the changes by clicking _Add functions_ (6) - [![Screenshot: Configuration - Assign Webservice Functions 1](doc/configuration/configuration_assign_webservice_functions_1_thumb.png)](doc/configuration/configuration_assign_webservice_functions_1.png) - [![Screenshot: Configuration - Assign Webservice Functions 2](doc/configuration/configuration_assign_webservice_functions_2_thumb.png)](doc/configuration/configuration_assign_webservice_functions_2.png) - [![Screenshot: Configuration - Assign Webservice Functions 3](doc/configuration/configuration_assign_webservice_functions_3_thumb.png)](doc/configuration/configuration_assign_webservice_functions_3.png) - [![Screenshot: Configuration - Assign Webservice Functions 4](doc/configuration/configuration_assign_webservice_functions_4_thumb.png)](doc/configuration/configuration_assign_webservice_functions_4.png) + [![Screenshot: Configuration - Assign Webservice Functions 1](docs/assets/configuration/configuration_assign_webservice_functions_1_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_1.png) + [![Screenshot: Configuration - Assign Webservice Functions 2](docs/assets/configuration/configuration_assign_webservice_functions_2_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_2.png) + [![Screenshot: Configuration - Assign Webservice Functions 3](docs/assets/configuration/configuration_assign_webservice_functions_3_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_3.png) + [![Screenshot: Configuration - Assign Webservice Functions 4](docs/assets/configuration/configuration_assign_webservice_functions_4_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_4.png) ### 3. Configure Plugin Settings @@ -346,8 +346,8 @@ Options: 7. Save all settings and create your first quiz archive (see [Usage](#usage)). 8. (Optional) Adjust the default [capability](#capabilities) assignments. -[![Screenshot: Configuration - Plugin Settings 1](doc/configuration/configuration_plugin_settings_1_thumb.png)](doc/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - Plugin Settings 2](doc/configuration/configuration_plugin_settings_2_thumb.png)](doc/configuration/configuration_plugin_settings_2.png) +[![Screenshot: Configuration - Plugin Settings 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) +[![Screenshot: Configuration - Plugin Settings 2](docs/assets/configuration/configuration_plugin_settings_2_thumb.png)](docs/assets/configuration/configuration_plugin_settings_2.png) @@ -455,9 +455,9 @@ To customize these options: Locked options will be grayed out during archive creation (8). -[![Screenshot: Configuration - Archive job presets 1](doc/configuration/configuration_plugin_settings_1_thumb.png)](doc/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - Archive job presets 2](doc/configuration/configuration_archive_job_presets_2_thumb.png)](doc/configuration/configuration_archive_job_presets_2.png) -[![Screenshot: Configuration - Archive job presets 3](doc/configuration/configuration_archive_job_presets_3_thumb.png)](doc/configuration/configuration_archive_job_presets_3.png) +[![Screenshot: Configuration - Archive job presets 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) +[![Screenshot: Configuration - Archive job presets 2](docs/assets/configuration/configuration_archive_job_presets_2_thumb.png)](docs/assets/configuration/configuration_archive_job_presets_2.png) +[![Screenshot: Configuration - Archive job presets 3](docs/assets/configuration/configuration_archive_job_presets_3_thumb.png)](docs/assets/configuration/configuration_archive_job_presets_3.png) ### Image optimization / compression @@ -485,7 +485,7 @@ To enable image optimization for a quiz archive job: _Note: It is strongly advised to lock quality settings to global defaults using the [archive job presets](#archive-job-presets-global-defaults--policies)._ -[![Screenshot: Configuration - Image optimization](doc/configuration/configuration_job_image_optimization_thumb.png)](doc/configuration/configuration_job_image_optimization.png) +[![Screenshot: Configuration - Image optimization](docs/assets/configuration/configuration_job_image_optimization_thumb.png)](docs/assets/configuration/configuration_job_image_optimization.png) ### Automatic deletion of quiz archives (retention policy) @@ -499,7 +499,7 @@ attachments, ...) is deleted, while the job metadata is kept until manually deleted. This procedure allows to document the deletion of archive data in a traceable manner, while the privacy relevant user data is deleted. -![Screenshot: Job details modal - Automatic deletion](doc/screenshots/quiz_archiver_job_details_modal_autodelete.png) +![Screenshot: Job details modal - Automatic deletion](docs/assets/screenshots/quiz_archiver_job_details_modal_autodelete.png) If an archive is scheduled for automatic deletion, its remaining lifetime is shown in the job details modal, as depict above. You can access it via the @@ -518,7 +518,7 @@ To enable the scheduled deletion for a single quiz archive: 4. Set the desired retention period (2) 5. Create the archive job (3) -[![Screenshot: Configuration - Automatic archive deletion](doc/configuration/configuration_job_autodelete_thumb.png)](doc/configuration/configuration_job_autodelete.png) +[![Screenshot: Configuration - Automatic archive deletion](docs/assets/configuration/configuration_job_autodelete_thumb.png)](docs/assets/configuration/configuration_job_autodelete.png) #### Enable automatic deletion globally @@ -546,8 +546,8 @@ manually later on. 4. (Optional) Enable automatic archive signing by checking `tsp_automatic_signing` (5) 5. Save all settings (6) -[![Screenshot: Configuration - TSP Settings 1](doc/configuration/configuration_plugin_settings_1_thumb.png)](doc/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - TSP Settings 2](doc/configuration/configuration_tsp_settings_2_thumb.png)](doc/configuration/configuration_tsp_settings_2.png) +[![Screenshot: Configuration - TSP Settings 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) +[![Screenshot: Configuration - TSP Settings 2](docs/assets/configuration/configuration_tsp_settings_2_thumb.png)](docs/assets/configuration/configuration_tsp_settings_2.png) #### Accessing TSP data @@ -556,7 +556,7 @@ Both the TSP query and the TSP response can be accessed via the job details dialog. To do so, navigate to the quiz archiver overview page and click the _Show details_ button for the desired archive job. -![Image of archive job details: TSP data](doc/screenshots/quiz_archiver_job_details_modal_tsp_data.png) +![Image of archive job details: TSP data](docs/assets/screenshots/quiz_archiver_job_details_modal_tsp_data.png) #### Automatic archive signing @@ -611,19 +611,19 @@ located at [res/backup-moodle2-course-qa-ref.mbz](res/backup-moodle2-course-qa-r ## Screenshots ### Quiz Archiver overview page -![Image of quiz archiver overview page](doc/screenshots/quiz_archiver_overview_page.png) +![Image of quiz archiver overview page](docs/assets/screenshots/quiz_archiver_overview_page.png) ### New job queued while another job is running -![Image of new job queued while another job is running](doc/screenshots/quiz_archiver_new_job_queued.png) +![Image of new job queued while another job is running](docs/assets/screenshots/quiz_archiver_new_job_queued.png) ### Quiz archive job details -![Image of quiz archive job details](doc/screenshots/quiz_archiver_job_details_modal.png) +![Image of quiz archive job details](docs/assets/screenshots/quiz_archiver_job_details_modal.png) ### Example of PDF report (excerpts) -![Image of example of PDF report (extract): Header](doc/screenshots/quiz_archiver_report_example_pdf_header.png) -![Image of example of PDF report (extract): Question 1](doc/screenshots/quiz_archiver_report_example_pdf_question_1.png) -![Image of example of PDF report (extract): Question 2](doc/screenshots/quiz_archiver_report_example_pdf_question_2.png) -![Image of example of PDF report (extract): Question 3](doc/screenshots/quiz_archiver_report_example_pdf_question_3.png) +![Image of example of PDF report (extract): Header](docs/assets/screenshots/quiz_archiver_report_example_pdf_header.png) +![Image of example of PDF report (extract): Question 1](docs/assets/screenshots/quiz_archiver_report_example_pdf_question_1.png) +![Image of example of PDF report (extract): Question 2](docs/assets/screenshots/quiz_archiver_report_example_pdf_question_2.png) +![Image of example of PDF report (extract): Question 3](docs/assets/screenshots/quiz_archiver_report_example_pdf_question_3.png) ----- diff --git a/doc/configuration/configuration_archive_job_presets_2.png b/docs/assets/configuration/configuration_archive_job_presets_2.png similarity index 100% rename from doc/configuration/configuration_archive_job_presets_2.png rename to docs/assets/configuration/configuration_archive_job_presets_2.png diff --git a/doc/configuration/configuration_archive_job_presets_2_thumb.png b/docs/assets/configuration/configuration_archive_job_presets_2_thumb.png similarity index 100% rename from doc/configuration/configuration_archive_job_presets_2_thumb.png rename to docs/assets/configuration/configuration_archive_job_presets_2_thumb.png diff --git a/doc/configuration/configuration_archive_job_presets_3.png b/docs/assets/configuration/configuration_archive_job_presets_3.png similarity index 100% rename from doc/configuration/configuration_archive_job_presets_3.png rename to docs/assets/configuration/configuration_archive_job_presets_3.png diff --git a/doc/configuration/configuration_archive_job_presets_3_thumb.png b/docs/assets/configuration/configuration_archive_job_presets_3_thumb.png similarity index 100% rename from doc/configuration/configuration_archive_job_presets_3_thumb.png rename to docs/assets/configuration/configuration_archive_job_presets_3_thumb.png diff --git a/doc/configuration/configuration_assign_role_1.png b/docs/assets/configuration/configuration_assign_role_1.png similarity index 100% rename from doc/configuration/configuration_assign_role_1.png rename to docs/assets/configuration/configuration_assign_role_1.png diff --git a/doc/configuration/configuration_assign_role_1_thumb.png b/docs/assets/configuration/configuration_assign_role_1_thumb.png similarity index 100% rename from doc/configuration/configuration_assign_role_1_thumb.png rename to docs/assets/configuration/configuration_assign_role_1_thumb.png diff --git a/doc/configuration/configuration_assign_role_2.png b/docs/assets/configuration/configuration_assign_role_2.png similarity index 100% rename from doc/configuration/configuration_assign_role_2.png rename to docs/assets/configuration/configuration_assign_role_2.png diff --git a/doc/configuration/configuration_assign_role_2_thumb.png b/docs/assets/configuration/configuration_assign_role_2_thumb.png similarity index 100% rename from doc/configuration/configuration_assign_role_2_thumb.png rename to docs/assets/configuration/configuration_assign_role_2_thumb.png diff --git a/doc/configuration/configuration_assign_role_3.png b/docs/assets/configuration/configuration_assign_role_3.png similarity index 100% rename from doc/configuration/configuration_assign_role_3.png rename to docs/assets/configuration/configuration_assign_role_3.png diff --git a/doc/configuration/configuration_assign_role_3_thumb.png b/docs/assets/configuration/configuration_assign_role_3_thumb.png similarity index 100% rename from doc/configuration/configuration_assign_role_3_thumb.png rename to docs/assets/configuration/configuration_assign_role_3_thumb.png diff --git a/doc/configuration/configuration_assign_webservice_functions_1.png b/docs/assets/configuration/configuration_assign_webservice_functions_1.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_1.png rename to docs/assets/configuration/configuration_assign_webservice_functions_1.png diff --git a/doc/configuration/configuration_assign_webservice_functions_1_thumb.png b/docs/assets/configuration/configuration_assign_webservice_functions_1_thumb.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_1_thumb.png rename to docs/assets/configuration/configuration_assign_webservice_functions_1_thumb.png diff --git a/doc/configuration/configuration_assign_webservice_functions_2.png b/docs/assets/configuration/configuration_assign_webservice_functions_2.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_2.png rename to docs/assets/configuration/configuration_assign_webservice_functions_2.png diff --git a/doc/configuration/configuration_assign_webservice_functions_2_thumb.png b/docs/assets/configuration/configuration_assign_webservice_functions_2_thumb.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_2_thumb.png rename to docs/assets/configuration/configuration_assign_webservice_functions_2_thumb.png diff --git a/doc/configuration/configuration_assign_webservice_functions_3.png b/docs/assets/configuration/configuration_assign_webservice_functions_3.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_3.png rename to docs/assets/configuration/configuration_assign_webservice_functions_3.png diff --git a/doc/configuration/configuration_assign_webservice_functions_3_thumb.png b/docs/assets/configuration/configuration_assign_webservice_functions_3_thumb.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_3_thumb.png rename to docs/assets/configuration/configuration_assign_webservice_functions_3_thumb.png diff --git a/doc/configuration/configuration_assign_webservice_functions_4.png b/docs/assets/configuration/configuration_assign_webservice_functions_4.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_4.png rename to docs/assets/configuration/configuration_assign_webservice_functions_4.png diff --git a/doc/configuration/configuration_assign_webservice_functions_4_thumb.png b/docs/assets/configuration/configuration_assign_webservice_functions_4_thumb.png similarity index 100% rename from doc/configuration/configuration_assign_webservice_functions_4_thumb.png rename to docs/assets/configuration/configuration_assign_webservice_functions_4_thumb.png diff --git a/doc/configuration/configuration_create_moodle_user_1.png b/docs/assets/configuration/configuration_create_moodle_user_1.png similarity index 100% rename from doc/configuration/configuration_create_moodle_user_1.png rename to docs/assets/configuration/configuration_create_moodle_user_1.png diff --git a/doc/configuration/configuration_create_moodle_user_1_thumb.png b/docs/assets/configuration/configuration_create_moodle_user_1_thumb.png similarity index 100% rename from doc/configuration/configuration_create_moodle_user_1_thumb.png rename to docs/assets/configuration/configuration_create_moodle_user_1_thumb.png diff --git a/doc/configuration/configuration_create_moodle_user_2.png b/docs/assets/configuration/configuration_create_moodle_user_2.png similarity index 100% rename from doc/configuration/configuration_create_moodle_user_2.png rename to docs/assets/configuration/configuration_create_moodle_user_2.png diff --git a/doc/configuration/configuration_create_moodle_user_2_thumb.png b/docs/assets/configuration/configuration_create_moodle_user_2_thumb.png similarity index 100% rename from doc/configuration/configuration_create_moodle_user_2_thumb.png rename to docs/assets/configuration/configuration_create_moodle_user_2_thumb.png diff --git a/doc/configuration/configuration_create_role_1.png b/docs/assets/configuration/configuration_create_role_1.png similarity index 100% rename from doc/configuration/configuration_create_role_1.png rename to docs/assets/configuration/configuration_create_role_1.png diff --git a/doc/configuration/configuration_create_role_1_thumb.png b/docs/assets/configuration/configuration_create_role_1_thumb.png similarity index 100% rename from doc/configuration/configuration_create_role_1_thumb.png rename to docs/assets/configuration/configuration_create_role_1_thumb.png diff --git a/doc/configuration/configuration_create_role_2.png b/docs/assets/configuration/configuration_create_role_2.png similarity index 100% rename from doc/configuration/configuration_create_role_2.png rename to docs/assets/configuration/configuration_create_role_2.png diff --git a/doc/configuration/configuration_create_role_2_thumb.png b/docs/assets/configuration/configuration_create_role_2_thumb.png similarity index 100% rename from doc/configuration/configuration_create_role_2_thumb.png rename to docs/assets/configuration/configuration_create_role_2_thumb.png diff --git a/doc/configuration/configuration_create_role_3.png b/docs/assets/configuration/configuration_create_role_3.png similarity index 100% rename from doc/configuration/configuration_create_role_3.png rename to docs/assets/configuration/configuration_create_role_3.png diff --git a/doc/configuration/configuration_create_role_3_thumb.png b/docs/assets/configuration/configuration_create_role_3_thumb.png similarity index 100% rename from doc/configuration/configuration_create_role_3_thumb.png rename to docs/assets/configuration/configuration_create_role_3_thumb.png diff --git a/doc/configuration/configuration_create_role_4.png b/docs/assets/configuration/configuration_create_role_4.png similarity index 100% rename from doc/configuration/configuration_create_role_4.png rename to docs/assets/configuration/configuration_create_role_4.png diff --git a/doc/configuration/configuration_create_role_4_thumb.png b/docs/assets/configuration/configuration_create_role_4_thumb.png similarity index 100% rename from doc/configuration/configuration_create_role_4_thumb.png rename to docs/assets/configuration/configuration_create_role_4_thumb.png diff --git a/doc/configuration/configuration_create_webservice_1.png b/docs/assets/configuration/configuration_create_webservice_1.png similarity index 100% rename from doc/configuration/configuration_create_webservice_1.png rename to docs/assets/configuration/configuration_create_webservice_1.png diff --git a/doc/configuration/configuration_create_webservice_1_thumb.png b/docs/assets/configuration/configuration_create_webservice_1_thumb.png similarity index 100% rename from doc/configuration/configuration_create_webservice_1_thumb.png rename to docs/assets/configuration/configuration_create_webservice_1_thumb.png diff --git a/doc/configuration/configuration_create_webservice_2.png b/docs/assets/configuration/configuration_create_webservice_2.png similarity index 100% rename from doc/configuration/configuration_create_webservice_2.png rename to docs/assets/configuration/configuration_create_webservice_2.png diff --git a/doc/configuration/configuration_create_webservice_2_thumb.png b/docs/assets/configuration/configuration_create_webservice_2_thumb.png similarity index 100% rename from doc/configuration/configuration_create_webservice_2_thumb.png rename to docs/assets/configuration/configuration_create_webservice_2_thumb.png diff --git a/doc/configuration/configuration_create_webservice_3.png b/docs/assets/configuration/configuration_create_webservice_3.png similarity index 100% rename from doc/configuration/configuration_create_webservice_3.png rename to docs/assets/configuration/configuration_create_webservice_3.png diff --git a/doc/configuration/configuration_create_webservice_3_thumb.png b/docs/assets/configuration/configuration_create_webservice_3_thumb.png similarity index 100% rename from doc/configuration/configuration_create_webservice_3_thumb.png rename to docs/assets/configuration/configuration_create_webservice_3_thumb.png diff --git a/doc/configuration/configuration_enable_webservices_1.png b/docs/assets/configuration/configuration_enable_webservices_1.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_1.png rename to docs/assets/configuration/configuration_enable_webservices_1.png diff --git a/doc/configuration/configuration_enable_webservices_1_thumb.png b/docs/assets/configuration/configuration_enable_webservices_1_thumb.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_1_thumb.png rename to docs/assets/configuration/configuration_enable_webservices_1_thumb.png diff --git a/doc/configuration/configuration_enable_webservices_2.png b/docs/assets/configuration/configuration_enable_webservices_2.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_2.png rename to docs/assets/configuration/configuration_enable_webservices_2.png diff --git a/doc/configuration/configuration_enable_webservices_2_thumb.png b/docs/assets/configuration/configuration_enable_webservices_2_thumb.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_2_thumb.png rename to docs/assets/configuration/configuration_enable_webservices_2_thumb.png diff --git a/doc/configuration/configuration_enable_webservices_3.png b/docs/assets/configuration/configuration_enable_webservices_3.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_3.png rename to docs/assets/configuration/configuration_enable_webservices_3.png diff --git a/doc/configuration/configuration_enable_webservices_3_thumb.png b/docs/assets/configuration/configuration_enable_webservices_3_thumb.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_3_thumb.png rename to docs/assets/configuration/configuration_enable_webservices_3_thumb.png diff --git a/doc/configuration/configuration_enable_webservices_4.png b/docs/assets/configuration/configuration_enable_webservices_4.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_4.png rename to docs/assets/configuration/configuration_enable_webservices_4.png diff --git a/doc/configuration/configuration_enable_webservices_4_thumb.png b/docs/assets/configuration/configuration_enable_webservices_4_thumb.png similarity index 100% rename from doc/configuration/configuration_enable_webservices_4_thumb.png rename to docs/assets/configuration/configuration_enable_webservices_4_thumb.png diff --git a/doc/configuration/configuration_job_autodelete.png b/docs/assets/configuration/configuration_job_autodelete.png similarity index 100% rename from doc/configuration/configuration_job_autodelete.png rename to docs/assets/configuration/configuration_job_autodelete.png diff --git a/doc/configuration/configuration_job_autodelete_thumb.png b/docs/assets/configuration/configuration_job_autodelete_thumb.png similarity index 100% rename from doc/configuration/configuration_job_autodelete_thumb.png rename to docs/assets/configuration/configuration_job_autodelete_thumb.png diff --git a/doc/configuration/configuration_job_image_optimization.png b/docs/assets/configuration/configuration_job_image_optimization.png similarity index 100% rename from doc/configuration/configuration_job_image_optimization.png rename to docs/assets/configuration/configuration_job_image_optimization.png diff --git a/doc/configuration/configuration_job_image_optimization_thumb.png b/docs/assets/configuration/configuration_job_image_optimization_thumb.png similarity index 100% rename from doc/configuration/configuration_job_image_optimization_thumb.png rename to docs/assets/configuration/configuration_job_image_optimization_thumb.png diff --git a/doc/configuration/configuration_plugin_autoinstall_2.png b/docs/assets/configuration/configuration_plugin_autoinstall_2.png similarity index 100% rename from doc/configuration/configuration_plugin_autoinstall_2.png rename to docs/assets/configuration/configuration_plugin_autoinstall_2.png diff --git a/doc/configuration/configuration_plugin_autoinstall_2_thumb.png b/docs/assets/configuration/configuration_plugin_autoinstall_2_thumb.png similarity index 100% rename from doc/configuration/configuration_plugin_autoinstall_2_thumb.png rename to docs/assets/configuration/configuration_plugin_autoinstall_2_thumb.png diff --git a/doc/configuration/configuration_plugin_autoinstall_3.png b/docs/assets/configuration/configuration_plugin_autoinstall_3.png similarity index 100% rename from doc/configuration/configuration_plugin_autoinstall_3.png rename to docs/assets/configuration/configuration_plugin_autoinstall_3.png diff --git a/doc/configuration/configuration_plugin_autoinstall_3_thumb.png b/docs/assets/configuration/configuration_plugin_autoinstall_3_thumb.png similarity index 100% rename from doc/configuration/configuration_plugin_autoinstall_3_thumb.png rename to docs/assets/configuration/configuration_plugin_autoinstall_3_thumb.png diff --git a/doc/configuration/configuration_plugin_autoinstall_4.png b/docs/assets/configuration/configuration_plugin_autoinstall_4.png similarity index 100% rename from doc/configuration/configuration_plugin_autoinstall_4.png rename to docs/assets/configuration/configuration_plugin_autoinstall_4.png diff --git a/doc/configuration/configuration_plugin_autoinstall_4_thumb.png b/docs/assets/configuration/configuration_plugin_autoinstall_4_thumb.png similarity index 100% rename from doc/configuration/configuration_plugin_autoinstall_4_thumb.png rename to docs/assets/configuration/configuration_plugin_autoinstall_4_thumb.png diff --git a/doc/configuration/configuration_plugin_settings_1.png b/docs/assets/configuration/configuration_plugin_settings_1.png similarity index 100% rename from doc/configuration/configuration_plugin_settings_1.png rename to docs/assets/configuration/configuration_plugin_settings_1.png diff --git a/doc/configuration/configuration_plugin_settings_1_thumb.png b/docs/assets/configuration/configuration_plugin_settings_1_thumb.png similarity index 100% rename from doc/configuration/configuration_plugin_settings_1_thumb.png rename to docs/assets/configuration/configuration_plugin_settings_1_thumb.png diff --git a/doc/configuration/configuration_plugin_settings_2.png b/docs/assets/configuration/configuration_plugin_settings_2.png similarity index 100% rename from doc/configuration/configuration_plugin_settings_2.png rename to docs/assets/configuration/configuration_plugin_settings_2.png diff --git a/doc/configuration/configuration_plugin_settings_2_thumb.png b/docs/assets/configuration/configuration_plugin_settings_2_thumb.png similarity index 100% rename from doc/configuration/configuration_plugin_settings_2_thumb.png rename to docs/assets/configuration/configuration_plugin_settings_2_thumb.png diff --git a/doc/configuration/configuration_tsp_settings_2.png b/docs/assets/configuration/configuration_tsp_settings_2.png similarity index 100% rename from doc/configuration/configuration_tsp_settings_2.png rename to docs/assets/configuration/configuration_tsp_settings_2.png diff --git a/doc/configuration/configuration_tsp_settings_2_thumb.png b/docs/assets/configuration/configuration_tsp_settings_2_thumb.png similarity index 100% rename from doc/configuration/configuration_tsp_settings_2_thumb.png rename to docs/assets/configuration/configuration_tsp_settings_2_thumb.png diff --git a/doc/moodle-plugin-directory-button.png b/docs/assets/moodle-plugin-directory-button.png similarity index 100% rename from doc/moodle-plugin-directory-button.png rename to docs/assets/moodle-plugin-directory-button.png diff --git a/doc/screenshots/quiz_archiver_job_details_modal.png b/docs/assets/screenshots/quiz_archiver_job_details_modal.png similarity index 100% rename from doc/screenshots/quiz_archiver_job_details_modal.png rename to docs/assets/screenshots/quiz_archiver_job_details_modal.png diff --git a/doc/screenshots/quiz_archiver_job_details_modal_autodelete.png b/docs/assets/screenshots/quiz_archiver_job_details_modal_autodelete.png similarity index 100% rename from doc/screenshots/quiz_archiver_job_details_modal_autodelete.png rename to docs/assets/screenshots/quiz_archiver_job_details_modal_autodelete.png diff --git a/doc/screenshots/quiz_archiver_job_details_modal_tsp_data.png b/docs/assets/screenshots/quiz_archiver_job_details_modal_tsp_data.png similarity index 100% rename from doc/screenshots/quiz_archiver_job_details_modal_tsp_data.png rename to docs/assets/screenshots/quiz_archiver_job_details_modal_tsp_data.png diff --git a/doc/screenshots/quiz_archiver_new_job_queued.png b/docs/assets/screenshots/quiz_archiver_new_job_queued.png similarity index 100% rename from doc/screenshots/quiz_archiver_new_job_queued.png rename to docs/assets/screenshots/quiz_archiver_new_job_queued.png diff --git a/doc/screenshots/quiz_archiver_overview_page.png b/docs/assets/screenshots/quiz_archiver_overview_page.png similarity index 100% rename from doc/screenshots/quiz_archiver_overview_page.png rename to docs/assets/screenshots/quiz_archiver_overview_page.png diff --git a/doc/screenshots/quiz_archiver_report_example_pdf_header.png b/docs/assets/screenshots/quiz_archiver_report_example_pdf_header.png similarity index 100% rename from doc/screenshots/quiz_archiver_report_example_pdf_header.png rename to docs/assets/screenshots/quiz_archiver_report_example_pdf_header.png diff --git a/doc/screenshots/quiz_archiver_report_example_pdf_question_1.png b/docs/assets/screenshots/quiz_archiver_report_example_pdf_question_1.png similarity index 100% rename from doc/screenshots/quiz_archiver_report_example_pdf_question_1.png rename to docs/assets/screenshots/quiz_archiver_report_example_pdf_question_1.png diff --git a/doc/screenshots/quiz_archiver_report_example_pdf_question_2.png b/docs/assets/screenshots/quiz_archiver_report_example_pdf_question_2.png similarity index 100% rename from doc/screenshots/quiz_archiver_report_example_pdf_question_2.png rename to docs/assets/screenshots/quiz_archiver_report_example_pdf_question_2.png diff --git a/doc/screenshots/quiz_archiver_report_example_pdf_question_3.png b/docs/assets/screenshots/quiz_archiver_report_example_pdf_question_3.png similarity index 100% rename from doc/screenshots/quiz_archiver_report_example_pdf_question_3.png rename to docs/assets/screenshots/quiz_archiver_report_example_pdf_question_3.png diff --git a/docs/bugreport.md b/docs/bugreport.md new file mode 100644 index 0000000..0418659 --- /dev/null +++ b/docs/bugreport.md @@ -0,0 +1,7 @@ +# Reporting bugs and getting help + +If you have got a question, found a bug, or have a feature request, please check +out the [GitHub issue tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues). + +You can search through existing discussions or create a new issue, if you can't +find a solution to your problem. diff --git a/docs/configuration/index.md b/docs/configuration/index.md index a025a48..2d92703 100644 --- a/docs/configuration/index.md +++ b/docs/configuration/index.md @@ -1 +1,17 @@ # Configuration + +This sections describes the required steps to initially set up the plugin. + +In summary: You need to create a dedicated Moodle user, a global role to manage +permissions, set up a webservice for the archive worker, and set configuration +options for the Moodle plugin. + +TODO + + +### Prerequisites + +TODO + +- Moodle plugin installed +- Archive worker service installed diff --git a/docs/configuration/initialconfig/automatic.md b/docs/configuration/initialconfig/automatic.md index ae7d917..1fe14ea 100644 --- a/docs/configuration/initialconfig/automatic.md +++ b/docs/configuration/initialconfig/automatic.md @@ -1 +1,67 @@ # Automatic Configuration + +Creation of the dedicated Moodle user and role, as well as the setup of the +webservice for the archive worker, can be done automatically. + +The easiest way is to use the automatic configuration feature provided via the +Moodle admin interface but a fully automated configuration via CLI is also +supported. + + +## Using the Moodle Admin Interface + +1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > + _Quiz_ > _Quiz Archiver_ (2) +2. Click the _Automatic configuration_ button (3) +3. Enter the URL under which the quit archive worker can be reached (4) +4. (Optional) Change the configuration defaults (5) +5. Execute the automatic configuration (6) +6. Close the window (7) +7. (Optional) Adjust the default plugin setting on the plugin settings page + +[![Screenshot: Configuration - Automatic Configuration 1](/assets/configuration/configuration_plugin_settings_1_thumb.png)](/assets/configuration/configuration_plugin_settings_1.png) +[![Screenshot: Configuration - Automatic Configuration 2](/assets/configuration/configuration_plugin_autoinstall_2_thumb.png)](/assets/configuration/configuration_plugin_autoinstall_2.png) +[![Screenshot: Configuration - Automatic Configuration 3](/assets/configuration/configuration_plugin_autoinstall_3_thumb.png)](/assets/configuration/configuration_plugin_autoinstall_3.png) +[![Screenshot: Configuration - Automatic Configuration 4](/assets/configuration/configuration_plugin_autoinstall_4_thumb.png)](/assets/configuration/configuration_plugin_autoinstall_4.png) + + +## Using the Command Line Interface (CLI) + +If you want to configure this plugin in an automated fashion, you can use the +provided CLI script. The script is located at +`{$CFG->wwwroot}/mod/quiz/report/archiver/cli/autoinstall.php`. + +To execute the script: + +1. Open a terminal and navigate to the quiz archiver CLI directory: + ```bash + cd /path/to/moodle/mod/quiz/report/archiver/cli + ``` +2. Execute the CLI script using PHP: + ```bash + php autoinstall.php --help + ``` + +Usage: +```text +Automatically configures Moodle for use with the quiz archiver plugin. + +ATTENTION: This CLI script ... +- Enables web services and REST protocol +- Creates a quiz archiver service role and a corresponding user +- Creates a new web service with all required webservice functions +- Authorises the user to use the webservice. + +Usage: + $ php autoinstall.php + $ php autoinstall.php --username="my-custom-archive-user" + $ php autoinstall.php [--help|-h] + +Options: + --help, -h Show this help message + --force, -f Force the autoinstall, regardless of the current state of the system + --workerurl= Sets the URL of the worker (default: http://localhost:8080) + --wsname= Sets a custom name for the web service (default: quiz_archiver_webservice) + --rolename= Sets a custom name for the web service role (default: quiz_archiver) + --username= Sets a custom username for the web service user (default: quiz_archiver_serviceaccount) +``` \ No newline at end of file diff --git a/docs/index.md b/docs/index.md index c9f0f07..26cfc78 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,3 +1,53 @@ # Moodle Quiz Archiver -TODO +Archives quiz attempts as PDF and HTML files for long-term storage independent +of Moodle. If desired, Moodle backups (`.mbz`) of both the quiz and the whole +course can be included. A checksum is calculated for every file within the +archive, as well as the archive itself, to allow verification of file integrity. +Archives can optionally be cryptographically signed by a trusted authority using +the [Time-Stamp Protocol (TSP)](https://en.wikipedia.org/wiki/Time_stamp_protocol). +Comprehensive archive settings allow selecting what should be included in the +generated reports on a fine-granular level (e.g., exclude example solutions, +include answer history, ...). + +Generated quiz attempt reports include all elements of the test, even complex +ones like [MathJax](https://www.mathjax.org/) formulas, [STACK](https://moodle.org/plugins/qtype_stack) +plots, [GeoGebra](https://www.geogebra.org/) applets, and other question / +content types that require JavaScript processing. All PDF and HTML files are +fully text-searchable, including rendered MathJax formulas. Content is saved +vector based, whenever possible, to allow high-quality printing and zooming +while keeping the file size down. + +Quiz archives are created by an external [quiz archive worker](https://github.com/ngandrass/moodle-quiz-archive-worker) +service to remove load from Moodle and to eliminate the need to install a large +number of software dependencies on the webserver. It can easily be deployed +using Docker. + + +## Features + +- Archiving of quiz attempts as PDF and HTML files +- Support for file submissions / attachments (e.g., essay files) +- Quiz attempt reports are accessible completely independent of Moodle, hereby + ensuring long-term readability +- Customization of generated PDF and HTML reports + - Allows creation of reduced reports, e.g., without example solutions, for + handing out to students during inspection +- Support for complex content and question types, including Drag and Drop, MathJax + formulas, STACK plots, and other question / content types that require JavaScript + processing +- Quiz attempt reports are fully text-searchable, including mathematical formulas +- Moodle backups (`.mbz`) of both the quiz and the whole course are supported +- Generation of checksums for every file within the archive and the archive itself +- Cryptographic signing of archives and their creation date using the [Time-Stamp Protocol (TSP)](https://en.wikipedia.org/wiki/Time_stamp_protocol) +- Archive and attempt report names are fully customizable and support dynamic + variables (e.g., course name, quiz name, username, ...) +- Fine granular permission / capability management (e.g., only allow archive + creation but prevent deletion) +- Allows definition of global archiving defaults as well as forced archiving + policies (i.e., locked archive job presets that cannot be changed by the user) +- Fully asynchronous archive creation to reduce load on Moodle Server +- Automatic deletion of quiz archives after a specified retention period +- Data compression and vector based MathJax formulas to preserve disk space +- Technical separation of Moodle and archive worker service +- Data-minimising and security driven design diff --git a/docs/installation/archiveworker.md b/docs/installation/archiveworker.md index 8c2a978..152482e 100644 --- a/docs/installation/archiveworker.md +++ b/docs/installation/archiveworker.md @@ -1 +1,9 @@ # Quiz Archive Worker Service + +TODO + +## Next step + +After installing both the Moodle plugin and the archive worker service, you +need to perform the initial [configuration](/configuration) to make the plugin +work. diff --git a/docs/installation/index.md b/docs/installation/index.md index f066ff7..1b60d1d 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -1,5 +1,62 @@ # Installation +TODO + + ## Overview +Archive jobs are execute via an external quiz archive worker service. It uses the +Moodle webservice API to query the required data and to upload the created archive. + +This plugin prepares the archive job within Moodle, provides quiz data to the +archive worker, handles data validation, and stores the created quiz archives +inside the Moodle filestore. Created archives can be managed and downloaded via +the Moodle web interface. A unique webservice access token is generated for every +archive job. Each token has a limited validity and is invalidated either after +job completion or after a specified timeout. This process requires a dedicated +webservice user to be created (see [Configuration](/configuration)). A single job +webservice token can only be used for the specific quiz that is associated with +the job to restrict queryable data to the required minimum. + + ## Requirements + +TODO + + +## Versioning and Compatibility + +The [quiz_archiver Moodle Plugin](https://github.com/ngandrass/moodle-quiz_archiver) +and its corresponding [Quiz Archive Worker](https://github.com/ngandrass/moodle-quiz-archive-worker) +both use [Semantic Versioning 2.0.0](https://semver.org/). + +This means that their version numbers are structured as `MAJOR.MINOR.PATCH`. The +Moodle plugin and the archive worker service are compatible as long as they use +the same `MAJOR` version number. Minor and patch versions can differ between the +two components without breaking compatibility. + +However, it is **recommended to always use the latest version** of both the +Moodle plugin and the archive worker service to ensure you get all the latest +bug fixes, features, and optimizations. + + +### Compatibility Examples + +| Moodle Plugin | Archive Worker | Compatible | +|------------|----------------|------------| +| 1.0.0 | 1.0.0 | Yes | +| 1.2.3 | 1.0.0 | Yes | +| 1.0.0 | 1.1.2 | Yes | +| 2.1.4 | 2.0.1 | Yes | +| | | | +| 2.0.0 | 1.0.0 | No | +| 1.0.0 | 2.0.0 | No | +| 2.4.2 | 1.4.2 | No | + + +### Development / Testing Versions + +Special development versions, used for testing, can be created but will never be +published to the Moodle plugin directory. Such development versions are marked +by a `+dev-[TIMESTAMP]` suffix, e.g., `2.4.2+dev-2022010100`. + diff --git a/docs/installation/moodleplugin.md b/docs/installation/moodleplugin.md index b122bf3..da8612c 100644 --- a/docs/installation/moodleplugin.md +++ b/docs/installation/moodleplugin.md @@ -1 +1,36 @@ # Moodle Plugin + +You can install this plugin like any other Moodle plugin, as described below. +However, keep in mind that you additionally need to deploy the external [quiz +archive worker service](/installation/archiveworker) for this plugin to work. + + +### Installing via uploaded ZIP file + +1. Log in to your Moodle site as an admin and go to _Site administration > + Plugins > Install plugins_. +2. Upload the ZIP file with the plugin code. You should only be prompted to add + extra details if your plugin type is not automatically detected. +3. Check the plugin validation report and finish the installation. + + +### Installing manually + +The plugin can be also installed by putting the contents of this directory to + + {your/moodle/dirroot}/mod/quiz/report/archiver + +Afterward, log in to your Moodle site as an admin and go to _Site administration > +Notifications_ to complete the installation. + +Alternatively, you can run + + $ php admin/cli/upgrade.php + +to complete the installation from the command line. + + +## Next step + +After installing the Moodle plugin, you need to install the additional [quiz +archive worker service](/installation/archiveworker) to make the plugin work. diff --git a/docs/screenshots.md b/docs/screenshots.md index 32eed45..57fd172 100644 --- a/docs/screenshots.md +++ b/docs/screenshots.md @@ -1 +1,16 @@ # Screenshots + +## Quiz Archiver overview page +![Image of quiz archiver overview page](assets/screenshots/quiz_archiver_overview_page.png) + +## New job queued while another job is running +![Image of new job queued while another job is running](assets/screenshots/quiz_archiver_new_job_queued.png) + +## Quiz archive job details +![Image of quiz archive job details](assets/screenshots/quiz_archiver_job_details_modal.png) + +## Example of PDF report (excerpts) +![Image of example of PDF report (extract): Header](assets/screenshots/quiz_archiver_report_example_pdf_header.png) +![Image of example of PDF report (extract): Question 1](assets/screenshots/quiz_archiver_report_example_pdf_question_1.png) +![Image of example of PDF report (extract): Question 2](assets/screenshots/quiz_archiver_report_example_pdf_question_2.png) +![Image of example of PDF report (extract): Question 3](assets/screenshots/quiz_archiver_report_example_pdf_question_3.png) diff --git a/mkdocs.yml b/mkdocs.yml index 9859de2..d5a9b33 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -55,6 +55,7 @@ theme: nav: - "Introduction": index.md - "Screenshots": screenshots.md + - "Issues": bugreport.md - "Changelog": changelog.md - "Installation": From 7407aeb78ab97cc61412ca027d2476f7f18d6aa2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 12:28:35 +0200 Subject: [PATCH 152/185] docs: Add links to most important sections to docs index page --- docs/bugreport.md | 2 +- docs/index.md | 22 ++++++++++++++++++++++ mkdocs.yml | 5 +++++ 3 files changed, 28 insertions(+), 1 deletion(-) diff --git a/docs/bugreport.md b/docs/bugreport.md index 0418659..228cdf9 100644 --- a/docs/bugreport.md +++ b/docs/bugreport.md @@ -3,5 +3,5 @@ If you have got a question, found a bug, or have a feature request, please check out the [GitHub issue tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues). -You can search through existing discussions or create a new issue, if you can't +You can search through existing discussions or create a new issue if you can't find a solution to your problem. diff --git a/docs/index.md b/docs/index.md index 26cfc78..9aa0839 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,5 +1,16 @@ # Moodle Quiz Archiver +[![Latest Version](https://img.shields.io/github/v/release/ngandrass/moodle-quiz_archiver)](https://github.com/ngandrass/moodle-quiz_archiver/releases) +[![Maintenance Status](https://img.shields.io/maintenance/yes/9999)](https://github.com/ngandrass/moodle-quiz_archiver/) +[![License](https://img.shields.io/github/license/ngandrass/moodle-quiz_archiver)](https://github.com/ngandrass/moodle-quiz_archiver/blob/master/LICENSE) +[![GitHub Issues](https://img.shields.io/github/issues/ngandrass/moodle-quiz_archiver)](https://github.com/ngandrass/moodle-quiz_archiver/issues) +[![GitHub Pull Requests](https://img.shields.io/github/issues-pr/ngandrass/moodle-quiz_archiver)](https://github.com/ngandrass/moodle-quiz_archiver/pulls) +[![Donate with PayPal](https://img.shields.io/badge/PayPal-donate-orange)](https://www.paypal.me/ngandrass) +[![Sponsor with GitHub](https://img.shields.io/badge/GitHub-sponsor-orange)](https://github.com/sponsors/ngandrass) +[![GitHub Stars](https://img.shields.io/github/stars/ngandrass/moodle-quiz_archiver?style=social)](https://github.com/ngandrass/moodle-quiz_archiver/stargazers) +[![GitHub Forks](https://img.shields.io/github/forks/ngandrass/moodle-quiz_archiver?style=social)](https://github.com/ngandrass/moodle-quiz_archiver/network/members) +[![GitHub Contributors](https://img.shields.io/github/contributors/ngandrass/moodle-quiz_archiver?style=social)](https://github.com/ngandrass/moodle-quiz_archiver/graphs/contributors) + Archives quiz attempts as PDF and HTML files for long-term storage independent of Moodle. If desired, Moodle backups (`.mbz`) of both the quiz and the whole course can be included. A checksum is calculated for every file within the @@ -24,6 +35,17 @@ number of software dependencies on the webserver. It can easily be deployed using Docker. +## Getting Started + +Use the following buttons to jump to the desired section: + +[:material-download: Installation](/installation){ .md-button } +      +[:material-cog: Configuration](/configuration){ .md-button } +      +[:material-account: Usage](/usage){ .md-button } + + ## Features - Archiving of quiz attempts as PDF and HTML files diff --git a/mkdocs.yml b/mkdocs.yml index d5a9b33..87a2c66 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -27,6 +27,11 @@ plugins: # - mike - search - social +markdown_extensions: + - attr_list + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg theme: name: material icon: From 6d2db5b15fbd15f8d98cc8d596e683d6c3b5b8b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 15:19:29 +0200 Subject: [PATCH 153/185] Write installation and configuration sections, add support for multiple markdown extensions, and provide custom CSS --- docs/configuration/capabilities.md | 16 ++ docs/configuration/index.md | 26 +++- docs/configuration/initialconfig/automatic.md | 28 +++- docs/configuration/initialconfig/manual.md | 143 ++++++++++++++++++ docs/configuration/initialconfig/pitfalls.md | 59 ++++++++ docs/configuration/presets.md | 30 +++- docs/css/extra.css | 20 +++ docs/index.md | 7 + docs/installation/archiveworker.md | 2 +- docs/installation/index.md | 34 ++++- docs/installation/moodleplugin.md | 4 +- mkdocs.yml | 15 ++ 12 files changed, 366 insertions(+), 18 deletions(-) create mode 100644 docs/css/extra.css diff --git a/docs/configuration/capabilities.md b/docs/configuration/capabilities.md index b402dab..fd6f441 100644 --- a/docs/configuration/capabilities.md +++ b/docs/configuration/capabilities.md @@ -1 +1,17 @@ # Capabilities + +Moodle capabilities are used to define what a user can and cannot do within the +system. The Quiz Archiver plugin uses several custom capabilities to control +access to its features. + +The following capabilities are introduced by the plugin and required for the +listed actions: + +| Capability | Context | Default assignments | Description | +|------------------------------------|---------|----------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `mod/quiz_archiver:view` | Module | `teacher`, `editingteacher`, `manager` | Required to view the quiz archiver overview page. It allows to download all created archives but does not allow do create new or delete existing archives (read-only access). | +| `mod/quiz_archiver:create` | Module | `editingteacher`, `manager` | Allows creation of new quiz archives. | +| `mod/quiz_archiver:delete` | Module | `editingteacher`, `manager` | Allows deletion of existing quiz archives. | +| `mod/quiz_archiver:use_webservice` | System | *None* | Required to use any of this plugins webservice functions. The webservice user[^1] needs to have this capability in order to create new quiz archives. | + +[^1]: The webservice user is created during the [initial plugin configuration](/configuration). \ No newline at end of file diff --git a/docs/configuration/index.md b/docs/configuration/index.md index 2d92703..1d3c18d 100644 --- a/docs/configuration/index.md +++ b/docs/configuration/index.md @@ -2,16 +2,26 @@ This sections describes the required steps to initially set up the plugin. -In summary: You need to create a dedicated Moodle user, a global role to manage -permissions, set up a webservice for the archive worker, and set configuration -options for the Moodle plugin. +In summary: A dedicated Moodle user, a global role to manage permissions, and a +webservice for the archive worker must be created and the Moodle plugin must be +configured accordingly. Luckily, this can be done automatically using a single +button (see [Next Steps](#next-steps)). -TODO +If you encounter any issues during the configuration process, please open a bug +report or ask a question in the issue tracker over on GitHub. +[:simple-github: Issue Tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues){ .md-button } -### Prerequisites -TODO +## Starting the Configuration -- Moodle plugin installed -- Archive worker service installed +!!! warning "Prerequisites" + Before you start the initial configuration, make sure you have the following + components successfully installed: + + - [Moodle Plugin](/installation/moodleplugin) + - [Archive Worker Service](/installation/archiveworker) + +After installation, you need to perform an [initial configuration step](/configuration/initialconfig/automatic) once. + +[:material-cog-play: Automatic Configuration](/configuration/initialconfig/automatic){ .md-button } diff --git a/docs/configuration/initialconfig/automatic.md b/docs/configuration/initialconfig/automatic.md index 1fe14ea..3555c7f 100644 --- a/docs/configuration/initialconfig/automatic.md +++ b/docs/configuration/initialconfig/automatic.md @@ -10,6 +10,10 @@ supported. ## Using the Moodle Admin Interface +!!! info + This is the recommended way to configure the Quiz Archiver Moodle plugin for + most users. + 1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > _Quiz_ > _Quiz Archiver_ (2) 2. Click the _Automatic configuration_ button (3) @@ -19,14 +23,18 @@ supported. 6. Close the window (7) 7. (Optional) Adjust the default plugin setting on the plugin settings page -[![Screenshot: Configuration - Automatic Configuration 1](/assets/configuration/configuration_plugin_settings_1_thumb.png)](/assets/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - Automatic Configuration 2](/assets/configuration/configuration_plugin_autoinstall_2_thumb.png)](/assets/configuration/configuration_plugin_autoinstall_2.png) -[![Screenshot: Configuration - Automatic Configuration 3](/assets/configuration/configuration_plugin_autoinstall_3_thumb.png)](/assets/configuration/configuration_plugin_autoinstall_3.png) -[![Screenshot: Configuration - Automatic Configuration 4](/assets/configuration/configuration_plugin_autoinstall_4_thumb.png)](/assets/configuration/configuration_plugin_autoinstall_4.png) +![Screenshot: Configuration - Automatic Configuration 1](/assets/configuration/configuration_plugin_settings_1.png){ .img-thumbnail } +![Screenshot: Configuration - Automatic Configuration 1](/assets/configuration/configuration_plugin_autoinstall_2.png){ .img-thumbnail } +![Screenshot: Configuration - Automatic Configuration 1](/assets/configuration/configuration_plugin_autoinstall_3.png){ .img-thumbnail } +![Screenshot: Configuration - Automatic Configuration 1](/assets/configuration/configuration_plugin_autoinstall_4.png){ .img-thumbnail } ## Using the Command Line Interface (CLI) +!!! warning + This method is recommended for advanced users only. If you have used the + Moodle admin interface to configure the plugin, you can skip this step. + If you want to configure this plugin in an automated fashion, you can use the provided CLI script. The script is located at `{$CFG->wwwroot}/mod/quiz/report/archiver/cli/autoinstall.php`. @@ -64,4 +72,14 @@ Options: --wsname= Sets a custom name for the web service (default: quiz_archiver_webservice) --rolename= Sets a custom name for the web service role (default: quiz_archiver) --username= Sets a custom username for the web service user (default: quiz_archiver_serviceaccount) -``` \ No newline at end of file +``` + +## Next Steps + +You finished the initial configuration of the quiz archiver plugin. You now can +either directly start archiving quizzes (see [Usage](/usage)) or adjust the +default plugin settings (see [Job Presets / Policies](/configuration/presets)). + +[:material-account: Usage](/usage){ .md-button } +      +[:material-file-cog: Job Presets](/configuration/presets){ .md-button } diff --git a/docs/configuration/initialconfig/manual.md b/docs/configuration/initialconfig/manual.md index 23685c0..7e344d4 100644 --- a/docs/configuration/initialconfig/manual.md +++ b/docs/configuration/initialconfig/manual.md @@ -1 +1,144 @@ # Manual Configuration + +This plugin requires the creation of a dedicated Moodle user and role, as well +as the setup of the Moodle webservices for the archive worker. + +!!! warning + This is the manual configuration process which can be quite involved. Please + only use the manual configuration if you consider yourself an advanced user + / Moodle administrator. + + [:material-cog-play: Automatic Configuration](/configuration/initialconfig/automatic){ .md-button } +     + Most users want to use the + [automated configuration](/configuration/initialconfig/automatic) instead. + +## Create Moodle User and Role + +At first, a new Moodle user and a global role need to be created for the Quiz +Archiver. It will be used by the archive worker service to access quiz data. + +### Create a designated Moodle user for the quiz archiver webservice + +1. Navigate to _Site Administration_ > _Users_ (1) > _Accounts_ > _Add a new user_ (2) +2. Set a username (e.g. `quiz_archiver`) (3), a password (4), first and + lastname (5), and a hidden email address (6) +3. Create the user (7) + +![Screenshot: Configuration - Create Moodle User 1](/assets/configuration/configuration_create_moodle_user_1.png){ .img-thumbnail } +![Screenshot: Configuration - Create Moodle User 2](/assets/configuration/configuration_create_moodle_user_2.png){ .img-thumbnail } + +### Create a global role to handle permissions for the `quiz_archiver` Moodle user + +1. Navigate to _Site Administration_ > _Users_ (1) > _Permissions_ > _Define roles_ (2) +2. Select _Add a new role_ (3) +3. Set _Use role or archetype_ (4) to `No role` +4. Upload the role definitions file from `res/moodle_role_quiz_archiver.xml` (5). + This will automatically assign all required capabilities[^1]. +5. Click on _Continue_ (6) to import the role definitions for review +6. Optionally change the role name or description and create the role (7) + +![Screenshot: Configuration - Create Role 1](/assets/configuration/configuration_create_role_1.png){ .img-thumbnail } +![Screenshot: Configuration - Create Role 2](/assets/configuration/configuration_create_role_2.png){ .img-thumbnail } +![Screenshot: Configuration - Create Role 3](/assets/configuration/configuration_create_role_3.png){ .img-thumbnail } +![Screenshot: Configuration - Create Role 4](/assets/configuration/configuration_create_role_4.png){ .img-thumbnail } + +[^1]: You can check all capabilities prior to role creation in the next step or +by manually inspecting the role definition XML file +(`res/moodle_role_quiz_archiver.xml`). + +### Assign the `quiz_archiver` Moodle user to the created role + +1. Navigate to _Site Administration_ > _Users_ (1) > _Permissions_ > _Assign system roles_ (2) +2. Select the `Quiz Archiver Service Account` role (3) +3. Search the created `quiz_archiver` Moodle user (4), select it in the list + of potential users (5), and add it to the role (6) + +![Screenshot: Configuration - Assign Role 1](/assets/configuration/configuration_assign_role_1.png){ .img-thumbnail } +![Screenshot: Configuration - Assign Role 2](/assets/configuration/configuration_assign_role_2.png){ .img-thumbnail } +![Screenshot: Configuration - Assign Role 3](/assets/configuration/configuration_assign_role_3.png){ .img-thumbnail } + + +## Setup Webservice + +The quiz archive worker service interacts with the Moodle platform using the +Moodle webservice API. Therefore, it must be enabled and a corespongind external +service must be created. + +### Enable webservices globally + +1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _Overview_ (2) +2. Click on _Enable web services_ (3), check the checkbox (4), and save the + changes (5) +3. Navigate back to the _Overview_ (2) page +4. Click on _Enable protocols_ (6), enable the _REST protocol_ (7), and save the + changes (8) + +![Screenshot: Configuration - Enable Webservices 1](/assets/configuration/configuration_enable_webservices_1.png){ .img-thumbnail } +![Screenshot: Configuration - Enable Webservices 2](/assets/configuration/configuration_enable_webservices_2.png){ .img-thumbnail } +![Screenshot: Configuration - Enable Webservices 3](/assets/configuration/configuration_enable_webservices_3.png){ .img-thumbnail } +![Screenshot: Configuration - Enable Webservices 4](/assets/configuration/configuration_enable_webservices_4.png){ .img-thumbnail } + +## Create an external webservice for the quiz archive worker to use + +1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _External services_ (2) +2. Under the _Custom services_ section, select _Add_ (3) +3. Enter a name (e.g. `quiz_archiver`) (4) and enable it (5) +4. Expand the additional settings (6), enable file up- and download (7) +5. Create the new webservice by clicking _Add service_ (8) + +![Screenshot: Configuration - Create Webservice 1](/assets/configuration/configuration_create_webservice_1.png){ .img-thumbnail } +![Screenshot: Configuration - Create Webservice 2](/assets/configuration/configuration_create_webservice_2.png){ .img-thumbnail } +![Screenshot: Configuration - Create Webservice 3](/assets/configuration/configuration_create_webservice_3.png){ .img-thumbnail } + +### Add all `quiz_archiver_*` webservice functions to the `quiz_archiver` external service + +1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _External services_ (2) +2. Open the _Functions_ page for the `quiz_archiver` webservice (3) +3. Click the _Add functions_ link (4) +4. Search for `quiz_archiver` (5) and add all `quiz_archiver_*` functions +5. Save the changes by clicking _Add functions_ (6) + +![Screenshot: Configuration - Assign Webservice Functions 1](/assets/configuration/configuration_assign_webservice_functions_1.png){ .img-thumbnail } +![Screenshot: Configuration - Assign Webservice Functions 2](/assets/configuration/configuration_assign_webservice_functions_2.png){ .img-thumbnail } +![Screenshot: Configuration - Assign Webservice Functions 3](/assets/configuration/configuration_assign_webservice_functions_3.png){ .img-thumbnail } +![Screenshot: Configuration - Assign Webservice Functions 4](/assets/configuration/configuration_assign_webservice_functions_4.png){ .img-thumbnail } + + +## Configure Plugin Settings + +Once the user, role, and webservice are created, the last step is to configure +the quiz archiver plugin to use the created webservice and user. + +1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > + _Quiz_ > _Quiz Archiver_ (2) +2. Set `worker_url` (3) to the URL under which the quiz archive worker can be + reached (e.g., `http://quiz-archive-worker:5000` or `http://127.0.0.1:5000`) +3. Select the previously created `quiz_archiver` webservice for `webservice_id` (4) + from the drop-down menu +4. Enter the user ID of the previously created Moodle user for `webservice_userid` (5). + It can easily be found by navigating to the users profile page and inspecting + the page URL. It contains the user ID as the `id` query parameter. +5. (Optional) Specify a custom job timeout in minutes +6. (Optional) Specify a custom Moodle base URL[^2]. +7. Save all settings and create your first quiz archive (see [Usage](#usage)). +8. (Optional) Adjust the default [capability](#capabilities) assignments. + +![Screenshot: Configuration - Plugin Settings 1](/assets/configuration/configuration_plugin_settings_1.png){ .img-thumbnail } +![Screenshot: Configuration - Plugin Settings 2](/assets/configuration/configuration_plugin_settings_2.png){ .img-thumbnail } + +[^2]: This is only required if you run the quiz archive worker in an internal / +private network, e.g., when using Docker. If this setting is present, the public +Moodle `$CFG->wwwroot` will be replaced by the `internal_wwwroot` setting. +Example: `https://your.public.moodle/` will be replaced by `http://moodle.local/`. + + +## Next Steps + +You finished the initial configuration of the quiz archiver plugin. You now can +either directly start archiving quizzes (see [Usage](/usage)) or adjust the +default plugin settings (see [Job Presets / Policies](/configuration/presets)). + +[:material-account: Usage](/usage){ .md-button } +      +[:material-file-cog: Job Presets](/configuration/presets){ .md-button } diff --git a/docs/configuration/initialconfig/pitfalls.md b/docs/configuration/initialconfig/pitfalls.md index 77d1c78..97c60e3 100644 --- a/docs/configuration/initialconfig/pitfalls.md +++ b/docs/configuration/initialconfig/pitfalls.md @@ -1 +1,60 @@ # Known Pitfalls + +This section lists some common pitfalls that you might encounter when setting +up or using the quiz archiver plugin. + + +## A job timeouts prior to the configured timeout value + +Be aware that there is a configurable job timeout within the Moodle plugin +settings (`quiz_archiver | job_timeout_min`) as well as one within the quiz +archive worker service (`QUIZ_ARCHIVER_REQUEST_TIMEOUT_SEC`). + +!!! warning + Since the shortest timeout always takes precedence, make sure to adjust + **both** timeout settings as required. + + +## Access to webservice functions fails + +If you get an error message that access to one or more webservice functions is +denied, you should check the following: + +- Ensure that webservices and the REST protocol are enabled globally. +- Ensure that all required webservice functions are enabled for the + `quiz_archiver` webservice. +- Ensure that the `quiz_archiver` webservice has the rights to download and + upload files. +- Ensure that the `quiz_archiver` webservice user has accepted all site policies + (e.g., privacy policy). + + +## Upload of the quiz archive fails + +If the archive worker is able to create the quiz archive but fails to upload it +back to your Moodle, you should check the following: + +- Ensure you have configured PHP to accept large file uploads. The + `upload_max_filesize` and `post_max_size` settings in your `php.ini` should be + set to a value that is large enough to allow the upload of the largest quiz + archive file that you expect to be created. Setting it to `512MB` is a good + starting point. +- Ensure that your Moodle is configured to allow large file uploads. + `$CFG->maxbytes` should be set to the same value as PHP `upload_max_filesize`. +- If you are using an ingress webserver and PHP-FPM via FastCGI, ensure that the + `fastcgi_send_timeout` and `fastcgi_read_timeout` settings are long enough to + allow the upload of the largest quiz archive file that you expect. + Nginx usually signals this problem by returning a '504 Gateway Time-out' + after 60 seconds (default). +- Ensure that your antivirus plugin is capable of handling large files. When + using ClamAV you can control maximum file sizes by setting `MaxFileSize`, + `MaxScanSize`, and `StreamMaxLength` (when using a TCP socket) inside + `clamd.conf`. + +## Checking the plugin config + +If you are unsure whether there is a problem with your plugin configuration, you +can check the [manual configuration instructions](/configuration/initialconfig/manual) +and compare your local config against it. + +[:material-wrench-cog: Manual Configuration](/configuration/initialconfig/automatic){ .md-button } diff --git a/docs/configuration/presets.md b/docs/configuration/presets.md index 8a80ccc..68f792c 100644 --- a/docs/configuration/presets.md +++ b/docs/configuration/presets.md @@ -1 +1,29 @@ -# Job Presets +# Archive Job Presets (Global Defaults) + +Default values for all archive job settings can be configured globally on the +plugin settings page. + +!!! tip + By default, users are allowed to customize these settings during archive + creation. However, each setting can be locked individually to prevent users from + modifying it during archive creation. This allows the enforcement of + organization wide policies for archived quizzes. + +To customize these options: + +1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > + _Quiz_ > _Quiz Archiver_ (2) +2. Scroll down to the _Archive presets_ section (3) +3. Set the desired default values for each option (4) + - Options can depend on another, as indicated by (6). This causes the + dependent option to be disabled, if the parent option is not set (e.g., + question feedback is not exported if question exporting is fully disabled) + - More options than shown in the screenshots are available. Scroll down to + see all (7) +4. (Optional) Lock individual options by checking the _Lock_ checkbox (5) + +Locked options will be grayed out during archive creation (8). + +![Screenshot: Configuration - Archive job presets 1](/assets/configuration/configuration_plugin_settings_1.png){ .img-thumbnail } +![Screenshot: Configuration - Archive job presets 2](/assets/configuration/configuration_archive_job_presets_2.png){ .img-thumbnail } +![Screenshot: Configuration - Archive job presets 3](/assets/configuration/configuration_archive_job_presets_3.png){ .img-thumbnail } diff --git a/docs/css/extra.css b/docs/css/extra.css new file mode 100644 index 0000000..6189db6 --- /dev/null +++ b/docs/css/extra.css @@ -0,0 +1,20 @@ +.img-thumbnail { + margin-right: 6px; + border: 2px solid #dddddd; + max-width: 128px; + max-height: 128px; + + box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.06); + -webkit-box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.06); + -moz-box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.06); + + transition: all 0.15s ease-out; +} + +.img-thumbnail:hover, .img-thumbnail:active, .img-thumbnail:focus { + border: 2px solid #999999; + + box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.1); + -webkit-box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.1); + -moz-box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.1); +} diff --git a/docs/index.md b/docs/index.md index 9aa0839..8d04284 100644 --- a/docs/index.md +++ b/docs/index.md @@ -73,3 +73,10 @@ Use the following buttons to jump to the desired section: - Data compression and vector based MathJax formulas to preserve disk space - Technical separation of Moodle and archive worker service - Data-minimising and security driven design + +
    +[:simple-moodle: Moodle Plugin Directory](https://moodle.org/plugins/quiz_archiver){ .md-button } +      +[:simple-github: GitHub](https://github.com/ngandrass/moodle-quiz_archiver){ .md-button } +      +[:fontawesome-solid-bug: Bug Tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues){ .md-button } diff --git a/docs/installation/archiveworker.md b/docs/installation/archiveworker.md index 152482e..952d22d 100644 --- a/docs/installation/archiveworker.md +++ b/docs/installation/archiveworker.md @@ -2,7 +2,7 @@ TODO -## Next step +## Next Steps After installing both the Moodle plugin and the archive worker service, you need to perform the initial [configuration](/configuration) to make the plugin diff --git a/docs/installation/index.md b/docs/installation/index.md index 1b60d1d..57b081e 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -1,6 +1,12 @@ # Installation -TODO +This section provides instructions on how to install the quiz archiver Moodle +plugin. + +If you encounter any issues during the installation process, please open a bug +report or ask a question in the issue tracker over on GitHub. + +[:simple-github: Issue Tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues){ .md-button } ## Overview @@ -21,7 +27,21 @@ the job to restrict queryable data to the required minimum. ## Requirements -TODO +In order to use the quiz archiver plugin, you need to have the following +prerequisites met: + +- Moodle 4.1 (LTS) or newer +- PHP 7.4 or newer +- PostgreSQL or MariaDB / MySQL +- Admin access to the Moodle instance and shell access to the server (e.g., SSH) + +!!! danger "A note on PHP versions" + Please always use the **most recent version of PHP** supported by your + Moodle version. Older PHP versions contain security vulnerabilities and bugs. + + You can check the specific requirements and supported software versions for + your specific Moodle version over at [the Moodle Docs](https://moodledev.io/general/releases). + ## Versioning and Compatibility @@ -60,3 +80,13 @@ Special development versions, used for testing, can be created but will never be published to the Moodle plugin directory. Such development versions are marked by a `+dev-[TIMESTAMP]` suffix, e.g., `2.4.2+dev-2022010100`. + +## Next steps + +This plugin requires the installation of the +[quiz_archiver Moodle plugin](/installation/moodleplugin) Moodle plugin and an +additional [quiz archive worker service](/installation/archiveworker) to work. + +[:simple-moodle: Installation: Moodle Plugin](/installation/archiveworker){ .md-button } +    +[:simple-docker: Installation: Archive Worker Service](/installation/archiveworker){ .md-button } diff --git a/docs/installation/moodleplugin.md b/docs/installation/moodleplugin.md index da8612c..f98c823 100644 --- a/docs/installation/moodleplugin.md +++ b/docs/installation/moodleplugin.md @@ -30,7 +30,9 @@ Alternatively, you can run to complete the installation from the command line. -## Next step +## Next Steps After installing the Moodle plugin, you need to install the additional [quiz archive worker service](/installation/archiveworker) to make the plugin work. + +[:simple-docker: Installation: Archive Worker Service](/installation/archiveworker){ .md-button } diff --git a/mkdocs.yml b/mkdocs.yml index 87a2c66..fa1f788 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -21,17 +21,29 @@ extra: - icon: fontawesome/solid/bug link: https://github.com/ngandrass/moodle-quiz-archive-worker/issues name: "Report a Bug" + # version: # provider: mike + plugins: # - mike + - glightbox: + shadow: true - search - social + markdown_extensions: + - admonition - attr_list + - footnotes + - md_in_html + - tables + - pymdownx.details - pymdownx.emoji: emoji_index: !!python/name:material.extensions.emoji.twemoji emoji_generator: !!python/name:material.extensions.emoji.to_svg + - pymdownx.superfences + theme: name: material icon: @@ -57,6 +69,9 @@ theme: icon: material/brightness-4 name: Switch to light mode +extra_css: + - css/extra.css + nav: - "Introduction": index.md - "Screenshots": screenshots.md From 2bd39719513e48960a3d7f6aa2d35059f5c6c096 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 15:20:49 +0200 Subject: [PATCH 154/185] Fix footer link to issue tracker --- mkdocs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index fa1f788..8a8d2cb 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -19,7 +19,7 @@ extra: - icon: fontawesome/brands/docker link: https://hub.docker.com/r/ngandrass/moodle-quiz-archive-worker - icon: fontawesome/solid/bug - link: https://github.com/ngandrass/moodle-quiz-archive-worker/issues + link: https://github.com/ngandrass/moodle-quiz_archiver/issues name: "Report a Bug" # version: From b4f9b20aae2aea1e5855535f37072d516312b3f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 15:21:23 +0200 Subject: [PATCH 155/185] docs: Fix comatibility table layout --- docs/installation/index.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/installation/index.md b/docs/installation/index.md index 57b081e..1e83679 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -63,15 +63,15 @@ bug fixes, features, and optimizations. ### Compatibility Examples | Moodle Plugin | Archive Worker | Compatible | -|------------|----------------|------------| -| 1.0.0 | 1.0.0 | Yes | -| 1.2.3 | 1.0.0 | Yes | -| 1.0.0 | 1.1.2 | Yes | -| 2.1.4 | 2.0.1 | Yes | -| | | | -| 2.0.0 | 1.0.0 | No | -| 1.0.0 | 2.0.0 | No | -| 2.4.2 | 1.4.2 | No | +|---------------|----------------|------------| +| 1.0.0 | 1.0.0 | Yes | +| 1.2.3 | 1.0.0 | Yes | +| 1.0.0 | 1.1.2 | Yes | +| 2.1.4 | 2.0.1 | Yes | +| | | | +| 2.0.0 | 1.0.0 | No | +| 1.0.0 | 2.0.0 | No | +| 2.4.2 | 1.4.2 | No | ### Development / Testing Versions From 60889d1148779bf1a03ed85ef6ef5246189f09aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 16:08:20 +0200 Subject: [PATCH 156/185] docs: Add copy button to code blocks --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 8a8d2cb..cdc651b 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -50,6 +50,7 @@ theme: repo: fontawesome/brands/github features: - content.action.edit + - content.code.copy - navigation.expand - navigation.indexes - navigation.sections From f7d93ae402807fc07685ec77a34c7c75bf43fd34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 16:08:33 +0200 Subject: [PATCH 157/185] docs: Write installation instructions for worker service, improve link to GitHub issue tracker on bugreport page --- docs/bugreport.md | 2 + docs/installation/archiveworker.md | 173 ++++++++++++++++++++++++++++- docs/installation/index.md | 4 +- 3 files changed, 174 insertions(+), 5 deletions(-) diff --git a/docs/bugreport.md b/docs/bugreport.md index 228cdf9..cf8fd55 100644 --- a/docs/bugreport.md +++ b/docs/bugreport.md @@ -3,5 +3,7 @@ If you have got a question, found a bug, or have a feature request, please check out the [GitHub issue tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues). +[:simple-github: Issue Tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues){ .md-button } + You can search through existing discussions or create a new issue if you can't find a solution to your problem. diff --git a/docs/installation/archiveworker.md b/docs/installation/archiveworker.md index 952d22d..e5fae39 100644 --- a/docs/installation/archiveworker.md +++ b/docs/installation/archiveworker.md @@ -1,9 +1,176 @@ # Quiz Archive Worker Service -TODO +This section describes the installation of the quiz archive worker service, +that works in conjunction with the [quiz_archiver](https://github.com/ngandrass/moodle-quiz_archiver) +Moodle plugin. It can be installed using multiple ways, though using +[Docker Compose](#installation-using-docker-compose) is recommended. + +The quiz archive worker service processes quiz archive jobs in the background. +It renders Moodle quiz attempts into PDF files, collects Moodle backups, +generates checksums, and packs the final quiz archives before it uploads it back +the Moodle instance. + +## Installation using Docker Compose + +!!! success "Info" + This is the suggested way of installing the quiz archive worker service :thumbsup: + +1. Install [Docker](https://www.docker.com/) and [Docker Compose](https://docs.docker.com/compose/) +2. Create a `docker-compose.yml` inside a `moodle-quiz-archive-worker` folder + with the following content: + ```yaml title="docker-compose.yml" + services: + moodle-quiz-archive-worker: + image: ngandrass/moodle-quiz-archive-worker:latest + container_name: moodle-quiz-archive-worker + restart: always + ports: + - "8080:8080/tcp" + environment: + - QUIZ_ARCHIVER_LOG_LEVEL=INFO + ``` +3. From inside the `moodle-quiz-archive-worker` folder, run the application: + ```text + $ docker compose up + ``` + +!!! info "Changing the service port" + You can change the port that the quiz archive worker service is exposed on + the Docker host by replacing the first port number in the `ports` argument + within the `docker-compose.yml` file. + + ```yaml title="Example: Expose the service on port 4242" + ports: + - "4242:8080/tcp" + ``` + +!!! info "Changing configuration values" + You can change all [configuration values](#configuration) by setting the + respective environment variables inside `docker-compose.yml`. For more + details and all available configuration parameters see [Configuration](#configuration). + + ```yaml title="Example: Set the log level to DEBUG" + environment: + - QUIZ_ARCHIVER_LOG_LEVEL=DEBUG + ``` + +### Running the application in the background + +To run the application in the background, append the `-d` argument to your +command: + +```text +$ docker compose up -d +``` + +### Removing the application + +To remove all created containers, networks and volumes, run the following +command from inside the `moodle-quiz-archive-worker` folder: + +```text +$ docker compose down +``` + +## Installation using Docker + +!!! info + This is an alternative way of installing the quiz archive worker service + using Docker directly. + +1. Install [Docker](https://www.docker.com/) +2. Run a new container: + ```text + $ docker run -p 8080:8080 ngandrass/moodle-quiz-archive-worker:latest + ``` + +!!! info "Changing the service port" + You can change the host port the application is bound to by changing the + first port number in the `-p` argument of the `docker run` command. + + ```text title="Example: Expose the service on port 4242" + $ docker run -p 4242:8080 moodle-quiz-archive-worker:latest + ``` + +!!! info "Changing configuration values" + You can change all [configuration values](#configuration) by setting the + respective environment variables. For more details and all available + configuration parameters see [Configuration](#configuration). + + ```text title="Example: Set the log level to DEBUG" + $ docker run -e QUIZ_ARCHIVER_LOG_LEVEL=DEBUG -p 8080:8080 moodle-quiz-archive-worker:latest + ``` + + +### Building the image locally + +You can also build the Docker image locally by conducting the following steps: + +1. Install [Docker](https://www.docker.com/) +2. Clone the Git repository: `git clone https://github.com/ngandrass/moodle-quiz-archive-worker` +3. Switch into the repository directory: `cd moodle-quiz-archive-worker` +4. Build the Docker image: `docker build -t moodle-quiz-archive-worker:latest .`[^1] +5. Run a container: `docker run -p 8080:8080 moodle-quiz-archive-worker:latest` + +[^1]: The `.` at the end of the `docker build` command **must** be part of the +command. It specifies the current directory as the build context. + +## Manual Installation + +!!! warning + This is the most complex way of installing the quiz archive worker service. + Please try to use a Docker based installation if possible. + +1. Install [Python](https://www.python.org/) version >= 3.11 +2. Install [Poetry](https://python-poetry.org/): `pip install poetry` +3. Clone the Git repository: `git clone https://github.com/ngandrass/moodle-quiz-archive-worker` +4. Switch into the repository directory: `cd moodle-quiz-archive-worker` +5. Install app dependencies: `poetry install` +6. Download [Playwright](https://playwright.dev/) browser binaries: `poetry run python -m playwright install chromium` +7. Run the application: `poetry run python main.py` + +!!! info "Changing configuration values" + You can change configuration values by prepending the respective environment + variables. For more details and all available configuration parameters see + [Configuration](#configuration). + + ```shell title="Example: Set the service port to 4242" + QUIZ_ARCHIVER_SERVER_PORT=4242 poetry run python moodle-quiz-archive-worker.py + ``` + + +## Configuration + +Configuration parameters are located inside `config.py` and can be overwritten +using the following environment variables: + +| Environment Variable | Default Value | Description | +|-----------------------------------------------------------------|-----------------|--------------------------------------------------------------------------------------------------------------------------| +| `QUIZ_ARCHIVER_SERVER_HOST` | `0.0.0.0` | Host to bind to | +| `QUIZ_ARCHIVER_SERVER_PORT` | `8080` | Port to bind to | +| `QUIZ_ARCHIVER_LOG_LEVEL` | `INFO` | Logging level. One of the following:
    `'CRITICAL'`, `'FATAL'`, `'ERROR'`, `'WARN'`, `'WARNING'`, `'INFO'`, `'DEBUG'` | +| `QUIZ_ARCHIVER_QUEUE_SIZE` | `8` | Maximum number of jobs to enqueue | +| `QUIZ_ARCHIVER_HISTORY_SIZE` | `128` | Maximum number of jobs to remember in job history | +| `QUIZ_ARCHIVER_STATUS_REPORTING_INTERVAL_SEC` | `15` | Number of seconds to wait between job progress updates | +| `QUIZ_ARCHIVER_REQUEST_TIMEOUT_SEC` | `3600` | Maximum number of seconds a single job is allowed to run before it is terminated | +| `QUIZ_ARCHIVER_BACKUP_STATUS_RETRY_SEC` | `30` | Number of seconds to wait between backup status queries | +| `QUIZ_ARCHIVER_DOWNLOAD_MAX_FILESIZE_BYTES` | `(1024 * 10e6)` | Maximum number of bytes a generic Moodle file is allowed to have for downloading | +| `QUIZ_ARCHIVER_BACKUP_DOWNLOAD_MAX_FILESIZE_BYTES` | `(512 * 10e6)` | Maximum number of bytes Moodle backups are allowed to have | +| `QUIZ_ARCHIVER_QUESTION_ATTACHMENT_DOWNLOAD_MAX_FILESIZE_BYTES` | `(128 * 10e6)` | Maximum number of bytes a question attachment is allowed to have for downloading | +| `QUIZ_ARCHIVER_REPORT_BASE_VIEWPORT_WIDTH` | `1240` | Width of the viewport on attempt rendering in px | +| `QUIZ_ARCHIVER_REPORT_PAGE_MARGIN` | `'5mm'` | Margin (top, bottom, left, right) of the report PDF pages including unit (mm, cm, in, px) | +| `QUIZ_ARCHIVER_WAIT_FOR_READY_SIGNAL` | `True` | Whether to wait for the ready signal from the report page JS before generating the export | +| `QUIZ_ARCHIVER_WAIT_FOR_READY_SIGNAL_TIMEOUT_SEC` | `30` | Number of seconds to wait for the ready signal from the report page JS before generating the export | +| `QUIZ_ARCHIVER_CONTINUE_AFTER_READY_SIGNAL_TIMEOUT` | `False` | Whether to continue with the export if the ready signal was not received in time | +| `QUIZ_ARCHIVER_WAIT_FOR_NAVIGATION_TIMEOUT_SEC` | `30` | Number of seconds to wait for the report page to load before aborting the job | +| `QUIZ_ARCHIVER_REPORT_PREVENT_REDIRECT_TO_LOGIN` | `True` | Whether to supress all redirects to Moodle login pages (`/login/*.php`) after page load | + + ## Next Steps After installing both the Moodle plugin and the archive worker service, you -need to perform the initial [configuration](/configuration) to make the plugin -work. +need to perform the initial [configuration](/configuration) once, to make the +plugin work. + +[:material-cog: Configuration](/configuration){ .md-button } diff --git a/docs/installation/index.md b/docs/installation/index.md index 1e83679..6c3d104 100644 --- a/docs/installation/index.md +++ b/docs/installation/index.md @@ -81,12 +81,12 @@ published to the Moodle plugin directory. Such development versions are marked by a `+dev-[TIMESTAMP]` suffix, e.g., `2.4.2+dev-2022010100`. -## Next steps +## Next Steps This plugin requires the installation of the [quiz_archiver Moodle plugin](/installation/moodleplugin) Moodle plugin and an additional [quiz archive worker service](/installation/archiveworker) to work. -[:simple-moodle: Installation: Moodle Plugin](/installation/archiveworker){ .md-button } +[:simple-moodle: Installation: Moodle Plugin](/installation/moodleplugin){ .md-button }     [:simple-docker: Installation: Archive Worker Service](/installation/archiveworker){ .md-button } From 0761744ce261586a6b410e5ee8fbd74d524d1013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 17:11:54 +0200 Subject: [PATCH 158/185] docs: Add extra bottom margin to main docs container and improve image thumbnail sizing --- docs/css/extra.css | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/css/extra.css b/docs/css/extra.css index 6189db6..90c0bd4 100644 --- a/docs/css/extra.css +++ b/docs/css/extra.css @@ -1,8 +1,12 @@ +.md-main { + margin-bottom: 32px; +} + .img-thumbnail { margin-right: 6px; border: 2px solid #dddddd; - max-width: 128px; - max-height: 128px; + max-width: 320px !important; + max-height: 128px !important; box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.06); -webkit-box-shadow: 2px 2px 4px 0px rgba(0,0,0,0.06); From 915b1689ec2cf76686f5f6cbd41174e0637b1562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 17:12:26 +0200 Subject: [PATCH 159/185] docs: Write usage section --- README.md | 2 +- .../configuration_quiz_archive_creation_1.png | Bin 0 -> 228106 bytes ...guration_quiz_archive_creation_1_thumb.png | Bin 0 -> 12565 bytes .../configuration_quiz_archive_creation_2.png | Bin 0 -> 194882 bytes ...guration_quiz_archive_creation_2_thumb.png | Bin 0 -> 9859 bytes .../configuration_quiz_archive_creation_3.png | Bin 0 -> 198494 bytes ...guration_quiz_archive_creation_3_thumb.png | Bin 0 -> 9931 bytes .../configuration_quiz_archive_creation_4.png | Bin 0 -> 187599 bytes ...guration_quiz_archive_creation_4_thumb.png | Bin 0 -> 9882 bytes .../configuration_quiz_archive_delete_1.png | Bin 0 -> 31242 bytes ...figuration_quiz_archive_delete_1_thumb.png | Bin 0 -> 4524 bytes .../configuration_quiz_archive_download_1.png | Bin 0 -> 30939 bytes ...guration_quiz_archive_download_1_thumb.png | Bin 0 -> 4636 bytes ...onfiguration_quiz_archive_inspection_1.png | Bin 0 -> 30844 bytes ...ration_quiz_archive_inspection_1_thumb.png | Bin 0 -> 4659 bytes ...onfiguration_quiz_archive_inspection_2.png | Bin 0 -> 159075 bytes ...ration_quiz_archive_inspection_2_thumb.png | Bin 0 -> 8295 bytes docs/usage/archivingbasic.md | 48 +++++++++++ docs/usage/automaticdeletion.md | 42 ++++++++++ docs/usage/imageoptimization.md | 26 ++++++ docs/usage/index.md | 17 ++++ docs/usage/tsp.md | 78 ++++++++++++++++++ 22 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_1.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_1_thumb.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_2.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_2_thumb.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_3.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_3_thumb.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_4.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_creation_4_thumb.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_delete_1.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_delete_1_thumb.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_download_1.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_download_1_thumb.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_inspection_1.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_inspection_1_thumb.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_inspection_2.png create mode 100644 docs/assets/configuration/configuration_quiz_archive_inspection_2_thumb.png diff --git a/README.md b/README.md index a0c8106..1a58d3c 100644 --- a/README.md +++ b/README.md @@ -462,7 +462,7 @@ Locked options will be grayed out during archive creation (8). ### Image optimization / compression -If quizzes contain a large number of images or images with a excessively high +If quizzes contain a large number of images or images with an excessively high resolutions (e.g., 4000x3000 px), the quiz archiver can compress such images during archiving. This can significantly reduce the size of the generated PDF files. HTML source files, if generated, are never modified and remain diff --git a/docs/assets/configuration/configuration_quiz_archive_creation_1.png b/docs/assets/configuration/configuration_quiz_archive_creation_1.png new file mode 100644 index 0000000000000000000000000000000000000000..99e79a424ec99a998ff2111577f92a35771ebcfd GIT binary patch literal 228106 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 AJdu5AM011e3Ac#mMr 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

    +mLTN^)Ev2=2`o(grhaYRsD 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 iyE-C%_vh|Mi9{3>zE6 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%0A1mEh% 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

    QwBy%M8J$Q_>OM)q22}u(ex7vVCpig$V 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 literal 0 HcmV?d00001 diff --git a/docs/assets/configuration/configuration_quiz_archive_creation_2_thumb.png b/docs/assets/configuration/configuration_quiz_archive_creation_2_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..3c5ef69368f8cf4a421e903abbf3a3b91d1c0436 GIT binary patch literal 9859 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

    &kOz- z+ymL95FTjyY`?XQuJl>55;ih|oi|e=_p;w%?wX5EH9iJwog!II2Y9 zR2I&W{@hzHM=BnkkF=u}dNfU17ZKPpr`~aIC37ljd<|RN4Rx4OiYQdhuKfz*Wzb*I zo!W@1<}ejZRl!#mICgk}B@bH%?v+fJeQD>H5b8Me+oOJ-mGh^d$Kum>Oa0U%644z(&&$}(^h zSUf2`{LppZS^-ZwKX%Eyn`Gv?AlAs|r=KQ(si0UJ60L0eQG(V7m`=F`VPb;>9P zTP4r%cA`&0m_dMZv_9BM60rMo?)uE<`Qpxe9sA6wU?C1?cZqOYILqE|!?`&Z;j%cmX3iM{{ zAaSmgUykEo?bXHdX(vj_VNnJ1?c`eVNG}!6D7~||2YkOfnvR%{#o3^D?SbNDlP`y$ zV-?BF(UtUWF22Onia7InpO(TgAV6zrRZ#gIs+h_9tNuo0c5}K9qUqJcBce!ifvVTD ztu3Sr`+mERJ^=rGLJG-Pr%`W~sWksRR?E!oWi*;HuM`a_bXm z6Uv!q$)ti$>GS5CyOt%Ca!^nl$*yxyH|4TqN#d^*42{ zdTP`L?L0MRQ#qnVQFxZHlp=0s>KutFU&u9#n_~24ZVmn^?NVLUL>VR1N8yk}FnW`y zhKDbyQ0C!$VnN>js*dk8q*(JL$x-U(c-+y?s&ahi^=)kn(shoFJ#TX(|93_o3#p=G zt{O?#C=1R8sQOF+dC6MAlB#4_q(~99mN?xgCj7?Ha_+!H^QT}u9H@|hfc9Ta9B0O_IVU2q zv3X(hLqT`1-7Q4m4@ExKUGti#aBwH76T1P?V@VAQ9ygSqYDVzyJ6FPTh)*jV0HJK0Um@9=P34iaWkjvGDLC z%(wlIf2%z{JssIwy!sh*`~v&K4;cHXxA-*@LIqBN=`g?c39}Ln)AK8uTJKJVm=-vR z+kP}sX1Y5hjgB*oJ{D2G@$8y<<0f?1Z z_PRhf%Ivb@R)nnH#y-t{Z_4rbmsIo#%@dJM4{VPBkb#`4QtG>8Dn;nno<{`SL|Hq0 zwP^O;=NIfepPPLy8{c~6#^yE`_C+cMr!m^pYOIL|d9d zk}_TEhDpK$y`O_^kYIq-+yN;@jG+{AjgHebgc_M+gq@8P>Kalj(aedxW^g4sHe56N z&-!uG0h15=_ca7yqs4o@)-U^<5F^iEM3Fus^~&*0w}vj8@~+NKaf5GzLXgU;n#N!O z-0-;UkN)?Bl}%n@%JAf>QGqdGWEzW`k1@>Wj)blN9z8tha&oD;eDJp?mhv&v+r-i^ zEmckTEG@s?q}Rql5Swj0FSK+G!yJ7fMBMi3D5ITyNTTyry6evizR*YEarEYm&)do? zet!P$fPtc6eL z@|kL52Nm*Cv_6(mNuLsP^L31Cb+m;{+djqX8fgc-q>gyu!ns3@TWj*#X{$<%0EF{x zdaLx;K&3Rz$Uro$M%Wx5z|;K8>yt|X`OCSNG>^1i;U4-`viFcs1pdRc$_F zh05NIM+XdF?4KDglkaONSj9+tC3e@g^cO4mxsu(wjwA$kuNMX|F1*iYEh-+xbR36^ zYcM*N6qS1+b8uh1Kg}Uc%81?@d z6C5(4p-pq}^mX8NSE?<`Ykc=7l_k36jVJvB zstiu6w_eZ1ofEr4ah2IEJ#RvKjP_|74;7Q}ie6@Y`Bly9=_rC(>qdQDxzqBCV7#4? zT^*ctrGMp-HHpMctXK)cd(Nb;6U{l*A*{ z=20CDOUz4Q<0H&f)9=q8>n&#eX~pSR7c6*f!}u-)M_8>rjP3S-U0U#pmvtYh}gNT?_jn>wF9-Z<@maENaRa(QV#d zvPq_UW>F3QNM5iw_68D#J-p(d0eE6scTP|tLN)cZkefv3X67YMtT!r{fsy%J=bLCz zkFCUfdX3i**_nptgq^Ay?vO4Z?SaH`R=xp_dzvcE62y7xYC@l0qZ6;&#$860gvd3 z3R2VZrzGZ&C{{NmL${BnZswA37jsO5CCD!*%p<_h!!M*OAS@{?Bq=1$#m_Iv&tF{T zRPet5_KqK|Exi7JfPkck!2bY({^@#P0384K32xT*=B{q0_D=slMhNqq|G`8u)nI?4cejPRb0&Mg z+55Y<>fRrx&W|&zD2g%W9MYpl_tQ@|!QW&=U!mZmz`?=25*HJahl4}p1b*JXKmu9} zEI3~Qzh2sisoKNAz3zJYfsdnkP4M)#gRqK&g|)G%zOID|91|-$yV^64BcKEAe{`tA zv9mM6K>8Ly`$yC7Dh~FJdZLEbmWB>?u2QD<4nVWwcM&>Hxc_(ie9sQBl=pDrLSMeS zXzeXHyC_VM^d38pi6iI6RH0OdRb6V45+K6Ee|e*7C5)Jg25S_my>w7u1S%=&|q)`x<>&a&b7e_-w!xrV1JA_e%78{lHKaW%2DEAkk zzt6f?t*0oi_u-=ShD03ZGUnUA&ux`OH;NSHJ7Y+if{()A*M;^Z_4M=xT1AR^|GxP4 zZBr&(e$d}%nhudu`0wjoR@80O|D9P9UgkevRjQ-dg#7&|XhHse&Jq7C^*`|ZMP!_8)dfagQFd9AS|12?z7n|sv ztk=|d4CRHPiWTPDV!IEO{ zTbl?XB3@6yv@zdir#&B>@q)!*VZ)caB`P2%N+IY+QXkCpNu?iK5y+VwMjL4JD(c4I}Zo z@&)?RT~=T2ju-kj-7Z|d22E@XCaAW!u>o^vfIYY<7TVi=|NQy3J5ek;oXmEpT5&oy z0ZSZqCNgT!7s-Yfux0>u3iq^A0*)-xsXRQIDJ#9pMgK|Rv4ZcJw8P2cbuuGS-IB_y zD=S_QztqEUH-U}EhFR5>Xu;r`cHB;2BC`Z^Nlij-5!_`_OYr8aD zOn=v6i+d8gC4PqI1>RJdresV8&gwgi$BAW1pBak}{2xZSuYF@1HSJp;7qzP#@Xqns zYGlCrx339FSMP*pYfO9mmXr(#=ATcuT)s#3QrAsOCEK56B?CGE9X3dd+p=S8!^6Pn zC{YEK#3&>V8yP{;rEP2~9OLH$GBzK-W(Ov#Qz86mS^|08%xq2eJ8b|veuJs;^Y=0{ zCOWlbu33#sv$?a;NV=e27X5rfrdD>|_d+=ysLyvjJyJFp`)}7`(Gn1OV2ATTmU70! z_cE=}v5im1-$3zqE$--W6q2#O?eil{-P%b6Y)LmBFG#a5qp)OU(TNYoef5MxRg80E z5)=E9Sd2?z>}fxJ3ZYRh&$~;D@q7cA2iHFoUGkD4GhTNQOS^h`ZT~z zqg<+97tvt9Wi0(@gp;$Bnu=2$N>O1J2_Caxa zXKj@i$&9Uo!}@SL!tv=TXhdRb*!d@;6zi_I6nrYOzHTmk^ zXvtR)^X#(Qgmre@9y)u_g3N^z^{^RG8iM&c=XdKN-(h!BG5koa<=pDpTIWy_ODPC0 zkx3uPad*7G8hI;IFwkWs0H;8sfw?;rCtoIwJB*l*yR(Uwi@Hg__jRMg&Q~$97l8RN zK3Z-UnsdRRqNHT@x^vl`ER{T7?Jm@A<&U9~rNqgjk0Z2ka3CiqPaMmYl*@Ob(;_%x z4)wlILO_1h9hicagg#Qu!|Y3p!grHiLo=A{+1ZMeK{8@n z@dB-I?i%ysd6xSE)$B$`IiJV9g{~&ufz96J(u|h=oW-RlSM9tzU8z4QzN3P!Ai%bw zk5R5A9uu#&Izf|~tTRU{Ou%mOe&w|rbs2CBvZCGsZx!WpOd9(%R4*mH?N$h z^hc6QZ*|#?wdjkRy(R55-e14fsQTgfHYI6DwT@blRVhl955ziFlmC*vu#Yq?~#mP*KU1)TqN#k+e1gvlvAy+hT5_ao-Z-1iUMaxstKm;Cn z-%(2a)@*VLBjAX*IftD-+#a4zC~K?Y)SxPtYpsRXE#|5XH~xq%{XBO;q}pWVDe;h8 z11pfvW=F+&6oHA(DuCtL7F}SP!0PbsHhIR)uiiKku^){`s1Ua`R%LzT|@8dYVD~0eQk~LjO;SHG<8<9b&rY3dL6%rA)W|8;=;& zmMP}3Oi!NIBwW!}GSRKhhbw)f`qdV;?)X2nJa0}%{;U*Av|kYE{!l9U>VU+7_kQQ~ zj6FlMRKO>;7o{oz%34H;(RGh)U);`jWE(;hUjl85o*CjStWA&h3@6t=7~~(2TpqfW zpM2BjF=GP2I#Wm{jAor@vznYR!V$1rt&a9`KS|1L((>1)#-rn?UNY}|bQM<7pOxdX zy&KqJY;#F%69GT}Vk!?#)Mly}-8G?4&gI=CkKlCOBixsE!|liUQ0k4US!Z+Ok<^u3 z_;R^y8H54lvJntNbJs+1-4@Bf!ChmF`Pbb`_`0o%d%H1A;8=ufk{w;G*KZT85N%=v zTKymI5XjSLJZ}U))5y{C5Pbg} zG2sL0DldfhkrY_Obd$Arqo>av>{LIkkCe1br)!u zikFR;)d%2G`O|8NjEcLughnz1tkY7>hp^}T{1OATL<22CJ z9*D*Ss-N6P?zj(o9k=%LF4i-7ZOGh_B_*!4;^~Py*`}Q(&J-s}6X7 zdqLNRe(IIAA~^gJOD(Ew!QF0iuYvWNGA5WQ!%L(_?fmHjNXwC3d`q4}D1aBU0uZ=7 zDfjI+yA~`^zg643e~Ux^&xL$;wmT6DU>~m=YD39lCd- zgiYP`XIrX6FO#;o?AA>r8VdS8KHQjdNP4UHh2*y8vYrsImq0dOnP1tQi7gT{(;8xI z4JI(0t}A$&EFHXMFIDe$@BI1XS8J{2(oa%dbDc_)3Ax;8bMxl_7weiexOP{$#{o`0 zLtGlUju3dzc-gk~4r~BfY@xk#B`$u{5Xp}qk{7^IXibtanPDz@(8s&KIWxKny5zDw zF_3uB_CDN%D4Hj-m~#($YyarhTiH<7mhIPW^gt{J^C#xJ@%H!B6ki$bVs>;opI8-r z)=|1e7ROmwil<$P%nijmxkv%xyc>bbXB^f&RW9ui+QdhMlsYR(kah!w_rsmT-k)?; zr54V7NTP6ESsHXGf4Wl8J-+;kWmvOi$xHhyES}ER*5ti`#MkCkVuX>Yd&@ zfF3M?|>AWvf`0GtPgX+*>s8{zwXIg&xLBd*76*LdBJ{Y{Fa&^j^m6f#( zedKbxbPFj>nLM7zVK_cNhL6T>$K%>X5J4ju=&7M`&9Ni^?!TykfkFJ-LMc^~W9R5- z)CCa_$QEh@+hgsCyp6s536`8;Hk`()jXPfBN32@B47;mwM>iadUFmHAsou<$r}Daf zqR=scUB^MqzluzjsYj}VJxXr$@tzzVA}UVh)g{GbH=N5xjW6aW%)T2o@2aCM*Y73Y z;C;f)l}Br(&E0rs!Zmf(cV^ZuBFn}z_zbkBz7A3nL44r6d%Q1RHg(iusMSghoRWib z`4Oa2_(O>onkrp8@kJutBI}m$l4V z#qX=ah&a+;5pXaWPdX^kYK8&FSKiG2Q95a8zW!}^em>6>*`Y^rL(>d)8x)#Gz+pka zm8NdT*QQ!+BA3izoo-Z_nV5(R;2cp%Iv-1OA|a=ZkN3lMAdZ#`JOe{Ht1I9k$=<*B z0no>i+>Adm`dGQP!2H63!T=X1=bt9$!`N095a4|!;%UYAXP-hRDOXmLKR)JDWw|iB zM{91^UCi9CG^N;^1&-03rryn&~ zt$}CIWyJlcR{cUcg|%mJF!c5Q9Q=_DH1O!`47gaHa8mb1l+ySdIS{Dq%HbhIP#Pav zsE_QWdSpIezlnv8jt-}1y+Gt~KcT!mUWpKZij}1_jL&K{&X_B@+OLrRQMKy%moMEP zZStSz&e zudADzDz8qF*F^k7IBUIfjSkcy$cRi{^ZB@FKVvQJ6qXiSt}OfI>9xfh?cH|9DB@|= zWy;g}#$wGUvJjb=MlF`2SOYU>ER6cAHh34QE&p)Nge8HFk1vcmw)CkLKm8yLK!qMx zUcgCZaHagIGQ{OSBl7bLd5fVDZJQDCft!*N3a4Vk?Yt`n+^eI@%dNX>)UNLCCwS=5 z+)^mlf{#T*i8#;`p3%4LTRwW0*>iP$eJs_=e|38cvO7&Pfn&u5oC zKM;lF-x}TI!d4C?knR~gfB*o7 zg+5a_n+LCc7UUCv79AkXl|&FP4dKuCDqeD0{sx443=;d3IXfjLQ;rW(<74>K(H) zcWe3-69R^Y*mRCkdMliO!;0}d1uu+*BOYaAP!6~cBF!AJ(kXRs-bOj|{n}5DIe_xcG*Dz@xVF&i7kd>M-H1&H`e zXJE`GT3>-h=GTCdm@zJoE5_akA~IIiac)#G{2SFgshf0x$DbVmC{Kn1X0S+fp*8U6 zd^jU{eX=p8xR}gV1oG%6q4sunb&V46mN!H`IzR3HI;;K}z*p2XZw}{LGltb`^L8eQ zNJwN$lkuESN2GBWv^pjx*eL$EZtN<00U_cF&*SRV@jF5RTR$J493N3Y)wd_|1zK*- z@~scGc*n`9O`=QWbLX~#+jV}6t#oL#*ty4T3}DgZyez<^|NcTiKtLvyQ#@%bce?cv zu5(cuUn#u=2vODtw+2=^ML%j3e2af_hqL3SL3;u=zw9zi1z6CXokKQ9B_M_p33))E zb9b~R+kDnx@4<8Fj?ZTCxl&IU8f$MqC|Zn7rvkWH05VIwbYL&gW{_?$;OXcvy|7UT z>p8pp?sPa4W5olg;V0#iwoE~;l*??5hB?QY?}cw>YpsNDBhq%xzoWaIdtd;%0&uOj z=!6Dmfh4CZi8)$Pa2)!2Pp*@Q#5`lgsi7M%W24!N+1{;-XztdSk=2J?)~McjLdUC< z!q9%JC6;J_AGp)Tt}umSM-cP$RIX8d#Ke6u?d7#`mi#N~*K)M!!|S8Vt)nP1)3NB5 zlhso+Ja)f|3Y(kreQ7{ErJ*@7H=w|ha>N;?Bq{a@W3fjt3et0%Yxzw+)hAwdZ{cKP z(2{t#-ei>Y=JGIuayVO_O#IB>$Q$~)27UNHJyRv?M0ifKbnW-=VazW(KsS*j~`c8F0;;3 z+$8cmo||aCzN(R87e_W!pFZK2-w|uH#2<^b?zwEpa@RV40@~0c=ZIb%2JpVLVYix3 zTwd0BqI!UP@q{!>)oMtOl(J{lPO{!4X_|zI=u52gQ5nWGJyK?z6;eR%EPO+)RST3c^=JtC|LG!cnO zmg)yyG~XXEil7m6Shq4{uIcZy@U})9j=K{u3oyI_1VO}(|7z!FrU7et*m-3#^A74{ z=~CMiH1BjcOm!%kKh8|C_!ppp`TG1hPQ%Hj16z>8q#dV*mOlC5)$SxV&rfL?F45H5 z(i>~&qUt!}y?T`fO^1`|-llLsD3xh_n7^}Bj?UwJ-(6=9Mz9e0m$?seyw16aqofvI z;+KV1=#DjWJ?Z@~=fy1N@-XXP6q5J+7KP@jmAU*>ENbTuthiPDub%>-i@oj9Y+Ci& zA#N^(xjO57iMUVWMT#^ObekFXdpncy9iG+@rVIsQVqze$_?h8d>-lgRf<-fyB|O#~ z>e}7jo@lDWJTstvY6-rw+l5O&1kH4`dp~4aBr(@FY^)8G$~hKNkW;?#B*RC)4D-IF z8l;CaE0ya+x;yLCIB95<2V694?^eXf79GH3&ZPO4nR~N!KwvRlU+-|6a?>m>B?TN* z#nn`XZLOK;?XB?=0vBUjB-EJfqgu`%B4o}`?0&Fp3jF6X`||aM@=E z3n>7Q0y*r+zb58Q-1v3$`}cdei+xFf=1~iFdw_Y6h?6KX;G!mY^9JtMST;*dOcENZ zbg5VrsYatiu-o~rT&vf;1G=@fHB9=zJku}+8(NWGY%QvylDrtorTB?F5ny^Ufje$W z+%G76I*>Q4p7=Oe-h6cjg0om676I7B7;x(6xyjOx>Un55C6p`Y=jR&$;sWVB@M1sK z{^$&3IrtJE6{GY{m4weJHF4WSA_1k{gcXoUp@X2+B?)KW@U+T60)sL1L6t@>i!<;w ziOjoSks%?g-zi(p?F2(N(e)Yeak)Ln0XLPe>whyT?32ULe)Z!yK%VOLS7GgJvPzd) z%rINbHg|L5`2c_gy3yU+3v!1Le_Cj?--f|btXu|<*Qmzs(vo_@@tFbtl+12ARK3H( zgdZMDE9bY?E1Sb(tgw^>TBPStK{gE+Ap>kZ>8eMMpmUgrU^3Pl%Y{n=4(rABNC9Q$ z&204Tv4(eXG>Yp0fkS=$*mG@I%$zI90(9VVd3=0F>6H|1#fT5O&(xFDWWf(hDoZty z^nA+PxW3VB_2TR0urHm<*sNFSqkLf!YG0W5Y9M6PWPK%&Wb=9}17c&AHNU={cz&89 zMLAijDLX|UdAjifqQKXqP-5~{sZ0XJ>*tRjHaBNG4y}Wo9Zsv;+hYC87^Y*ThIJ%( zg&Kvco<#FQ18LRf(e4eijjPS2Rpv|FoSffEOyph@*0=@p>OC@nSrguLzLpBi)J)YMd$(_s#3%|_N&_~eeQ zBVvHTdx?Ugce38UL+>SUfA($*l98|98^J}d-s0xS%f|<$<&ND0D6$F}iG0`7O~7v$ z)O(72f!=C@0#oFhUEV-iS$+82FYGpl@F-=klh0usCsM88$!^QZ+a0YR0Rg9@iLzX- zCz!~O*MR_c(6dOpxi(k`P!|z|Tmt~PHdA5y?l2sG80wj^vQW1uw$r`?g9%z#SPb}y zOD2@-h^n{@*aPGVr7n;p0W@CI`#t~!vai)_QkVk}fc>TyI=Ln-pmSdmM$)Vx*Br|m zIoA^4$0*R&$XjgU5t#qtZ}Y8QYE0b3{RhJw$3g5wDWe|QI}Ff_l!gXj=ORHsj6%8t z7%AEd?re9)pTs*k!?2tS85wz&Z#Mpk?eJ;U{)t*c?hZr(4~s2!c1X@G^cMh90oCy(-S1Nrx2y`VJq-?u} zWC{Yvg9qSrhl69Nxa==zyR8@A1J;s5Tl)Sdke%pg2zt@c;e4_S^9L;)Sb5&{tMF$W zAp%Hbrpa2szV+4@h-slKl{weyC5YIxeLw`mX>*hj>q-Iwh%9<~`ue6OfWOv)driXM zaVanlPQNGEN}%iUxWRim1yme*yXECCAvmp`cL=E1((7swg?RYWK6Z zAvov~rzSI1h%j~wa;6Va0O)#;mV%kU2CFHlPJjtZKP~eg+VKU zJw<>PJ}2Yne~6f60|F{eZq5p`b9|Zfp_Z!%y8XF)H~#*FnAX+lQb*0&!x#GP<){kj zol{c@5s@`prOrRA0Cr(SSg68o!i@i69Tdx~N=>4ce2T-M&z@5FJ+s8osrHlNN6E~# zoY(%&t3xv{MzouyuK(=i;}1$FdCxjiKk+ELa5b%ssI$N|L6CYFkB|Tx<$88troW^z`e#&D+GmyOShon z?aqLxmb@SNnmqbh{?-EcBfZkQz1RnQUFh_*N<4#hL_z{i3>8(WkOf1S2pLPh=WyRB z$&pZ`7LZv{C^f?ZXYlYW@Y-=bg?feB(yME-{QA2bEJv58**k*a)M{r3TTNn4n|rFs zwI*rRpMxUNYs@B>0~|PFrx}4-XAx0YdGSQPJ6)bDPjK4eK0)`$RkBMOEjwf zN&=25|9)r$jo>80Q3+od1!uF#+L-aCQ`Tf=Qx339J5J_aNo{R@9vsHlBp$3kfwX1& z#6(=4H2!I4swyWBm9+hl*xcmZ`Q?(s_TBTcGWu%Eg^)lJv*;U&F##EvN283(W5s)jMkF&z8n82VeQW`QyAwr|WuLcprJi-&zfuurfb@WL+NpBa^N+$R!f!h0D`r zPfq=E7$DxTyMd91d*nnm_t!|-QL{B>%*Us5+Uv6Cdn2>wFw^;JM16jb4AI%Va>3g1 z8sG9)I!EeoC(ekcCk-#Qv2oy;2C`XHg!Rb?`og+>s6S!`Xd zRukgm0|(41z19PqIqQBh{3Et8Rj)eK+;D!-ablP4d$AH?2AYUJyLUY`2%Odl5N-v^ z<@98tXvVV~ELTgh<@I>>F>v1A+`N+!BazNki>$AJ`Urb$Uq1JELL4#69c$FWZ(xmx zIW{Y+Yh2!Kwx8j+!tH+WB@dk!g*a7ulDD-$I0vlqNF^UIM-2+4YKmH(*A(E?JH>(1 zFfZ@tWFirp4LI8E7R+xkFot{*EHfrEz4pyY=Bm>U(&pacIr_h&VmTa6Ry+Pp%4!~c z{82`|6zIFDv3CyPP{*a^+Sg9^ohVj@W{aZ7(`y2VP*HyD@^DEOxGyse_QuJsjK)KW z?Y}+u~$5lN9HoP&)Gq-+2nnq}*aKY7=1`I#;CBEHE!%}M)Yz&# zz4l(C{&A381Kih*D3B*!j^#x=ymYZCG9(R@ny6AOu~=Pe9QEn&OSm4D{C}kW_cW0? za2Pa$0|R-a2_|Yr1^}1(uhc)rGG-JqG$AIhf{ZpbX=xhl6Z)@u7+x3RSh)Ndi_NhK z9`$Jojw{zKh)ooME92iX3XN9mf0t3%-wbh;i7vuLD@ih_<-FM#jBkYL?!eeBsVaUy z@}XLNorT--1}#+utrr4&PUUisw+1L+81*A)U56g5Tn2@b99RuM$Y3 zWzq)>l<^AqS@i!JoRrjccPuM|lWk>9%0D$?kss6j-12VLxpJgRGB}vBOhm+%fs`Hz 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 z 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

  • Aj(&bv-Klm+fRto{f(e|FbCdNOzS0{I=wzIsT12ujA^ z>Y^gY*_fbBH9Yo%&ZSyc>yN5<3br!sUdUaU+`+`4^e&Eenv<~|+%JudZ>Kl|bnL&5 z<)=?@J0dQyHM7S_;lVn+k!bYcm(h2pBN?n8J6!Ea2ZbDU(zs2yDl(_DE;W$X95tCL z$3%&{eop7R9`i`)EH z88P^X<6lQ%Mxrl>NPIC^0*qEw;)gHl-NDTxpDa_!O)6|h8=fvXp_J?|2|0r!@a4^B zGNUfCIMa*WGg|oWNssPY-b^w4NL~tI7w$o5P>Q>F&4Je@_Fh=L=4iCc9lafa{dU*;2UNu&7ye~T@ks1!(KwiEyg2Vwl?C4VYl;W z3AHs`Hb107*otFVhS#l$2<#%;ep4bDP@S#oST`1ReUeTk&kOEZv-;SmJl4g+eJb9D zs3^jM{Mx3!W{eA}?1glm-ATB3v&ZlCLh7`)brj=)+^0L}eV)MSOfE?7$xsLrSM=jA z@;v6f5z5xzPgrZ>jdibg7KKnVIcg&*LV~tQ)7jj=ynK(mir0gf65@3J{j%nMMlvDv z&Eu3nfIT9 z+mRzswEC{BuCIJtp^O!$+Btd|sjI2{NFk+6Hnjp7I=8ZmZ2m1Y?sEQ9VTP_KO6JZ! zW4Dbzz~DHNrd;`P4f@W=RnTPHRQWCb@cl;KURiO{WGe5_?bZ3HoUXdUeW&fMp~pL; zs51*?0L0{NCx?sU{afG2oHA!NdvD|o9wPlT zWVQU1-|0GTMe{{vO^=}@T-V|oL zEji~yIVyVk&;NZORv*jxfCXy?UVyyvzaIS@yNbE}>POZ8tLGCI)B0m>V@_JniMC?7 z-Yynx@g>2(`Iv({_Uyl7{9`^|CTJCI!|33GTKl&2r@K2iJQCf7mHQ=JQaOrdgS;Tz zm^hY0)dl=N`378K_dhD**lxAO!6ZE!%7igy0yh5&du`;GxUJgWTsK(fzO5|HIku)O z+J21S@T={rJ9ss*LhBhD#N%&IZbG(@hj2M0k2 zJiIpp8ANqUvYA-ADJr*LGtOKLsarB~unWy{9ArJ(+67b_rxA&ee+b#vsCA<+5_t@$ zm#&RbdnSTwMa*^cvil6Zt837BW!xi$#AeiS+6kopm@uqP8)NZw%mo_m=r0XyTDkGD9sLqYJ~f99xhK~%dw9L%B(!`5~J7ieV0pxCdxi2p6iZWu-C5$$!M3)eVuaHq!(fKaC zyY5|v=~mv(n%0dTM)B6uTuE#e!@ACP`X_3&WO)IojrSP_-K&`1*DM(pvjI~Flao8> zdBTnqRANl77Z}BRo}1pQ$PNgk@Ye` zIs^u?m-a2U>jumZokHHj7 z7Hd6)`L|M5rp4Z0$ETtq%3*vNGC-^JT_KP&^hK7E=^yAX?EhqFl7$vUme_LhN_uw> z+B-~FcBAY2#b-DRLb@GmAXJIH+@s5)=SDBOSB$4nJ3&kS*Gq_#nXYWue|3 zB-*hf(@}fXv#Li1VYDVj&Fj@HAFttTx6a3FdkL#wlNeh#Tvl<15`M%W-9v8k%TF@d z7xLlsAt)1hKw-jYHsjWPo*jf7dq2QTxc?M7{>OgqcZrGHk4J$hklQcbTY6mZBbu#x z#8-2IyN~j=+?t==-K*Q5s2^`uX~%=O1FU02qSHUvSvi|7FL5E-&}7{CdBq1g=GaKP zJn66Gc#VzOE$+N;4erF7jn6AZF*9;AR23Vka^Yk31;$E>8@)#87TIEbqC#hFsGJqb zZO_KL;7Bqgxf$05EBUQcf6SsG{{{ks?}T6gJ*;a@e|f@*xfVPP<-~ANN*Yuea#0V;#P7a29GwxcV2o4e zVwlej5pKL3TbWF%Z!U5Gn-f01MPx2FIRrG_I={gMl3uZtxW8}y+fao-JR=$0I6Z&4 zPWTJ?JSISvxD)AH4yKFMK*IN-mJ5*>r451XYz?7(v-x5k<(D;Ic*AxiVRt8lug>}XUv z26o8uTl)`hhnInQr4vhS|EZS@-vL zf9zPsrwKDZ^}u6n2B@(nE4(afx)=nK{ue{n^Yeu_W+%6X7B;j6ACC zC@gEL?cs|18l%>PGuVcrIgXcO*yyHcZF_ljetBKs&6a17>+ZrOLbB_9K*Qg|^XGnO z6&L&X&@=e0#PetxgPGYHN|&_Id1d^d5q42&wyoZDdL)i_=oOIGc*DcI?r75;U6jVJ z4h~PLPu0PjKdLTS*(x#E{@FED-`D4a2fLOznru8gz3`wM_b!S4&0Wp0`w2H`F|9fA zOQP=n*ImtSx;G0El=BJBEc#|+^_1%KJPAEPa~gNE48<($>4F*5*rSOoH1M+xXrw+i zq18HTygrnyn}6Q(wi(A7nJ=S$$L`+-M=KKl%c$5)vLHG(!V;xOjfwr@*P+x*U$!k+0p zrtUx8*FU+d7O&nqbtT6i51gUNWW;r}ySztk9ZGKN1PT^e(6t_4C0w2;R+8`a4L01H zvyySwz*IgFd>5mp&~)!rsC_f!E=dNwn&=Z7A;o z!ZgGAs3*R_4%Tv7+=1tjplJBM>CutHXU7f@btO&GVUHSMkXs29lYEh;(73q8DOzrP z5hqh;F9d!74HiZPr9+31UfBPZ9T#?_aae<}9d@nkb!zkZ#)q1k`K$isAC9Gh>_XYw zBdwGzJ@s<)p%;R}GU)07EOGT?6})NYmj}eRfarch<;U`<5bw>0&y+ zYlyoX6}q4|tdL0D5(}QX9JGtP>UKLF0cO{)7V_5TY_^yz-3o){H6?08iAMIGJqoE- zJMgy}*DS|oymNI+7js#2^48Yuo$=q1i>Zyf7{f~iH-cRlJoM{GU)W@H`HxNE3vZ%i zGy+gA{S0}w>LxD==Ubw|_kgv;{IU)P19pJOErLz;PG=m{Z)b1n{l}%2&Y}B+1hXVO zQUe5;ixQx$=lG0FSdG3h>q?5*(z5rAY?G(Wi|zwTxAU$oH^DQY_2GfGS8)I(5RWs; zWGSkB;;7)VAwvegEc5I3uiq*kIh~R`Ju&do0YN!~^ex@;^eNJCQ*3`*a9MU47@-bt z*`|D|K92Jeu9F@R1SE)S>sZIT&-xrc$a{Q~-v*|cAbL2rp35q@AIBdxv_#LYNU<4C|?!kXt2 zjUes;J1{orF0+{Nf$93~K)z+4Uq|ec2ci0=40Y6t>S23DHv+5!nS6a1P{fe94fwFi zv_T$PKA&fOqj5o#r>Gg>@_FVOKdCOsX?_qPt!|z`cZ4G%Lp$_0%iT9vS5f9=l*7|S ziM+&=rYu}7Ts?#k?f{$LA6k#rZRS$On=Q^oK!WV{juP)lhiqQ|Hka2r=0ZLq4OgSI z9Yjw&a&cG*c@d$|(BgEw&r3gHJ}4duNa022@nHMdAp2#$(KEg4Id&nTW3Edj4a4_u zg+&96(ZuMM2@cMQyv2*An~%svm_##s02bQhZzuCDNkz*TzwQ$(SaitX2wd)m%{dHc zBs#Gsaq-)t5K^a#DG6)i70h>C&;lAF%Qp{ih?B zdx@S$PyrJO?IK&WsrvV+caSrz3b1JV zG%=HLpSAbhl|c)rF?^4M$WK7K-`^!&BIk5`7=J%la*FZV^kcyC(hqD3eb!s}d zqGq3J_KXlws6HmQb{$)uMH4B8v?i`Y^otdd>hw;C-JecAB{0TC3m09>7TcYU(F&U= zBcZYOie|U6Oh%pq9z8I4R#8R1w|G@@qt!1vbw+pc$xI6PQhE!f*B<72@#2fTp%1;V zBbKly=AhrxmU~Bv@W}((qVX^tM^qT819!F{s(u%(#R%6!RSoZ>*SgSm`61e^;O+T_ zVhn(YGlFa{{LqLBoZF{wU>MX}G^P|6y=5axwYYZOL`NXyw8trSFoc z=W&{e6IqK2CWLNP4|0(oT&EhR)F*1XDk zNuVzmAQ}VqJl0H`e%_10fyu^ph?>rgqxKrg#l*V4W|LZ~qmDN>wh4VYr~Q76tlnq( zt5F=U>kQX8)Hc)!+%D12bSD(lq9T+C1g;Ms1-G9a^FBd!4i3zNK0wFAu_4m30Ck%?tZ7tY zo;kDo4aZk)j@bMJ)_+^>{8O9Wv2Q2CW!K|AFL*`RQ8EYVnr=EInuw-i3O^vF`=JUR zpK7o8kBiKoUKys&oJ=QZ1f)3#*d?!Rn=n{;a3CP{aBd{#xgI_ysGAI~L)EP6iw;-b zJ$qtIF+jv%*VUTu(A@eZJU1Smhw5l4KyLo3?Ww>G(a|kr3Z9M7Cd1p2I7##vuS6uZ zV>e;ysH55n9X4#@VC|doVT^vnR$sf(;m$>aGmbxlQj{0r6?Rnq?ExC%;)}Cc? zSuuGCVHQZOoSHlioD?wCnTV^W#xt-zp4YlvR4HUM3LG5a8bmRByB?c~FmCrmUfzYX zwyWmYEMcK2)Ta$+xJ7k|Ks<{fR3*P6~)_8JCJe7B_Yii}pF5fy53&d%WYfm;w8J|E_ z2QbAWMBU$UxsVWPIWYj_zZ;G*08VGqbViSJEw-2K5f2IYX^2IHi6^)4^M>#JhSGaR z`Wj(HMv0YP51y0m7Y63MIA77_<%!Tw!?8v9dMYxD$?!XHoCQB_ux>U#uz>E^vJJo| z4?N)-x4S5ef?7ikQ%!~6p%cg`u5@@CQfq4=s`Fa(|V_lEc-7}`z7 z;~briiSQcJ39;A zTRPV55tfonCnoFa_beblFPi#!ShS6Scj z8Z=1Y{@RrvbH4vYV32zT7V}gd2d9;ie%gJmb4SzYu+b~GUh-L1Nto!H{%-A{tR*Z! zuq?+X{H^ERd$Wl~hLR>MDPGpqv|<>D*Nsmr?PhI_NW2Hb#?Z6Yv*l5bsi&$xD|^BX zG*g5oBGPiDaoW3RlO+j~roQ(?3$q-UNrzVG+Wf38G_r#Z%;EEfBNO2OJUyFi1&@@C z1x)SQTZt#$MELr?zR?i~neL!$JHwf$Ui~rJ8|ZkO%|o6&x}}1EkdsyY zu<-CVtR-!31W!4Aghe0qetPx3n*AsNUm-^#5Qs8lr!xqc7u*8YGz^HHB_%3bToa~} zI^!~uB-}g9TePY#%h$LX>Og|#7Q{! z^LVG;Q(){il0b~%8>hC&sYvy@-zfBG@7=z*?PnT;kndG;ptoOfR6TZp4A?FW89o#` zB9AXG_YQ}Vp+RhQ(!>2H<` z-g?Zk#!9N~G72qr5G-aSM;}rt}h1l)3+pVIc zqz0|m1(tuV=wox>;k~iu2`PPm5lzT-m%d<3#mdrJs9y>*~TAnd?&_R-s2SSlDs*sIP_c|C zX{W=lrc-eYZ3n4aZn?h{ts$n@AQA^)rVhq!GBj~M^3yj1zj%CdKmiGFmwRzXe37qh zarD|Hcp&5Y5@n5ATh|$Byt6=W1M?1U6ajRep=TLgW<}ssw1svRG9>uH=|b=l)4gRw zWJ@tDV5hxbw!BT`QNG%92)w$1dQMz?rfBwhvLcb5IdkM~ymHud{PQtp+Wa*QO2qQF zqgSJ?o_@e!9tV9vM{=QHq+kn)Zu!PU>tLbp(_z7x3DA5;f$}s$>L8iTb_~c=-D$^g zflXwi!KK|3;&UBM{IB0*8N;zGgbn=2^N^(HpXJFN^iZYbu7oY=9lnk04`VE!Y(>e0 zt~`O-yZ+Kw(BzGP*662hw!dkA!dLPxgo#CbzNaYNXRGIs@c1D9@cQAT(d~%(&_Fva zs7jYl>n(ib#R`6s!c1moE z9_tGJf*PTUobL_C%im0Svd1QEMhTT~yvFn!_6Y&NTuP_PKiYOh;M9NH98i>R9WMCr z@<|Zt5UNg(vVWPw;`<^yz|l1o0h67&uuHjfFF$2LdRH^0x2GxA6Q(TT9**2CjV&zS z>I{RwaC|Z?VY~4-Vw#=5xd5W!LuLF(tZAK`@)6X_mp0dCwGO%(twCo+VLC%Q{TVWK z8%nUcZK+M^R;WQ~ zla+Xc_@UA#&NWjD#);A81~?f*`p+tS8-r0_5X9;T5)ZzUn|wftz^YotUr1NPr(CT^ ztDt2Cb@1GVYLlY&xLOZV$#r{(!GwZr1iNKZ`tQ}xsBI7FYxV^1M5z8k&wYksPE%S1 ztCAy^yt*o{9PQChKFy`bWwH3`wim1469V3&89|0jt z)e&8XgX_VfRlNg4w02OJrt59@upO+QAX8D-SF$xeuz^ggS8hHOw@S5Djxbcus@+dL zA~7Pt9DX;pl9Ym?P1ih2mXanu4FyZK)y(EtLaPZHev@ONOB(3qJy`QEQS2*TPCsbiNQ2% z(N6}@K%`J2A5p|6upvAW_19}xYl`F_W}&Sb4DvCw zK#^_v(jF{2d8yDdGCX-hZ7uNl=z1F}c-1|W6jDmWUU2)l#nIZ8D@gR-rX@TUM|3ls zZH!bIfLaVw`n%t24LjHN_pcPtd{mq|NWWOquRyM`5sq9}AgTWMlTF*%N3m z#njSpiG!%|0TcM>T_M)vFS&>ov*$r345f{aC?I3jWSpf!gp6^AF6 zYM}dNt2!Sx@MGEy9kT1#kA>^`@t!ABgb`lL&hy4YYeR*neILMtO z^p&o43s1t-!=ZO+l`G!-ouxRYdHW=bTn~Q$20># znoNJ*5)gket>`9*%N9%N_dyztmZ4@BH?2-X2R?q3!{eR0nN;KBY&yG`Xzu?8Wrl=dGQ8pMs%IY6 zmF#;1hkD^v|AhC~e`BH9TDyEaHjyr@;at<3CC5K3$hSbhgTiB!Kf#@}pCXUS6~1Lt zYn%+AZ^=^k{8&#S_$VRvoPuzt34SrfA4QJp4{xv&CdG7;Uk7y{#2%D*SLp};h=Q}X z`%fkIKU}hMMV!}fcAQv%4Sw%X4g|5NXF`p*wRlXOHJCR&68_@^`J%HjzhaP*0;^DBUu z`hN4KTiGWg8K!kAI+~PKX-M|rJ>qKuJ zqy>@w%YIS!82z5m(lOS5^l${%;mSNbu#TdIft2A-+yrMUT)|7grRYS@W2JY@Wa zUnI$6bKepE`FDYEV4?F((Gi)i=Y??f1~YMLB!PbYHIulw{B$p0*usEG8z4Mfe(D9z zzaDhm(M+MOUWk3Eo|fAFV}r?GZS`)Ce)V;5kxOxq{J0+CIQ&<@a?DunI|P#is3U7= z2wBVl$zKDoZ{T|UF986TAOHV_4)A~Kt$1)l$nT0g1#AxnncT#2u@bv%?LXSKkbkbw zGbau55U??W%s2cn7>*}A`ypU+&4dYSY2pR9;JEP_CGBe>y3b(!rN6GD4zZ?E9XkD^^)e z1p(D*V{Q+P&Be@Y>1mXTX2z@zQ!hI+mjf%Vf=~LZ5ty%SQBO~!>_O1?aj%Hb9s1w! zOL6|C(zr3%W-15_PcGhTyRONL3?aGb*swOTMe*8jNv36Ver|LyFhMENZ>pd@Sg#V^ z@JX{B<75nzr|%l&@B#olYtqi^otymc>eeB|n@ih0>*_U}Ha<|L&i*~iJfB^V)hlR% zw0QUE8CaHC=yM&~(+l(A8w6xbZ*SgX37bEXLjGCoKSlzUJKtTj;5n}+M*{~Z>klv+ z7y=y9_Vo7`4H%4giryLJ`Ww_*(prklyU8+_xO8(G8q*h|qEzM)p3EhJoaJ`pS z_ewB15busCrv3QZ+Q#od`rmaAg{~Qp2;g*wMqU zHhZ2PXsUhsV)k=?HN%sjA$XV5FNM7~sl-8@A{(c!#$sraX=P-XsovF;jT{kFFrU_b zUln_G(AFys4WuyXIq7ZFbw`;gV1B(CiSwv?BZo>z>0{kojLhqFMEz46HtW z3TerJ{J?Gngb(T+urVRW(!9 z>DrG|m08>@;CG4JrCey|SjuCD%*Iyjmg<d^F1iBZCC*y^D|k z**a#PRbkq^k-O#2cprGtd@%}S#iUq_;$=|bILn16 z+$@iE%5FHVWQlpuSyxn13&bUBZ{!tItmMmZSYqkM#f3?)2_B6WIxO+IP; zn|i#=@+Y4YQ*_TaqeA!VxV(t)Gy3&vivYDcV?j8q%o`8@1~vwP!8fm?VVK@FZr<0V z-1VyVkpNa)ly!a^VF3wk0dKc`moBgsdfmDarpfLG%5c7Dn;XZ7 zwR;DvrW2TZ=`5-u`(mAn>Typn({;AIU}A=9Tfx-Wr-E|jh<8(bHkE30w!rsjZV!4* zJQW1s!~QiLQgcL^a6xsfGvkxN^Z7WF+%2*6>yz)MiL!Hj=7IrERzppS6wFtSG`zGb zc%vM#`2eiWYW>46aXA|mQF?V8-&+C0gP#YGkm)z_A{|)wJ1t61>K{w0nft3pv*qD$ z#H!!MW$J=}!|}>N=ss~;Rrqe6N!8eq{&)xn$y?X} z(x>#%RPQ%vm_DNZD)^X73f6~KTj$_djc7Gk%N_M5tBlcyF$GriFQcPU=!~+1Qi8YP zjBmbk{F)IBi}E=zJOR}2F&FEqdoqqqrGcgwS})LcjW@itA4QVJW6>+6%@io1%p9t+nHZSJ#?^6~@$8BDxgto$-W``Km6nP1;J}HFGI#enBiK>B#}* zDlEw%?y9h}o=Vp)zut#G^cEWu@};bmw56-7Sc=6!M~|e{W~L{Vy5MygZS8y~7x_AY zdS&Z80-r{WsUWzd&p^`}*~4XDZxh>Jj-A3u$rV);Ai3EH!XIRuEbBGQ&ZKPi$1Hc{ zFjjazBieJ?8$>;dF);IkDzwp?sgP5v1)+zH`L5oaD08pyRc(2!QkgFOIY;t65V0zD zU^+=>&}FITRDU#vmCv=ty8rxvUq}dkf5C-nbV~X_T9wQ3zFuMZKNF=IY4bF{Ia+-w zbSqp6P+G?qr6^k*KOuAMgm#*hoyL2AaL|)pO^zvKnLvB>B&E75RkqYI%$}wWs9EDI zM63a{R0G9=j*C(PEr(z0-+qZNM)0~oiW*gl4Y%M`R#TCzNFxBW5w1wM&}5>zsPLB{ zn?EPr_@Emtm?=!)ZJXBRS6cy&b~hFyil1#C3u;B!J~y)FA@weGK9PcKl~JNX(~C+? z-|a@u)zd9rLoA5ZnzZ&`Oo-I?(RvxY%)~MsFmdr<+no|_s^S5UyXVbNF0bzP{1TzU zjJTj??er&XSCdkkL^B>jcitEeWeR8NWiPp^Lr?=W1gKZo>)Gu;Q(}{ZF$)?B|1_Y? zhFEQLXY(UyCgYI5(RH>@Z%!uI8~om};#}?+{jTb@P1D7mk=4T6s&DZ*o^hp4QhzUr zCsW)lzWAslz%I+dH~OcI&%JcW#yr;Thf?j!eHBv%XoeZeucBWK<&^(?3c-JmRHPSM zXUU}gpyZN6nVgVdnD!hY*||#2)Ok-t?Fl}1(Wbyo{1x}R%LFCY!Z}e=zJ5&9}E(*@Q z)uJ~@vGbOM<$?u#Ip(@0`NLGV>=6dd#DB|Zb^YlkOC~?rHBhLgE&u_V#@>nly;AB^ zr7PZ+*1P_PN&(7^bpceJC&tKvm3tq9>J?KpYrRMc121kepL$b!K~#(gVsuY)eSVy7 z@Xn+wN*RSP=+Olq2paj&H4|$)f6A?V!lAwsTEMf!FlO&glKc zPdz9tO<5h^{XP-`(8P)w17~FU!Dnws6lbej&;#i7*@p4hbv7`z|0!V-ygh8c^YEk-N z9YC>f`1cC9&US9X6&WPCdO|BwY}sM3b-kLJHsqmM5 z-Jb?^Ks~2QkTvnK@m2E0L+Qt$TTW+JY3s1>wMYz;TMAM0%nyz2x*e)kb%oUodMyWz zdq3j`zG0r!9vEqhJsT?v)mOmhO?~RdSzv>am%gF+7_OQ!dF@ zED}&awuQ8@@67-Q9uL;h9sbu1-MvY_)j0$HSzTl*&vm>vfYeM%2-=NpA@%e z3GwrUEmBmI|2<6)F)vqMI57}hH(gm_C+W=i?W*6m?^f}yd6<#8$n5oDs-w=3To39% zK1sqcEQEd+2F?p%S7%oyLL8^|*DPybD-TyopZ)bMC|R>SQgVVPuM15aYs6ZMMdN8* zu;k?8y^yE}z{5M4~m8@W^2vngoDgH+o{nSArA{1>(YW(cG8ShyuobO(FSCZeVbjH^)t-` z;KhkxGb4hWT*H&WSP%;KcWcEIN5mes0r*V@Oz#XB7Y7y$Wl35;$}u8wxK2C+>gdXOUbkejX)IfioRbdxOzB-hHRIj>NPb=7&gD0jnn(7WS ztR3%-=+sL^I{Z@~j5#t7w?K$(L)EZ(ufG8pe73DBx9ZF(!Cl}31-kMW@#Uy7g_h=f z)1oJzAv>TxW~0p};iuSE?a!8OBwGJD@<3!Hk`0-BhzR&^-5f@|w@%(Dr^Iv@Y{OLl zIR+|!p!wej_x1vOVQ!l#OT@Q0K%c)7{;g+zy8~Nsd3iEe?86x$U%BF#4z&lyJY?Do zp&i^@UcBKPTh8_>ssE((qBcSCKv2%RhcV4K1)~Cgaerr6O5e?jaaSrsL5A>zzf1VA z2K$(!XGth*DD_(rdt%48@>CBx(si^_vnYvmJ#<2<9f_p5jRfEPZJT^S3Q9_(=~wP(wHn}lpkz^fGj zippyJZPhQdKGli1GckjaOuDoEh)NjWZ6lu<^-pht@GKEzIPgbZJrz+za}#32Nri{a zVHVl%LuwS7DK=@|{Al6`8%;2~O9sltqyc!rR?u`iR^lgl=`2Og_DidllUpePycla) z*b-^yo)HH9k|STG`STlFH#g4n{wv{(kyDIqz9!CA(aAU*7*F!`m^UN#nWzj>)Egh5 zKO&4`$g{3SKG^~Iah+}I0xesDlX9!_w~#*}@n1b;Z*bMGP3?did5_))p=t2%-VsJj zC-t9dVx(NF@(i(>!(K1>3$u7<&GUAGUt#Dvt=+ARoGm4FnH19NuIypVa#SaY?jwRi zL#+B+Kc`sEYDrDB3$vNpat0w2>rVe#tVK&dJq0Eh_+~a*-!JAaMRZZ&^1b zBU@&q(5z<6A}B_Ha=?mWd@N$^hliy*%6e&|8wNwB~D znBQ%?W7Vu;Wj_kJ@-_kFG<0y$!ODv5G#Apsh??Km^`*TNiWC zK7dmB<$4{GT!D6+vR=^N=K=_N*EQW33_Br6ibFrpM7$Jwiaj`pGDRN8jOiDm*L^9xQY>fH4CxGO-PK*Pmy&IB)h| zVP7u_wlk1iB~-s0Oxt2P6BhFhrM|CFs5y_U2Y2(6rqJUmd+s~A|A2q|++@sJbGZHFOsbtcPIUZ z#RH$~KN-q)^Imp7@Ny!sX=uQkq6#Y#Fg|_!^U~{$rJmzU$%GgAC@zS|$xVFBcNz{npkWWyl!v2+w^SSXU{k}n&ZQcIX3%acJ z%?;^Cd#cVyQU-~AUAp(rr~;nD|8(vv@gHqz-)I%|ALk>6ZL_f+(1#~7v)s6_W0?m2 zQRB~Q0nfjk#rZ1#^WXbtipG*{Z~pr2k6N#*3}dPOt_=UV`wdsKXvEm8zMXtDA>`k7 z-iL5VBg*|-k?La#9YX$pI~t7r|LBNz`NeP>k<22Xcyi0!K*M+K{f&!PSh;kMjVVqhCageN$=+@62~lx^ZrOjrxqOR14J; zYqkCz@?9h5tl#MHNAoj!?^_294};<8)FLR$*O#(_7kajt-A@HfDRs!my{W8zktq zx{1KPE!Gaf%zx*xKu82p?Y9_h<3SFA*kf1JbO z-S9;FM{x1ZMvTi`3^uymcb^zBuPG1Du)2@U-6CH)nNoaC8D2^m;I(+kR-tn}I(NBf znO6tfS><^h<%+EGRlkiKo9cfwWp4C(nG3ho4Zp{;@x-poV#Sy$UB`mr;F!q9a<)5E z1V@p@4z0{PdXUCJJ7;KuFg>qxiR4xr5y?0zE4wJPPN$pwVgA)-^K3)`f7wZU16L87 zw4GJwX`D`WaHg24+H=?-kxA_3x{5ZM1Bwc(O=^E{Cdk#U`}Jo*q&(uy7J>A={JbMF z4A&b?B!gB8@#O|Ei7)_#=K19yzUSIR%4G{l5UFn}G_<-Z<+euzuQI)0{^XsuX9G<_ zwII5$)aP}byE;dVU_937P@-x<%$2SzmS;b83Wr0k(++(=(3Sv9$A|N6&aaH>;^kZp zo5MIHRVD0kA|!7oiXzD-q)D%I2T^vs*}h2l#m+Q1qWK(ztvQ-g$hFH7ADzXW6>Wrd zOsqNA2$oHR7>^|4L!^1}r%&{>Nk)QB0@YQl@zRI@`ZH0)awdKfT^A9aTXv})Zzqo< z2Q|yX(tF0*iWv1SaW)DmCTx|hf9%(a%YyZ1nsk6puR<}KajNIA*Xw)c6h?4+1+@lS z8f;ep9$UMLaE3yRk?NAciGMbcpic9|NtE_;L;dx6Ua5cZu zruL7btgj1?zf-89 zTJyNlCACZW6eiWyxW=|fN)U0I%i<~Q#)@G+Wnf9_G7gVzdze8VheI6O)#iK|qMfU5 z;UU~8qnP9yn$_QKZ04rDZV zy9h|6)Klc~(?_=Ru~u7(Bd)j}m5==OF)3p$hSqH##e*9bbmwfo9MiUX@ucr3pq$>U zD$$rM$?4~|&9tTt!gvIxH5-%}i$ZaH}BFCo8LXpfHFKt}Bi89b{K z7vi+$!y3qSupQx*N!x@m9A36>wGGQ?#|-&a;JXU;4qh8DuqULe|7(*wee%XH)@!ni z<6^KVGANu8TbW*{^Un9u394&47@(N&3JD1x9XYNKHgs8@lC%{ZY?RgftXh}3@8<3c zi(36b(i^_f7P{kz&iS0&jgXUZdt?MsG!l)%Iw{SFUFupV_^rn`yb+b+049c3wL0n7 zlVK_?D+)l|z0CFDl!)q~)Bo}L0~Hb$O62Ns)Oo?`R;bPX!I`D*X6JELG8=B~gU#x9 z%;j9vG=&NX5kj@#$=;gPQH%TXi$}sAMcz@u9>X9rl0t3$!-J>aYb|7v$zOYuyIx!` z224EboGTJy@u;D`@)SCrnVPNLL7d~PlTZZ_uw4a?loZlbj2shxxyvpBdKL>ndoZ)S zuqcI^5DON*BUdjBbv`tQUD1O%8eE=jGz+1byHeuRPE?tAU|!QrU+9wfm=w(^o39#;gHD8z#Jt&rb4RSs& z?H;QqM(}W;CmCCvZm=T?mWOQ0obboSIoR#!Kjrqny5jQNnQE_esrqnz^7I#2=la8O zmTFq+U6Y=uBod?2_Nccrq*$ycskDYr)!~ysd4kVHPpmC{3jE@9heefi#PA=gTa+Jl z6@^Nn(6RlUi`4q(E)m7w)6rP+(SD6P%5~~c3m<4^EO?Z_K+)k9)-Pu^@hm;;&QyOr zc2_wvf_^T`eO>HK!4Eae5FHLM;nl(D9zr%Ol9l8}Y9Kw_Wf{3u$gR{IaY&6_mF$(I zJxPzb(>{BJ?{Vbs~6CGEZ~(;LKVF$EOjB|BsP-|4bUb$en%t%x%L; z8A{!!GAzgI#F?MH*2}yEd0C478Xa9DILq8_Ha8+eG0wQZvCG%M`CE z{^*yCIsM1Axpk4d9pVCE4@yOn_Rh}hQCHvQ(v2=<$1o>{&&cumJnBPyy@M{scE!#( zH%`AKmQGqAS|VR45!jS;pGrtb>~5*6h8tuplTU`Zw_58C&$RFb!|&t%Wb)bljc;ft zL7dwb04e>}DNp_u{pm04lk?7B7Q2Wq$R~FJ0@IAh*Wy1(_dpUNG$=|0Bx8ln$&9gUu1jGD3>h8@MJBNKZ)S46Y=3AKz-t|U@5Ws@%y-c~mxsthf` zuS`rtZL{p&n}%N;E&5J*p!4&{+G?(ZooV+kd4>_QITW?hhp;5|;N$*B@#lG1q3{=V z-Y(BU@XC3W=R~=Wa%EXU13|H!&lXTu{ks|E2fh zcp`5j@@K22?Nw*O(&o1dU#tpqkU$_is<<=EgpN&LAI?mSq{dKEfeMf?=Zd4#_;tt&qJY*=Y&Ad=t70uh!TK;tr zX*pd3_Qz%KWT11PVhM*J5;SLXmQpM}eVUkWU*gVXISRohpTqs!w|{f_f~wP}hqx=k zM1q4(XlutyIP*$N+SR7hjZAG&|5JIB`v6KpeCuP6L0Q?d=Zc5(iQ?p-Yf2sDy4XA4 zZDi~B?%nS4jdJF!Q-VAD&In`Y&}}jfk)@%|pd{X!!F1z+I(>xBThHdKh`miP;_C;e zXUF{Qc}_ijO6{KfvAImxaTfU62nB{g0OL(;N)$}9FCKD)Kp@c2XiG`=^4Oh`yA%wK zX`L}gr{a2x8b*W#Ph)s|DL4Az<+Pced*JFpAcN$`piG)`eMX@3l#f?fBkIAmNvLQV z>I+-%!^7gRH!@GsO@CH!mwI@c=()ZWZ%Za@?^wEwGpfLTfs}YF}JV+Pfj4_OKcCix+sxwidI27ch@2?@b*tkvQ?$>yOwrSAq3u zfUk+VI#$C;8L3pq9rVW-dvoSDX-;YCJ*`c?b%~8hYdgJr5JuD zMBLaKfj%zg4k9xO%cSP<#M$-9940z!?)^Zsh39cUu*PaaeLDVb@=hpxW90Je%k$j$ z<7sy_F~XpXz+Y=2m{SI8+q#Vt+F}y7wr?9K;}LHBLHGIr zvVmU4)?Hx;6Q#{hOTO*?v`Lt_Tg0|LhC>4C<3Z(7vH66wCJ@DA=?N$53H0+8gj@F! z?(meFxy;Kv>B=TSI-G+MIdroNe8pK~z-ro#pHavM44*@~T=2Dx65<#L-rtVa&uAy= zl(-a%CfADJbrjDW9{rfX%JiLeJe-P4)!DDr2=|kSo8-FILt!TmQd%l3uOr*1Bz@mm z>)>`=e_eMw@ztU1LM6PZoj5rWVsSb>2UrpEc~jL5U?6w#``~^8vOo@giR5}qkiZ|l z$zcsd`JP6}{l4+IZYd#Kq0$P#-&Kt(-*V1{?U2O2G1RsGOQ=Ahh~%E)@~tAormn1J zYnN*0hX-T}JY?KH2l!v4y=7D!@3K8iLV(~TxCeI#?ht~zy9IZ58$xgoE`!_P?lQQ$ zySv-q_UHW0x%b@9@4Hs7`7&#D_dNad)UK+%cU{MYV<&VGWqEbKls35Q;Y)EZ2?{2j zzzAMH?KIpoj(@1w;Hf=*!x=-sNlH-X+n3%+cq$+f3=|Im zL6{dOc7F7qIA!Mj;m)dsag%>?^{un4_X@;1%=$bcSK9-xz^g5)2Z_J?OYc+RvBBMP z7}}QL-i}5P*t9r>;9(OpBegccsX)6$74N5>;ms9xqnjf?Yp7Gugvpi=0)03p=i~Uw zXe|*7S_ZYr2uSmJ#lN+RB+x4I4Fd`D@%l6~?!bUIBdn3|Z3`!D@rm-fV}iS9M{}hD zlQXpq{Fh>Up2n*E2=QOxA_QNf*4SdQ{XBNu6XlbecSh)|iza@G*i1~Eimft?`hy&4 zK%s4g{@Sl}%YiT*S&WLg((ZwOiVZi>QgB(xAQr6L-@0><33IZc$uE`0)_b$#xOJBU`HkU*L(ek6MWFOmJF<rE2(YuBGvPJXofZ)Js=`Lw}_B%rZBg}cQYR*9T~u8eQKtfS3tiRT7O>2y17e1g|WL(1T z@i4v{QDn9c?<8O2w9BGqv(R@o5SP}HELAZ1!EOCp@tlQBiCmj|p|7~5$D-z3EO&5C zjMqZF5$Y3)C>m~3N6`+(l#>kg*x5a-YJpttcb+?(xNA%R!ySc)5(V_qSJS#&RJ|uI=&q zSM=lklJ>pniapDx2hVv&kO*PQEPa%n z-Waj3o$2zchFpd`3Bzzi9EiAc_GqeB7W>TiLSRYFwN5Yd5N8^0#jYiCEIpk1jM9+CuZn3wxV3A~ZaET*B;lXxYbJ&%H=t)+};= z)cf3gMeG_#Om_GaOHADDV@be7^)XaX^np0~olAuE^VgEAQfwDP#NdGNEbsQAx}T*B{&cgGJ}j!a z^sHh30dw_T?iteSCL86jp^r(1W^K?Ld!SPbz+mZQeZl_X)Be;oGvx8l1+I^Mz4x=~ zUW9x7OI@mq_MHRu5f@dQ^56g+R2#aj9zdl~D|muq)#JYE3I3*rU;MVnxTkEp-$PoX z?d5a-SV3Hc8&#I0ZmLUjv;i6HS1fa1`u*oRBMTNsm=rZmJ80Q8jb7q$bzwV!;b?it z&MINk+?`u*=q)rtZyKT3y4R~V|tOO441f1LlKX{O)FFnQ)@ zss|A+VAA+@iJ0*HPD#Uo@&kwI$0i~p7NBXw{>%9*iGX&C&|#W9-_S!(uC@LRnf~li zf8+T2_9ZOQt#IgazA5^{HCM))J2HGz;<6$6uJI?JoY=*9W;^SzsXK3gZ~k#>cCoP- z<8H1SsQTU>L2T3(S9u%_=oz#CjjzdeY^5c5L!#X0Oxb83_-I*cr5#iB1zzn#wH8|M zra3xl{T!du+80-XfqM9Z**_Augk#&G-;U`>m?&e7=9-Wne{(q3VizYVj8*M=f8Qg+ zB5Jet(cRVAbB4$PqStyerPVI>AZr}UG^Lm#uS3ZVpc=~OkBLtE7|bS4ha=34>D+y< zk?pKjp3)g_5U0L(b1~m1YPApj*pVg!E%*}k$tt5~F6q9hzF=Taz~V7iqCq`>Z~+0M zK3DH9A}D03C6INOm&LboJW?NINhuC+Pu~|<9E2wVF)V*L#9O6ImeKh8O+U7LZKc-u7yc$RJ=Ix^vq@eb!s+$`YV3%7o;=7QGC z=tlwCD@*q#dj=5q3-r}o8%?ssLXVK2-2>Y|;qaVwD(FSQzI%b$=a+YZvGn#%GZEe1 zPY_`~cAL2LUq6J|<8WKj-uQ1Z^oc5Mi`>m{BsEwPv(K%%Wvwi2Kl--5;H~#!&AZM@ zOzCgqLM~dK9S1m8W|R=es*L8$iSSzf*%1b?T^Z?j zXx{0vHQ>_^hul@@)zYAEG`e@+|B1|A!)4xc?+>6wZEh1dp}@z#i6cUt|3z^ro)sl2AX zTNqs#4@b@P)?MFBM7sCYmT|pqHG1We0&~93x8Ae*HC+sl*1J75uig^kJr)fQoKBnf z<&A5VM;mlulf(0O07o#pumOhj=&xb7Yi{#&=j9=R5q0@!<417qalm{7wH3dz;Huh4 zkL}zD_N(cV{5 zKP`zfW>+sFc#@vB!JZ=YP**J}8m<{D8Gmi-Nwu$ias8o8&%%?N8(TrS%s}gKyIB~; z_3J%|aO&kQhK?nF$Niukb7KrDtV|w}?wGjInwiB)ox|SDGtM5M=}-2$V1Vgov56LC zic%_nq65j`N=mjuB@}U(tl!~ZN|JfbpaBAwi`6qdi>ip4cVcj`kJP_2icx*X>aB|JLrGKeF?lbXx-H*tUTZf+f@ z0*1_z(hHnE*cU929~}IVar9tfB-8}ok$%iy%GUUkL%~`A)>&g}Uxw}^hk*=<5d?r@ z5|tIUKl@Rc{tNRQLn0uAxum?A|KOL~rT(t`Rwspsymcdn!?x)X%~~lf0XI zIe&pB54jR3UhUrD6{yQrCgtzB&Cg>ZU2{SuctPyIlkiZ2)t0~;UU>^*>m*_Ji@@%*?%C?G;>> zF&f3(PYa&Z(SEw+GW=U#Re%%UpjbnnY_!GwP|htQ&G9U$D8`n@@77PNQScS)tzK!b z3-~2ZyF{JOW)5yB^)vWnqUBNb5S?bcqZsu?AvH|O>#kI`F@LfR1q&FSC&wHLijJ&=Y&dx7z9p0w6`mc^%1umpvejDW#tS{44=6hv6AHbq}m&hjr zuJumx6H4Dz0KX3r1+(QR1FvwR>+$=2aslGJp9*L;sTETc#)q4q`!I%FPNc=hZ%SLO zJsLP244>p;^-!{ldu@%+SNn);I*L)V)ZaK7v0rs*&;PUauxxmV-t(g1qMdz9?IWG+ z`M2eD9+&&O$B;}xVkw}Mt-9@)r#da0wGh7@3`;}J7O~BJF{qC$7gqzrR&RSIi{Iv@ z%}PTsTSW>&t!~hnIYMdD7696i39#}|1_YJvtpyea?X4jFC7v;1tJAIxEAox@U8V2+8$Tvs(0KuZ~)`WlDmd$Y1M(Tkydx&Xu-hgY5 zxw4gT7bAI?{t1KDmBle*IwFR{6&du8MT-Or+FYguQ5_sMMY-IH#mqt7it~>o*a7E; z@`^(_WQCIGVOQ2r)1oK@67-gvDa7cZHy7ESmTu-&Z8Gq?gc{=o;r06+3ND}H*6NWs zE9{FO&@!Wr{l*#i)DI1}AXjgfOBL{`7xF^-*~I8n{1OR<`oB2$Rt!JqdMzPxBBl(C zUV@Y;PUDif@iPl?yRzKFlt1U1jc=8KZ!TP*6zng`<$x1m2k(<)Ou1WXg@_T#vze~D zAzxg(WT9a0@Kz5dCsef!r1vGGtF{kpT(YU}U2!`%mg472Jg>F5YBOdhfkwptB#FB~FNKwCRczdlJF$TC2yG z6W(IvVa&8EvWMMprV|2IR!J(GVMYpynCw5%A0I7k%+(+0y5u$Lr=<4}Vnk%pEpz)t zR?7J?*hy6gil&PY&z?B!Yt6j{(fe$*YxHoi6ghbg4FM{_Vszv(!m=sd17O|;jFR3jwXSMAW=xcOInvoAh zd&H*4XGlb+ZZ09P${5qm#<;9e=3y1WqeG-mmK~vBMnbJ8=Hnjj@NJVV5qEN2OPish z{e`yUp1KWH{oq6!t?jQ{9argr1|?FjG0+5qzJJH$G(|-9tVZFpuI+^T9~-VFJ4Ozb z>sgy~8b3-}x!}+a%KYhVcvLtFQ=aah6POmt2$Pi^C?J7@t&5LpeJr!zK@RSN z&H_)joUUmjIiIfebd6Xrd5KCedt)YU87f?w=2)m4_!RLM{I@3l&dG+ui`vC*9r$Oi znilh{tm-OGj3HDk!MjM0waMx?KfDf-4&#@kj-Hjl4V=!yV|O@v^J>$#yg=hvI=sCk zZaXKAc_sftHEI(BP`<-?QXX2>k_i9w^M$^E$kNE>1a2>BG5F#i9=zjTfhi*qrOS^j z`UBQgU#}k`TX_%84iA0*hYKL2_w34FH4o2;DJrBGw%WLCOwP*M&q2^=VR|O9rX`^m zhFpNL8oAChnv!C?8hXkMWQd9+lU-_J!{BeWl(d#QN{&ae zOSta!ZudzztKTKg=44`a0!qc)skx(c*`TlhNMeKe?P2S7>{LOA!YGwR;K!=sViTWTE0 zBkvQ;dfJHHd28=@)m(PG;YGgC`DQD#0ZYyPOIL9nkjwrTQTNcBwjDMPB*>Sf^*)*g zmjBV$0HmW`n;Tej6DEsI1}|ttdcMJUyNi_}O9*DrR#vY7scEo2)5~Xazt3Z5G;GBY z-O&t(h&g1N1Y<3n%IbY|byH{fCMd6ME;LHgVh*&Et&%RWymV<871_#hXuS#U9l3*| zKJb6MxXcSKGCdb?RF)xl+LT?>OfY7z!U#j(eK#{2XrR2fDQ$WNJ2JG~o$ms{6e$BB zoG^4bxp_@3#Y%j^J(Ir*ZVEM z=Cs`Wd({-@FqW-kK9ih@J`U*~DBek?0BJVxOu@1KS|TlgAXF0hSAFyI1{PJFWAK9k0tZ|+ zs|j;xL%hd;-6q;MwaRyo*oXVY6h86bJOB0SyBfI_B{In$mzI*jeJG_&M~)~s+gt=G zgOmPV;il5!4pgN!xpd>x-y#ai+pC-HD`o3`hxmvO6k!j<5#vRY7 zceL7VXQT-PW5Sk}*3Udg_oE$3&2uZ{K{atWdLV5(J*`yJSP(B2ry&-TZ*8yTvlvuw zHl8q5G{`P%bg#@y>vq1;{wY+2g})FF+x!f;ESLVSnnx1u9IpRipT0s6?9vVQOiVOKUNS1o)^Lp ztW?KAfG7?sEKvkg&TXI4-@X6brUQV#X=q{#XMl_Fym0ai-}qPMuuUN|rP|Q`u3wbd zfDM{a?3(q|yOxULyf$2>Q*L%9Zw&Gg9}hm7FW1-Ka4Xe>^0fx0Kb6DKhZ&JAy$_hX z3f87B!_ydhE{}CFCdThFDm4w}n6Z=R^*s%xrr}R0R;zAuRX|*5H)LNjK&tru^{L+x zCDD8b4n|!adzo(7J27{%$hEwL;P#Yn#D)WWc?SYu! zggKpiB-{8jycX7n*fJZQ)9()ssbQ_)(2CHb6dMwa*;Dpp{K(b$s|c^3d&=fQ0Dzy) zvRoTIhW9Sk`xl&7X_pgBL;cGEZWjN&+dlvMzJ2FjmR3EK(gvX2aS-mpwRS1r5S#{K z6w?IiuJg$^lt(k)4hNPl5{mx3qL`Xe;`ZGmXAZ8fx|+Ac6?FW5y2Rg6xacL>23_P2 zw&dkmfOxRSJ}wIvM_>{BMys9bvIgF)A+ApUSA*0qT;Co zn!5%U^`1n?f;ntSdiOM_-5bt+pxeB8vj?ZM3K&}aaiw*S{DT-Ep26Tl@`ofq&gR8> z%~)1a`r)9YEpL$kPMS6a{tH0^Q0KU4sUBIilo95gCNWndc($aPRk0kVCZHZ&#P}P_ zK((xYQ$}DcF*gw%>9FWM3G7@#W@IMB1O|RBZ4*%(T;xpW1cz5$<}l`FRg6|e}_tc zq0@9(ur;CC_^}P1z3RTZ+&>f6cqz}l&U1QWRHuBdc1&9PccEkm=P-vc08J|j z8HeA3O*`0o@I%Y0zN+KciOFDX8+}SaS&eJIZS|uk5}=k_(7O?TSXL<#o*s|?cjK%4 z#l4S>g;EKhz!=X}&2*Fd5zd!j*J^_sJPy!$|M+pgE@8N0=j!zK&<~k2+}k zdFhANC*IhM%IJie_Fs=ntel?}7!EHOi35OtD0^6)EKc2nT5*Oq)IQ+Eb%jVNT)3RZNB+hK7*VT75kAN{1={k6kuJE@@*;fb&$mzre@$!zanl)cp0gM!)vaJ|d@(6Ws&X z=LjfzJ)wq=C%!Bce%QV7sv5ggK``8BHtc{WI$Dp?S~DFJw>Cb!;!hi+J8YIN{%v%< zzLDN;?W>@mBaFjG9x%Ka%#~F{m*<2^nV0ArTA|$AjVN!EY|7I=b+?w+_rzqcFD%&T zoJQC_ZhVz?I%lxb-cj~qpJCk^D+$NWP&I3vgWV<;eX~AYB<__u_ql7h>i4i&l!JZ0 zX?*}_>L`u@V&R=G8SyF{1nYC4`~nBAzxV6#<_=?Drhmsb>GIgH&Xs}z{%7T_|1Lkr zGc;W5zBkCvw8oG#jBb+#`5vc!8akahD>%|Qt9a}%Wa!^gE2C<|Ar)VeJ|)SSyiFBh z<q*xQMGO6;$$ZAnyq6u4aE~mnntT|DR|+RFRgb6mKhpocB@i~ zquY?N%#_M&v+$qD!ooI#>`{@26GQ%)NxF;($|FTII<%$p4-?fcge9Er!9fOWPMQNp zUCt}cF;3VOv&YX%6IHJ^0P^nv-?sv7=?ShIMi=4>o5)Xfx@yzsdeu!|)fA;KzOu5N zNLEN8CZ}gbVyjlao7bF&k7Ai1z{0_)7ztgnMz80ULhD~|?X0S;J|Y$^eia7!j+bY!4ToE;USa-2>58_q1I*ZM{j+gQq(OA5x2?=U3 zd+p7;l$o6S8a^e3jMd;WMIVN{N!I6*JKkMAES!ftbHd)xM+s942eWs-1U+SK=-e>} z)j!<%i-0`kS*`Y113VKp$m4N6k06J_gu~wY>_+tj-NO2Q0;p{5XFHB=yZ?zzNHOy7 zg%L%1m`tp3X1AMjZ~kKZx;9AfCy`!-H26}zFVR4)gGUIa=k;RjL+g4wir(Ybat&sM zaw*Z{P)X+xkT-YQaZU!e{E}w=FjmzkKu0TTv(D*~-p?>N!nM>cI))*|DcMgj>#lay z=9B$=L`UjdKNKdt6!OFD4t-diiaT?sv6Ycwo$QJ~LFy9Hnyp3g3dPHB~P)(V?J?)?}Esyh~(h~yA5B*&1m!DxzAE1zC zA1B%eBR}r6K>mYN#a2vx|Ap_LXo%{X-sSN1cEM6(kV?iliNE-fp))OisuTYbN9*)m)clI=~@!b z>^smzp0L3N-G3$KDl~eR%AVk(Wj7#!!^YT!2Lx%C7ndM!d(|U0^Pj^gx`&J9jNo~T z#X>}L(I*~H*8nRs-zjB~tn{;W7bbt57Dw+sP-D!>6Pxb+Uuj|Kb>UA#kAk1=Ho#Q* z&E@%OIJ0!wBVb{g#u%6I0;%+;#I+pXcV}u;cEpaq?P4vE8=75n)?4v8m-}>LfYxAN z+a$T(K*zy`(62h!+C%0Ls^FV!05>5Fr|)8-z#{_W!JPS~nPKNif4=f&f_W@&FRS@p zp~#gw{meHWL~JWusmw84JNz21Q+&6%n%QzS<5x$o-Q>sc6!q2ZiXe&Q`a4}zqo*f2 znoa@_GH^0mT=2|J|7=WG{|(j$)AP<|ApXMNm9mXRVIK@&qn@PN``_&XOWox0z(Kql zfVQ>1wd0;XBlg+BZcx8_ppU7FcD(uCw7=v(N|_ZeECx+2h~2}{w||;B|Nfw^`Tr%Q zd0S$WrqzT4{F(``SxC@aiAxT7+C?UMG30z$qWw1!<)7>HxZu{p0NncU;meggJzgjhwwG)6G*J&g zwwx&x*0>{Sed_#tMDgzQ%5KJNg-tIzVtOXBW+t=HKPRo~zH_SRd^4BU_ebOPkuGII zJb0?EfJp!okM%yZ+?{Y~pdRC<@224gJ8<$WxvlywY*DAU;{S-L9Kz3jP#wN8QEqYC zZ6({O3!Gs_m72&g;k_=x=M)2uLshwEu8B1>uE0C`oKvYzf+73 z4lGH}k{lx5M;v=paFAJ!m3UV&j?zXe>)>BL@5~=;noSlpeM?JW8Y4d+ENcC_hg7Ju z#+DEx*mSWKp;+q*E5khEvGeLG8`y6-DtJ@;Wn z;)G%kMz=D1XUhAK8}lkQ?fSRgJB!m=xj|@y3*;{>lshnn9c0rFWiVn=W<9>`Xt`Mn z?>5gk>B_H!ew6W>ujn7Ym6XLssoI$rT*Qm%=_P>vaMN-L8Ti0EYuLGD|5X{$9>KCR&Q4Gm zj`*2s>RYx4`s%0rUx$ zOGn2n3U8N^BgEcy3Hq<_Sh8uNhSB|pmbkVbxn{^~1xEN&e>0ad!a9a<#fBKpeR1e| zcOZt|+rc4qI+|!tB4m!dAq0`aO2qGAMJMXp zUV#N?JfaKESP$G232^e8<~?+AGd4bM?i*I+jbZx|lLafWG9Q-fR~SB}JzOfL!JqX? z`&)k5u}{U+mo<8v;u&!-7O)ZX6^-;QxLy*hbALO{P_cLJ3{*H;ir+=Myf!ZAXWvS3 z=(f;cO!p558!WN833#-lVq!v(^}jAkKQ*iwYE{N02WEZ;EWueTrj224NQD3Re~lalP>mhzP3dby?<|Q zFH4}iGPo!hK1f%M``z`U9b5{x?+JN9^|j^y(K4zhq%$5_a^Nm*Y#th*gE5tKR_)1> zPIPQWBXQGKFD@V*-P19w$5=I^W>C4!N&OtsE(L(?RAW(bhb5$)UdIg)7oI@ekSM-z z+yuyh`Pi(v1oY@eMwmYx(OJ|1^TyVhUvP_)VpnNn-9{DFlG5~ec*mp9;rd9-wnJ!Y z6}xo7H!AG7xHuO&_1+KS;?x67jRtM}j0VCutke-aoonteGaz};k#S$Y( z5;c$b3LoEvJ@W#CGSm5Hv~OCI?+#gQ*yeg5_i8u`qQJ*yzYnKZ%Ym3a(kECX-qmIfu26F(~JXO6zt39(n->F7F!;^rxX)m zyK(9e{5anT3kJd2qWn#F3?&$snkhRA2PFxz1KD%O%H%4^{~M`ZSxrErsap}icV9PC zEZ)-G)HvD1t)O7KzeQyXDQO3S$xVad!Gb4J9?Q)4T%~HVU4Z zMiO*O3>)(v(cRc$q#`qWl(T!{mJaCDvXv$mzi*sw`&~LSie>enckAbK9(0=50&MGk zKYQCdJ2o4%={{g{ReK=v=AujT07n*g5OH3Pe+i=0jmKli|CA$*Igi-6v&!GuZ9z{f z_~`)!qwkxU^Gnmgsay73Hp_QYQNiB9Npx_Otl{G4#FGN|LNDq4oT301+RX+GV`^vj z9v|&}&`sV;s@=mux^eT(iQM_^%|*j$3e$gozf= zV4P?thpY~R0RuBi!1@14Y+}QCeysQ(u?fDltpj8Y>~2zEUj!8v`_qY*rbzD7r$z&N zFraPJwS>m{e#>VM6g<@~Znks_-*bG=)LJF<)PesU$jr-OywEQ{F~d@)3Tbr56iv<2 zuzlxF3Wk%G9MMsjbMkOl-l(^>@ z3%2UFQNF8`%QCz;MD^@pCg948eo4^}4`N5+ES*?a5=?p=MNtAw^k|C(emsM2(dT4}dUVta{nN zg-m%Wa}))hIcG`cq>9Q4(I4d$wH)qr3==Mqql7t!7U=21qvc0i3i{0#%Mm=E%NXImDTpWDT z_ncT@ZGtGioK`>zf}CCkS6cM;KoQ#*$oN;ia=~L=o|!r0@!p7u4a8$gY24wY0}rg* zm^re{gCZ71{}N>qJpMN}bz~FM>7IEdGlTy~m(WZlSe@IAB}&xcS&0^V`nsvojh*f` zeZ$(42V0)Pk)t11ka#q!=)d47XQsxcT)miEA%DKaTkX{j>#Zp<1qdK*>-fSXh<&Bx z@+rZorC#{)2+12PIOqg6+@XYPeYTvgk=FjRHLh8HfnY=+z4t8a*c{qq7h!B`&;&*h z7I^vF`PRSYBQEMt_krN`lrig%RNXJ8Z*3t{pFZ`jc`;SpEqFy&_1i}Dtr>AvsbkQG zU}A<+sHtGI{6;uAyMwdQOf(UC`5O0>w$07L%gXDtpMJO2#Ol;wya)Kz<|xNSNl4N) z7`PLiufelKx{4K17OtAOZ7PMJlB4NAJ)+H=3J5%Ab`Yznm>5ojdz$k_;vvNM-mkTn zporD@JHt?(m_Jepp6n&UddK~Fv|`hKG~~Ot>_Kzp0)+Mhbd6Hu+^M`eYA#X<<|iSv z|2psm^YLaCn-doxWvGkxM;3=nLj%q|y7 zFQQ}nzm=T%{-2Y4TD4xR=RbX0UqDaOoCG!c+7)0{?_NZ5is<=B6w&50WB8=~`S$t0 z$3?|0)8WRazlMhT>1ww}(=h+{WJ321k5}D-2!Fmki&N*gO%69ODvwbV`a)32sl3%} zP99J9b05Xm=_$^mqd}G(pHaXME#lgWU%hJNS9c3mm}Cic3$QO`^ZE!cj}H+e>J zm}Ky_dX4rt4S$I6z7zF1bA9GrZq=V!SA#220+8-a;zvkfeG!HatG>4c>(Pm#ecA-Z zW-ck;qOnPRAh$P^qD$0#9(WXpIv^1;)nOCfr-TY}ttGGo3EU710emq}@ze5e1~F^d z-;!q1B-N7_^LWR_(hUq4prIf`GX@vm>KFh$rOBDZ5EwVhXy$zNHz(@zW%} z^5d2ZXih|W63y6WSf<{-g+_mhiZ1GQ-=;_-P?zi%vpd_~%uIpH!?5Fy?w%F+C}sGH zBMK6>rPrNFol@%Ph>v9nQPG!4e{^`oWAW~vcbAeu1DC(a>pjIfW}bsf$CsmgO@MdO zkIP5DRHgLJaelvfa=tDs;+ObJVLmjVnOw3T&ds5J61ty{i)}Z@y@I}oksyQjr0k{9 z2d^}wQ14#(ZtiA(d=R|R&FLZk%KR*Z@`S-x}!T!%jaGTUEh++7SXp@Fc!?Diw9%JfE->q0o9$~11jnGl%}e9`Wk zX6Z;ra80_twqm6(R^r5XNb6$^2}1La zX^brY!v(-#>b^Jm#mbjXP~}=836%7;rz#Ozgxa#JI_}Syxh)S#NXI9NEU-VRW3hS8 zJM^k&Da?Sw{HS~@zYL~XcerU7bS@_TUE@!7D^P|5e&HbY%R6?0ueIt93qD_1U5-(j zyGeG@EjJhe%CGRU1!qKlw6AsQC~&k{idq*Fv6iAEt$R)+Fc}T0pSif}T&!V+=2-d0 z=z^I-9U8gP+f$Bg@8;MuG#RY5YFd4+_pSu5YQM|>b0;F#uWwx4&S0V%ZGs2GoLz!5 z2PPsaAJb@ooiZIF$*H!C0mZM^^0(luXOjR_`3f~^IK#Wwid!2WVtBm@rocf|nAW-u zc3gicvY8a~dVbsF=I0@QNOle^noTRbyFQH%hoWGrckT!8S`t}WLTI-et87TiN<0)g z%fAZP6jWZ%0}dTh-NO|1UL$x*uBNOEsf|k9S)Yxs*k+Bc4bGuThgGxUj|Az6VTqJh zGgTJjRn@8zROt&OJn?!)7+vhE+`5W9IRQL3q`NJueUHlEU()KFtyDodJX0G_{{9X( zz@Ecs^XN@_YII^JcQv!8I0~~+0Qj><5zo~JNu{Y`Ps+nqYs}$ z*`&V*DDxV!Fw0CpvnyX=cQMWdd@=x*&$~3IndDIp&><)2H z7~U8uh5rP(OFTRch6X~cF@DFjq2I2_rZ}>2m@phxk3e6U|4Bm1xA+Z*X`SYPV&1)> zitUlmOp?0AO@iIODLtVkSUBsJx~(t@QjWN~{k4%j1EqZB=p}zbi?aLUC@(Mk8Es=Y zB#xNXM?8vJAHCiiM;4l|s?I6j@Ko`cs7zw~Vfg0)M-`%rl^Uqp>n6gXqV6n3Jj+O( zqc=}%0WJ#puB%`gD+44GyRIqL9pOAE;NRo`q7fUQ&zD~2-e>oa?+ zAn5#Yd4=dB_zOW$@|>lo{6%XvBqU5q9BM|~6pn71($+^KR6pwujH16!wBc=!dC%DJ z#@jWuI()RT@-(tK4#?HF+S8R-zqB5262Rx?XkcB7Vx-xxy=_*XZ_Rf137yU5RUBP~ zp=*(HXD1qXj+0m3QcYSZ(nf)j-M%oHrj*QPXDU$wo492T-ODunbp;QeS7cS`vQq}- z%RO{#lIW>qx-i&eSP$#DJg@4^=NCIJp-fg1@(ebQmfY|uU}KN9?j<;!Hzl-$LP@RZ zFOP(%%{tUNb#+#-3v=k~`(TAz4F@l6GqIcYRT}JLEO8b}Qg905MXn5%smEC3%|_vU z05`g`?>$BOUXk1&I#v3l9_`Aw*xMcf286t*GgjNui@0c$8;_leY;`{zuX)8TuP)BU zq?!-2FP1UoXFM1@i3Qc!{J?ZW^=a|91-2e`=!XMFUiWjT5*sBQP_A z{JKwxMbdEzsmw}%)Nl=L_*p&Bm0=}Z&)=4ba6Tm{gAylrx=a2lh1F?`E!={+a6FkW zC8(27qqC)k`Y3ho6FfNE9vq&&L^0Xe5KJ>))YcRRi;VR+weWG~=01R?(uySD*uI4*kmLfj-K7 zlqa$AT4YI;=f-Hu?Mz|=c{I>RkY%-|3IMgi?km5&5SB z${0u0e}&ED&};X+tjovqrY{6l81-Ts>kZH=w4O(@<2pZ$I&UsP;7eO_n^H)98v_Lh zO&z;$z2=DCM@2w~9~ipE8m!Bb9F)aA-Exaz|NNjY0!r<+{r(04kmdJ3BikuEoaKKBl-sC1s8p(Q2_ zo=SE?HHpKP*KcO>Z(^K_Sbg+7Ni;-k=^*Ii+fg=#>n7mI^r4IO=zN@P@So35MxPV= zsaQScuXnaz4|&2pQH*&}O@<^8dGK!LFbn%cvKB*N=fz#X5;H*=0_OeEO*?h%bH zTASJ6*x;wUO=UsHogg7FTquG9% zBb;En{7m^O5b9T*EG*d-<*3NH(|eJgSR!W)g24X5x->qov~^$0VBw>C08g3|{3dXb z@p$l7x&NWa6o9cf(^gcQ=+=dd<#yUxy)PiM;vIiY!kfIz6a2?xz&qRULUGa;QmRnnah7&smM%A2W*8u=kzKI!6f1$XlL!cPcT z?N0d{=}omdSXqCX{Mtw}j0*du-VP^GoQicjONt2K6q4zNJMBA4^k+Qnm-cw8H9prL z*=Uy8zvfIp`k|l4EJw%KwSz7^U*6$(g(4+J!D|PK3axcSpeCR$yotQaSG!*obe_W7 zL44e`7jJJh7Jn&QB{N$4etjKukxkoaTFXS>8T`K5vAH}B_IPGEjpo(AL^Wax z>)F(Mq9+zSIf#tDXZsT`Gk9{LD`ouMmPws6GX!ybG;zuj*BBi=T*RISM&^cLMWF^u zR<~cbwUF@FKkXZ0#Y4{ID)2m-Txnv-zn$&Ssgx;ObyU zE{l-Qrqi@v46PE3&WnkoFvZHZFVTi;h!5w(Ag;3I4#2A4OV&t^Js0J8qO8e%D!p_r zw3L?&|GB_vC(W=e(Pc;JM^6kRi}+WavbSU46YKP!9c8=B!SgDccg98YsIjB6Sr{-? zVWdi6+tfMxV$kKJHAxHbRptni-5!j~Vx0U`m!lWDoYrzBpxliX+gJ^N!6t;Q{-yEW zXHNa4Hx*g0OgRk&b zM+*u)BVYR;yHn;CX|G$Gr#QQ2W-wTl(aF`5Sns?=`{WDd6(h^g2#2H?>W%lSLq+om z`p+q+mn)D0!xttReXR)eb$5r1Zl;ocX_b8dUkVYlrmb`rdAo(RfeBevQh^F9Wys3G>ier1x&eTZU^D+85o1J~DpGcV&u0cGe79K^4B;b$VqrKr z8H3cSlgK4MO*OQkOX&k7~I|6-ED9Q?(S}3aEIU!f)5(pb#Qlw z%X{wq&Udb@HUG@&)m`0HQ@d++{r2-5v{mf$vQ043MWUu8TSC@j(4eV5^v+uwDpOLW z4KYaH6OY*#JWp9gW&Ta4E~2ZUJQhvG6D~>KMkn1fG%*r_fkm8bhht)4%NNK=`Z2{t zByfI!D36J}1vL~_tQSfGmCK?&dLPvLhwzekIsPzRO0eLvrOxJ)HnvmxnEBgxP@PFNph=!HA^zt6X@6Ud^Kv{aF+IR#G#m$X_4f0}^^n?K z7sl0ZkD5*$MT9%e;U}Bz#c>-jO4CmI%~eC5JfdVQ9AMa(gMunSB&}_xmHx6ex6`wl z)I6tlyT`M6S~(tEKPUMi!R`&pt6-9i2zI`)`Zko!%0YR$E4-0(HiBFO$st`U2q)*KA~}Z-UT)*&ybm-n7qYk z)nCW0gcZ^^T*q;QgJq+c*B*IwH5YW|<~PO{D*`yQ$I<0q1puiW6(oP`Nr9lZD!5>- zA|Fr2=J=={uRqK{!!oje!n7102lvf+zfKBa51r5DS)GDz2rF$cjFL>pA*KP&P!WM7 z)cuk5&14*z*BlgMH%GI7^(Nxa#4PY_G_D-n48AR zE*2KUW6>LlZR($se%tN7CTRD)3X?lon&MG|=7uTHl8{fKN^#vXgkH|(v%!?{R7jbH z+rlL_fK1!$x3Sw>9OKqpLmjqf`A*jSes}C5ekkjtsgV8ib~j8t#y0(q%GVIpw@MFc zyVd04q}(Jxk@U~;?@WDvM1*u~2&E>QaNqSwf3xdVm>tOeR@Rn2mkvRbidpsiL5Q4< zzbiS;Q0sN*E2rBv+VP0qa!Z2NGpptLmWQ7tn~bfS9wB7e42y;Zd_(NQ9^NNDSm$H| zp^-@v11N8g$dJ_8KuA*-pk*RybfFNp6PE zIDlxFZVKa1(Pj7u$2i9!y>P^&4JyJR3xg6!!}KAlYDr=ts-n0^V7Qc^ryI1S7xxHp zdn{<_a-1jJqvM$j?X}hJ)>!v;G^oPeQVM(=g~H-&3^?tL z56db!jPG4)?Bny<`l?R_!HWNs!!OFg6^6iyvC-F+v7nzk z9AQbV6Jw%m+R{`|t@urbDyPTn1jvI4BzfrNb>Qpa1B_A^_Mjl46ywcJkL9M|SRW;& zA22Oa&A*~r_eWqk{h5qn!dZR%{GDvKig5FxoYddNY>PTy&g{(PV%cIe7pqOl^M+8N zqNGv7jdcvFbtQ_m2znIR&jm4e~q<-}Wqu;13h^k=s@)jBZIta^<3Wm%uJrEB*H z+u6G^IRKoS|&5+m_dL z3`DYJNdc+!3W%gu(qc3Y%` zHErbapWNiXOMMAu!QI+hC+-jDv183yA6we#&Wg1T+`VTkSkBmpM-LM%u9LqpJydd< zM!QG)!l{{qP>RL7$Q1FyRFu|iN()oUA%exwOmv>4o*KI4LE1r>gm_M>;@j;-231DA zpuNneKgX4@6j1sN7=E%Wl7iWKf>P-*KTk*_86^PYOYTGz+Q%1e_G!&QayPaQ4dI%T zr7<#XipetCRevpg9)3&*7>Q2Z4wo1RqKu4EX_A1VJ+Tn7n%%q8k`9@AB(G6YkwI)cA;SsH*N{~q?iM6Ov zChfIcnN2N=X_WlJC%tE!I|GI10tEEsr9}%;9rf!Mn$U60{uUg5m2%k=8@8i+BNX|x zJyD=7kP0m-Y|1y=mudP`l6Z;upR%bW$!7C{q=355N7^xOb{OkIDs6203~$TM%ePWVbvT5*(Crr zL`Ioep%XeWP0Y2$9>NDgHnmCvPgYhi_p9C1QVM3|--<>gjd;aXyz`ANyKsbH(8o6H z?7twZSTHBlF~^x>_GCy-OsO9}NJ`x^W$*$f+`x*un5{%;WL08RXha@@je@?^xNT(@ zoAbtOf~v8XOBpjVcC{&}fhqN6ZFB(C+7gvA;zXNYa1#8)(_`qQB{|FhNv99qmVnYl zPgS`Qd19b{j{o8W$Tp+P&sUWIo>2$Hj~?T*g;Z@iX>t{=1I5 zZC{^*^wR_G=vhb0S30G{bg!GKtJu*Bt%cZ(@(;(l_5SU&<|`aOv>Jw=uS^ z^orsw-{dyK-OXVoJx95dr43baviesZc8k7^EuYDw2Y3*xi9vOQ*FR=c=7}u9L%f`=~5m zvd+rKRr*;UMMUmK8`S4aOe-kMn}=7_agrz%d7t&q3)1yO=cL|~i05DSbtNUJnNGC% zrJDEmO?NKI^sE?AkKA-=i|tSq7YQFQ{hojT^CYJ&?VM^>ey+tqnAnSA zMXyq--91kDt>*7`>fPe(4Y(kgDcpYQ6lGTDo?5-= zqMkA4)iHp_?nQ+)&hSt>{noJih{u^Awd};gn}$_h5~A^@)!10Eg=OiBgx`00q54q& z334m%enCG~*h!VtOPB`v$>>HNU7lPEt1CM;Oubv1mi@Gf`cdZN=I^jU3p^_h|*A|wYrDOGEry%Kma{71VrVsLs|R>-SNy8l%d8XqtAXX6_&D_vY z_IQ=Mzu;Cctcz%IiCDf404IJ{ob7^5R6jLQ95t`db7mesM^_z!EEy$#mMb|BD_rkO zrV+t*yDKn#c`c?wo7sgiAv?dMgCtM2aXI~Zr}~Waoo3HJb_OKmn!Op|kL$bbGE~4l zsEtysCVYQ=yX~UzGFJVlG=Q#pc6RfOB5%ishAJEGS0^`9a>S?AT?tD}=**9@k2!jY@fMs)Bn}&UE7OjNX`Nupo;R zJY#Wmo%UVa?vo1%%Hdm2Rc__SC)amVGiBA|89lRj$G57BS!!FO*abNXHrgrl1AO<< z;Es=}zD_Z@?T{nvEt3yf>dp4lmT@E?7tgyM0k+FMDr;)?CF4u?TgE+G35)K;rUK#JHsT= zWlKnCYp?!;N%pqYBYzXx7%j(fKGX|+zso&0lUqr2#gSJ=ktLSvL3eh70T|BQ3KXnkGK zD{lxK#mnY>j{i&rI(#G;c4fSH+-;taB{*R$_)?%I~kE*A+n;Z(j68?0{%ZzC*e;_AhetsYeOf+w5{ zG$Su`?mcLcT!GW<#e@!f}hE`0@_~TL=?Hee3fTt01!l;b!ap)KERS%WjJQ4_!YzI zL}ZgYTqkWG2b)VoWN@%a)9h*$E-Y29Q7y!GfXm-kU5|d5Zzjw;O&lnl>=G=C?CP{L zYpmDH3w@~koFqy|MVqYfdlYsl)NA3>1%OLxRad*GpksVm?`haqn?DnLsWR0-7;m6g z$mK8Dmd@(PlUk^Ec65V?6Qw<#`;cKwpN>^8MBd&CkaBlnmDe+S@CdgdTX_iV%M=Q8 z$Lbj_$rRy#3Dd0ohNtH?7SUh<>&cce}_4Phtnbat#Ncs18rPFeNsCYW2Pd(xbvwdD@W{z@%*@3$#N+f8uOO}B1?>? zCn?O%7mk9rw|5Bw)a@;0nsA+Izoj-qr!L$tV0V%2n$QkT+x8e8C6JdCk$gJV9a+0D zmqO5H-zH@u&x=Qoy%{wc_29vuk?gE3M7FFAxvIz=1jiR@`s~n;8xdhTdVlxR89yEk zW>CJxDOnAU!4Xg6gsKPF0k^g<+p_fdLWqSSlg~U17jZr(BOtVi7TJW$b{mDi=;OGL znm%QeFP-EPaf;mo*>|u6h(o8*_En2K`uX&uwmhVv(@X8AmlizeD*MV+qw=(tslP8) z12y~}F%5pGXW}HGWRB+ri-$+WY@Amzx{hU!SjnDOkP({^`?bXP90xKeAeg6I-o$8x0B=fvAYt3GV?EmfF#RwrPPc9V#moV=_J%M4FT6U*z16=vqnPWn z<3qk>nkJkanLLGI2l?b@qQ9E84Eg>;`M`^AMHysD*+(Z%>KqpyL5_fJ|1+ga6AGI4CD064WT#A<~DZ+j`$*kRwm6Yg$Pw-~q- z$qH7KOtw!+F7W75!{TK8@uT(o{d2fyQ#sZ!dHps++6fDK__c9zHF7vlG~kZE^<+sy%C0jsb{Wz zr=xdj#`u?p`kac=TG4Oac1NG1S&Ty&y+UqED=s{1FkpJXe+65^XFGlG*gs3wI7=T` zdU8nJ#}w9sYk?1Vk0GR-F1|+*o*j(&eb`@^Gmm zi|7p$8io8&?MSV5-FY;9VxTv7mC&j$V&r1746xe7)Ka1AvpPMgQgOWXtgxX3${kj1 zhCkiGx^Ch3DSLIZ#bvvBh=AI!FH`+34j>ubWgqJ)vmpxnMkh7xRJ5gwmbcBP4Dfbb zZ#(@|3R?I1&ilog61nV`Oi3%YAeQYA~A^ZZchHs9&z=A2m=+54}Ymkc9j;tAs2 z9hI0C%5B`fbp6g{)1Q3tj&iPBqmm3`TZRY7x* zT-6K5)6>Hd>8j})um1sQ=SnR1E{-;QCrm!Kef`JGU8PiTYX7!$c9N&^yQmkJAWYZ8 zow)wG{4V@7eO6#)T-v9*9;=<%2=mKz@ZB9p{$oL8@6N@L+8r~9!9(|RofYDj=on_O zDai?pEuQmqkRFX+ekkYyGihOaY6eNI=grIPRp`G*C$WQA?!cL?t<+P!ZL( zgM?$)xCg;8xxm@ouAC?C`a`$fm)lScol_QWt=B?8OmyBwtXTy=bA(hu4pxv~aBrgV z*=O6|;}jH%+g%{M$IKrYS=(FiJbNY83VMs8`Vy0U`go4hN#xgjwe0fH)$kda`}?n}TN%Z?@npL@{X;e~ zNO_v7JP~I}6QlL%uB#DxOCXOG$xlIk*rvQpicBK8+P#z7FHt$#+*1bELJ{Z`>3rN- z7q(VgdgQ=bKO(cgNzvXF9I0X{o4y?+-Z4KpE6^c3kk#m^G3!$% zN=-Ge(u{kor&r)EK*@_&DQI}~J}viF~t{-;ke$^L(rf{DZAFK2gszPVI z`<~L|QZ)Ktfpw7U^NT@&{?xBH(-?L~3^D`62%5 z=>O{fy8sb{Vv>*VfBYnw@pR35ngLbtzJB%boXoAz#t}-V=R0GFv}G7S*VEbow?1>)fI8WM&Sh2MQb%hJ+|O# z;P6i=prY{Bl=KV1wA4#B^Eaik(hPeNy8L4C0YFrmFpQ`^_w5T>k*zYT}5_TWNRRyW4!5{`%oL zsssyhHstLxID(O-U?43a6H_4#!s*B>rMfEF?HcMcFv5cj7if zs-NMTd`_rjtd@hwrE%AC9ODm zm_%(&wGi7aGxXI8l@rk;f=h8`JUGEaxl3dyG?l6Sxx&#usdtsDp8<$cs9a3naKaQY zWIYZjniS4(0b#E-?n_L~mcDZTy`L-JH~vbs`l-|TtFY&F9%vT^CA}+^fXl;4B%3*& zV_g4I5rmxqe%4J`y*v_q;<$knocU2O<*QY*V*%SDt}!IzToN0lg(tw=~ z`0Ijj1m;<=i;V6wqIyMF#iY8q(s^3~H|05z@yMmy^P$ zGn;K}Lt80iqS*$kzu7;yw;I}>N?zL`BYMOG`lz;i8}*!$*uF0+^{gS7kN2a@I|MeP z9IBshp!tm)Ne8}TII__#nKt-DLvQV#d^<%Y=HbP7rr-_vK*rE?+gr7%fc8^Ps&x<@ zrZbB3UUArSds%lDkjZ@+u5jED&i6;))+&nU62tTel|A}cf(>20;tTKDX-hnh=Jgfj znv=)YhsD{e{@GbX@vhmCwz!E<9!jzQS%>%gI%Q`ZUHL#i}h$^u9rc4&bGeCSI+X6sK)Mi`oar#bz5x z`M|V=A~gCNIZoBne)(d(lB8$xlcRL0NBkU>8c<)yhCoVC=ZKLE$DpUz*22nCGB>hH z)AM()#}*~q*+!@(m2rUFT79zMHE+o$&PZuQs`IO1!<6f?;6P#P6u!7ZP+MJi_y3Ec z?dewSB)7R|%z$?{vfh>ITP(ce<4*a%D7!FWL76@3kjCoJ&~ld9D*uLbr!Yz`%@n@? zwB7AuugCPsBAAmgITeRWvCBSnX5vSzh`Ce^zE;ecW!;*(@*wps{}JFltL@9%3${eV zlvW#kY@TO0N4@uH+{Ga~-ME27blC}%|l@+=S4?ITOmKU6xm4(t>6Re(59Fu%izI2qS>1B|vdt#~9R>X7~O-g;$Q(?Bo>$OrhE^~Sa}n{J90 zcNeDfdr0!y^{gS}w$dweH zb>J6=jVM**-JQRwmuT;NlW%uU2R7q~;i@q^Kk8dX6ME>-hO5b@*IEz_<50Y2PR+(Z zN8>O-229QYs3jcU@Le*ea@!n_X^r2KmZSZupwC0WSJ}iuR*wpo4PDaTaDBfF_4>s2 zVloT;x;k2%Dz`!*P$%3z$v3reSLM0imo=p|2m6Shev!%;S?*tO9++oe4c#m1*lXOe zqi0}DY6tQp{_6O3R(pbe#EUT!K8k6f!;TJEH}2(nsXG|SibnXz$C|2Dt;XUlNSQmC zBEPv9BHM0t&JrpIkI6a}Y&}I$BWGL~GzNA}x-mafP+whUD;mAB;cd*wuY zaF^orqyJ{wWrTc=;-)zE7P{!kG>Rx;pzTGIU|W8w?9)ZH%wzP5G}Is>~mvEqIvA)qx`Xh1i_Td z*eD43<1eC-ox;%hd0J){v=2sC`u5{GD!yPyAi{n>7)KI^gsv!)*oBA`843^X10No&5R+!c0Z zY;pu>KVF-hU?=CodisPV4^*brTr=huvrme)Mq>csFf#eYk*N9>>Au@|=@X)Kq`8wO z4TlaWkZr5Z1|fGbpMp7ncECU9+qR6n58o4Ad1odh(~<(65fymNh7*)Iqn3JWF~0^q zEylSGKd_vvmqTNi`i%e3OO~=ZAwJ5%*FHZQ1<7Rmv5&?6k+ADEFzF#i8q+i9crmS) z(wJIjX<8%o_V+@@nyad`o|356*7gHTy&Hzp11HTPulf0)esj{tJm`IAtxFD$|8ouK zL+FvACC_{_vxsTt^nQ(us|PT&1u$p^oZkEN7BloGEQwhr2F#zn3YpLRE;(|u;dYBz zm+bspG7irbc79}ZdFkXfcEh0g3uFy`y7Rb}#}DUXBk;iRdSb*?_To%F{kZA}pXeEV zKA1WB-_b&F;n(Ac%wBjSl<-BU|D8pl)-}Q@9Y0d}y38tmg86=E+ zPo*vs-o)uZk`Zyt4X`kc(PYBa0wML@K^)~eMpkC2u#u+SWTqOrB8ARlV~{p-MU3R0 zS1TF$xKneS<&>zm_hq*uVQH6AM20Pu_m4F3ofC!TKin9f2#9~1wcU`i^W?;qpYODw zfwsp{t@X3F^3i-1jykQ{!*0rT!Ztati#K68CJ*SUvYi{aK#Z=K@f8 zkzAs&NO-yVOQmvG)De{}@nTdFr!opW7JG?@rQ!b#987t-kf!BY3iQku8E@lI=1~Fv z3?{St;`w*_fHi@#Lo^#29%1AM?*Hh&(eiX{Fx=hL{>&2dnX08JH}IcvmFEPr0wn3>1r7%q{Ie* z;Rb0EjSNfz(k%rqOcw?IUyK*&9znW+k;xB{40K~gMMQ@!E-xUQxbVH|VT=WEld_(0>Y!%~-dF0Nt z5C@O;_^o-rlr1Vx7JRxHT~Zq6OgPJwB=P$_#wLh$!k%4weO$xJ5Fy-QD066&t!Ks+ zZCN?MmJH*|2ajP9L_qMH7(L~eZIbNv&%goy{Gg;_v&{thwDBwznOi-p0JmU-Yr zzMblD?ER{*+;gE+fMp~6T|a{3nUfQG@x=<&O%A=*Msqn`yen)K> zn2_Z~5!n2;l{L-X$Fd@uqUAo-ItwHAA$!xVBPGeFCb~PZ(6Zi0U@`I21p*Hq_XfYL zA6`ILe%4Z^7|Xe)^DIi02sENwhW~;}}>G zf`@#5N#hJ*+^tga_6|zqDD+4y=DlunEezTGJj@>IbZSaim+*4+)QN3J4hRE|UhzLt zE_6{r^7yi1Jx7;Fm30o>ewy=HUkq2*{yepbX;*y@oOJ3Ux>+0D8Q}H^TW<3Qg;t-h zgT8r0v`&F!(91HyAJ^Z1<^=sr-6a93r%x8wX*?pn{^%aaX4>f>RjWAzp#-PBQE6Za7K9S`PSlm%707D`z=4H4N`8aB$Y%TpEF1X z)<}~Gi;NZym)t4lPI7z#c_S>v=x&a8oj9L%!xE8kCB|94GeGQL_2rc19c=jww|$D> z{FgfJx)IsIVFoUTN($i14j|~FN|UP7tZtxeBv3Wl3E5gc)`mH}n>qq&2ZcNzO$bN$ z4WQ8;vV_5pXZ~$bM$me&CSn)yy##DHarCQGrFnF{i&LEK6nenCpA^!-2^p?Er^L?v z4_;_MJpGfr&^B)SYtpFWy9B$cpSOD&Wg`o{c@g*Z^YC;geKk#zK=QgjqLifJ6zoJ2 zVWdxLw8efUfm_qla7m;-5_!w@sg#W4?l76U%X>oqfPUAX;}vJes5?;VSE{_BobW91 zN)4_Q85P8GyX3c)Q>C!k8SY9t!!cxhUA-rjk6fT<_S+L6bTyC@McW+7Xk}mhr>?pe zcZ|JY=B4faaw%J*Z8Vz;{#*9%e}Yw5Dhn+CL00)E!T-Z{L0Elq+QDYf$4{B{`hf^n z6-Tv_kA?tPBwVKN=hf~2!Af6_>3f~`0%nrI7iEsLMKbqFlmP`{YCqCtx-$t7?rq&Z zs@tt>y*wiiT7d-!)!PMC6ZZG6Q}FI9-LFQVH5vn?LF6^KNk z(HT=cn2PkAY!l;ilOK| z>=WZP4$RaehQh=TZ%+qwi6>`OBs{!vq|QR7RH5@L?Gb&y zD=HN=oC1KDK-}g`h&!8wB-au#>j{6NGaotlN&w?B>a#F1t;(8iVutb{Z8%M}v0}nK z59W#J#ZUJyo%VLJiq8W_nl*8KOSX3{nXsx4ba_wVeJDJJqd%D%sm$VHy;XYIry9_8 z);Kf!nzHwq9(b~3RvkTt0XXy{<5!Z`lwV;aHpjv*@1pVh{%lGvKiP6);>zu~SOOnn zGJ|b%EN;fKMi_Vq?^`m3FW_=E;l$l^3zu%U_B2#-@4Q0qEFXkYGUZLl7L+|qHnLRWAGc+Z_o0#63Zh&$3d2}u)I{|~e$wEs3bE>#N{fj~RvdNk zltbi!4B+RGe%4KsNWzRd`T1`3ibbtj?#_z#REs5-)KI|ZMJgE|v3Ea%%hv7rV(WL; zHVN@UOlOER)FuZ&M;P?&zc!7U$$Xz9zm2+f0FY)Ze$0)a5_(Jo7I2_DfmL8blH}!} za2=s_hZ1x*wtB-ChS8cQO#ZTw8LzP&k1^HzFI${1+_z?@B0^zw5u{=bM#=Nqm9ti* z9pZnrzPOeaNZCrwfGO!j!*v^d&5k;R0El(Yr+i(&gu&6#(Hg16@p^P0hp`s(W#^OI zoXgI&_^K>*%uUG&4Wo3$XjZHSt*vw<$W)@~@4PvspU)`1M=GqNJ$Xi3LiB8uTbFS% zj*v+8C&PeOx5N_s6V41h1Wl!hpIqdq_!19_vTO#wqrsS|EWN;EISuY@$=9=t1yG_B z>d*TYIZ;_RMGb@GlWQck6fw;D_WExgg>r6-C$0}gB6`%#uq_u$+u6n@Ip%_$t_=+;QP66 z5#O5RW)Exiv@ZII7_=Q&MXWG=h*;i+4u$!_pW_~A+Il#UH&;ZYpE4(>wZK;`waCG? z-~N6NQ$nG#)?;za12AK7(jk?SJ!ew5JnpM$d36yL(<3rFr;W31?;3ONVfu(a4qa49 z*a5mN*v{V{4Ww3{&NggsMf$v^IsIJpnh7Up3VcPS8S9`E_b9(-jIbE$-|hdlWSab@ z#B{Eow4r`YARfITiNeXv1@8JQ4W3^xmM3HqTQM+A4UXoEk&EHv)^v0mz`tp0%#&Yf z-?#hI4Zl{mDv}FKohIac`8H6EQzZ5SZa47MP+p;_(G>XM74;|S^*;)LQm_%hDIQkbVUUTQ@0L zYCi&W<69fb4F}@+D8iK*=eg&Ntr4}}p7*WVz9}f}EVP#!JI~~=4kwq_`t!|F5@XfZ zuR(~mwF&MNInW8qt@r%`^Wm7wHy3?#l7d@%LEkZgM1SgJ#W|d!<(Iz747YwJy9jlH zIy{WG;(Nrcp|?!SE3__-(+R#A1{fD^(fF z_&NvY{qqI#w3gVKDTySlEdE)Z_Xc4JaB$g|^wLnSkLPD^4j?Wf78tvG9$(#6ij)p- zy~=2gS`&M8bb3KTD}LmjRw^-ZtO!7NW(9q~QYhr~cw(00=ZDJsO~vsc{UGXL(P7^) z*{%QZV}n1nN(2us0fUg+ok*Nm|H2xS^=wSwR_6U@B>&h_r;@km0^dD>`F(sNE}RqJ zI<)jrY+I4nTwZT|U;8F%PR@1QI;7%Kd7dvRGBsLzbFbyivGRaF9nx=Ir+i}GR^e^7 z(7ZZW@HE=b^rBqnV~amrcjSAs<&|?fi~I1x)RXUoX+`m&7BnvB3)~RC47pDr8mzl+ z8Isc^dsDo6;@Hmmpsu?H>OpV!^$5|%|>*PTgVHDu1E0TyNqM-Q+%>+G8ZX!;$7$pRd&p4oCuIJ zpRUHvBTtBXr#3s=udGZKt(9zxf?qu6j?m zP!NMoBtzv>oXIyZFyzHKlm@pqZdf(cj*e^RS`!AoZ>QS8X?yV`HQ!DDU1+q!x~gMC z>STjnLjv(}q|z36)Pi+ju1mpd-FM^WH7>hcLi%~2!aMs3clLa97CxF#zcKmHD$EDQ zpi3TeCii~PvKx!QSR7Wp(@*Oj5g;15a}hY7`LAXpYr-mG!70B!*tV%|-z2bRrmT((NofuqKk=jF@De!sV;)Wd5=ggbTik>zDO!B-YpgAs<`HN4NLZ-q}CT<4tF z(+QG!zR*xN`sBV3ExsIz0&?L3AlZ?jnm}8W$niZEKJXc;snEN`P`$i!w-YE&B4hB0PcTPI~bUe;20R2eUju-?& zW2udz1ElHAuQ&p@UNzu+C=tx)4a^~XOgN?Q95}YtsR^own^xVJUUEOU(B{X z>$jM9vPYXLx&jBzsm9M&9*ow2X7g|p4ZmXYPE#EqU3jRx32TuR{2X{Gs_-W^nIr3# zUd%6os&7UHcj%1Hk1ruggj7ns$>O_XhG1gX-@mgjQ^O$INk*&}gu;3MYCrF*C}W1dv7| zPm|BXvs%x>{fY(nDCT#ejO?PzbC9B~Pi}`FY#>aaswIC8qrYXM@{5eo?1*9m)eGw+ zsjW66**>sPa$ozIGVR1gM~6^D%P84yfi&W9>FU`G(1Y*pWPf;zLU{f?G}r#4$GLt! zr?T_35qK`vbS4i+rA#Lmogx=nX&9NlO3hVMPbr)`^gP&9$S_kjT_88EKe$q+2`?)G z!|L9c@u!aAsfDSD1GH8tTrZ#EBxfFMq#oF9j1OQcB!f{sm@wJ|S@|m5x4>e(InkpN z%l*FpJ6(n)F^YC6X){mQCBr|6<9n*ab5Ssie`Aa5Yt&(4WRC={As|a83k-8!pM(rL zaN@!XwL2@pP;V=G+GGWHvQ>lG$hKC47l+RpMAK{bnORsnPR&PqtGN-#hL5&2*S4SA zS;>k%&z(SnWI^m(UzG^buABH1+vI4ErET>nYlLwPqtNx+~U!`O< z>nnovRBOyRj$$a10#yoE!C& z$Bu2)U<}QrztUk1J?Ue)XEYUbtdu@I5#_oNHMVlm9wV#2;*Ie45DdPVtnY7Av73kmd1RdH`6q!i*O$!6r?jo^K@M+7 z+EbjPxb&rEZd2`~MMB%5`!DN(Z*Maf8`;}y+(c{T(R+zGPO5RW@X}~+errVrGGfzC z&a=(GKueP=t~RHgvTe^EbFS(&Yds~hV|wdMxOVB?)VY2u@5%mwwN&;`umUw(b^IdG zS}ivdWtcj7qW*EgXPwtj({JM+|B+WMDIIU2n0sp0<;9V(@z>v_Tk0s~i4?NG!RSi^ zN#m&)Q%<~vhh74MIASO~lIw0gmT9~WGRw6dS6M`|sUF}!6xCj-=#8s{zcOuWagxH; z2^3S0^n7!(-a~U3Go_A~l&;U>li$X_|B4|V#(t&NSt}~uZL+1Rf?F919tuPO6*Rzo zKCv^q3p23t113GtBN@~Y4;^;ZJveu^&qRsls>vNU@CM^|S5fJoYp?o7J=T1<(d36I z;ava*b`EEMW-eqg#f)VH{boLbmjSz_|J3GQY1F@Sd7{&jA(qIK+;uwG;)^=$3N|Y2 z-03OM`u)3ObnDK<506~lM(}GiBr&h_YJO*wL!YDAKxwAJWomlD)|<&4p-)Wir!*Cd z+dnt?#lwx+_^_qm-NDvM)FE-uX|G}fB-KR;@cQB(tG;V^)I_}g#qUQrpI?8$Ef#-e z0qIWx4Q%>Ui^_um`vyQdRDM%v#XfCfV#TG(eW*f~ z#}4xq^?}8EshMC7!DcH|Y#gBT@vB}LMb~8G#e46$7s$Gj*<}B&5s8T=h1Jsqz4q+& zdW)9HzpU;*o=2%w>)u|SruVzsvhNlTM6y6)4*=rs>TTfYgN8k22_(QRv$ zqFq&O`M;+mB0FKu3VaYE! zj}#mX(A_Db>1y=@%iN!1^k}>--Z3=j-#>a~3GBtw+39`Y5`mlJkPDvAsE;`o^!CX3(%<@-AyD!<_iWTXhx>XYuaal+2 z%oJI)vz0#>SEDOoiiukM&JY`Stf9hQnu-T2#_}k0%9v>)ra)iQ21@kUI%wv#NUvqh zxN_7FoZQJ;J%8x!0Ddle?!@SX)Y`3Q(HV<$tb?YS>)d|1~%xS!Kvt{MzQ0jibWd62*XU1kEPe+PA~) z&M#8dIA?^RX$nZPo{y!6xv^BE337LA9rRj8Yx~nW)V1-n5v!6KoBoL_D+hUaphibM zFl9zMKGcg)>z+=Z_#C|3iZs4PsQpir6AHtPE6gY{r+w2|!(lY+Hr({lI@f$9PhwTZ zRD6@HBs4HOU87=lCA5tWHN~-~wJdniF96hbqN{dsi=LbHr1Q5@i9)ZC&pkUFFhQ{B zuCiNG_I}%YGmM*bE0ii#fMQo7&pzklaZO{hXhDl1`5(!t|L{g7hyumA55zQX)7{w=&i zL^{6qa8ZRYc95zpynwPO@LHH7{6~;RmstFNUtp^s?w`@t$T}#=j*=~mMvAJ-PL>>C zLd%u^(D?B`j|Kf}4i{r{*mKwg463Y#bAI<8t1)oEYhX`f)%@-If^26<=MyPg?r+qT z`^#T8B`_T zihLZp^MB>CwfL_Am{UB9Z<>ey`VdO7^PkEOpGdQl{t=Lon1hmmEHFcR3Qz62(x~;X z03`ra|Hvm*W~Q?v_QK8ni6mdj(NcriI{B_=xsy1nLs;TIV591<#M|)SHovJ(1SOFl z3ekp6YTg=_qx(HeKVAa|a*HFm^7g00bL-x~4(Re0aHOwJe1VTKTngM~O10WPGv`0$ zT9a8XK=yUTBr=QB1++RVAzS`fo<;pWzLO>t>kPu(FPhUw`jkRU*|sN?!A(uBW*Oie zv0%mZzNEpA=*0RK^C&>}r>1dJ+P^D|%!fgqy6xdwA`@jRMZt&H`GN_}3ID_eC)d}I zT!))Zj#v(~%bwS@S_IGOg3~X`nsrx0qqR@3aAWNazwpaef|5%h@}mVxroqPQeAZ)} zy#egSfmL_ThT4-V_6<#fs|r$F=1Nl{upw&?kcss5_2zJ{fK>=E^b|MyY*9dkj)xx< z6+&MUVr{;3oafX1BE#6cdg{5_O15U(!kq(C0H`$19lHOb(AFGv5h#6i_0~O=c2dE# zhlXM=wAD3sMJR+Ty@*0L`G@Y5Z9+1Na_7Y0WC^b~I;)j;k2A7!kE3hNmG@d=m2YTG zU-V=Js~1fF>Wjk>eI#X8`^Yn0d;*CW6XyB+C0^_Al)QalMy+l~<^#iwna|`QG-)`< z4~SBp*G-}M-|z(3W)7X#+TmVl>%*JV@2Cx`H^7}LPZR$CJAG5P+J}rhM$X*J%GqTXLSy(3L@ImNCWn>$J%_bu73Q}P{FcPuca`HTWBGQ?&=W5A=NEZ31|A=k&yD=#Op=R?}mGheW&!eE|oo1gkLa4Bhql@MS}tFnrj~$*?2U1ki#p}STp$R zy8jo!?LW*H94?O&q#Yw1LU2_d)QF)K^6%JmA198)%?LySzV`+Ce=a;$^R7v>cVWb3 zyE3^vNflYA#F_k%(&Ay-;G)ox{^F#9p~#tBy1ZZO*`r)Bpru;1^>lrPEh7qof)=6V zesVp7`t}Ou{gEF&JxX2A+aTE$pIGyhAg75jwLj!51U{VqjUw2!l$5dHvBzap zjlFYQF5bAtNOMd$u}15650)Ww41YbHGgi;#7u4!Tu`0YV8Y)Vvo(*wvT~$dw6&T6V zvblVOna z47bvtx_k?34=57p#4Z-i;C1HzAOP_ag|qkch5$^V#nlGOXl~s=)!p z=w)KnYlP$TOo)r~2(4{B6=)qZ8GPTS3rhkz{43~Q_F>)+MfhX0Be^_}_bLk~P^~bP z=xaQ-ZR0nVNo0k!>}KE3q!aE-+?*LZf0mZLdJ}UW`AOJ;mLika?w`81YUih*6MKJX zjc2xeH=cCd`yD+jgpDi4gi5IUW3R7#LuD8NOW+96+^D)dGRrXzALB`-X9!*wp$Uc} z`z=bHiSa#Q_l$J89 zKl&?HuL_?Zg0~`xwSm4G4GUX}L#`lW-r8qf|0cCyFgc&{(k|gvBmpYr$K)L zN4Tfa9ho-ej6jYUA{h}i3O4Bgg?QZIIJbxgE08_1L6f*=B#d+n z=a)WrpYi6?#2>FnoC+x;V7q%yzEJ}?>11mxzGmPU_)FdD0nI?ZlIy9D1QOP@Za+I@f&@U^8cklMS9NPjS?k)~t!c*<@tq;1>QzVz?feYN7H zo>n&TM2C9EY33xRA29iSPMRgP%v=S;xT(F4#-wei(>r`R%@)Q=g0aN zRwIq;W!TFw`3J0hpnY@BRgTJg?%2mSf-$&Ue zqeJUo@*%Fgx#6$R(e_vU5m=;~bh~qB&An5?2Kq-jMLdUijMu)6dm-C?o!EM?;X3XJC?D@ncjP!(m7{x^!svUCZZ44L+lvzG z?QOIS5xyQnsGqWf8^k=0J%o-0e%xqoPiL0)hQdln3T*WE@jSOSY!mHYum8ROlD>Lr z&yact(r_&-i>Rro1#f=CClIeQjxlKg(AF~FKEv#Ny;&eAduii-2RTF1Sw7R73A^u+^b!)L!`kZq512!_r(RXxC>|CO zz_$RW!wv7fh!4Gvf9bs|iiAKpY8#vzOP?b&d(Dsg_JEiS7Ld05qQG_mOjcerPVUd{ z$da4vQWe)5)b}219UiAXoHz8mjIG?G49Up$N(1o<7t|5i&X zTHEo|DE974hyjKe|Izk~N7JJ2i40MvUovQ##94d;c7C+%V>3uAya8dwZD&fOfDe+Q zT@(~7n&iV;qr4i7D>2Kk2FmN~+aJZ8F7h+y`2fI}?x#mD=OmjSK5z(Y=>dr@ifv7f zv^ZwEzy9&%OXmMl$iPynSy)wrzlDb1sA!cjZ3~~{#2HuK6p;T}B%4e6wEzo1MRNKtU?6yu6NL?o*qN(`m4>UUQIIM6qK$c zyFYGeJ{=&HFg*%L|8WQy=16o|P?>N?4upSAHFq0fw4uX7X zfOdRcsZephcJ6+^qV4+wWjh%W1~qf>1YxfCdgvZxo?Il!iuR(mi$*SFck_%TtM|6G zSt@wf-02j@8FG9=tO$KgMP}EHR?BX#{TnfY_{O&luOy5;{AE{}?_w`?zo~C%+Gc3M z@?&x|FfA-XSNR)Qpo1%m42};8uEvU{!)^1N_Dq8-g^#2P>RGtWF7_fzH@@H z&rTNFoNjy>6~8{l!gSw)_Yy1kk{BS2d3h{gT8Rr^TXMBXATjQR!ka3jd$qr@4t`>Pe9JlM72ma+onu)@qc&A!tSoQY1P3j@~!Mw=Io% z7N;v|ovipC!%0rN(}z%mLN?NiY)qCXa>`V1oB*(3kCzgH$PDQ=Vey&nWh zXv_8*+_ptZj`sBQj^}PvT>>-LH8gp7$IpW>6j7wv_3cd+baNQl_fQHHqQceeCWB}b zmI@x?~RxIIzq!*@~2+=PE1^(KcXEv@-#&!M?5FD`j3>xonL#bb6j_TNDOcq4#y+QQKqq zJ_?~3q2cbMEEY{#*@86`cutKw zDzCaqud*&2O@x3``|=D$Mh;8xfY%RObwH7DvNsCews3`9QJPU>yXS9Tir;?M?ARXyri4`BTUbIm(s zMB-lSSYDJZ#zN#Hieu?3Q zSQ1#nlsl5ah3M(YLbO@CRNDV@=rHMQNr=c!bp>cwk&= zO>E`1YiF|Q>xR0oM;5q!zviuyoSMErba!lU)s8o}89dfRA6sfqWH`<;Vx;W5u+!n< z{o{ckJ<07sE~Q}oKuBAQy}PNL>|2{1%7b+46^=H!rOG!)AM5)(cVGALlQ>Mc#&{H! ztge|x{l!G8jy7(^l(Y1K%653V!UY195|ekVL$Cs`@k>&{0GUKyzjwG&s9bK$ba#-{ z7V%`FjCi+-i@jW@lC+mWfBexQr1tX~x;*R-uVw;?T|Ga?2bmL!xw~wf>Gs6FVh_Sa$ua96Z%H6 z3tiDuH#Xa|2(uvcF7=_Ocv|{Pn7ZB4Z(N8S4JlYI7Hk$TR^2zWu!2-|HNZ4XPn-x;n_My(BYr znPXMvIM`>zQqzPXpy0aea4o$6wqJGipsqCT_)yP^r&WdTy3T%ZC1D*j2rn{F9fsr; z&=s{~zNh00W53h*ol*r#a@9y`_CB@GBLNB!;q2RCLMez~CA+{C%I4=Eur#`ocVh9} zT){61!bF*}Jy8$)u$&MhRh>IjmOpAA`(8FJYOlKxFEXtq9I7#@rBkL*3%jtVyFRjX zFVjgA@~=m=}zbU{`sD($)ZSEB*AU@ToaH_lRCzYWK>49@|}4un}VY`*c2bGktcw&pGHYd zDU;AiP2~7gT()#3=?LJk9h0%B=)$REm+m(mBJ_E5bObAkYRuW%6*rf8ZV1dig?(EX zs+?-|X?f^KxF>22BWWO@-1LQ#o!{ZhvHZm!E?+J?tk${P{4%rQ?bF>b zFS7B^a@Ox~qj$t8S6xO1&-$5jsLZNGXp2HFq~3hYqeHD+Bkhv1ZE!b-lxv49q``h~ zBI2UNDBD5?ID9WvrCz|1ML#o*L`sb#b;Tz}8*Fg|nrNmbEt=Ssr!f40Z`#`$ z8*?q6oJf@lt+3j%D{gi{JLO-Z;*$w^vr?~xaK#?%Ou22vyr;S+(x~?vSS&l*Y9UaGL7=y0f0k{~J2u`X!FKD&iS&@XM^v7nQNv>)Yf@7z`-z@Ua8_Y$wo29D9Wm50mLx)s=cKI?ck&Bo z)>~ikw=XA2jFD$8K^NiiGbyHD-kn?Fk(|7~5%Ieh9$H;<14CT}uT0C-cSij1$YT~D z2HuU{LPV_RvIS=zUQ2b1rWz;2EUq67A{KL8UhnCNmW=C8l~ekl8d1~rdZy3s8EpFR zEEI;>@O4k@w!@-1RiRa*cKgA7whu0F20Fa4Bdd6&O^#sc-b;=<4O?2!FQK(PZ}`8~ z=0(gC4yQ7XSZGQQTLOM!rB30p24><3N3JFZ52nNLPe}vic}_PkdLZ#=##9^|AiXYd zyO_=z+s}-y!tLOt8l^$o?(4SXh)_Ara~lvLM^)x6^3PrmUn9uF2&$skq%cb3HNd zg%o5gzPn@Nymg&%{4!ujZj40er8PPn)O=L8f0W8iqgh_g{kr?3)IiMBzes@cDd7I6 z1Oblo{_QWrA&+8E8b2qxMLodXFf9u%VX&$vTuZN%RQMsp;p_ zENG<%hi|DXk(3pvmNS3)LTs&HT{6DohhUi?ry}>C76xhm9l&tO!T1vuuc~44nLPiu z4JNb=0&TQG`n?P>RY=O=!P(V7qsu}Hn+`fW*DI&jd@*h3f7V23CZ#@<)O%yHn3S|T zk@M{>>6x^fd&05#uNDX5{<%IG3QgR0fFA4J3)-FNa{Rt_gn+B3=^zGv%=o3ELN4a9 zR&Gk*&d7iEkN=?4G$qWc>X~=;*LE$$%lOXxR9vo-CWQqC<|OwQS_WOC(fZOGh43fN zMT+VInc)7ui}JrvAcLoR6k&5g4Yq&`HwGg5EIzg8aUSAs(b!2b`3@~9Gd^tpIt|NT?Dcu{?B zaUsHU(IL;RohqH1eh*RLVH=@LK-{6i@YF+!H1mx>>7C~EcqQkR{egl-d)jr1)+AHx zo(oeBd)B{B!V8#$e}nEfHnv@J#jWj!_(ueqVcy$N3n~TWXTRbeMs@VMv zTLY&VX=($|eXenYvJ-*%BY3mzlP^lPq*qn3j>lZhHPzK&iM zt+GjjFA0{*9+aB3GSjXx4o>`AX8qAyw4B+K8Fyi_UOt?}_uRHppv&f|LhW-(_EoS= zUhvD%{wYlDo;fmH&Of_TT<(4g<%`Fpi_xx3iy}PPb<(O{i3G`8oY2d@6AfK{)IoEd zG0kb`Q^rS-_CKr969CVIL|x@KKyvcz#|z@$+wPtDinx0I&DJdQu{BfRCX_8oSBc5s ztAIYELdxKG^yZdZjC8luA-EVS-`AcATfN$EvRS@fRc*p!K8)MO4GvNqJ4h#87Ix27 z+*wIPQz5B*x1X?{>hg+%4&}*PFnmF6&Eme3@|0UCuODyM|EwmW1Z{Qm6TyP& z^N#5eug7ffIF(myrW(yS*!#=gJZ2=Y-^cpe!`52hD}ETpL( z`q(BHN&ag3S=^n3xs3-tLD-0sFgO(VI;!b1)?`$!Bt{^M0&;Y)?Zdo z6z?$ivutyuiHPRjF7>EsA^vAMToeu)aq_sWAf@+BUJx`LsDwoaO0hVNqIz>P$oJl+ zA-=i8a@W264H5!ruGLg%M^6M=E!&i{aD2k@j{bgDE;=Mf>I`zM zz~LD%Taxe@MF13mef375b6r|(me+eagX3kY=Jh@vCWq`lA#QY+8bi)%mVB{`A>9eq zafNN>w?GEGrD(qI>a?oWcrPi?7+E#TBHd$I@~6x3!@FO$Pc?)10=b=+A<~G%y}ifF z4SK?SPjRPMIalO!$L4=3F5&ErE+J*k27*U9te=ofBb1{6tIc>bSI1+I)DYePK!svS zhi)i&+>3!mfunN@1Z@C((&;d~i~2R9$HL<>=kJD3y_CFy(VY!JPFWdBx$;(Pbeaho z!kM4{X)(omq&p*KabYCpM;`&}LnQIcK&B37aCDT7QvZ7p#qaV5+f~Y~Z$(eDK6s)o zFqdE3(-Q;uWA}g#Tj^7Rc}%7x>o@jN(4EtXWebrV5sL5Ga%<|Nc26>IS(9FdsqR)w z(4Bl)fpukJ4kc`f<;w|Y$iZe)MHZJfI+X2&@>%xsU%3Mt6rWBbjZ7+?Iquh*6i0dd zk9DKd6BLEB%s&Z_W`1WZ(OQbx+C83jzoufMK4q|0W1$y16B+yFjCqIjxoW_f>DXjp zp%n48=MLS^9KSxiQ}W_#Mi`)jYWbD$vaYa}bc-iK+Vz)tP>pAbcgB}77&gC&_M&CL z3Oo869k6yUro`2|k~nFtWU!S4U~Unb<`UC<`Z~PmMWU3~%_w3 zMPN{4bVvBuww`*VPImzaT=Q*Yo;g@!Oqjs;27|LjWA3b#mWnupl5|<@71gFk%APG3 zd!vQ9h*IX%-uD^_#_V=6_ccnYW(B>A58CPUw`uKh=n z)3<-{T-=fIVTEp2%C0_~7=D0xZHnpFeqE16n=#R#5smZn7j4_++LRoJVQ23xO@{W&Iu%Y= z0&!u&VfPUC(UrQ4&PGNP}v#69>SFfsBQNCLPM-kGY4@6>BNr#<>{@T}rL&W8*7Z1dQK!2PBks zwF`>R93W5C%7Q`e#=NHs+IMGHB){Z|*U1y>Mb4_rF{EdJbB2H`WBu-9wY`YYZ4~hU zT|QU;1#EIne*-Li1GJMT$nX-3-;;`j62F#m&pvuG1?04L>395$1IL{QB|YfQQQu!oYxG zVxgX&x6Y4tI~}J-qdNa$rv0OzHXJ{2&6ekxJEVw9W_?vej78Y>aJ&sx9k2dUG5X{w z$ZE{B>~J~IiaH)c?OUiF!_w}UrcHy3<(o5~%^aKS7t|rNJT#YOJBbphC|W-s>SgA_ z?7(8EfU5aw;xT#(1M0Zt)cUS8e>tw&yAAuf+bW~eKe=U1W)L&-!ZyLNH<97|b1<*5$n`PT{tkE0*LfH-fC7(4&0J zmS&cRCv#r(?5;mZ+LxJ4rlKw}ohT;lBriV_9OGTiy6KGK$>(Hc%h5}*9Qo5HBYJ1J zAi%PkOPi*{LiSZ4ws*WFdV{5+KMQ?;#t@7Im5CkH-%99-4%(VsYf&6L>AFgq< z1P)-0TL1;ra)(^=KSJdt9b8_;Olf*?)e{iB|qyZUU@uG^S#@KiU%zFk*ojyJnq z_3?Z)PGSS|Wx2fXx0r`_)lZUX`Qx5=MS2rC$VQYhqs^AUOaz5q(f~Ysx98MkApngv zO@>s|j$<0r{rX~8HUg=H4o<#PO2rK8iRs#~xE?}`lFk3f4}gp>VpIV*4a9~bME`=_D`P{HKWCa)>}Zg zM4kZL8Uy6SCEq{ZX;cl<0tGhCeSpE@2b%jf7{U>)RYSWzJ1mNgYY_B<$CDf(9M8sc z?%p$VTp9Jxl?CRPVl-gGCnGa8H814{SD1kL_**JTzHGn8*C$|$^VfFtTQ}&RNdU=Y zmuFJmVik{Z0FUGDLfbD8+H%-91H?PSQ$l_jyyjc@Fe%K{<6w7_Uz6d*x1^$7T`qc z8-k&{6HIy=`!*WH(D44{=en=xFO2B*$AgGk@@2s3nbT)gmYWb3R$4aS)uRZKOeOD!@#pZw&`T&x z1S=(#b7_R)9M@tQ4-&tfuA5WvSxjkrJLTB+o&V*+K;X;hDBxs##Y5;SDvev0#mkg` zxD|3{yWYR_!F|;F7Kv`S4`KeCP9@tJ`o}p{D882p_Vwk!`UqCf&UXV5hz|fm1G&%M z+YIK}r9%hW?IpVw5R1ig+kR_{pjc7^ht0kkH>VF}g(|KA<i7#5G|s&&p1SETi6O-|8;Zz(-@(m7x}(RUBZ+(U+TmNL_H z^C^KBw1IcDM8*9;5-GYUI>J})UXANh;kP_|4(tukY-qKw? z1C3NO>yu<9slo1it!y22sK{ubDUi8|8SCjuiSVoovQd-vWvbi;!MUWOse~ILL6Wqb zG0W|kkqHLE-BxK&V@fpqp>SVs3S4wOJ4{Zc*NcYB@vJ)i?oP?Gkg=@kU_^C=LcKXd z%CuwEJ7O0R584%=r}FQ%h={oGnuu3B7LFqm4(PWL#xc8(4c>9T`4i}jIe}U0Y_pFj zH6E7t^{f$3sW*#$d5`5a-|D0PJ$yYBL_E*y6|)+NK&s*;g_CI)Zm=KQ4@T(USKa(3 zv|#tJB$8;u>BddpwOZ3JKjubDW=mYikv~xWL5v}kyED@@ zdU4pZfK1xt?TPWUZ2DSD7CaXy#Y#~WL_aWL+^}vH7w}=Efb!agJE(0tg|+TdKl@!a z25jdxJds|^K~7%BuE7EBiS&hudxy!TC&G?#$DN&kU6N@VTpbK!nPSJJWeqkrg9KM! zVc2|>>U=j!A-NcI0uqt9QjK^7VgM#Qf~*18CaO>Ln$gIh)Xx|Il8$V+LeBZFjn+AY z{0?I*_siLDG?A)K(d#VBvN;L&v+x|lvGlYNA(R@F2Ix--I6_}h-L8@qSjdl0mshx+ z&+k|_z_qKY*OkD_xjaJ{rXzXMCp&;qR5aBbh+tyo)P+_$W&g{hn%$y9Fkcz8} z9qYvwIo9F>{4U2r26odMU#57tDntE~%ds0Wag*5hVXOp49O^NCn|X`UoLIlT#vL%Zn1Lj*erUBdpF*d|5|l|IRWC81nR zObBKizS_*Z$@C>n%wyHPx7S5ZzeDN4llh3)i5k9F#j8|!g2}Wq9#o4{O`+Gh-)wHZ z9G=aY%u?njjqG~(<&H^#Hifa>(8AMuGYwb472Wi=BqI3=i1^!FRNBaCVZvFkay1@->yeF9K3MQiCfd5n4f z(%0Aj%=%qoaK}ws5VoL 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�`LH!HWymRUh^0%Y(}h5 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 Rz4`GEL`&~BN#oBa{{{WWeL4UD literal 0 HcmV?d00001 diff --git a/docs/assets/configuration/configuration_quiz_archive_creation_4_thumb.png b/docs/assets/configuration/configuration_quiz_archive_creation_4_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..879d0c1548555fdb00461ac3925914a7168e40a7 GIT binary patch literal 9882 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 MsGLaEPlLe!1N{ov=>Px# literal 0 HcmV?d00001 diff --git a/docs/assets/configuration/configuration_quiz_archive_delete_1_thumb.png b/docs/assets/configuration/configuration_quiz_archive_delete_1_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..19c75a9e6c90bc312f9d2b256418a8a893e078f1 GIT binary patch literal 4524 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 literal 0 HcmV?d00001 diff --git a/docs/assets/configuration/configuration_quiz_archive_download_1.png b/docs/assets/configuration/configuration_quiz_archive_download_1.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c88c8adc7f132e56c76e4635eed02e29a10831 GIT binary patch literal 30939 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 SI%>BSfR2W~`Uh3psDA)c_lI5p literal 0 HcmV?d00001 diff --git a/docs/assets/configuration/configuration_quiz_archive_inspection_2.png b/docs/assets/configuration/configuration_quiz_archive_inspection_2.png new file mode 100644 index 0000000000000000000000000000000000000000..841ac51f4d1171cfb61564fd9460ac5047e12f03 GIT binary patch literal 159075 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

    k{Zc>Ujppxp)S3*>bNYlU9O!q<0Y7>JFoDdS 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

    SjDIF#~@VgEh5$v4;J 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 literal 0 HcmV?d00001 diff --git a/docs/usage/archivingbasic.md b/docs/usage/archivingbasic.md index 511f16d..ae35c6e 100644 --- a/docs/usage/archivingbasic.md +++ b/docs/usage/archivingbasic.md @@ -1 +1,49 @@ # Creating Quiz Archives + +Once the Moodle plugin and the archive worker service are [installed](/installation) +and [set up](/configuration), quizzes can be archived by performing the following steps: + +1. Navigate to a Moodle quiz +2. Select the _Results_ tab (1), open the dropdown menu (2), and select _Quiz Archiver_ +3. Set your desired archiving options (3) and initiate a new archive job by + clicking the _Archive quiz_ button (4) +4. Confirm that your archive job was created (5) and wait for it to finish. You + can check its current status using the refresh button (6) +5. Once the job is completed, you can download the archive by clicking the + _Download archive_ button (7) + +![Screenshot: Creating a new quiz archive 1](/assets/configuration/configuration_quiz_archive_creation_1.png){ .img-thumbnail } +![Screenshot: Creating a new quiz archive 2](/assets/configuration/configuration_quiz_archive_creation_2.png){ .img-thumbnail } +![Screenshot: Creating a new quiz archive 3](/assets/configuration/configuration_quiz_archive_creation_3.png){ .img-thumbnail } +![Screenshot: Creating a new quiz archive 4](/assets/configuration/configuration_quiz_archive_creation_4.png){ .img-thumbnail } + + +## Inspecting Quiz Archive Details + +To inspect the details of a quiz archive job, click the _Show details_ button (1). +This will open a modal dialog showing all relevant information. + +![Screenshot: Inspecting a quiz archive 1](/assets/configuration/configuration_quiz_archive_inspection_1.png){ .img-thumbnail }
    +![Screenshot: Inspecting a quiz archive 2](/assets/configuration/configuration_quiz_archive_inspection_2.png){ .img-thumbnail } + + +## Downloading Quiz Archives + +Once a quiz archive job is finished, the archive can be downloaded by clicking +the _Download archive_ button (1) located inside the job overview table or within +each archive jobs details dialog. + +![Screenshot: Downloading a quiz archive](/assets/configuration/configuration_quiz_archive_download_1.png){ .img-thumbnail } + + +## Deleting Quiz Archives + +!!! danger + This action is irreversible and will permanently delete the archive and all + associated data. Make sure to download the archive before deleting it. + +Created archives can be deleted by clicking the _Delete archive_ (1) button +within the job overview table. + +![Screenshot: Deleting a quiz archive](/assets/configuration/configuration_quiz_archive_delete_1.png){ .img-thumbnail } + diff --git a/docs/usage/automaticdeletion.md b/docs/usage/automaticdeletion.md index ac9cb18..2f7f2d4 100644 --- a/docs/usage/automaticdeletion.md +++ b/docs/usage/automaticdeletion.md @@ -1 +1,43 @@ # Automatic Deletion (GDPR Compliance) + +Quiz archives can be automatically deleted after a specified retention period. +Automatic deletion can either be controlled on a per-archive basis or globally +via the [archive job presets](/configuration/policies). + +Archives with expired lifetimes are deleted by an asynchronous task that is, by +default, scheduled to run every hour. Only the archived user data (attempt PDFs, +attachments, ...) is deleted, while the job metadata is kept until manually +deleted. This procedure allows to document the deletion of archive data in a +traceable manner, while the privacy relevant user data is deleted. + +![Screenshot: Job details modal - Automatic deletion](/assets/screenshots/quiz_archiver_job_details_modal_autodelete.png){ .img-thumbnail } + +If an archive is scheduled for automatic deletion, its remaining lifetime is +shown in the job details modal, as depict above. You can access it via the +_Show details_ button on the quiz archiver overview page. Once deleted, archives +change their status from `Finished` to `Deleted`. + +!!! info + If you try to delete an archive that is scheduled for automatic deletion + before its retention period expired, an extra warning message will be shown + to prevent accidental deletions. + + +## Enabling Automatic Deletion for a Single Quiz Archive + +To enable the scheduled deletion for a single quiz archive: + +1. Navigate to the quiz archiver overview page +2. Expand the _Advanced settings_ section of the _Create new quiz archive_ form +3. Check the _Automatic deletion_ checkbox (1) +4. Set the desired retention period (2) +5. Create the archive job (3) + +![Screenshot: Configuration - Automatic archive deletion](/assets/configuration/configuration_job_autodelete.png){ .img-thumbnail } + + +## Enabling Automatic Deletion Globally + +Like any other archive settings, automatic deletion can be configured globally +using the [archive job presets](/configuration/policies) within the plugin +configuration. diff --git a/docs/usage/imageoptimization.md b/docs/usage/imageoptimization.md index da418ae..1c454cb 100644 --- a/docs/usage/imageoptimization.md +++ b/docs/usage/imageoptimization.md @@ -1 +1,27 @@ # Image optimization + +If quizzes contain a large number of images or images with an excessively high +resolutions (e.g., 4000x3000 px), the quiz archiver can optionally compress such +images during archiving. This can significantly reduce the size of the generated +PDF files. HTML source files, if generated, are never modified and remain +untouched. + +To enable image optimization for a quiz archive job: + +1. Navigate to the quiz archiver overview page +2. Expand the _Advanced settings_ section of the _Create new quiz archive_ form +3. Check the _Optimize images_ checkbox (1) +4. Set the desired maximum dimensions and quality (2) + - If an image exceeds any of the specified dimensions, it will be resized + proportionally to fit within the specified bounds. + - The quality setting controls the compression level of the images. A value + of 100% will result in no compression, while a value of 0% will result in + the lowest quality and smallest file size. A value of 85% is a good + compromise between quality and file size. +5. Continue with the archive creation as usual + +![Screenshot: Configuration - Image optimization](/assets/configuration/configuration_job_image_optimization.png){ .img-thumbnail } + +!!! info "Suggestion" + It is strongly advised to lock image quality settings to global defaults + using the [archive job presets](/configuration/presets). diff --git a/docs/usage/index.md b/docs/usage/index.md index 8f04b05..fd79b23 100644 --- a/docs/usage/index.md +++ b/docs/usage/index.md @@ -1 +1,18 @@ # Usage + +This section discusses the usage of the quiz archiver plugin. It covers the +[basic creation of quiz archives](/usage/archivingbasic) as well as advanced +topics, such as [image optimization](/usage/imageoptimization) or +[quiz archive signing](/usage/tsp). + + +## Getting Started + +To get started with the quiz archiver plugin, check out the +[quiz archive creation guide](/usage/archivingbasic). + +[:material-archive: Creating Quiz Archives](/usage/archivingbasic){ .md-button } + +## Other Topics + +To get information on other topics, exlore the navigation on the right. diff --git a/docs/usage/tsp.md b/docs/usage/tsp.md index 77054cd..5207c0f 100644 --- a/docs/usage/tsp.md +++ b/docs/usage/tsp.md @@ -1 +1,79 @@ # Quiz Archive Signing (TSP) + +Quiz archives and their creation date can be digitally signed by a trusted +authority using the [Time-Stamp Protocol (TSP)](https://en.wikipedia.org/wiki/Time_stamp_protocol) +according to [RFC 3161](https://www.ietf.org/rfc/rfc3161.txt). This can be used +to cryptographically prove the integrity and creation date of the archive at a +later point in time. Quiz archives can be signed automatically at creation or +manually later on. + + +## Enabling Archive Signing + +Prior to the first archive signing, the TSP service must be set up once within +the plugin settings. To do so, follow these steps: + +1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > + _Quiz_ > _Quiz Archiver_ (2) +2. Set `tsp_server_url` (3) to the URL of your desired TSP service +3. Globally enable archive signing by checking `tsp_enable` (4) +4. (Optional) Enable automatic archive signing by checking `tsp_automatic_signing` (5) +5. Save all settings (6) + +![Screenshot: Configuration - TSP Settings 1](/assets/configuration/configuration_plugin_settings_1.png){ .img-thumbnail } +![Screenshot: Configuration - TSP Settings 2](/assets/configuration/configuration_tsp_settings_2.png){ .img-thumbnail } + + +## Signing Quiz Archives + +Quiz archives can be signed either automatically during their creation or +manually at a later point in time. + +### Automatic Archive Signing + +If enabled, new archives will be automatically signed during creation. TSP data +can be accessed via the _Show details_ button of an archive job on the quiz +archiver overview page. Existing archives will not be signed automatically (see +[Manual archive signing](#manual-archive-signing)). + +### Manual Archive Signing + +To manually sign a quiz archive, navigate to the quiz archiver overview page, +click the _Show details_ button for the desired archive job, and click the +_Sign archive now_ button. + + +## Accessing TSP Data + +Both the TSP query and the TSP response can be accessed via the job details +dialog. To do so, navigate to the quiz archiver overview page and click the +_Show details_ button for the desired archive job. + +![Image of archive job details: TSP data](/assets/screenshots/quiz_archiver_job_details_modal_tsp_data.png){ .img-thumbnail } + + +## Validating an Archive and its Signature + +To validate an archive and its signature, install `openssl` and conduct the +following steps: + +1. Obtain the certificate files from your TSP authority (`.crt` and `.pem`)[^1] +2. Navigate to the quiz archiver overview page and click the _Show details_ + button for the desired archive job to check +3. Download the archive and both TSP files (`.tsq` and `.tsr`) +4. Inspect the TSP response to see the timestamp and signed hash value + 1. Execute: `openssl ts -reply -in .tsr -text` +5. Verify the quiz archive (`.tar.gz`) against the TSP response + (`archive.tsr`). This process confirms that the archive was signed by the TSP + authority and that the archive was not modified after signing, i.e., the hash + values of the file matches the TSP response. + 1. Execute: `openssl ts -verify -in .tsr -data .tar.gz -CAfile .pem -untrusted .crt` + 2. Verify that the output is `Verification: OK`
    + Errors are indicated by `Verification: FAILED` +6. (Optional) Verify that TSP request and TSP response match + 1. Execute: `openssl ts -verify -in .tsr -queryfile .tsq -CAfile .pem -untrusted .crt` + 2. Verify that the output is `Verification: OK`
    + Errors are indicated by `Verification: FAILED` + +[^1]: The certificate must be given by your TSP authority. You can usually find +it on the website of the service. \ No newline at end of file From 6cf1e4efa491b835f2adf4e8e527c0e5435b7573 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 17:27:12 +0200 Subject: [PATCH 160/185] docs: Remove dollar sign in front of shell commands to allow for easier copy and paste --- docs/configuration/initialconfig/automatic.md | 4 ++-- docs/installation/archiveworker.md | 14 +++++++------- docs/installation/moodleplugin.md | 8 ++++++-- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/docs/configuration/initialconfig/automatic.md b/docs/configuration/initialconfig/automatic.md index 3555c7f..c929828 100644 --- a/docs/configuration/initialconfig/automatic.md +++ b/docs/configuration/initialconfig/automatic.md @@ -42,11 +42,11 @@ provided CLI script. The script is located at To execute the script: 1. Open a terminal and navigate to the quiz archiver CLI directory: - ```bash + ```text cd /path/to/moodle/mod/quiz/report/archiver/cli ``` 2. Execute the CLI script using PHP: - ```bash + ```text php autoinstall.php --help ``` diff --git a/docs/installation/archiveworker.md b/docs/installation/archiveworker.md index e5fae39..781054f 100644 --- a/docs/installation/archiveworker.md +++ b/docs/installation/archiveworker.md @@ -31,7 +31,7 @@ the Moodle instance. ``` 3. From inside the `moodle-quiz-archive-worker` folder, run the application: ```text - $ docker compose up + docker compose up ``` !!! info "Changing the service port" @@ -60,7 +60,7 @@ To run the application in the background, append the `-d` argument to your command: ```text -$ docker compose up -d +docker compose up -d ``` ### Removing the application @@ -69,7 +69,7 @@ To remove all created containers, networks and volumes, run the following command from inside the `moodle-quiz-archive-worker` folder: ```text -$ docker compose down +docker compose down ``` ## Installation using Docker @@ -81,7 +81,7 @@ $ docker compose down 1. Install [Docker](https://www.docker.com/) 2. Run a new container: ```text - $ docker run -p 8080:8080 ngandrass/moodle-quiz-archive-worker:latest + docker run -p 8080:8080 ngandrass/moodle-quiz-archive-worker:latest ``` !!! info "Changing the service port" @@ -89,7 +89,7 @@ $ docker compose down first port number in the `-p` argument of the `docker run` command. ```text title="Example: Expose the service on port 4242" - $ docker run -p 4242:8080 moodle-quiz-archive-worker:latest + docker run -p 4242:8080 moodle-quiz-archive-worker:latest ``` !!! info "Changing configuration values" @@ -98,7 +98,7 @@ $ docker compose down configuration parameters see [Configuration](#configuration). ```text title="Example: Set the log level to DEBUG" - $ docker run -e QUIZ_ARCHIVER_LOG_LEVEL=DEBUG -p 8080:8080 moodle-quiz-archive-worker:latest + docker run -e QUIZ_ARCHIVER_LOG_LEVEL=DEBUG -p 8080:8080 moodle-quiz-archive-worker:latest ``` @@ -134,7 +134,7 @@ command. It specifies the current directory as the build context. variables. For more details and all available configuration parameters see [Configuration](#configuration). - ```shell title="Example: Set the service port to 4242" + ```text title="Example: Set the service port to 4242" QUIZ_ARCHIVER_SERVER_PORT=4242 poetry run python moodle-quiz-archive-worker.py ``` diff --git a/docs/installation/moodleplugin.md b/docs/installation/moodleplugin.md index f98c823..c0e3163 100644 --- a/docs/installation/moodleplugin.md +++ b/docs/installation/moodleplugin.md @@ -18,14 +18,18 @@ archive worker service](/installation/archiveworker) for this plugin to work. The plugin can be also installed by putting the contents of this directory to - {your/moodle/dirroot}/mod/quiz/report/archiver +```text +{your/moodle/dirroot}/mod/quiz/report/archiver +``` Afterward, log in to your Moodle site as an admin and go to _Site administration > Notifications_ to complete the installation. Alternatively, you can run - $ php admin/cli/upgrade.php +```text +php admin/cli/upgrade.php +``` to complete the installation from the command line. From 57e2ce505355a99832bed8d02df7852c7ff8fcd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 17:33:15 +0200 Subject: [PATCH 161/185] docs: Write development docs --- docs/development/codecoverage.md | 31 +++++++++++++++- docs/development/index.md | 6 +++ docs/development/testdata.md | 19 ++++++++++ docs/development/unittests.md | 63 ++++++++++++++++++++++++++++++++ 4 files changed, 118 insertions(+), 1 deletion(-) diff --git a/docs/development/codecoverage.md b/docs/development/codecoverage.md index d392208..8acbed3 100644 --- a/docs/development/codecoverage.md +++ b/docs/development/codecoverage.md @@ -1 +1,30 @@ -# Code Coverage \ No newline at end of file +# Code Coverage + +!!! warning + This page is primarily targeted at developers. If you are a normal user of + this plugin, you can safely skip this section. + +## Prerequisites + +To generate code coverage reports, you need to have: + +1. your [PHPUnit test environment](/development/unittests) set up. +2. the `xdebug` extension installed and enabled in your PHP environment. + + +## Generating Coverage Reports + +To generate code coverage reports, follow these steps: + +1. Run PHPUnit with coverage report: + ```text + XDEBUG_MODE=coverage vendor/bin/phpunit --colors --testdox --coverage-html /tmp/coverage --filter quiz_archiver/* + ``` +2. Copy the generated report to your machin: + ```text + docker cp my-moodle-container:/tmp/coverage /tmp/coverage + ``` +3. Open the report in your browser: + ```text + xdg-open /tmp/coverage/index.html + ``` diff --git a/docs/development/index.md b/docs/development/index.md index 459110d..1318bbf 100644 --- a/docs/development/index.md +++ b/docs/development/index.md @@ -1 +1,7 @@ # Development + +!!! info + If you are a normal user of this plugin, you can safely skip this section. + +This section is primarily aimed at developers who want to contribute to the quiz +archiver plugin or the quiz archive worker service. diff --git a/docs/development/testdata.md b/docs/development/testdata.md index 1b328d0..cc988db 100644 --- a/docs/development/testdata.md +++ b/docs/development/testdata.md @@ -1 +1,20 @@ # Reference Course / Test Data + +!!! warning + This page is primarily targeted at developers. If you are a normal user of + this plugin, you can safely skip this section. + +For testing purposes, a Moodle course that contains a reference quiz is provided. + +The quiz features an instance of every standard question type that is part of +the Moodle core. Example students are enrolled and graded quiz attempts have +been made, ready to test the archive functionality. + +The reference course moreover contains further quizzes with different numbers of +attempts to test the throughput of the quiz archive worker service. + + +## Importing the Reference Course + +You can import the reference course from the corresponding Moodle backup file +located at `res/backup-moodle2-course-qa-ref.mbz`. diff --git a/docs/development/unittests.md b/docs/development/unittests.md index 8cee326..77d6182 100644 --- a/docs/development/unittests.md +++ b/docs/development/unittests.md @@ -1 +1,64 @@ # PHPUnit tests + +!!! warning + This page is primarily targeted at developers. If you are a normal user of + this plugin, you can safely skip this section. + + +## Creating a PHPUnit Test Environment + +1. Spawn a shell inside your Moodle / php-fpm container and navigate to your + Moodle root directory: + ```text + docker exec -it my-moodle-container sh + cd /usr/share/nginx/www/moodle/ + ``` +2. Prepare the Moodle PHPUnit configuration. Add the following lines to your + `config.php`: + ```php title="config.php" + phpunit_prefix = 'phpu_'; + $CFG->phpunit_dataroot = '/path/to/your/phpunit_moodledata'; + ``` +3. Download [composer](https://getcomposer.org/) and install dev dependencies: + ```text + wget https://getcomposer.org/download/latest-stable/composer.phar + php composer.phar install + ``` +4. Bootstrap the test environment: + ```text + php admin/tool/phpunit/cli/init.php --disable-composer + ``` + +See: [https://moodledev.io/general/development/tools/phpunit](https://moodledev.io/general/development/tools/phpunit) + + +## Running tests + +After you have sucessfully [created a PHPUnit envirnoment](#creating-a-phpunit-test-environment), +you can run the tests using the following commands: + +- Running all tests: + ```text + vendor/bin/phpunit --colors --testdox + ``` +- Running all tests for a single component: + ```text + vendor/bin/phpunit --colors --testdox --filter quiz_archiver/* + ``` +- Running a single test suite: + ```text + vendor/bin/phpunit --colors --testdox mod/quiz/report/archiver/tests/Report_test.php + ``` + +!!! warning + All commands must be run from inside your Moodle root directory. + + +## Automatic Test Execution for All Supported Software Configurations + +The configuration for automated test execution via GitHub CI can be found in +`.github/workflows/moodle-plugin-ci.yml`. It holds a matrix of all supported +software configurations and runs the tests for each of them. + +See also: [Installation Requirements](/installation#requirements) From 65b2139902374f60d0c7cc663ebaad5e983dbbab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Thu, 3 Oct 2024 17:39:39 +0200 Subject: [PATCH 162/185] Create GitHub workflow to build mkdocs and deploy to GitHub pages --- .github/workflows/docs.yml | 56 ++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 2 +- 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..7f723f9 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,56 @@ +name: Build and publish docs + +on: + push: + branches: + - main + - feature/mkdocs # TODO: Remove this after testing! + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.x + - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - uses: actions/cache@v4 + with: + key: mkdocs-material-${{ env.cache_id }} + path: .cache + restore-keys: | + mkdocs-material- + - run: pip install \ + mkdocs \ + mkdocs-material \ + mkdocs-material-extensions \ + mkdocs-material[imaging] \ + mkdocs-minify-plugin \ + mkdocs-glightbox \ + mkdocs-get-deps + - run: mkdocs build + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ./site + + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + needs: build + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/mkdocs.yml b/mkdocs.yml index cdc651b..82e4044 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,5 +1,5 @@ site_name: Moodle Quiz Archiver Documentation -site_url: http://localhost/ +site_url: https://quizarchiver.gandrass.de/ repo_url: https://github.com/ngandrass/moodle-quiz_archiver edit_uri: edit/master/docs/ From a329337879411284ea3d18bd90c3072def0cd341 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Fri, 4 Oct 2024 09:25:36 +0200 Subject: [PATCH 163/185] Update README to link to the new docs page --- README.md | 525 +++--------------------------------- docs/assets/docs-button.png | Bin 0 -> 4186 bytes 2 files changed, 32 insertions(+), 493 deletions(-) create mode 100644 docs/assets/docs-button.png diff --git a/README.md b/README.md index 1a58d3c..7686dfc 100644 --- a/README.md +++ b/README.md @@ -34,9 +34,13 @@ service to remove load from Moodle and to eliminate the need to install a large number of software dependencies on the webserver. It can easily be [deployed using Docker](https://github.com/ngandrass/moodle-quiz-archive-worker#installation). -Available via the [Moodle Plugin Directory](https://moodle.org/plugins/quiz_archiver):\ +The Quiz Archiver is available via the [Moodle Plugin Directory](https://moodle.org/plugins/quiz_archiver):\ [![Moodle Plugin Directory](docs/assets/moodle-plugin-directory-button.png)](https://moodle.org/plugins/quiz_archiver) +More information and detailed installation / setup instructions can be found in +the [official documentation](https://quizarchiver.gandrass.de/): + +[![Quiz Archiver: Official Documentation](docs/assets/docs-button.png)](https://quizarchiver.gandrass.de/) ----- @@ -87,6 +91,24 @@ the job to restrict queryable data to the required minimum. ----- +## Installation and Configuration + +You can find detailed installation and configuration instructions within the +[official documentation](https://quizarchiver.gandrass.de/). + +[![Quiz Archiver: Official Documentation](docs/assets/docs-button.png)](https://quizarchiver.gandrass.de/) + +It guides you through the whole setup process from installing the Moodle plugin +to creating your first quiz archives. It also explains how to use advanced +features like image compression, automatic deletion of archives, and automated +cryptographic signing of quiz archives. + +If you have problems installing the Quiz Archiver or have further questions, +please feel free to open an issue within the +[GitHub issue tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues). + +----- + ## Versioning and Compatibility The [quiz_archiver Moodle Plugin](https://github.com/ngandrass/moodle-quiz_archiver) @@ -106,15 +128,15 @@ bug fixes, features, and optimizations. ### Compatibility Examples | Moodle Plugin | Archive Worker | Compatible | -|------------|----------------|------------| -| 1.0.0 | 1.0.0 | Yes | -| 1.2.3 | 1.0.0 | Yes | -| 1.0.0 | 1.1.2 | Yes | -| 2.1.4 | 2.0.1 | Yes | -| | | | -| 2.0.0 | 1.0.0 | No | -| 1.0.0 | 2.0.0 | No | -| 2.4.2 | 1.4.2 | No | +|---------------|----------------|------------| +| 1.0.0 | 1.0.0 | Yes | +| 1.2.3 | 1.0.0 | Yes | +| 1.0.0 | 1.1.2 | Yes | +| 2.1.4 | 2.0.1 | Yes | +| | | | +| 2.0.0 | 1.0.0 | No | +| 1.0.0 | 2.0.0 | No | +| 2.4.2 | 1.4.2 | No | ### Development / Testing Versions @@ -125,489 +147,6 @@ by a `+dev-[TIMESTAMP]` suffix, e.g., `2.4.2+dev-2022010100`. ----- -## Installation - -You can install this plugin like any other Moodle plugin, as described below. -However, keep in mind that you additionally need to deploy the external quiz -archive worker service for this plugin to work. - - -### Installing via uploaded ZIP file - -1. Log in to your Moodle site as an admin and go to _Site administration > - Plugins > Install plugins_. -2. Upload the ZIP file with the plugin code. You should only be prompted to add - extra details if your plugin type is not automatically detected. -3. Check the plugin validation report and finish the installation. - - -### Installing manually - -The plugin can be also installed by putting the contents of this directory to - - {your/moodle/dirroot}/mod/quiz/report/archiver - -Afterward, log in to your Moodle site as an admin and go to _Site administration > -Notifications_ to complete the installation. - -Alternatively, you can run - - $ php admin/cli/upgrade.php - -to complete the installation from the command line. - - -## Configuration - -The following sections describe the required steps to set up the plugin. - -In summary: You need to create a dedicated Moodle user, a global role to manage -permissions, setup a webservice for the archive worker, and set configuration -options for the Moodle plugin. - - -### Prerequisites - -Installation of the additional [quiz archive worker service](https://github.com/ngandrass/moodle-quiz-archive-worker) -is mandatory for this plugin to work. - -**Detailed installation instructions can be found here: -[Quiz Archive Worker: Installation](https://github.com/ngandrass/moodle-quiz-archive-worker#installation)** - - -### Automatic Configuration - -Creation of the dedicated Moodle user and role, as well as the setup of the -webservice for the archive worker, can be done automatically. - -The easiest way is to use the automatic configuration feature provided via the -Moodle admin interface. - -1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > - _Quiz_ > _Quiz Archiver_ (2) -2. Click the _Automatic configuration_ button (3) -3. Enter the URL under which the quit archive worker can be reached (4) -4. (Optional) Change the configuration defaults (5) -5. Execute the automatic configuration (6) -6. Close the window (7) -7. (Optional) Adjust the default plugin setting on the plugin settings page - -[![Screenshot: Configuration - Automatic Configuration 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - Automatic Configuration 2](docs/assets/configuration/configuration_plugin_autoinstall_2_thumb.png)](docs/assets/configuration/configuration_plugin_autoinstall_2.png) -[![Screenshot: Configuration - Automatic Configuration 3](docs/assets/configuration/configuration_plugin_autoinstall_3_thumb.png)](docs/assets/configuration/configuration_plugin_autoinstall_3.png) -[![Screenshot: Configuration - Automatic Configuration 4](docs/assets/configuration/configuration_plugin_autoinstall_4_thumb.png)](docs/assets/configuration/configuration_plugin_autoinstall_4.png) - - -#### Using the Command Line Interface (CLI) - -

    -Expand here to show CLI configuration instructions - -If you want to configure this plugin in an automated fashion, you can use the -provided CLI script. The script is located at -`{$CFG->wwwroot}/mod/quiz/report/archiver/cli/autoinstall.php`. - -To execute the script: - -1. Open a terminal and navigate to the quiz archiver CLI directory: - ```bash - cd /path/to/moodle/mod/quiz/report/archiver/cli - ``` -2. Execute the CLI script using PHP: - ```bash - php autoinstall.php --help - ``` - -Usage: -```text -Automatically configures Moodle for use with the quiz archiver plugin. - -ATTENTION: This CLI script ... -- Enables web services and REST protocol -- Creates a quiz archiver service role and a corresponding user -- Creates a new web service with all required webservice functions -- Authorises the user to use the webservice. - -Usage: - $ php autoinstall.php - $ php autoinstall.php --username="my-custom-archive-user" - $ php autoinstall.php [--help|-h] - -Options: - --help, -h Show this help message - --force, -f Force the autoinstall, regardless of the current state of the system - --workerurl= Sets the URL of the worker (default: http://localhost:8080) - --wsname= Sets a custom name for the web service (default: quiz_archiver_webservice) - --rolename= Sets a custom name for the web service role (default: quiz_archiver) - --username= Sets a custom username for the web service user (default: quiz_archiver_serviceaccount) -``` -
    - - -### Manual Configuration - -
    -Expand here to show manual configuration instructions - -### 1. Create Moodle User and Role - -1. Create a designated Moodle user for the quiz archiver webservice - 1. Navigate to _Site Administration_ > _Users_ (1) > _Accounts_ > _Add a new user_ (2) - 2. Set a username (e.g. `quiz_archiver`) (3), a password (4), first and - lastname (5), and a hidden email address (6) - 3. Create the user (7) - - [![Screenshot: Configuration - Create Moodle User 1](docs/assets/configuration/configuration_create_moodle_user_1_thumb.png)](docs/assets/configuration/configuration_create_moodle_user_1.png) - [![Screenshot: Configuration - Create Moodle User 2](docs/assets/configuration/configuration_create_moodle_user_2_thumb.png)](docs/assets/configuration/configuration_create_moodle_user_2.png) - -2. Create a global role to handle permissions for the `quiz_archiver` Moodle user - 1. Navigate to _Site Administration_ > _Users_ (1) > _Permissions_ > _Define roles_ (2) - 2. Select _Add a new role_ (3) - 3. Set _Use role or archetype_ (4) to `No role` - 4. Upload the role definitions file from [res/moodle_role_quiz_archiver.xml](res/moodle_role_quiz_archiver.xml) (5). - This will automatically assign all required capabilities. You can check all - capabilities prior to role creation in the next step or by manually - inspecting the [role definition XML file](res/moodle_role_quiz_archiver.xml). - 5. Click on _Continue_ (6) to import the role definitions for review - 6. Optionally change the role name or description and create the role (7) - - [![Screenshot: Configuration - Create Role 1](docs/assets/configuration/configuration_create_role_1_thumb.png)](docs/assets/configuration/configuration_create_role_1.png) - [![Screenshot: Configuration - Create Role 2](docs/assets/configuration/configuration_create_role_2_thumb.png)](docs/assets/configuration/configuration_create_role_2.png) - [![Screenshot: Configuration - Create Role 3](docs/assets/configuration/configuration_create_role_3_thumb.png)](docs/assets/configuration/configuration_create_role_3.png) - [![Screenshot: Configuration - Create Role 4](docs/assets/configuration/configuration_create_role_4_thumb.png)](docs/assets/configuration/configuration_create_role_4.png) - -3. Assign the `quiz_archiver` Moodle user to the created role - 1. Navigate to _Site Administration_ > _Users_ (1) > _Permissions_ > _Assign system roles_ (2) - 2. Select the `Quiz Archiver Service Account` role (3) - 3. Search the created `quiz_archiver` Moodle user (4), select it in the list - of potential users (5), and add it to the role (6) - - [![Screenshot: Configuration - Assign Role 1](docs/assets/configuration/configuration_assign_role_1_thumb.png)](docs/assets/configuration/configuration_assign_role_1.png) - [![Screenshot: Configuration - Assign Role 2](docs/assets/configuration/configuration_assign_role_2_thumb.png)](docs/assets/configuration/configuration_assign_role_2.png) - [![Screenshot: Configuration - Assign Role 3](docs/assets/configuration/configuration_assign_role_3_thumb.png)](docs/assets/configuration/configuration_assign_role_3.png) - -### 2. Setup Webservice - -1. Enable webservices globally - 1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _Overview_ (2) - 2. Click on _Enable web services_ (3), check the checkbox (4), and save the - changes (5) - 3. Navigate back to the _Overview_ (2) page - 4. Click on _Enable protocols_ (6), enable the _REST protocol_ (7), and save the - changes (8) - - [![Screenshot: Configuration - Enable Webservices 1](docs/assets/configuration/configuration_enable_webservices_1_thumb.png)](docs/assets/configuration/configuration_enable_webservices_1.png) - [![Screenshot: Configuration - Enable Webservices 2](docs/assets/configuration/configuration_enable_webservices_2_thumb.png)](docs/assets/configuration/configuration_enable_webservices_2.png) - [![Screenshot: Configuration - Enable Webservices 3](docs/assets/configuration/configuration_enable_webservices_3_thumb.png)](docs/assets/configuration/configuration_enable_webservices_3.png) - [![Screenshot: Configuration - Enable Webservices 4](docs/assets/configuration/configuration_enable_webservices_4_thumb.png)](docs/assets/configuration/configuration_enable_webservices_4.png) - -2. Create an external webservice for the quiz archive worker to use - 1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _External services_ (2) - 2. Under the _Custom services_ section, select _Add_ (3) - 3. Enter a name (e.g. `quiz_archiver`) (4) and enable it (5) - 4. Expand the additional settings (6), enable file up- and download (7) - 5. Create the new webservice by clicking _Add service_ (8) - - [![Screenshot: Configuration - Create Webservice 1](docs/assets/configuration/configuration_create_webservice_1_thumb.png)](docs/assets/configuration/configuration_create_webservice_1.png) - [![Screenshot: Configuration - Create Webservice 2](docs/assets/configuration/configuration_create_webservice_2_thumb.png)](docs/assets/configuration/configuration_create_webservice_2.png) - [![Screenshot: Configuration - Create Webservice 3](docs/assets/configuration/configuration_create_webservice_3_thumb.png)](docs/assets/configuration/configuration_create_webservice_3.png) - -3. Add all `quiz_archiver_*` webservice functions to the `quiz_archiver` external - service - 1. Navigate to _Site Administration_ > _Server_ (1) > _Web services_ > _External services_ (2) - 2. Open the _Functions_ page for the `quiz_archiver` webservice (3) - 3. Click the _Add functions_ link (4) - 4. Search for `quiz_archiver` (5) and add all `quiz_archiver_*` functions - 5. Save the changes by clicking _Add functions_ (6) - - [![Screenshot: Configuration - Assign Webservice Functions 1](docs/assets/configuration/configuration_assign_webservice_functions_1_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_1.png) - [![Screenshot: Configuration - Assign Webservice Functions 2](docs/assets/configuration/configuration_assign_webservice_functions_2_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_2.png) - [![Screenshot: Configuration - Assign Webservice Functions 3](docs/assets/configuration/configuration_assign_webservice_functions_3_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_3.png) - [![Screenshot: Configuration - Assign Webservice Functions 4](docs/assets/configuration/configuration_assign_webservice_functions_4_thumb.png)](docs/assets/configuration/configuration_assign_webservice_functions_4.png) - - -### 3. Configure Plugin Settings - -1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > - _Quiz_ > _Quiz Archiver_ (2) -2. Set `worker_url` (3) to the URL under which the quiz archive worker can be - reached (e.g., `http://quiz-archive-worker:5000` or `http://127.0.0.1:5000`) -3. Select the previously created `quiz_archiver` webservice for `webservice_id` (4) - from the drop-down menu -4. Enter the user ID of the previously created Moodle user for `webservice_userid` (5). - It can easily be found by navigating to the users profile page and inspecting - the page URL. It contains the user ID as the `id` query parameter. -5. (Optional) Specify a custom job timeout in minutes -6. (Optional) Specify a custom Moodle base URL. This is only required if you run - the quiz archive worker in an internal/private network, e.g., when using - Docker. If this setting is present, the public Moodle `$CFG->wwwroot` will be - replaced by the `internal_wwwroot` setting. - Example: `https://your.public.moodle/` will be replaced by `http://moodle.local/`. -7. Save all settings and create your first quiz archive (see [Usage](#usage)). -8. (Optional) Adjust the default [capability](#capabilities) assignments. - -[![Screenshot: Configuration - Plugin Settings 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - Plugin Settings 2](docs/assets/configuration/configuration_plugin_settings_2_thumb.png)](docs/assets/configuration/configuration_plugin_settings_2.png) - -
    - -### Known Pitfalls - -- **Job timeout prior to configured value** - - Be aware that there is a configurable job timeout within the Moodle plugin - settings (`quiz_archiver | job_timeout_min`) as well as one within the quiz - archive worker service (`QUIZ_ARCHIVER_REQUEST_TIMEOUT_SEC`). Since the - shortest timeout always takes precedence, make sure to adjust both settings - as required. -- **Access to (some) webservice functions fails** - - Ensure that webservices and the REST protocol are enabled globally. - - Ensure that all required webservice functions are enabled for the - `quiz_archiver` webservice. - - Ensure that the `quiz_archiver` webservice has the rights to download and - upload files. - - Ensure that the `quiz_archiver` webservice user has accepted all site policies - (e.g., privacy policy). -- **Upload of the final archive fails** - - Ensure you have configured `php` to accept large file uploads. The - `upload_max_filesize` and `post_max_size` settings in your `php.ini` should - be set to a value that is large enough to allow the upload of the largest - quiz archive file that you expect to be created. - - Ensure that your Moodle is configured to allow large file uploads. - `$CFG->maxbytes` should be set to the same value as PHP `upload_max_filesize`. - - If you are using an ingress webserver and `php-fpm` via FastCGI, ensure that - the `fastcgi_send_timeout` and `fastcgi_read_timeout` settings are long - enough to allow the upload of the largest quiz archive file that you expect. - Nginx usually signals this problem by returning a '504 Gateway Time-out' - after 60 seconds (default). - - Ensure that your antivirus plugin is capable of handling large files. When - using ClamAV you can control maximum file sizes by setting `MaxFileSize`, - `MaxScanSize`, and `StreamMaxLength` (when using a TCP socket) inside - `clamd.conf`. - - -## Capabilities - -The following capabilities are required for the listed actions: - -- `mod/quiz_archiver:view` (context: Module): Required to view the quiz archiver - overview page. It allows to download all created archives but does not allow do - create new or delete existing archives (read-only access). By default, assigned - to: `teacher`, `editingteacher`, `manager`. -- `mod/quiz_archiver:create` (context: Module): Allows creation of new quiz - archives (read-write access). By default, assigned to: `editingteacher`, - `manager`. -- `mod/quiz_archiver:delete`, (context: Module): Allows deletion of existing - quiz archives (read-write access). By default, assigned to: `editingteacher`, - `manager`. -- `mod/quiz_archiver:use_webservice` (context: System): Required to use any of - the webservice functions this plugin provides. The webservice user (created in - [Configuration](#configuration)) needs to have this capability in order to - create new quiz archives. - ------ - -## Usage - -Once installed and set up, quizzes can be archived by performing the following -steps: - -1. Navigate to a Moodle quiz -2. Inside the `Quiz administration` menu expand the `Results` section and click - on `Quiz Archiver` -3. Select the desired options and start the archive job by clicking the `Archive - quiz` button -4. Wait until the archive job is completed. You can now download the archive - from the `Quiz Archiver` page using the `Download archive` button. - -Created archives can be deleted by clicking the `Delete archive` button. Details, -including all selected settings during archive creation, e.g. number of attempts -or included components, can be viewed by clicking the `Details` button. - -If you encounter permission errors, ensure that the user has the required -[Capabilities](#capabilities) assigned. - - -## Advanced Usage - -This section discusses advanced usage of the plugin. - - -### Archive job presets (global defaults / policies) - -Default values for all archive job options can be configured globally via the -plugin settings page. By default, users are allowed to customize these settings -during archive creation. However, each setting can be locked individually to -prevent users from modifying it during archive creation. This allows the -enforcement of organization wide policies for archived quizzes. - -To customize these options: - -1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > - _Quiz_ > _Quiz Archiver_ (2) -2. Scroll down to the _Archive presets_ section (3) -3. Set the desired default values for each option (4) - - Options can depend on another, as indicated by (6). This causes the - dependent option to be disabled, if the parent option is not set (e.g., - question feedback is not exported if question exporting is fully disabled) - - More options than shown in the screenshots are available. Scroll down to - see all (7) -4. (Optional) Lock individual options by checking the _Lock_ checkbox (5) - -Locked options will be grayed out during archive creation (8). - -[![Screenshot: Configuration - Archive job presets 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - Archive job presets 2](docs/assets/configuration/configuration_archive_job_presets_2_thumb.png)](docs/assets/configuration/configuration_archive_job_presets_2.png) -[![Screenshot: Configuration - Archive job presets 3](docs/assets/configuration/configuration_archive_job_presets_3_thumb.png)](docs/assets/configuration/configuration_archive_job_presets_3.png) - - -### Image optimization / compression - -If quizzes contain a large number of images or images with an excessively high -resolutions (e.g., 4000x3000 px), the quiz archiver can compress such images -during archiving. This can significantly reduce the size of the generated -PDF files. HTML source files, if generated, are never modified and remain -untouched. - -To enable image optimization for a quiz archive job: - -1. Navigate to the quiz archiver overview page -2. Expand the _Advanced settings_ section of the _Create new quiz archive_ form -3. Check the _Optimize images_ checkbox (1) -4. Set the desired maximum dimensions and quality (2) - - If an image exceeds any of the specified dimensions, it will be resized - proportionally to fit within the specified bounds. - - The quality setting controls the compression level of the images. A value - of 100% will result in no compression, while a value of 0% will result in - the lowest quality and smallest file size. A value of 85% is a good - compromise between quality and file size. -5. Continue with the archive creation as usual - -_Note: It is strongly advised to lock quality settings to global defaults using -the [archive job presets](#archive-job-presets-global-defaults--policies)._ - -[![Screenshot: Configuration - Image optimization](docs/assets/configuration/configuration_job_image_optimization_thumb.png)](docs/assets/configuration/configuration_job_image_optimization.png) - - -### Automatic deletion of quiz archives (retention policy) - -Quiz archives can be automatically deleted after a specified retention period. -Automatic deletion can either be controlled on a per-archive basis or globally -via the [archive job presets](#archive-job-presets-global-defaults--policies). -Archives with expired lifetimes are deleted by an asynchronous task that is, by -default, scheduled to run every hour. Only the archived user data (attempt PDFs, -attachments, ...) is deleted, while the job metadata is kept until manually -deleted. This procedure allows to document the deletion of archive data in a -traceable manner, while the privacy relevant user data is deleted. - -![Screenshot: Job details modal - Automatic deletion](docs/assets/screenshots/quiz_archiver_job_details_modal_autodelete.png) - -If an archive is scheduled for automatic deletion, its remaining lifetime is -shown in the job details modal, as depict above. You can access it via the -_Show details_ button on the quiz archiver overview page. Once deleted, archives -change their status from _'Finished'_ to _'Deleted'_. If you try to delete an -archive that is scheduled for automatic deletion before its retention period -expired, an extra warning message will be shown. - -#### Enable automatic deletion for a single quiz archive - -To enable the scheduled deletion for a single quiz archive: - -1. Navigate to the quiz archiver overview page -2. Expand the _Advanced settings_ section of the _Create new quiz archive_ form -3. Check the _Automatic deletion_ checkbox (1) -4. Set the desired retention period (2) -5. Create the archive job (3) - -[![Screenshot: Configuration - Automatic archive deletion](docs/assets/configuration/configuration_job_autodelete_thumb.png)](docs/assets/configuration/configuration_job_autodelete.png) - - -#### Enable automatic deletion globally - -Like any other archive settings, automatic deletion can be configured globally -using the [archive job presets](#archive-job-presets-global-defaults--policies). - - - -### Quiz archive signing using the Time-Stamp Protocol (TSP) - -Quiz archives and their creation date can be digitally signed by a trusted -authority using the [Time-Stamp Protocol (TSP)](https://en.wikipedia.org/wiki/Time_stamp_protocol) -according to [RFC 3161](https://www.ietf.org/rfc/rfc3161.txt). This can be used -to cryptographically prove the integrity and creation date of the archive at a -later point in time. Quiz archives can be signed automatically at creation or -manually later on. - -#### Enable archive signing globally - -1. Navigate to _Site Administration_ > _Plugins_ (1) > _Activity modules_ > - _Quiz_ > _Quiz Archiver_ (2) -2. Set `tsp_server_url` (3) to the URL of your desired TSP service -3. Globally enable archive signing by checking `tsp_enable` (4) -4. (Optional) Enable automatic archive signing by checking `tsp_automatic_signing` (5) -5. Save all settings (6) - -[![Screenshot: Configuration - TSP Settings 1](docs/assets/configuration/configuration_plugin_settings_1_thumb.png)](docs/assets/configuration/configuration_plugin_settings_1.png) -[![Screenshot: Configuration - TSP Settings 2](docs/assets/configuration/configuration_tsp_settings_2_thumb.png)](docs/assets/configuration/configuration_tsp_settings_2.png) - - -#### Accessing TSP data - -Both the TSP query and the TSP response can be accessed via the job details -dialog. To do so, navigate to the quiz archiver overview page and click the -_Show details_ button for the desired archive job. - -![Image of archive job details: TSP data](docs/assets/screenshots/quiz_archiver_job_details_modal_tsp_data.png) - - -#### Automatic archive signing - -If enabled, new archives will be automatically signed during creation. TSP data -can be accessed via the _Show details_ button of an archive job on the quiz -archiver overview page. Existing archives will not be signed automatically (see -[Manual archive signing](#manual-archive-signing)). - -#### Manual archive signing - -To manually sign a quiz archive, navigate to the quiz archiver overview page, -click the _Show details_ button for the desired archive job, and click the -_Sign archive now_ button. - -#### Validating an archive and its signature - -To validate an archive and its signature, install `openssl` and follow these -steps: - -1. Obtain the certificate files from your TSP authority (`.crt` and `.pem`) -2. Navigate to the quiz archiver overview page and click the _Show details_ - button for the desired archive job -3. Download the archive and both TSP signature files (`.tsq` and `.tsr`) -4. Inspect TSP response to see time stamp and signed hash value - 1. Execute: `openssl ts -reply -in .tsr -text` -5. Verify the quiz archive against the TSP response. This process confirms that - the archive was signed by the TSP authority and that the archive was not - modified after signing, i.e., the hash values of the file matches the TSP - response. - 1. Execute: `openssl ts -verify -in .tsr -data .tar.gz -CAfile .pem -untrusted .crt` - 2. Verify that the output is `Verification: OK` \ - Errors are indicated by `Verification: FAILED` -6. (Optional) Verify that TSP request and TSP response match - 1. Execute: `openssl ts -verify -in .tsr -queryfile .tsq -CAfile .pem -untrusted .crt` - 2. Verify that the output is `Verification: OK` \ - Errors are indicated by `Verification: FAILED` - - -## Testing - -For testing, a Moodle course that contains a reference quiz is provided. The quiz -features an instance of every standard question type that is provided by Moodle. -Example students are enrolled and possess graded attempts, ready to test the -archive functionality. - -You can import the reference course from the corresponding Moodle backup file -located at [res/backup-moodle2-course-qa-ref.mbz](res/backup-moodle2-course-qa-ref.mbz). - ------ - ## Screenshots ### Quiz Archiver overview page diff --git a/docs/assets/docs-button.png b/docs/assets/docs-button.png new file mode 100644 index 0000000000000000000000000000000000000000..519614b6a8372cf3028ff9176cbec67d5733fbf1 GIT binary patch literal 4186 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 Date: Fri, 4 Oct 2024 09:30:33 +0200 Subject: [PATCH 164/185] Remove horizontal rules from README since it is now a lot more compact and does not require additional visual separators anymore --- README.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/README.md b/README.md index 7686dfc..64de6dd 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,6 @@ the [official documentation](https://quizarchiver.gandrass.de/): [![Quiz Archiver: Official Documentation](docs/assets/docs-button.png)](https://quizarchiver.gandrass.de/) ------ ## Features @@ -72,7 +71,6 @@ the [official documentation](https://quizarchiver.gandrass.de/): - Technical separation of Moodle and archive worker service - Data-minimising and security driven design ------ ## Concept @@ -89,7 +87,6 @@ webservice user to be created (see [Configuration](#configuration)). A single jo webservice token can only be used for the specific quiz that is associated with the job to restrict queryable data to the required minimum. ------ ## Installation and Configuration @@ -107,7 +104,6 @@ If you have problems installing the Quiz Archiver or have further questions, please feel free to open an issue within the [GitHub issue tracker](https://github.com/ngandrass/moodle-quiz_archiver/issues). ------ ## Versioning and Compatibility @@ -145,7 +141,6 @@ Special development versions, used for testing, can be created but will never be published to the Moodle plugin directory. Such development versions are marked by a `+dev-[TIMESTAMP]` suffix, e.g., `2.4.2+dev-2022010100`. ------ ## Screenshots @@ -164,7 +159,6 @@ by a `+dev-[TIMESTAMP]` suffix, e.g., `2.4.2+dev-2022010100`. ![Image of example of PDF report (extract): Question 2](docs/assets/screenshots/quiz_archiver_report_example_pdf_question_2.png) ![Image of example of PDF report (extract): Question 3](docs/assets/screenshots/quiz_archiver_report_example_pdf_question_3.png) ------ ## License From ded16822a9a72161f7b06c25d15533094a3105b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Fri, 4 Oct 2024 09:33:57 +0200 Subject: [PATCH 165/185] Prepare CHANGELOG --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index fe87f3a..1db8bf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## Version X.Y.Z (XXXXXXXXXX) + +- Create an official Quiz Archiver documentation website: [https://quizarchiver.gandrass.de/](https://quizarchiver.gandrass.de/) +- Automate building and deployment of documentation website +- Cleanup and restructure existing documentation within README + + ## Version 2.0.0 (2024082100) - Switch to semantic versioning (see README.md, Section: "Versioning and Compatibility") From a0f510f28a0da31a93fdecbd11592950b2cde370 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Sat, 5 Oct 2024 17:36:57 +0200 Subject: [PATCH 166/185] Fix PHP warning on autoinstall admin page --- CHANGELOG.md | 1 + adminui/autoinstall.php | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1db8bf1..26e62b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ - Create an official Quiz Archiver documentation website: [https://quizarchiver.gandrass.de/](https://quizarchiver.gandrass.de/) - Automate building and deployment of documentation website - Cleanup and restructure existing documentation within README +- Fix PHP warning on autoinstall admin page ## Version 2.0.0 (2024082100) diff --git a/adminui/autoinstall.php b/adminui/autoinstall.php index a820eb3..ff76cf9 100644 --- a/adminui/autoinstall.php +++ b/adminui/autoinstall.php @@ -29,9 +29,15 @@ use quiz_archiver\form\autoinstall_form; use quiz_archiver\local\autoinstall; +// Disable error reporting to prevent warning of potential redefinition of constants. +$olderrorreporting = error_reporting(); +error_reporting(0); + /** @var bool Disables output buffering */ const NO_OUTPUT_BUFFERING = true; +error_reporting($olderrorreporting); + // Ensure user has permissions. require_login(); $ctx = context_system::instance(); From 595a972b7b364b392f98c0aee97fc18891aa81fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20Gandra=C3=9F?= Date: Sun, 6 Oct 2024 15:08:15 +0200 Subject: [PATCH 167/185] docs: Add information on how to use the public demo quiz archive worker service --- ...iguration_plugin_autoinstall_workerurl.png | Bin 0 -> 145478 bytes ...ion_plugin_autoinstall_workerurl_thumb.png | Bin 0 -> 10634 bytes .../quiz_archiver_demomode_watermark.png | Bin 0 -> 295318 bytes docs/configuration/index.md | 3 +- docs/installation/archiveworker.md | 69 +++++++++++++----- 5 files changed, 51 insertions(+), 21 deletions(-) create mode 100644 docs/assets/configuration/configuration_plugin_autoinstall_workerurl.png create mode 100644 docs/assets/configuration/configuration_plugin_autoinstall_workerurl_thumb.png create mode 100644 docs/assets/screenshots/quiz_archiver_demomode_watermark.png diff --git a/docs/assets/configuration/configuration_plugin_autoinstall_workerurl.png b/docs/assets/configuration/configuration_plugin_autoinstall_workerurl.png new file mode 100644 index 0000000000000000000000000000000000000000..09bc032be99df2f522db9f2eff4a51f2095cfca4 GIT binary patch literal 145478 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

    HA9LB)aMI!Q-&jOI`=mJpf&WL7**eK+_0VG+A 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 literal 0 HcmV?d00001 diff --git a/docs/assets/configuration/configuration_plugin_autoinstall_workerurl_thumb.png b/docs/assets/configuration/configuration_plugin_autoinstall_workerurl_thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..b77b9a3c17c495e445cb9467bb625bec0ffcdd82 GIT binary patch literal 10634 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 literal 0 HcmV?d00001 diff --git a/docs/assets/screenshots/quiz_archiver_demomode_watermark.png b/docs/assets/screenshots/quiz_archiver_demomode_watermark.png new file mode 100644 index 0000000000000000000000000000000000000000..d37e4e23010dfd2bb0d34bf80c7ec5a90d823542 GIT binary patch literal 295318 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%0AIS~ZoDt;_Eg%3V00z6W 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