From 4f920aab111f439ec5c16db94e0d6586fdbfdb2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20B=C3=B6sch?= Date: Mon, 14 Jul 2025 19:13:04 +0200 Subject: [PATCH 1/5] Adopting Moodle Plugin CI for Moodle 5.0 --- .github/workflows/ci.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7fa8c53d..d09e13ea 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,15 +30,15 @@ jobs: fail-fast: false matrix: include: + - php: '8.4' + moodle-branch: 'MOODLE_500_STABLE' + database: 'pgsql' - php: '8.3' - moodle-branch: 'MOODLE_405_STABLE' + moodle-branch: 'MOODLE_500_STABLE' database: 'mariadb' - php: '8.2' - moodle-branch: 'MOODLE_405_STABLE' + moodle-branch: 'MOODLE_500_STABLE' database: 'pgsql' - - php: '8.1' - moodle-branch: 'MOODLE_404_STABLE' - database: 'mariadb' steps: - name: Checkout From 9caa3f4319aec690cd0175b94384b7b350b17c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20B=C3=B6sch?= Date: Mon, 14 Jul 2025 19:47:59 +0200 Subject: [PATCH 2/5] Resolved implicitly marking parameter as nullable deprecation --- classes/question/question.php | 4 ++-- classes/question/rate.php | 6 +++--- classes/responsetype/responsetype.php | 4 ++-- tests/behat/behat_mod_questionnaire.php | 2 +- tests/generator/lib.php | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/classes/question/question.php b/classes/question/question.php index ed191496..2c96a833 100644 --- a/classes/question/question.php +++ b/classes/question/question.php @@ -653,9 +653,9 @@ public function update($questionrecord = null, $updatechoices = true) { * Add the question to the database from supplied arguments. * @param \stdClass $questionrecord The required data for adding the question. * @param array $choicerecords An array of choice records with 'content' and 'value' properties. - * @param boolean $calcposition Whether or not to calculate the next available position in the survey. + * @param bool|null $calcposition Whether or not to calculate the next available position in the survey. */ - public function add($questionrecord, array $choicerecords = null, $calcposition = true) { + public function add($questionrecord, ?array $choicerecords = null, ?bool $calcposition = true) { global $DB; // Create new question. diff --git a/classes/question/rate.php b/classes/question/rate.php index 8e0117da..b21bfc55 100644 --- a/classes/question/rate.php +++ b/classes/question/rate.php @@ -1026,9 +1026,9 @@ public function insert_nameddegrees(array $nameddegrees) { * Helper function used to move existing named degree choices for the specified question from the "quest_choice" table to the * "question" table. * @param int $qid - * @param null|\stdClass $questionrec + * @param \stdClass|null $questionrec */ - public static function move_nameddegree_choices(int $qid = 0, \stdClass $questionrec = null) { + public static function move_nameddegree_choices(int $qid = 0, ?\stdClass $questionrec = null) { global $DB; if ($qid !== 0) { @@ -1079,7 +1079,7 @@ public static function move_nameddegree_choices(int $qid = 0, \stdClass $questio * questionnaire before '2018110103'. * @param int|null $surveyid */ - public static function move_all_nameddegree_choices(int $surveyid = null) { + public static function move_all_nameddegree_choices(?int $surveyid = null) { global $DB; // This operation might take a while. Cancel PHP timeouts for this. diff --git a/classes/responsetype/responsetype.php b/classes/responsetype/responsetype.php index aa9c5dd2..1e879781 100644 --- a/classes/responsetype/responsetype.php +++ b/classes/responsetype/responsetype.php @@ -45,9 +45,9 @@ abstract class responsetype { * responsetype constructor. * @param \mod_questionnaire\question\question $question * @param int|null $responseid - * @param array $choices + * @param array|null $choices */ - public function __construct(\mod_questionnaire\question\question $question, int $responseid = null, array $choices = []) { + public function __construct(\mod_questionnaire\question\question $question, ?int $responseid = null, ?array $choices = []) { $this->question = $question; $this->responseid = $responseid; $this->choices = $choices; diff --git a/tests/behat/behat_mod_questionnaire.php b/tests/behat/behat_mod_questionnaire.php index 57c97c58..39b47d51 100644 --- a/tests/behat/behat_mod_questionnaire.php +++ b/tests/behat/behat_mod_questionnaire.php @@ -418,7 +418,7 @@ private function add_response_data($qid, $sid) { * to replace with mapped values. * @return null */ - private function add_data(array $data, $datatable, $mapvar = '', array $replvars = null) { + private function add_data(array $data, $datatable, $mapvar = '', ?array $replvars = null) { global $DB; if ($replvars === null) { diff --git a/tests/generator/lib.php b/tests/generator/lib.php index 447c5246..77b94a90 100644 --- a/tests/generator/lib.php +++ b/tests/generator/lib.php @@ -76,10 +76,10 @@ public function questionnaires() { /** * Create a questionnaire activity. * @param array $record Will be changed in this function. - * @param array $options + * @param array|null $options * @return questionnaire */ - public function create_instance($record = null, array $options = null) { + public function create_instance($record = null, ?array $options = null) { $record = (object)(array)$record; $defaultquestionnairesettings = array( From 4e8402f5bd74a90d19f343b3ebde2fdd7c3b2f2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20B=C3=B6sch?= Date: Mon, 14 Jul 2025 19:57:35 +0200 Subject: [PATCH 3/5] Resolved Data Provider method is not static --- tests/custom_completion_test.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/custom_completion_test.php b/tests/custom_completion_test.php index e46ce656..c266b8a5 100644 --- a/tests/custom_completion_test.php +++ b/tests/custom_completion_test.php @@ -51,7 +51,7 @@ class custom_completion_test extends \advanced_testcase { * * @return array[] */ - public function get_state_provider(): array { + public static function get_state_provider(): array { return [ 'Undefined rule' => [ 'somenonexistentrule', COMPLETION_DISABLED, false, null, coding_exception::class @@ -178,7 +178,7 @@ public function test_is_defined() { * * @return array[] */ - public function get_available_custom_rules_provider(): array { + public static function get_available_custom_rules_provider(): array { return [ 'Completion submit available' => [ COMPLETION_ENABLED, ['completionsubmit'] From 7d19ae74e87d43d7332d1504d7b7376822ed2072 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20B=C3=B6sch?= Date: Mon, 14 Jul 2025 22:44:14 +0200 Subject: [PATCH 4/5] Resolved Moodle PHPDoc Checker issues --- .github/workflows/ci.yml | 2 +- classes/output/renderer.php | 6 +++--- classes/question/question.php | 2 +- questionnaire.class.php | 4 ++-- tests/custom_completion_test.php | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d09e13ea..40a65707 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -88,7 +88,7 @@ jobs: - name: Moodle PHPDoc Checker if: ${{ always() }} - run: moodle-plugin-ci phpdoc || true + run: moodle-plugin-ci phpdoc - name: Validating if: ${{ always() }} diff --git a/classes/output/renderer.php b/classes/output/renderer.php index 85497f8a..4990105c 100755 --- a/classes/output/renderer.php +++ b/classes/output/renderer.php @@ -570,9 +570,9 @@ public function download_dataformat_selector($label, $base, $name = 'dataformat' } /** - * @param $urlroot - * @param $options - * @param $userview + * @param moodle_url $urlroot + * @param array $options + * @param string $userview * @return string * @throws \coding_exception * @throws \moodle_exception diff --git a/classes/question/question.php b/classes/question/question.php index 2c96a833..4b208695 100644 --- a/classes/question/question.php +++ b/classes/question/question.php @@ -652,7 +652,7 @@ public function update($questionrecord = null, $updatechoices = true) { /** * Add the question to the database from supplied arguments. * @param \stdClass $questionrecord The required data for adding the question. - * @param array $choicerecords An array of choice records with 'content' and 'value' properties. + * @param array|null $choicerecords An array of choice records with 'content' and 'value' properties. * @param bool|null $calcposition Whether or not to calculate the next available position in the survey. */ public function add($questionrecord, ?array $choicerecords = null, ?bool $calcposition = true) { diff --git a/questionnaire.class.php b/questionnaire.class.php index 5fd3bebe..8476c204 100644 --- a/questionnaire.class.php +++ b/questionnaire.class.php @@ -4191,9 +4191,9 @@ public static function get_user_identity_fields($context, $userid) { } /** - * Output the questionnair information. + * Output the questionnaire information. * - * @param array $messages any access messages that should be described. + * @return string */ public function view_information() { $messages = []; diff --git a/tests/custom_completion_test.php b/tests/custom_completion_test.php index c266b8a5..7a9169bb 100644 --- a/tests/custom_completion_test.php +++ b/tests/custom_completion_test.php @@ -75,7 +75,7 @@ public static function get_state_provider(): array { * @dataProvider get_state_provider * @param string $rule The custom completion rule. * @param int $available Whether this rule is available. - * @param bool $submitted + * @param bool|null $submitted * @param int|null $status Expected status. * @param string|null $exception Expected exception. * @throws coding_exception From 626290cf74af949bfc0589990c9555ba5ee37f3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luca=20B=C3=B6sch?= Date: Mon, 14 Jul 2025 23:13:40 +0200 Subject: [PATCH 5/5] Resolved Moodle Code Checker issues --- .github/workflows/ci.yml | 3 +- LICENSE.txt | 2 +- backup/moodle1/lib.php | 28 +- .../moodle2/backup_questionnaire_stepslib.php | 86 ++--- ...tore_questionnaire_activity_task.class.php | 18 +- .../restore_questionnaire_stepslib.php | 7 +- classes/completion/custom_completion.php | 5 +- classes/db/bulk_sql_config.php | 2 +- classes/edit_question_form.php | 2 + classes/event/all_responses_saved_as_text.php | 2 +- classes/event/all_responses_viewed.php | 2 +- classes/event/attempt_resumed.php | 2 +- classes/event/attempt_saved.php | 2 +- classes/event/attempt_submitted.php | 2 +- classes/event/non_respondents_viewed.php | 2 +- classes/event/questionnaire_previewed.php | 2 +- classes/event/response_viewed.php | 2 +- classes/feedback_form.php | 6 +- classes/output/mobile.php | 4 +- classes/output/renderer.php | 25 +- classes/privacy/provider.php | 10 +- classes/question/drop.php | 2 +- classes/question/essay.php | 4 +- classes/question/pagebreak.php | 2 +- classes/question/question.php | 17 +- classes/question/rate.php | 20 +- classes/question/sectiontext.php | 4 +- classes/questions_form.php | 55 +-- classes/responsetype/answer/answer.php | 3 +- classes/responsetype/boolean.php | 2 +- classes/responsetype/date.php | 4 +- classes/responsetype/rank.php | 66 ++-- classes/responsetype/response/response.php | 2 +- classes/responsetype/responsetype.php | 6 +- classes/responsetype/single.php | 2 +- classes/responsetype/text.php | 2 +- classes/settings_form.php | 16 +- complete.php | 7 +- db/access.php | 176 ++++----- db/log.php | 10 +- db/messages.php | 2 +- db/mobile.php | 10 +- db/services.php | 8 +- db/tasks.php | 10 +- db/upgrade.php | 72 ++-- drawchart.php | 21 +- externallib.php | 8 +- grade.php | 6 +- index.php | 20 +- lang/en/questionnaire.php | 3 + lib.php | 128 +++---- locallib.php | 84 ++-- mod_form.php | 12 +- myreport.php | 9 +- preview.php | 18 +- print.php | 5 +- qsettings.php | 18 +- questionnaire.class.php | 191 +++++----- questions.php | 22 +- report.php | 63 +-- settings.php | 8 +- show_nonrespondents.php | 51 +-- tabs.php | 34 +- tests/behat/behat_mod_questionnaire.php | 360 +++++++++--------- tests/csvexport_test.php | 11 +- tests/custom_completion_test.php | 30 +- tests/generator/lib.php | 36 +- tests/generator_test.php | 20 +- tests/lib_test.php | 48 +-- tests/privacy_provider_test.php | 17 +- tests/questiontypes_test.php | 72 ++-- tests/responsetypes_test.php | 33 +- view.php | 7 +- 73 files changed, 1049 insertions(+), 1002 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 40a65707..c0860be4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -72,6 +72,7 @@ jobs: MOODLE_BRANCH: ${{ matrix.moodle-branch }} IGNORE_PATHS: 'templates/local/mobile' PHPDOCCHECKER_IGNORE_PATHS: /^vendor/ + CODECHECKER_IGNORE_NAMES: 'mobiledump.txt' - name: PHP Lint if: ${{ always() }} @@ -84,7 +85,7 @@ jobs: - name: Moodle Code Checker if: ${{ always() }} - run: moodle-plugin-ci codechecker || true + run: moodle-plugin-ci codechecker - name: Moodle PHPDoc Checker if: ${{ always() }} diff --git a/LICENSE.txt b/LICENSE.txt index 20d40b6b..94a9ed02 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -671,4 +671,4 @@ into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. \ No newline at end of file +. diff --git a/backup/moodle1/lib.php b/backup/moodle1/lib.php index bd8d7d9b..8ac2f081 100644 --- a/backup/moodle1/lib.php +++ b/backup/moodle1/lib.php @@ -42,22 +42,22 @@ class moodle1_mod_questionnaire_handler extends moodle1_mod_handler { * @return array of convert_path instances */ public function get_paths() { - return array( + return [ new convert_path( 'questionnaire', '/MOODLE_BACKUP/COURSE/MODULES/MOD/QUESTIONNAIRE', - array( - 'renamefields' => array( + [ + 'renamefields' => [ 'summary' => 'intro', - ), - 'newfields' => array( + ], + 'newfields' => [ 'introformat' => 0, - ), - ) + ], + ] ), new convert_path('survey', '/MOODLE_BACKUP/COURSE/MODULES/MOD/QUESTIONNAIRE/SURVEY'), new convert_path('question', '/MOODLE_BACKUP/COURSE/MODULES/MOD/QUESTIONNAIRE/SURVEY/QUESTION'), new convert_path('question_choice', '/MOODLE_BACKUP/COURSE/MODULES/MOD/QUESTIONNAIRE/SURVEY/QUESTION/QUESTION_CHOICE'), - ); + ]; } /** @@ -74,9 +74,9 @@ public function process_questionnaire($data) { // We now have all information needed to start writing into the file. $this->open_xml_writer("activities/questionnaire_{$moduleid}/questionnaire.xml"); - $this->xmlwriter->begin_tag('activity', array('id' => $instanceid, 'moduleid' => $moduleid, - 'modulename' => 'questionnaire', 'contextid' => $contextid)); - $this->xmlwriter->begin_tag('questionnaire', array('id' => $instanceid)); + $this->xmlwriter->begin_tag('activity', ['id' => $instanceid, 'moduleid' => $moduleid, + 'modulename' => 'questionnaire', 'contextid' => $contextid, ]); + $this->xmlwriter->begin_tag('questionnaire', ['id' => $instanceid]); unset($data['id']); // We already write it as attribute, do not repeat it as child element. foreach ($data as $field => $value) { @@ -101,7 +101,7 @@ public function on_questionnaire_end() { * @param array $data */ public function process_survey($data) { - $this->xmlwriter->begin_tag('survey', array('id' => $data['id'])); + $this->xmlwriter->begin_tag('survey', ['id' => $data['id']]); unset($data['id']); // We already write it as attribute, do not repeat it as child element. foreach ($data as $field => $value) { $this->xmlwriter->full_tag($field, $value); @@ -124,7 +124,7 @@ public function on_survey_end() { */ public function process_question($data) { - $this->xmlwriter->begin_tag('question', array('id' => $data['id'])); + $this->xmlwriter->begin_tag('question', ['id' => $data['id']]); unset($data['id']); // We already write it as attribute, do not repeat it as child element. foreach ($data as $field => $value) { @@ -148,6 +148,6 @@ public function on_question_end() { * @param array $data */ public function process_question_choice($data) { - $this->write_xml('quest_choice', $data, array('/question_choice/id')); + $this->write_xml('quest_choice', $data, ['/question_choice/id']); } } diff --git a/backup/moodle2/backup_questionnaire_stepslib.php b/backup/moodle2/backup_questionnaire_stepslib.php index 430fe151..c5df6a20 100644 --- a/backup/moodle2/backup_questionnaire_stepslib.php +++ b/backup/moodle2/backup_questionnaire_stepslib.php @@ -36,78 +36,78 @@ protected function define_structure() { $userinfo = $this->get_setting_value('userinfo'); // Define each element separated. - $questionnaire = new backup_nested_element('questionnaire', array('id'), array( + $questionnaire = new backup_nested_element('questionnaire', ['id'], [ 'course', 'name', 'intro', 'introformat', 'qtype', 'respondenttype', 'resp_eligible', 'resp_view', 'notifications', 'opendate', - 'closedate', 'resume', 'navigate', 'grade', 'sid', 'timemodified', 'completionsubmit', 'autonum', 'removeafter')); + 'closedate', 'resume', 'navigate', 'grade', 'sid', 'timemodified', 'completionsubmit', 'autonum', 'removeafter', ]); $surveys = new backup_nested_element('surveys'); - $survey = new backup_nested_element('survey', array('id'), array( + $survey = new backup_nested_element('survey', ['id'], [ 'name', 'courseid', 'realm', 'status', 'title', 'email', 'subtitle', 'info', 'theme', 'thanks_page', 'thank_head', 'thank_body', 'feedbacksections', - 'feedbacknotes', 'feedbackscores', 'chart_type')); + 'feedbacknotes', 'feedbackscores', 'chart_type', ]); $questions = new backup_nested_element('questions'); - $question = new backup_nested_element('question', array('id'), array('surveyid', 'name', 'type_id', 'result_id', - 'length', 'precise', 'position', 'content', 'required', 'deleted', 'extradata')); + $question = new backup_nested_element('question', ['id'], ['surveyid', 'name', 'type_id', 'result_id', + 'length', 'precise', 'position', 'content', 'required', 'deleted', 'extradata', ]); $questchoices = new backup_nested_element('quest_choices'); - $questchoice = new backup_nested_element('quest_choice', array('id'), array('question_id', 'content', 'value')); + $questchoice = new backup_nested_element('quest_choice', ['id'], ['question_id', 'content', 'value']); $questdependencies = new backup_nested_element('quest_dependencies'); - $questdependency = new backup_nested_element('quest_dependency', array('id'), array( - 'dependquestionid', 'dependchoiceid', 'dependlogic', 'questionid', 'surveyid', 'dependandor')); + $questdependency = new backup_nested_element('quest_dependency', ['id'], [ + 'dependquestionid', 'dependchoiceid', 'dependlogic', 'questionid', 'surveyid', 'dependandor', ]); $fbsections = new backup_nested_element('fb_sections'); - $fbsection = new backup_nested_element('fb_section', array('id'), array( - 'surveyid', 'section', 'scorecalculation', 'sectionlabel', 'sectionheading', 'sectionheadingformat')); + $fbsection = new backup_nested_element('fb_section', ['id'], [ + 'surveyid', 'section', 'scorecalculation', 'sectionlabel', 'sectionheading', 'sectionheadingformat', ]); $feedbacks = new backup_nested_element('feedbacks'); - $feedback = new backup_nested_element('feedback', array('id'), array( - 'sectionid', 'feedbacklabel', 'feedbacktext', 'feedbacktextformat', 'minscore', 'maxscore')); + $feedback = new backup_nested_element('feedback', ['id'], [ + 'sectionid', 'feedbacklabel', 'feedbacktext', 'feedbacktextformat', 'minscore', 'maxscore', ]); $responses = new backup_nested_element('responses'); - $response = new backup_nested_element('response', array('id'), array( - 'questionnaireid', 'submitted', 'complete', 'grade', 'userid')); + $response = new backup_nested_element('response', ['id'], [ + 'questionnaireid', 'submitted', 'complete', 'grade', 'userid', ]); $responsebools = new backup_nested_element('response_bools'); - $responsebool = new backup_nested_element('response_bool', array('id'), array('response_id', 'question_id', 'choice_id')); + $responsebool = new backup_nested_element('response_bool', ['id'], ['response_id', 'question_id', 'choice_id']); $responsedates = new backup_nested_element('response_dates'); - $responsedate = new backup_nested_element('response_date', array('id'), array('response_id', 'question_id', 'response')); + $responsedate = new backup_nested_element('response_date', ['id'], ['response_id', 'question_id', 'response']); $responsemultiples = new backup_nested_element('response_multiples'); - $responsemultiple = new backup_nested_element('response_multiple', array('id'), array( - 'response_id', 'question_id', 'choice_id')); + $responsemultiple = new backup_nested_element('response_multiple', ['id'], [ + 'response_id', 'question_id', 'choice_id', ]); $responseothers = new backup_nested_element('response_others'); - $responseother = new backup_nested_element('response_other', array('id'), array( - 'response_id', 'question_id', 'choice_id', 'response')); + $responseother = new backup_nested_element('response_other', ['id'], [ + 'response_id', 'question_id', 'choice_id', 'response', ]); $responseranks = new backup_nested_element('response_ranks'); - $responserank = new backup_nested_element('response_rank', array('id'), array( - 'response_id', 'question_id', 'choice_id', 'rankvalue')); + $responserank = new backup_nested_element('response_rank', ['id'], [ + 'response_id', 'question_id', 'choice_id', 'rankvalue', ]); $responsesingles = new backup_nested_element('response_singles'); - $responsesingle = new backup_nested_element('response_single', array('id'), array( - 'response_id', 'question_id', 'choice_id')); + $responsesingle = new backup_nested_element('response_single', ['id'], [ + 'response_id', 'question_id', 'choice_id', ]); $responsetexts = new backup_nested_element('response_texts'); - $responsetext = new backup_nested_element('response_text', array('id'), array('response_id', 'question_id', 'response')); + $responsetext = new backup_nested_element('response_text', ['id'], ['response_id', 'question_id', 'response']); // Build the tree. $questionnaire->add_child($surveys); @@ -153,12 +153,12 @@ protected function define_structure() { $responsetexts->add_child($responsetext); // Define sources. - $questionnaire->set_source_table('questionnaire', array('id' => backup::VAR_ACTIVITYID)); + $questionnaire->set_source_table('questionnaire', ['id' => backup::VAR_ACTIVITYID]); // Is current questionnaire based on a public questionnaire? $qid = $this->task->get_activityid(); - $currentquestionnaire = $DB->get_record("questionnaire", array ("id" => $qid)); - $currentsurvey = $DB->get_record("questionnaire_survey", array ("id" => $currentquestionnaire->sid)); + $currentquestionnaire = $DB->get_record("questionnaire", ["id" => $qid]); + $currentsurvey = $DB->get_record("questionnaire_survey", ["id" => $currentquestionnaire->sid]); $haspublic = false; if ($currentsurvey->realm == 'public' && $currentsurvey->courseid != $currentquestionnaire->course) { $haspublic = true; @@ -166,23 +166,23 @@ protected function define_structure() { // If current questionnaire is based on a public one, do not include survey nor questions in backup. if (!$haspublic) { - $survey->set_source_table('questionnaire_survey', array('id' => '../../sid')); - $question->set_source_table('questionnaire_question', array('surveyid' => backup::VAR_PARENTID)); - $fbsection->set_source_table('questionnaire_fb_sections', array('surveyid' => backup::VAR_PARENTID)); - $feedback->set_source_table('questionnaire_feedback', array('sectionid' => backup::VAR_PARENTID)); - $questchoice->set_source_table('questionnaire_quest_choice', array('question_id' => backup::VAR_PARENTID), 'id ASC'); - $questdependency->set_source_table('questionnaire_dependency', array('questionid' => backup::VAR_PARENTID)); + $survey->set_source_table('questionnaire_survey', ['id' => '../../sid']); + $question->set_source_table('questionnaire_question', ['surveyid' => backup::VAR_PARENTID]); + $fbsection->set_source_table('questionnaire_fb_sections', ['surveyid' => backup::VAR_PARENTID]); + $feedback->set_source_table('questionnaire_feedback', ['sectionid' => backup::VAR_PARENTID]); + $questchoice->set_source_table('questionnaire_quest_choice', ['question_id' => backup::VAR_PARENTID], 'id ASC'); + $questdependency->set_source_table('questionnaire_dependency', ['questionid' => backup::VAR_PARENTID]); // All the rest of elements only happen if we are including user info. if ($userinfo) { - $response->set_source_table('questionnaire_response', array('questionnaireid' => backup::VAR_PARENTID)); - $responsebool->set_source_table('questionnaire_response_bool', array('response_id' => backup::VAR_PARENTID)); - $responsedate->set_source_table('questionnaire_response_date', array('response_id' => backup::VAR_PARENTID)); - $responsemultiple->set_source_table('questionnaire_resp_multiple', array('response_id' => backup::VAR_PARENTID)); - $responseother->set_source_table('questionnaire_response_other', array('response_id' => backup::VAR_PARENTID)); - $responserank->set_source_table('questionnaire_response_rank', array('response_id' => backup::VAR_PARENTID)); - $responsesingle->set_source_table('questionnaire_resp_single', array('response_id' => backup::VAR_PARENTID)); - $responsetext->set_source_table('questionnaire_response_text', array('response_id' => backup::VAR_PARENTID)); + $response->set_source_table('questionnaire_response', ['questionnaireid' => backup::VAR_PARENTID]); + $responsebool->set_source_table('questionnaire_response_bool', ['response_id' => backup::VAR_PARENTID]); + $responsedate->set_source_table('questionnaire_response_date', ['response_id' => backup::VAR_PARENTID]); + $responsemultiple->set_source_table('questionnaire_resp_multiple', ['response_id' => backup::VAR_PARENTID]); + $responseother->set_source_table('questionnaire_response_other', ['response_id' => backup::VAR_PARENTID]); + $responserank->set_source_table('questionnaire_response_rank', ['response_id' => backup::VAR_PARENTID]); + $responsesingle->set_source_table('questionnaire_resp_single', ['response_id' => backup::VAR_PARENTID]); + $responsetext->set_source_table('questionnaire_response_text', ['response_id' => backup::VAR_PARENTID]); } // Define id annotations. diff --git a/backup/moodle2/restore_questionnaire_activity_task.class.php b/backup/moodle2/restore_questionnaire_activity_task.class.php index ebb066b7..d5f4efca 100644 --- a/backup/moodle2/restore_questionnaire_activity_task.class.php +++ b/backup/moodle2/restore_questionnaire_activity_task.class.php @@ -48,14 +48,14 @@ protected function define_my_steps() { * processed by the link decoder */ public static function define_decode_contents() { - $contents = array(); + $contents = []; - $contents[] = new restore_decode_content('questionnaire', array('intro'), 'questionnaire'); + $contents[] = new restore_decode_content('questionnaire', ['intro'], 'questionnaire'); $contents[] = new restore_decode_content('questionnaire_survey', - array('info', 'thank_head', 'thank_body', 'thanks_page', 'feedbacknotes'), 'questionnaire_survey'); - $contents[] = new restore_decode_content('questionnaire_question', array('content'), 'questionnaire_question'); - $contents[] = new restore_decode_content('questionnaire_fb_sections', array('sectionheading'), 'questionnaire_fb_sections'); - $contents[] = new restore_decode_content('questionnaire_feedback', array('feedbacktext'), 'questionnaire_feedback'); + ['info', 'thank_head', 'thank_body', 'thanks_page', 'feedbacknotes'], 'questionnaire_survey'); + $contents[] = new restore_decode_content('questionnaire_question', ['content'], 'questionnaire_question'); + $contents[] = new restore_decode_content('questionnaire_fb_sections', ['sectionheading'], 'questionnaire_fb_sections'); + $contents[] = new restore_decode_content('questionnaire_feedback', ['feedbacktext'], 'questionnaire_feedback'); return $contents; } @@ -65,7 +65,7 @@ public static function define_decode_contents() { * to the activity to be executed by the link decoder */ public static function define_decode_rules() { - $rules = array(); + $rules = []; $rules[] = new restore_decode_rule('QUESTIONNAIREVIEWBYID', '/mod/questionnaire/view.php?id=$1', 'course_module'); $rules[] = new restore_decode_rule('QUESTIONNAIREINDEX', '/mod/questionnaire/index.php?id=$1', 'course'); @@ -81,7 +81,7 @@ public static function define_decode_rules() { * of restore_log_rule objects */ public static function define_restore_log_rules() { - $rules = array(); + $rules = []; $rules[] = new restore_log_rule('questionnaire', 'add', 'view.php?id={course_module}', '{questionnaire}'); $rules[] = new restore_log_rule('questionnaire', 'update', 'view.php?id={course_module}', '{questionnaire}'); @@ -104,7 +104,7 @@ public static function define_restore_log_rules() { * activity level. All them are rules not linked to any module instance (cmid = 0) */ public static function define_restore_log_rules_for_course() { - $rules = array(); + $rules = []; // Fix old wrong uses (missing extension). $rules[] = new restore_log_rule('questionnaire', 'view all', 'index?id={course}', null, diff --git a/backup/moodle2/restore_questionnaire_stepslib.php b/backup/moodle2/restore_questionnaire_stepslib.php index d5235635..f52a64b3 100644 --- a/backup/moodle2/restore_questionnaire_stepslib.php +++ b/backup/moodle2/restore_questionnaire_stepslib.php @@ -13,6 +13,7 @@ // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . + use mod_questionnaire\feedback\section; /** @@ -48,7 +49,7 @@ class restore_questionnaire_activity_structure_step extends restore_activity_str */ protected function define_structure() { - $paths = array(); + $paths = []; $userinfo = $this->get_setting_value('userinfo'); $paths[] = new restore_path_element('questionnaire', '/activity/questionnaire'); @@ -150,7 +151,7 @@ protected function process_questionnaire_survey($data) { $this->set_mapping('questionnaire_survey', $oldid, $newitemid, true); // Update the questionnaire record we just created with the new survey id. - $DB->set_field('questionnaire', 'sid', $newitemid, array('id' => $this->get_new_parentid('questionnaire'))); + $DB->set_field('questionnaire', 'sid', $newitemid, ['id' => $this->get_new_parentid('questionnaire')]); } /** @@ -191,7 +192,7 @@ protected function process_questionnaire_fb_sections($data) { // If this questionnaire has separate sections feedbacks. if (isset($data->scorecalculation)) { $scorecalculation = section::decode_scorecalculation($data->scorecalculation); - $newscorecalculation = array(); + $newscorecalculation = []; foreach ($scorecalculation as $qid => $val) { $newqid = $this->get_mappingid('questionnaire_question', $qid); $newscorecalculation[$newqid] = $val; diff --git a/classes/completion/custom_completion.php b/classes/completion/custom_completion.php index 3e7542f8..e946bb3a 100644 --- a/classes/completion/custom_completion.php +++ b/classes/completion/custom_completion.php @@ -13,6 +13,7 @@ // // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . + declare(strict_types=1); namespace mod_questionnaire\completion; @@ -57,7 +58,7 @@ public function get_state(string $rule): int { */ public static function get_defined_custom_rules(): array { return [ - 'completionsubmit' + 'completionsubmit', ]; } @@ -68,7 +69,7 @@ public static function get_defined_custom_rules(): array { */ public function get_custom_rule_descriptions(): array { return [ - 'completionsubmit' => get_string('completionsubmit', 'questionnaire') + 'completionsubmit' => get_string('completionsubmit', 'questionnaire'), ]; } diff --git a/classes/db/bulk_sql_config.php b/classes/db/bulk_sql_config.php index dce187cd..ee2dc7d8 100644 --- a/classes/db/bulk_sql_config.php +++ b/classes/db/bulk_sql_config.php @@ -74,7 +74,7 @@ public function get_extra_select() { return [ 'choice_id' => $this->usechoiceid, 'response' => $this->useresponse, - 'rankvalue' => $this->userank + 'rankvalue' => $this->userank, ]; } } diff --git a/classes/edit_question_form.php b/classes/edit_question_form.php index 92098e84..af45970a 100644 --- a/classes/edit_question_form.php +++ b/classes/edit_question_form.php @@ -40,9 +40,11 @@ class edit_question_form extends \moodleform { * Form definition. */ public function definition() { + // phpcs:disable moodle.Commenting.TodoComment // TODO - Find a way to not use globals. Maybe the base class allows more parameters to be passed? global $questionnaire, $question, $SESSION; + // phpcs:disable moodle.Commenting.TodoComment // TODO - Is there a better way to do this without session global? // The 'sticky' required response value for further new questions. if (isset($SESSION->questionnaire->required) && !isset($question->qid)) { diff --git a/classes/event/all_responses_saved_as_text.php b/classes/event/all_responses_saved_as_text.php index 860b27c0..550ab105 100644 --- a/classes/event/all_responses_saved_as_text.php +++ b/classes/event/all_responses_saved_as_text.php @@ -68,7 +68,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - $params = array(); + $params = []; $params['action'] = 'vall'; $params['group'] = $this->other['currentgroupid']; return new \moodle_url("/mod/questionnaire/report.php", $params); diff --git a/classes/event/all_responses_viewed.php b/classes/event/all_responses_viewed.php index 98b59ce3..41a6d7c8 100644 --- a/classes/event/all_responses_viewed.php +++ b/classes/event/all_responses_viewed.php @@ -75,7 +75,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - $params = array(); + $params = []; $params['id'] = $this->contextinstanceid; if (isset($this->other['action'])) { $params['action'] = $this->other['action']; diff --git a/classes/event/attempt_resumed.php b/classes/event/attempt_resumed.php index c2057e2c..d8db6524 100644 --- a/classes/event/attempt_resumed.php +++ b/classes/event/attempt_resumed.php @@ -68,7 +68,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - return new \moodle_url("/mod/questionnaire/view.php", array('id' => $this->contextinstanceid)); + return new \moodle_url("/mod/questionnaire/view.php", ['id' => $this->contextinstanceid]); } } diff --git a/classes/event/attempt_saved.php b/classes/event/attempt_saved.php index c5ca4cea..aa1b7ec7 100644 --- a/classes/event/attempt_saved.php +++ b/classes/event/attempt_saved.php @@ -67,7 +67,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - return new \moodle_url("/mod/questionnaire/view.php", array('id' => $this->contextinstanceid)); + return new \moodle_url("/mod/questionnaire/view.php", ['id' => $this->contextinstanceid]); } /** diff --git a/classes/event/attempt_submitted.php b/classes/event/attempt_submitted.php index 274bdcbb..6372f976 100644 --- a/classes/event/attempt_submitted.php +++ b/classes/event/attempt_submitted.php @@ -67,7 +67,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - return new \moodle_url("/mod/questionnaire/view.php", array('id' => $this->contextinstanceid)); + return new \moodle_url("/mod/questionnaire/view.php", ['id' => $this->contextinstanceid]); } /** diff --git a/classes/event/non_respondents_viewed.php b/classes/event/non_respondents_viewed.php index cc27edf7..85fb6869 100644 --- a/classes/event/non_respondents_viewed.php +++ b/classes/event/non_respondents_viewed.php @@ -68,7 +68,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - $params = array(); + $params = []; $params['id'] = $this->contextinstanceid; return new \moodle_url("/mod/questionnaire/show_nonrespondents.php", $params); } diff --git a/classes/event/questionnaire_previewed.php b/classes/event/questionnaire_previewed.php index c4607e81..8b7d039b 100644 --- a/classes/event/questionnaire_previewed.php +++ b/classes/event/questionnaire_previewed.php @@ -67,7 +67,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - $params = array(); + $params = []; $params['id'] = $this->contextinstanceid; return new \moodle_url("/mod/questionnaire/preview.php", $params); } diff --git a/classes/event/response_viewed.php b/classes/event/response_viewed.php index 404f3955..eac00291 100644 --- a/classes/event/response_viewed.php +++ b/classes/event/response_viewed.php @@ -68,7 +68,7 @@ public function get_description() { * @return \moodle_url */ public function get_url() { - $params = array(); + $params = []; $params['action'] = 'vresp'; $params['individualresponse'] = 1; $params['rid'] = $this->other['rid']; diff --git a/classes/feedback_form.php b/classes/feedback_form.php index 25260847..7378aa2a 100644 --- a/classes/feedback_form.php +++ b/classes/feedback_form.php @@ -59,7 +59,7 @@ public function definition() { $chartgroup = []; $charttypes = [null => get_string('none'), 'bipolar' => get_string('chart:bipolar', 'questionnaire'), - 'vprogress' => get_string('chart:vprogress', 'questionnaire')]; + 'vprogress' => get_string('chart:vprogress', 'questionnaire'), ]; $chartgroup[] = $mform->createElement('select', 'chart_type_global', get_string('chart:type', 'questionnaire') . ' (' . get_string('feedbackglobal', 'questionnaire') . ')', $charttypes); @@ -72,7 +72,7 @@ public function definition() { $charttypes = [null => get_string('none'), 'bipolar' => get_string('chart:bipolar', 'questionnaire'), 'hbar' => get_string('chart:hbar', 'questionnaire'), - 'rose' => get_string('chart:rose', 'questionnaire')]; + 'rose' => get_string('chart:rose', 'questionnaire'), ]; $chartgroup[] = $mform->createElement('select', 'chart_type_two_sections', get_string('chart:type', 'questionnaire') . ' (' . get_string('feedbackbysection', 'questionnaire') . ')', $charttypes); @@ -85,7 +85,7 @@ public function definition() { 'bipolar' => get_string('chart:bipolar', 'questionnaire'), 'hbar' => get_string('chart:hbar', 'questionnaire'), 'radar' => get_string('chart:radar', 'questionnaire'), - 'rose' => get_string('chart:rose', 'questionnaire')]; + 'rose' => get_string('chart:rose', 'questionnaire'), ]; $chartgroup[] = $mform->createElement('select', 'chart_type_sections', get_string('chart:type', 'questionnaire') . ' (' . get_string('feedbackbysection', 'questionnaire') . ')', $charttypes); diff --git a/classes/output/mobile.php b/classes/output/mobile.php index 0e3d0d28..a1138f90 100644 --- a/classes/output/mobile.php +++ b/classes/output/mobile.php @@ -183,12 +183,12 @@ public static function mobile_view_activity($args) { 'templates' => [ [ 'id' => 'main', - 'html' => $OUTPUT->render_from_template($template, $data) + 'html' => $OUTPUT->render_from_template($template, $data), ], ], 'javascript' => file_get_contents($CFG->dirroot . '/mod/questionnaire/appjs/uncheckother.js'), 'otherdata' => $responses, - 'files' => null + 'files' => null, ]; return $return; } diff --git a/classes/output/renderer.php b/classes/output/renderer.php index 4990105c..357498d5 100755 --- a/classes/output/renderer.php +++ b/classes/output/renderer.php @@ -382,7 +382,7 @@ public function print_preview_formend($url, $submitstr, $resetstr) { $output = ''; $output .= \html_writer::start_tag('div'); $output .= \html_writer::empty_tag('input', ['type' => 'submit', 'name' => 'submit', 'value' => $submitstr, - 'class' => 'btn btn-primary']); + 'class' => 'btn btn-primary', ]); $output .= ' '; $output .= \html_writer::tag('a', $resetstr, ['href' => $url, 'class' => 'btn btn-secondary mr-1']); $output .= \html_writer::end_tag('div') . "\n"; @@ -415,7 +415,7 @@ public function homelink($url, $text) { public function dependency_warnings($children, $langstring, $strnum) { $msg = '
' . get_string($langstring, 'questionnaire') . '

'; foreach ($children as $child) { - $loopindicator = array(); + $loopindicator = []; foreach ($child as $subchild) { $childname = ''; if ($subchild->name) { @@ -487,6 +487,7 @@ public function get_dependency_html($qid, $dependencies) { $logic = ''; } + // phpcs:disable moodle.Commenting.TodoComment // TODO - Move the HTML generation to the renderer. if ($dependency->dependandor == "and") { $html .= '