From 61673d3ef20b2357db38b3b1a6f3629d26e1e914 Mon Sep 17 00:00:00 2001 From: Gero Lueckemeyer <gero.lueckemeyer@hft-stuttgart.de> Date: Thu, 28 Dec 2023 11:13:33 +0100 Subject: [PATCH] namespaced and imported utils, clarified moodle version comment --- dta.zip | Bin 24007 -> 24111 bytes dta/classes/backend.php | 1 + dta/classes/database.php | 9 +++++++++ dta/classes/view.php | 9 +++++++++ dta/locallib.php | 14 +++++++++----- dta/version.php | 2 +- 6 files changed, 29 insertions(+), 6 deletions(-) diff --git a/dta.zip b/dta.zip index 83d1e2867578df0141d3c8e191b5f951a10eaed8..94d05da2f2938ef029de29d6dc3a695b6d41c26e 100644 GIT binary patch delta 10621 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 E0BM=|OaK4? delta 10491 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 diff --git a/dta/classes/backend.php b/dta/classes/backend.php index b2904ae..892859b 100644 --- a/dta/classes/backend.php +++ b/dta/classes/backend.php @@ -21,6 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later * @copyright Gero Lueckemeyer and student project teams */ +namespace assignsubmission_dta\util /** * backend webservice contact utility class diff --git a/dta/classes/database.php b/dta/classes/database.php index 6f5c82a..28917e9 100644 --- a/dta/classes/database.php +++ b/dta/classes/database.php @@ -14,6 +14,15 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * persistence layer utility class + * + * @package assignsubmission_dta + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright Gero Lueckemeyer and student project teams + */ +namespace assignsubmission_dta\util + /** * persistence layer utility class * diff --git a/dta/classes/view.php b/dta/classes/view.php index b5d1dc8..0c01db2 100644 --- a/dta/classes/view.php +++ b/dta/classes/view.php @@ -14,6 +14,15 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see <http://www.gnu.org/licenses/>. +/** + * utility class for DTA submission plugin result display + * + * @package assignsubmission_dta + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + * @copyright Gero Lueckemeyer and student project teams + */ +namespace assignsubmission_dta\util + /** * utility class for DTA submission plugin result display * diff --git a/dta/locallib.php b/dta/locallib.php index 3aaadac..911dc3e 100644 --- a/dta/locallib.php +++ b/dta/locallib.php @@ -18,9 +18,13 @@ defined('MOODLE_INTERNAL') || die(); // Import various entity and application logic files. require_once($CFG->dirroot . '/mod/assign/submission/dta/models/DtaResult.php'); -require_once($CFG->dirroot . '/mod/assign/submission/dta/utils/database.php'); -require_once($CFG->dirroot . '/mod/assign/submission/dta/utils/backend.php'); -require_once($CFG->dirroot . '/mod/assign/submission/dta/utils/view.php'); +require_once($CFG->dirroot . '/mod/assign/submission/dta/classes/database.php'); +require_once($CFG->dirroot . '/mod/assign/submission/dta/classes/backend.php'); +require_once($CFG->dirroot . '/mod/assign/submission/dta/classes/view.php'); + +use assignsubmission_dta\util\DtaBackendUtils; +use assignsubmission_dta\util\DbUtils; +use assignsubmission_dta\util\view_submission_utils; /** * library class for DTA submission plugin extending assign submission plugin base class @@ -174,7 +178,7 @@ class assign_submission_dta extends assign_submission_plugin { * @param int $userid current user * @return bool form elements added */ - public function get_form_elements_for_user($submissionorgrade, MoodleQuickForm $mform, stdClass $data, $userid): bool { + public function get_form_elements_for_user($submissionorgrade, MoodleQuickForm $mform, stdClass $data, int $userid): bool { // Prepare submission filearea. $data = file_prepare_standard_filemanager( $data, @@ -228,7 +232,7 @@ class assign_submission_dta extends assign_submission_plugin { * @param string $areaid filearea id to count * @return int */ - private function count_files($submissionid, $areaid) { + private function count_files(int $submissionid, string $areaid) { $fs = get_file_storage(); $files = $fs->get_area_files($this->assignment->get_context()->id, self::COMPONENT_NAME, diff --git a/dta/version.php b/dta/version.php index cf9e0b3..c1d02a0 100644 --- a/dta/version.php +++ b/dta/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); $plugin->version = 3000000; -$plugin->requires = 2020061525; // Moodle 3.9 LTS +$plugin->requires = 2020061525; // Moodle 3.9 LTS. Will likely run with unsupported older versions of the 3.x branch. $plugin->component = 'assignsubmission_dta'; $plugin->maturity = MATURITY_STABLE; $plugin->release = "3.0.0"; -- GitLab