diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..cc4ee16c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,122 @@ +name: Moodle plugin CI +on: [push, pull_request] + +jobs: + test: + runs-on: 'ubuntu-latest' + strategy: + fail-fast: false + matrix: + include: + - php: '7.4' + moodle-branch: 'MOODLE_311_STABLE' + database: 'mariadb' + node: '14.15.0' + - php: '7.3' + moodle-branch: 'MOODLE_310_STABLE' + database: 'mariadb' + node: '14.15.0' + - php: '7.4' + moodle-branch: 'MOODLE_311_STABLE' + database: 'pgsql' + node: '14.15.0' + - php: '7.3' + moodle-branch: 'MOODLE_310_STABLE' + database: 'pgsql' + node: '14.15.0' + + services: + postgres: + image: postgres + env: + POSTGRES_USER: 'postgres' + POSTGRES_HOST_AUTH_METHOD: 'trust' + options: >- + --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 3 + ports: + - 5432:5432 + + mariadb: + image: mariadb + env: + MYSQL_USER: 'root' + MYSQL_ALLOW_EMPTY_PASSWORD: "true" + ports: + - 3306:3306 + options: --health-cmd="mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 3 + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + path: plugin + + - name: Install node + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node }} + + - name: Setup PHP + uses: shivammathur/setup-php@v2 + with: + php-version: ${{ matrix.php }} + extensions: zip, gd, mbstring, pgsql, mysqli + + - name: Deploy moodle-plugin-ci + run: | + composer create-project -n --no-dev --prefer-dist moodlehq/moodle-plugin-ci ci ^3 + # Add dirs to $PATH + echo $(cd ci/bin; pwd) >> $GITHUB_PATH + echo $(cd ci/vendor/bin; pwd) >> $GITHUB_PATH + # PHPUnit depends on en_AU.UTF-8 locale + sudo locale-gen en_AU.UTF-8 + - name: Install Moodle + # Need explicit IP to stop mysql client fail on attempt to use unix socket. + run: moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 + env: + DB: ${{ matrix.database }} + MOODLE_BRANCH: ${{ matrix.moodle-branch }} + IGNORE_NAMES: 'mobile_*.mustache' + + - name: phplint + if: ${{ always() }} + run: moodle-plugin-ci phplint + + - name: phpcpd + if: ${{ always() }} + run: moodle-plugin-ci phpcpd || true + + - name: phpmd + if: ${{ always() }} + run: moodle-plugin-ci phpmd + + - name: codechecker + if: ${{ always() }} + run: moodle-plugin-ci codechecker + + - name: validate + if: ${{ always() }} + run: moodle-plugin-ci validate + + - name: savepoints + if: ${{ always() }} + run: moodle-plugin-ci savepoints + + - name: mustache + if: ${{ always() }} + run: moodle-plugin-ci mustache + + - name: grunt + if: ${{ always() }} + run: moodle-plugin-ci grunt + + - name: phpunit + if: ${{ always() }} + run: moodle-plugin-ci phpunit + + - name: behat + if: ${{ always() }} + run: moodle-plugin-ci behat --profile chrome \ No newline at end of file diff --git a/backup/moodle2/backup_questionnaire_activity_task.class.php b/backup/moodle2/backup_questionnaire_activity_task.class.php index f1473e21..33e4e2aa 100644 --- a/backup/moodle2/backup_questionnaire_activity_task.class.php +++ b/backup/moodle2/backup_questionnaire_activity_task.class.php @@ -53,7 +53,7 @@ protected function define_my_steps() { * Code the transformations to perform in the activity in * order to get transportable (encoded) links */ - static public function encode_content_links($content) { + public static function encode_content_links($content) { global $CFG; $base = preg_quote($CFG->wwwroot, "/"); diff --git a/backup/moodle2/backup_questionnaire_stepslib.php b/backup/moodle2/backup_questionnaire_stepslib.php index f767068d..5c25e689 100644 --- a/backup/moodle2/backup_questionnaire_stepslib.php +++ b/backup/moodle2/backup_questionnaire_stepslib.php @@ -190,10 +190,10 @@ protected function define_structure() { // Define id annotations. $response->annotate_ids('user', 'userid'); } - // Define file annotations + // Define file annotations. $questionnaire->annotate_files('mod_questionnaire', 'intro', null); // This file area hasn't itemid. - $survey->annotate_files('mod_questionnaire', 'info', 'id'); // By survey->id + $survey->annotate_files('mod_questionnaire', 'info', 'id'); // By survey->id. $survey->annotate_files('mod_questionnaire', 'thankbody', 'id'); // By survey->id. $question->annotate_files('mod_questionnaire', 'question', 'id'); // By question->id. diff --git a/backup/moodle2/restore_questionnaire_activity_task.class.php b/backup/moodle2/restore_questionnaire_activity_task.class.php index da6b7d50..60f28beb 100644 --- a/backup/moodle2/restore_questionnaire_activity_task.class.php +++ b/backup/moodle2/restore_questionnaire_activity_task.class.php @@ -51,7 +51,7 @@ protected function define_my_steps() { * Define the contents in the activity that must be * processed by the link decoder */ - static public function define_decode_contents() { + public static function define_decode_contents() { $contents = array(); $contents[] = new restore_decode_content('questionnaire', array('intro'), 'questionnaire'); @@ -66,7 +66,7 @@ static public function define_decode_contents() { * Define the decoding rules for links belonging * to the activity to be executed by the link decoder */ - static public function define_decode_rules() { + public static function define_decode_rules() { $rules = array(); $rules[] = new restore_decode_rule('QUESTIONNAIREVIEWBYID', '/mod/questionnaire/view.php?id=$1', 'course_module'); @@ -82,7 +82,7 @@ static public function define_decode_rules() { * questionnaire logs. It must return one array * of {@link restore_log_rule} objects */ - static public function define_restore_log_rules() { + public static function define_restore_log_rules() { $rules = array(); $rules[] = new restore_log_rule('questionnaire', 'add', 'view.php?id={course_module}', '{questionnaire}'); @@ -105,7 +105,7 @@ static public function define_restore_log_rules() { * by the restore final task, but are defined here at * activity level. All them are rules not linked to any module instance (cmid = 0) */ - static public function define_restore_log_rules_for_course() { + public static function define_restore_log_rules_for_course() { $rules = array(); // Fix old wrong uses (missing extension). diff --git a/classes/edit_question_form.php b/classes/edit_question_form.php index 71f65a41..eb5d4c49 100644 --- a/classes/edit_question_form.php +++ b/classes/edit_question_form.php @@ -46,12 +46,12 @@ public function definition() { $question->required = $SESSION->questionnaire->required; } if (!isset($question->type_id)) { - print_error('undefinedquestiontype', 'questionnaire'); + throw new \moodle_exception('undefinedquestiontype', 'mod_questionnaire'); } // Each question can provide its own form elements to the provided form, or use the default ones. if (!$question->edit_form($this, $questionnaire)) { - print_error("Question type had an unknown error in the edit_form method."); + throw new \moodle_exception('Question type had an unknown error in the edit_form method.', 'mod_questionnaire'); } } diff --git a/classes/question/check.php b/classes/question/check.php index 39fce792..54533ed3 100644 --- a/classes/question/check.php +++ b/classes/question/check.php @@ -269,7 +269,7 @@ public function supports_mobile() { */ protected function form_preprocess_choicedata($formdata) { if (empty($formdata->allchoices)) { - print_error(get_string('enterpossibleanswers', 'questionnaire')); + throw new \moodle_exception('enterpossibleanswers', 'mod_questionnaire'); } else { // Sanity checks for min and max checked boxes. $allchoices = $formdata->allchoices; diff --git a/classes/question/choice/choice.php b/classes/question/choice.php similarity index 96% rename from classes/question/choice/choice.php rename to classes/question/choice.php index 9184f2fb..f70733e2 100644 --- a/classes/question/choice/choice.php +++ b/classes/question/choice.php @@ -23,7 +23,7 @@ * @copyright 2019, onwards Poet */ -namespace mod_questionnaire\question\choice; +namespace mod_questionnaire\question; defined('MOODLE_INTERNAL') || die(); class choice { @@ -132,7 +132,7 @@ public function delete_from_db() { * @param string $content * @return bool */ - static public function content_is_other_choice($content) { + public static function content_is_other_choice($content) { return (strpos($content, '!other') === 0); } @@ -152,7 +152,7 @@ public function is_other_choice() { * @return string | bool * @throws \coding_exception */ - static public function content_other_choice_display($content) { + public static function content_other_choice_display($content) { if (!self::content_is_other_choice($content)) { return false; } @@ -197,7 +197,7 @@ public function is_named_degree_choice() { * @param int $choiceid * @return string */ - static public function id_other_choice_name($choiceid) { + public static function id_other_choice_name($choiceid) { return 'o' . $choiceid; } diff --git a/classes/question/drop.php b/classes/question/drop.php index 00789424..9efb1eb8 100644 --- a/classes/question/drop.php +++ b/classes/question/drop.php @@ -25,7 +25,7 @@ namespace mod_questionnaire\question; defined('MOODLE_INTERNAL') || die(); use \html_writer; -use mod_questionnaire\question\choice\choice; +use mod_questionnaire\question\choice; class drop extends question { diff --git a/classes/question/question.php b/classes/question/question.php index b3270f96..cf9c38a4 100644 --- a/classes/question/question.php +++ b/classes/question/question.php @@ -188,7 +188,7 @@ abstract public function helpname(); * @var object $context The context for the question. * @return A question object. */ - static public function question_builder($qtype, $qdata = null, $context = null) { + public static function question_builder($qtype, $qdata = null, $context = null) { $qclassname = '\\mod_questionnaire\\question\\'.self::qtypename($qtype); $qid = 0; if (!empty($qdata) && is_array($qdata)) { @@ -204,7 +204,7 @@ static public function question_builder($qtype, $qdata = null, $context = null) * @param $qtype * @return string */ - static public function qtypename($qtype) { + public static function qtypename($qtype) { if (array_key_exists($qtype, self::$qtypenames)) { return self::$qtypenames[$qtype]; } else { @@ -216,7 +216,7 @@ static public function qtypename($qtype) { * Return all of the different question type names. * @return array */ - static public function qtypenames() { + public static function qtypenames() { return self::$qtypenames; } @@ -235,7 +235,7 @@ private function get_choices() { if ($choices = $DB->get_records('questionnaire_quest_choice', ['question_id' => $this->id], 'id ASC')) { foreach ($choices as $choice) { - $this->choices[$choice->id] = choice\choice::create_from_data($choice); + $this->choices[$choice->id] = \mod_questionnaire\question\choice::create_from_data($choice); } } else { $this->choices = []; @@ -704,7 +704,7 @@ public function delete_choice($choice) { } else { $cid = $choice->id; } - if (\mod_questionnaire\question\choice\choice::delete_from_db_by_id($cid)) { + if (\mod_questionnaire\question\choice::delete_from_db_by_id($cid)) { unset($this->choices[$cid]); } else { $retvalue = false; @@ -894,7 +894,7 @@ public function questionstart_survey_display($qnum, $response=null) { if ($response instanceof \mod_questionnaire\responsetype\response\response) { $skippedquestion = !isset($response->answers[$this->id]); } else { - $skippedquestion = !empty($response) && !array_key_exists('q'.$this->id, $response); + $skippedquestion = !empty($response) && !isset($response->{'q'.$this->id}); } // If we are on report page and this questionnaire has dependquestions and this question was skipped. @@ -972,7 +972,7 @@ public function edit_form(edit_question_form $form, questionnaire $questionnaire $this->form_required($mform); $this->form_length($mform); $this->form_precise($mform); - $this->form_question_text($mform, $form->_customdata['modcontext']); + $this->form_question_text($mform, ($form->_customdata['modcontext'] ?? '')); if ($this->has_choices()) { // This is used only by the question editing form. @@ -1228,7 +1228,7 @@ protected function form_extradata(\MoodleQuickForm $mform, $helpname = '') { * @param int $value * @return \MoodleQuickForm */ - static public function form_length_hidden(\MoodleQuickForm $mform, $value = 0) { + public static function form_length_hidden(\MoodleQuickForm $mform, $value = 0) { $mform->addElement('hidden', 'length', $value); $mform->setType('length', PARAM_INT); return $mform; @@ -1241,7 +1241,7 @@ static public function form_length_hidden(\MoodleQuickForm $mform, $value = 0) { * @return \MoodleQuickForm * @throws \coding_exception */ - static public function form_length_text(\MoodleQuickForm $mform, $helpname = '', $value = 0) { + public static function form_length_text(\MoodleQuickForm $mform, $helpname = '', $value = 0) { $mform->addElement('text', 'length', get_string($helpname, 'questionnaire'), ['size' => '1'], $value); $mform->setType('length', PARAM_INT); if (!empty($helpname)) { @@ -1255,7 +1255,7 @@ static public function form_length_text(\MoodleQuickForm $mform, $helpname = '', * @param int $value * @return \MoodleQuickForm */ - static public function form_precise_hidden(\MoodleQuickForm $mform, $value = 0) { + public static function form_precise_hidden(\MoodleQuickForm $mform, $value = 0) { $mform->addElement('hidden', 'precise', $value); $mform->setType('precise', PARAM_INT); return $mform; @@ -1268,7 +1268,7 @@ static public function form_precise_hidden(\MoodleQuickForm $mform, $value = 0) * @return \MoodleQuickForm * @throws \coding_exception */ - static public function form_precise_text(\MoodleQuickForm $mform, $helpname = '', $value = 0) { + public static function form_precise_text(\MoodleQuickForm $mform, $helpname = '', $value = 0) { $mform->addElement('text', 'precise', get_string($helpname, 'questionnaire'), ['size' => '1']); $mform->setType('precise', PARAM_INT); if (!empty($helpname)) { @@ -1370,7 +1370,7 @@ public function form_update($formdata, $questionnaire) { } while ($nidx < $newcount) { - // New choices... + // New choices. $choicerecord = new \stdClass(); $choicerecord->question_id = $this->qid; $choicerecord->content = trim($newchoices[$nidx]); diff --git a/classes/question/radio.php b/classes/question/radio.php index 5c022387..a4c0266d 100644 --- a/classes/question/radio.php +++ b/classes/question/radio.php @@ -23,7 +23,6 @@ */ namespace mod_questionnaire\question; -use mod_questionnaire\question\choice\choice; defined('MOODLE_INTERNAL') || die(); @@ -84,7 +83,7 @@ public function supports_feedback() { * */ protected function question_survey_display($response, $dependants=[], $blankquestionnaire=false) { - // Radio buttons + // Radio buttons. global $idcounter; // To make sure all radio buttons have unique ids. // JR 20 NOV 2007. $otherempty = false; diff --git a/classes/question/rate.php b/classes/question/rate.php index 57ccee87..1dcbff63 100644 --- a/classes/question/rate.php +++ b/classes/question/rate.php @@ -696,12 +696,12 @@ protected function form_extradata(\MoodleQuickForm $mform, $helpname = '') { */ protected function form_preprocess_data($formdata) { $nameddegrees = []; - // Named degrees are put one per line in the form "[value]=[label]." + // Named degrees are put one per line in the form "[value]=[label]". if (!empty($formdata->allnameddegrees)) { $nameddegreelines = explode("\n", $formdata->allnameddegrees); foreach ($nameddegreelines as $nameddegreeline) { $nameddegreeline = trim($nameddegreeline); - if (($nameddegree = \mod_questionnaire\question\choice\choice::content_is_named_degree_choice($nameddegreeline)) !== + if (($nameddegree = \mod_questionnaire\question\choice::content_is_named_degree_choice($nameddegreeline)) !== false) { $nameddegrees += $nameddegree; } @@ -762,7 +762,7 @@ protected function form_preprocess_choicedata($formdata) { * @throws \dml_exception */ public function update_choice($choicerecord) { - if ($nameddegree = choice\choice::content_is_named_degree_choice($choicerecord->content)) { + if ($nameddegree = \mod_questionnaire\question\choice::content_is_named_degree_choice($choicerecord->content)) { // Preserve any existing value from the new array. $this->nameddegrees = $nameddegree + $this->nameddegrees; $this->insert_nameddegrees($this->nameddegrees); @@ -776,7 +776,7 @@ public function update_choice($choicerecord) { * @throws \dml_exception */ public function add_choice($choicerecord) { - if ($nameddegree = choice\choice::content_is_named_degree_choice($choicerecord->content)) { + if ($nameddegree = \mod_questionnaire\question\choice::content_is_named_degree_choice($choicerecord->content)) { // Preserve any existing value from the new array. $this->nameddegrees = $nameddegree + $this->nameddegrees; $this->insert_nameddegrees($this->nameddegrees); @@ -1001,7 +1001,7 @@ public static function move_nameddegree_choices(int $qid = 0, \stdClass $questio if ($question->insert_nameddegrees($nameddegrees)) { // Remove the old named desgree from the choices table. foreach ($oldchoiceids as $choiceid) { - \mod_questionnaire\question\choice\choice::delete_from_db_by_id($choiceid); + \mod_questionnaire\question\choice::delete_from_db_by_id($choiceid); } // First get all existing rank responses for this question. diff --git a/classes/responsetype/boolean.php b/classes/responsetype/boolean.php index 56c87d4c..04742f43 100644 --- a/classes/responsetype/boolean.php +++ b/classes/responsetype/boolean.php @@ -42,7 +42,7 @@ class boolean extends responsetype { /** * @return string */ - static public function response_table() { + public static function response_table() { return 'questionnaire_response_bool'; } @@ -53,7 +53,7 @@ static public function response_table() { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_webform($responsedata, $question) { + public static function answers_from_webform($responsedata, $question) { $answers = []; if (isset($responsedata->{'q'.$question->id}) && !empty($responsedata->{'q'.$question->id})) { $record = new \stdClass(); @@ -73,7 +73,7 @@ static public function answers_from_webform($responsedata, $question) { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_appdata($responsedata, $question) { + public static function answers_from_appdata($responsedata, $question) { if (isset($responsedata->{'q'.$question->id}) && !empty($responsedata->{'q'.$question->id})) { $responsedata->{'q'.$question->id} = ($responsedata->{'q'.$question->id}[0] == 1) ? 'y' : 'n'; } @@ -238,7 +238,7 @@ public function display_results($rids=false, $sort='', $anonymous=false) { * @param int $rid The response id. * @return array */ - static public function response_select($rid) { + public static function response_select($rid) { global $DB; $values = []; @@ -273,7 +273,7 @@ static public function response_select($rid) { * @return array array answer * @throws dml_exception */ - static public function response_answers_by_question($rid) { + public static function response_answers_by_question($rid) { global $DB; $answers = []; diff --git a/classes/responsetype/date.php b/classes/responsetype/date.php index cf3a990b..9415aee4 100644 --- a/classes/responsetype/date.php +++ b/classes/responsetype/date.php @@ -38,7 +38,7 @@ class date extends responsetype { /** * @return string */ - static public function response_table() { + public static function response_table() { return 'questionnaire_response_date'; } @@ -49,7 +49,7 @@ static public function response_table() { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_webform($responsedata, $question) { + public static function answers_from_webform($responsedata, $question) { $answers = []; if (isset($responsedata->{'q'.$question->id}) && !empty($responsedata->{'q'.$question->id})) { $record = new \stdClass(); @@ -208,7 +208,7 @@ public function get_results_tags($weights, $participants, $respondents, $showtot * @param int $rid The response id. * @return array */ - static public function response_select($rid) { + public static function response_select($rid) { global $DB; $values = []; @@ -250,7 +250,7 @@ static public function response_select($rid) { * @return array array answer * @throws \dml_exception */ - static public function response_answers_by_question($rid) { + public static function response_answers_by_question($rid) { global $DB; $answers = []; diff --git a/classes/responsetype/multiple.php b/classes/responsetype/multiple.php index 5cc03b9c..3ca8a21a 100644 --- a/classes/responsetype/multiple.php +++ b/classes/responsetype/multiple.php @@ -39,7 +39,7 @@ class multiple extends single { * The only differences between multuple and single responses are the * response table and the insert logic. */ - static public function response_table() { + public static function response_table() { return 'questionnaire_resp_multiple'; } @@ -51,7 +51,7 @@ static public function response_table() { * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. * @throws \coding_exception */ - static public function answers_from_webform($responsedata, $question) { + public static function answers_from_webform($responsedata, $question) { $answers = []; if (isset($responsedata->{'q'.$question->id})) { foreach ($responsedata->{'q' . $question->id} as $cid => $cvalue) { @@ -63,7 +63,7 @@ static public function answers_from_webform($responsedata, $question) { $record->choiceid = $cid; // If this choice is an "other" choice, look for the added input. if ($question->choices[$cid]->is_other_choice()) { - $cname = \mod_questionnaire\question\choice\choice::id_other_choice_name($cid); + $cname = \mod_questionnaire\question\choice::id_other_choice_name($cid); $record->value = isset($responsedata->{'q' . $question->id}[$cname]) ? $responsedata->{'q' . $question->id}[$cname] : ''; } @@ -81,7 +81,7 @@ static public function answers_from_webform($responsedata, $question) { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_appdata($responsedata, $question) { + public static function answers_from_appdata($responsedata, $question) { // Need to override "single" class' implementation. $answers = []; $qname = 'q'.$question->id; @@ -94,7 +94,7 @@ static public function answers_from_appdata($responsedata, $question) { $record->choiceid = $choiceid; // If this choice is an "other" choice, look for the added input. if (isset($question->choices[$choiceid]) && $question->choices[$choiceid]->is_other_choice()) { - $cname = \mod_questionnaire\question\choice\choice::id_other_choice_name($choiceid); + $cname = \mod_questionnaire\question\choice::id_other_choice_name($choiceid); $record->value = isset($responsedata->{$qname}[$cname]) ? $responsedata->{$qname}[$cname] : ''; } else { @@ -114,7 +114,7 @@ static public function answers_from_appdata($responsedata, $question) { * @param int $rid The response id. * @return array */ - static public function response_select($rid) { + public static function response_select($rid) { global $DB; $values = []; @@ -143,8 +143,8 @@ static public function response_select($rid) { $newrow['responses'] = []; } $newrow['responses'][$row->cid] = $row->cid; - if (\mod_questionnaire\question\choice\choice::content_is_other_choice($row->ccontent)) { - $newrow['responses'][\mod_questionnaire\question\choice\choice::id_other_choice_name($row->cid)] = + if (\mod_questionnaire\question\choice::content_is_other_choice($row->ccontent)) { + $newrow['responses'][\mod_questionnaire\question\choice::id_other_choice_name($row->cid)] = $row->response; } } diff --git a/classes/responsetype/numericaltext.php b/classes/responsetype/numericaltext.php index 5f3ac154..0f04bb14 100644 --- a/classes/responsetype/numericaltext.php +++ b/classes/responsetype/numericaltext.php @@ -42,7 +42,7 @@ class numericaltext extends text { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_webform($responsedata, $question) { + public static function answers_from_webform($responsedata, $question) { $answers = []; if (isset($responsedata->{'q'.$question->id}) && is_numeric($responsedata->{'q'.$question->id})) { $val = $responsedata->{'q' . $question->id}; diff --git a/classes/responsetype/rank.php b/classes/responsetype/rank.php index a4b274cd..2d9d5ffc 100644 --- a/classes/responsetype/rank.php +++ b/classes/responsetype/rank.php @@ -39,7 +39,7 @@ class rank extends responsetype { /** * @return string */ - static public function response_table() { + public static function response_table() { return 'questionnaire_response_rank'; } @@ -51,7 +51,7 @@ static public function response_table() { * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. * @throws \coding_exception */ - static public function answers_from_webform($responsedata, $question) { + public static function answers_from_webform($responsedata, $question) { $answers = []; foreach ($question->choices as $cid => $choice) { $other = isset($responsedata->{'q' . $question->id . '_' . $cid}) ? @@ -82,7 +82,7 @@ static public function answers_from_webform($responsedata, $question) { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_appdata($responsedata, $question) { + public static function answers_from_appdata($responsedata, $question) { $answers = []; if (isset($responsedata->{'q'.$question->id}) && !empty($responsedata->{'q'.$question->id})) { foreach ($responsedata->{'q' . $question->id} as $choiceid => $choicevalue) { @@ -344,7 +344,7 @@ public function display_results($rids=false, $sort='', $anonymous=false) { * @param int $rid The response id. * @return array */ - static public function response_select($rid) { + public static function response_select($rid) { global $DB; $values = []; @@ -411,7 +411,7 @@ static public function response_select($rid) { * @return array array answer * @throws \dml_exception */ - static public function response_answers_by_question($rid) { + public static function response_answers_by_question($rid) { global $DB; $answers = []; @@ -952,7 +952,7 @@ private function mkrescount($rids, $rows, $sort) { * @param $b * @return int */ - static private function sortavgasc($a, $b) { + private static function sortavgasc($a, $b) { if (isset($a->avg) && isset($b->avg)) { if ( $a->avg < $b->avg ) { return -1; @@ -969,7 +969,7 @@ static private function sortavgasc($a, $b) { * @param $b * @return int */ - static private function sortavgdesc($a, $b) { + private static function sortavgdesc($a, $b) { if (isset($a->avg) && isset($b->avg)) { if ( $a->avg > $b->avg ) { return -1; diff --git a/classes/responsetype/response/response.php b/classes/responsetype/response/response.php index 6dcd24e8..bcc25c06 100644 --- a/classes/responsetype/response/response.php +++ b/classes/responsetype/response/response.php @@ -108,7 +108,7 @@ public static function create_from_data($responsedata) { * @return bool|response A response object. * @throws \coding_exception */ - static public function response_from_webform($responsedata, $questions) { + public static function response_from_webform($responsedata, $questions) { global $USER; $questionnaireid = isset($responsedata->questionnaire_id) ? $responsedata->questionnaire_id : @@ -131,7 +131,7 @@ static public function response_from_webform($responsedata, $questions) { * @param $questions Array of question objects. * @return bool|response A response object. */ - static public function response_from_appdata($questionnaireid, $responseid, $responsedata, $questions) { + public static function response_from_appdata($questionnaireid, $responseid, $responsedata, $questions) { global $USER; $response = new response($responseid, $questionnaireid, $USER->id, null, null, null, false); diff --git a/classes/responsetype/responsetype.php b/classes/responsetype/responsetype.php index d3543024..a1ce8033 100644 --- a/classes/responsetype/responsetype.php +++ b/classes/responsetype/responsetype.php @@ -66,7 +66,7 @@ public function __construct(\mod_questionnaire\question\question $question, int * * @return string response table name. */ - static public function response_table() { + public static function response_table() { return 'Must be implemented!'; } @@ -74,7 +74,7 @@ static public function response_table() { * Return the known response tables. Should be replaced by a better management system eventually. * @return array */ - static public function all_response_tables() { + public static function all_response_tables() { return ['questionnaire_response_bool', 'questionnaire_response_date', 'questionnaire_response_other', 'questionnaire_response_rank', 'questionnaire_response_text', 'questionnaire_resp_multiple', 'questionnaire_resp_single']; @@ -87,7 +87,7 @@ static public function all_response_tables() { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - abstract static public function answers_from_webform($responsedata, $question); + abstract public static function answers_from_webform($responsedata, $question); /** * Insert a provided response to the question. @@ -251,7 +251,7 @@ public function get_feedback_scores(array $rids) { * @param int $rid The response id. * @return array */ - static public function response_select($rid) { + public static function response_select($rid) { return []; } @@ -262,7 +262,7 @@ static public function response_select($rid) { * @param int $rid The response id. * @return array array answer */ - static public function response_answers_by_question($rid) { + public static function response_answers_by_question($rid) { return []; } @@ -273,7 +273,7 @@ static public function response_answers_by_question($rid) { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_appdata($responsedata, $question) { + public static function answers_from_appdata($responsedata, $question) { // In most cases this can be a direct call to answers_from_webform with the one modification below. Override when this will // not work. if (isset($responsedata->{'q'.$question->id}) && !empty($responsedata->{'q'.$question->id})) { @@ -289,7 +289,11 @@ static public function answers_from_appdata($responsedata, $question) { * @return string */ protected function user_fields_sql() { - $userfieldsarr = get_all_user_name_fields(); + if (class_exists('\core_user\fields')) { + $userfieldsarr = \core_user\fields::get_name_fields(); + } else { + $userfieldsarr = get_all_user_name_fields(); + } $userfieldsarr = array_merge($userfieldsarr, ['username', 'department', 'institution']); $userfields = ''; foreach ($userfieldsarr as $field) { diff --git a/classes/responsetype/single.php b/classes/responsetype/single.php index 039cd30f..f7a3b67e 100644 --- a/classes/responsetype/single.php +++ b/classes/responsetype/single.php @@ -37,7 +37,7 @@ class single extends responsetype { /** * @return string */ - static public function response_table() { + public static function response_table() { return 'questionnaire_resp_single'; } @@ -49,7 +49,7 @@ static public function response_table() { * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. * @throws \coding_exception */ - static public function answers_from_webform($responsedata, $question) { + public static function answers_from_webform($responsedata, $question) { $answers = []; if (isset($responsedata->{'q'.$question->id}) && isset($question->choices[$responsedata->{'q'.$question->id}])) { $record = new \stdClass(); @@ -59,7 +59,7 @@ static public function answers_from_webform($responsedata, $question) { // If this choice is an "other" choice, look for the added input. if ($question->choices[$responsedata->{'q'.$question->id}]->is_other_choice()) { $cname = 'q' . $question->id . - \mod_questionnaire\question\choice\choice::id_other_choice_name($responsedata->{'q'.$question->id}); + \mod_questionnaire\question\choice::id_other_choice_name($responsedata->{'q'.$question->id}); $record->value = isset($responsedata->{$cname}) ? $responsedata->{$cname} : ''; } $answers[$responsedata->{'q'.$question->id}] = answer\answer::create_from_data($record); @@ -74,7 +74,7 @@ static public function answers_from_webform($responsedata, $question) { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_appdata($responsedata, $question) { + public static function answers_from_appdata($responsedata, $question) { $answers = []; $qname = 'q'.$question->id; if (isset($responsedata->{$qname}[0]) && !empty($responsedata->{$qname}[0])) { @@ -84,7 +84,7 @@ static public function answers_from_appdata($responsedata, $question) { $record->choiceid = $responsedata->{$qname}[0]; // If this choice is an "other" choice, look for the added input. if ($question->choices[$record->choiceid]->is_other_choice()) { - $cname = \mod_questionnaire\question\choice\choice::id_other_choice_name($record->choiceid); + $cname = \mod_questionnaire\question\choice::id_other_choice_name($record->choiceid); $record->value = isset($responsedata->{$qname}[$cname]) ? $responsedata->{$qname}[$cname] : ''; } else { @@ -254,7 +254,7 @@ public function display_results($rids=false, $sort='', $anonymous=false) { if (strpos($idx, 'other') === 0) { $answer = $row->response; $ccontent = $row->content; - $content = \mod_questionnaire\question\choice\choice::content_other_choice_display($ccontent); + $content = \mod_questionnaire\question\choice::content_other_choice_display($ccontent); $content .= ' ' . clean_text($answer); $textidx = $content; $counts[$textidx] = !empty($counts[$textidx]) ? ($counts[$textidx] + 1) : 1; @@ -278,7 +278,7 @@ public function display_results($rids=false, $sort='', $anonymous=false) { * @param int $rid The response id. * @return array */ - static public function response_select($rid) { + public static function response_select($rid) { global $DB; $values = []; @@ -294,8 +294,8 @@ static public function response_select($rid) { $newrow['ccontent'] = $row->ccontent; $newrow['responses'] = []; $newrow['responses'][$row->cid] = $row->cid; - if (\mod_questionnaire\question\choice\choice::content_is_other_choice($row->ccontent)) { - $newrow['responses'][\mod_questionnaire\question\choice\choice::id_other_choice_name($row->cid)] = $row->response; + if (\mod_questionnaire\question\choice::content_is_other_choice($row->ccontent)) { + $newrow['responses'][\mod_questionnaire\question\choice::id_other_choice_name($row->cid)] = $row->response; } $values[$row->qid] = $newrow; } @@ -311,7 +311,7 @@ static public function response_select($rid) { * @return array array answer * @throws \dml_exception */ - static public function response_answers_by_question($rid) { + public static function response_answers_by_question($rid) { global $DB; $answers = []; diff --git a/classes/responsetype/text.php b/classes/responsetype/text.php index 07cab584..d3ebd9b6 100644 --- a/classes/responsetype/text.php +++ b/classes/responsetype/text.php @@ -38,7 +38,7 @@ class text extends responsetype { /** * @return string */ - static public function response_table() { + public static function response_table() { return 'questionnaire_response_text'; } @@ -49,7 +49,7 @@ static public function response_table() { * @param \mod_questionnaire\question\question $question * @return array \mod_questionnaire\responsetype\answer\answer An array of answer objects. */ - static public function answers_from_webform($responsedata, $question) { + public static function answers_from_webform($responsedata, $question) { $answers = []; if (isset($responsedata->{'q'.$question->id}) && (strlen($responsedata->{'q'.$question->id}) > 0)) { $val = $responsedata->{'q' . $question->id}; @@ -271,7 +271,7 @@ public function get_results_tags($weights, $participants, $respondents, $showtot * @param int $rid The response id. * @return array */ - static public function response_select($rid) { + public static function response_select($rid) { global $DB; $values = []; @@ -304,7 +304,7 @@ static public function response_select($rid) { * @return array array answer * @throws \dml_exception */ - static public function response_answers_by_question($rid) { + public static function response_answers_by_question($rid) { global $DB; $answers = []; diff --git a/complete.php b/complete.php index 074ff29c..55448767 100644 --- a/complete.php +++ b/complete.php @@ -26,7 +26,7 @@ $SESSION->questionnaire->current_tab = 'view'; $id = optional_param('id', null, PARAM_INT); // Course Module ID. -$a = optional_param('a', null, PARAM_INT); // questionnaire ID. +$a = optional_param('a', null, PARAM_INT); // Questionnaire ID. $sid = optional_param('sid', null, PARAM_INT); // Survey id. $resume = optional_param('resume', null, PARAM_INT); // Is this attempt a resume of a saved attempt? diff --git a/fbsections.php b/fbsections.php index 71013185..d66f74dc 100644 --- a/fbsections.php +++ b/fbsections.php @@ -36,15 +36,15 @@ $sectionid = optional_param('sectionid', 0, PARAM_INT); if (! $cm = get_coursemodule_from_id('questionnaire', $id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", ["id" => $cm->course])) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $questionnaire = $DB->get_record("questionnaire", ["id" => $cm->instance])) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } // Needed here for forced language courses. @@ -94,7 +94,7 @@ $SESSION->questionnaire->current_tab = 'feedback'; if (!$questionnaire->capabilities->editquestions) { - print_error('nopermissions', 'error', '', 'mod:questionnaire:editquestions'); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } // Handle confirmed actions that impact display immediately. diff --git a/feedback.php b/feedback.php index dccc0ef5..3644d04a 100644 --- a/feedback.php +++ b/feedback.php @@ -33,15 +33,15 @@ $action = optional_param('action', '', PARAM_ALPHA); if (! $cm = get_coursemodule_from_id('questionnaire', $id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", ["id" => $cm->course])) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $questionnaire = $DB->get_record("questionnaire", ["id" => $cm->instance])) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } // Needed here for forced language courses. @@ -62,7 +62,7 @@ $SESSION->questionnaire->current_tab = 'feedback'; if (!$questionnaire->capabilities->editquestions) { - print_error('nopermissions', 'error', '', 'mod:questionnaire:editquestions'); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } $feedbackform = new \mod_questionnaire\feedback_form('feedback.php'); @@ -125,7 +125,7 @@ } $sdata->courseid = $settings->courseid; if (!($sid = $questionnaire->survey_update($sdata))) { - print_error('couldnotcreatenewsurvey', 'questionnaire'); + throw new \moodle_exception('couldnotcreatenewsurvey', 'mod_questionnaire'); } } diff --git a/grade.php b/grade.php index 4ea4a2b7..43780fde 100644 --- a/grade.php +++ b/grade.php @@ -31,7 +31,7 @@ $id = required_param('id', PARAM_INT); $cm = get_coursemodule_from_id('questionnaire', $id, 0, false, MUST_EXIST); if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); require_login($course, false, $cm); diff --git a/index.php b/index.php index ce65d281..8bddbc75 100644 --- a/index.php +++ b/index.php @@ -30,7 +30,7 @@ $id = required_param('id', PARAM_INT); $PAGE->set_url('/mod/questionnaire/index.php', array('id' => $id)); if (! $course = $DB->get_record('course', array('id' => $id))) { - print_error('incorrectcourseid', 'questionnaire'); + throw new \moodle_exception('Filter has not been set.', 'mod_questionnaire'); } $coursecontext = context_course::instance($id); require_login($course->id); diff --git a/lib.php b/lib.php index ff0958e2..ddb5d70e 100644 --- a/lib.php +++ b/lib.php @@ -99,7 +99,7 @@ function questionnaire_add_instance($questionnaire) { $sdata->feedbacknotes = ''; $sdata->courseid = $course->id; if (!($sid = $qobject->survey_update($sdata))) { - print_error('couldnotcreatenewsurvey', 'questionnaire'); + throw new \moodle_exception('couldnotcreatenewsurvey', 'mod_questionnaire'); } } else { $copyid = explode('-', $questionnaire->create); @@ -543,7 +543,7 @@ function questionnaire_extend_settings_navigation(settings_navigation $settings, $course = $PAGE->course; if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } $courseid = $course->id; diff --git a/locallib.php b/locallib.php index 6287a7c6..ea5d6773 100644 --- a/locallib.php +++ b/locallib.php @@ -222,7 +222,7 @@ function questionnaire_get_context($cmid) { } if (!$context = context_module::instance($cmid)) { - print_error('badcontext'); + throw new \moodle_exception('badcontext', 'mod_questionnaire'); } return $context; } @@ -854,26 +854,26 @@ function questionnaire_get_standard_page_items($id = null, $a = null) { if ($id) { if (! $cm = get_coursemodule_from_id('questionnaire', $id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $cm->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } } else { if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $a))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $questionnaire->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $cm = get_coursemodule_from_instance("questionnaire", $questionnaire->id, $course->id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } } diff --git a/myreport.php b/myreport.php index ad8cd328..c4cf6c33 100644 --- a/myreport.php +++ b/myreport.php @@ -27,13 +27,13 @@ $currentgroupid = optional_param('group', 0, PARAM_INT); // Groupid. if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $instance))) { - print_error('incorrectquestionnaire', 'questionnaire'); + throw new \moodle_exception('incorrectquestionnaire', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $questionnaire->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $cm = get_coursemodule_from_instance("questionnaire", $questionnaire->id, $course->id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } require_course_login($course, true, $cm); @@ -42,7 +42,7 @@ // Should never happen, unless called directly by a snoop... if ( !has_capability('mod/questionnaire:readownresponses', $context) || $userid != $USER->id) { - print_error('Permission denied'); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } $url = new moodle_url($CFG->wwwroot.'/mod/questionnaire/myreport.php', array('instance' => $instance)); if (isset($userid)) { @@ -82,7 +82,7 @@ switch ($action) { case 'summary': if (empty($questionnaire->survey)) { - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } $SESSION->questionnaire->current_tab = 'mysummary'; $resps = $questionnaire->get_responses($userid); @@ -110,7 +110,7 @@ case 'vall': if (empty($questionnaire->survey)) { - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } $SESSION->questionnaire->current_tab = 'myvall'; $questionnaire->add_user_responses($userid); @@ -131,7 +131,7 @@ case 'vresp': if (empty($questionnaire->survey)) { - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } $SESSION->questionnaire->current_tab = 'mybyresponse'; $usergraph = get_config('questionnaire', 'usergraph'); diff --git a/preview.php b/preview.php index 7df8eab9..dfdbade6 100644 --- a/preview.php +++ b/preview.php @@ -27,22 +27,22 @@ if ($id) { if (! $cm = get_coursemodule_from_id('questionnaire', $id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $cm->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } } else { if (! $survey = $DB->get_record("questionnaire_survey", array("id" => $sid))) { - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", ["id" => $survey->courseid])) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } // Dummy questionnaire object. $questionnaire = new stdClass(); @@ -90,7 +90,7 @@ (isset($questionnaire->capabilities) && $questionnaire->capabilities->preview); if (!$canpreview && !$popup) { // Should never happen, unless called directly by a snoop... - print_error('nopermissions', 'questionnaire', $CFG->wwwroot.'/mod/questionnaire/view.php?id='.$cm->id); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } if (!isset($SESSION->questionnaire)) { diff --git a/print.php b/print.php index d903aba3..b65793c4 100644 --- a/print.php +++ b/print.php @@ -25,13 +25,13 @@ $referer = $CFG->wwwroot.'/mod/questionnaire/report.php'; if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $qid))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $questionnaire->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $cm = get_coursemodule_from_instance("questionnaire", $questionnaire->id, $course->id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } // Check login and get context. @@ -50,7 +50,7 @@ // If you can't view the questionnaire, or can't view a specified response, error out. if (!($questionnaire->capabilities->view && (($rid == 0) || $questionnaire->can_view_response($rid)))) { // Should never happen, unless called directly by a snoop... - print_error('nopermissions', 'moodle', $CFG->wwwroot.'/mod/questionnaire/view.php?id='.$cm->id); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } $blankquestionnaire = true; if ($rid != 0) { diff --git a/qsettings.php b/qsettings.php index d767e9a7..30164aec 100644 --- a/qsettings.php +++ b/qsettings.php @@ -25,15 +25,15 @@ $submitbutton2 = optional_param('submitbutton2', '', PARAM_ALPHA); if (! $cm = get_coursemodule_from_id('questionnaire', $id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $cm->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } // Needed here for forced language courses. @@ -55,7 +55,7 @@ $SESSION->questionnaire->current_tab = 'settings'; if (!$questionnaire->capabilities->manage) { - print_error('nopermissions', 'error', '', 'mod:questionnaire:manage'); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } $settingsform = new \mod_questionnaire\settings_form('qsettings.php'); @@ -106,7 +106,7 @@ $sdata->courseid = $settings->courseid; if (!($sid = $questionnaire->survey_update($sdata))) { - print_error('couldnotcreatenewsurvey', 'questionnaire'); + throw new \moodle_exception('couldnotcreatenewsurvey', 'mod_questionnaire'); } else { if ($submitbutton2) { $redirecturl = course_get_url($cm->course); diff --git a/questionnaire.class.php b/questionnaire.class.php index 90e67c49..5353ca49 100644 --- a/questionnaire.class.php +++ b/questionnaire.class.php @@ -1335,7 +1335,14 @@ private function print_survey_start($message, $section, $numsections, $hasrequir if (false) { $linkname = get_string('downloadpdf', 'mod_questionnaire'); $link = new moodle_url('/mod/questionnaire/report.php', - ['action' => 'vresp', 'instance' => $this->id, 'target' => 'pdf', 'individualresponse' => 1, 'rid' => $rid]); + [ + 'action' => 'vresp', + 'instance' => $this->id, + 'target' => 'pdf', + 'individualresponse' => 1, + 'rid' => $rid + ] + ); $downpdficon = new pix_icon('b/pdfdown', $linkname, 'mod_questionnaire'); $respinfo .= $this->renderer->action_link($link, null, null, null, $downpdficon); } @@ -1425,7 +1432,7 @@ public function survey_print_render($message = '', $referer='', $courseid, $rid= global $DB, $CFG; if (! $course = $DB->get_record("course", array("id" => $courseid))) { - print_error('incorrectcourseid', 'questionnaire'); + throw new \moodle_exception('incorrectcourseid', 'mod_questionnaire'); } $this->course = $course; @@ -1567,7 +1574,7 @@ public function survey_update($sdata) { $name = $DB->get_field('questionnaire_survey', 'name', array('id' => $this->survey->id)); // Trying to change survey name. - if (trim($name) != trim(stripslashes($sdata->name))) { // $sdata will already have slashes added to it. + if (trim($name) != trim(stripslashes($sdata->name))) { // Var $sdata will already have slashes added to it. $count = $DB->count_records('questionnaire_survey', array('name' => $sdata->name)); if ($count != 0) { $errstr = get_string('errnewname', 'questionnaire'); // TODO: notused! @@ -2544,6 +2551,7 @@ public function survey_results_navbar_alpha($currrid, $currentgroupid, $cm, $byr $respcols = new stdClass(); for ($i = 0; $i < $colnumber; $i++) { $colname = 'respondentscolumn'.$i; + $respcols->$colname = (object)['respondentlink' => []]; for ($j = 0; $j < $lines; $j++) { $respcols->{$colname}->respondentlink[] = $resparr[$a]; $a++; @@ -2817,7 +2825,11 @@ protected function choice_types() { * @return array|string */ protected function user_fields() { - $userfieldsarr = get_all_user_name_fields(); + if (class_exists('\core_user\fields')) { + $userfieldsarr = \core_user\fields::get_name_fields(); + } else { + $userfieldsarr = get_all_user_name_fields(); + } $userfieldsarr = array_merge($userfieldsarr, ['username', 'department', 'institution']); return $userfieldsarr; } @@ -3071,7 +3083,7 @@ public function generate_csv($rid='', $userid='', $choicecodes=1, $choicetext=0, ); if (!$survey = $DB->get_record('questionnaire_survey', array('id' => $this->survey->id))) { - print_error ('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } // Get all responses for this survey in one go. @@ -3137,7 +3149,7 @@ public function generate_csv($rid='', $userid='', $choicecodes=1, $choicetext=0, foreach ($choices as $choice) { $content = $choice->content; // If "Other" add a column for the actual "other" text entered. - if (\mod_questionnaire\question\choice\choice::content_is_other_choice($content)) { + if (\mod_questionnaire\question\choice::content_is_other_choice($content)) { $col = $choice->name.'_'.$stringother; $columns[][$qpos] = $col; $questionidcols[][$qpos] = null; @@ -3165,7 +3177,7 @@ public function generate_csv($rid='', $userid='', $choicecodes=1, $choicetext=0, array_push($types, '0'); // If "Other" add a column for the "other" checkbox. // Then add a column for the actual "other" text entered. - if (\mod_questionnaire\question\choice\choice::content_is_other_choice($content)) { + if (\mod_questionnaire\question\choice::content_is_other_choice($content)) { $content = $stringother; $col = $choice->name.'->['.$content.']'; $columns[][$qpos] = $col; @@ -3322,7 +3334,7 @@ public function generate_csv($rid='', $userid='', $choicecodes=1, $choicetext=0, } } else { $content = $choicesbyqid[$qid][$responserow->choice_id]->content; - if (\mod_questionnaire\question\choice\choice::content_is_other_choice($content)) { + if (\mod_questionnaire\question\choice::content_is_other_choice($content)) { // If this is an "other" column, put the text entered in the next position. $row[$position + 1] = $responserow->response; $choicetxt = empty($responserow->choice_id) ? '0' : '1'; @@ -3351,9 +3363,9 @@ public function generate_csv($rid='', $userid='', $choicecodes=1, $choicetext=0, } $content = $choicesbyqid[$qid][$responserow->choice_id]->content; - if (\mod_questionnaire\question\choice\choice::content_is_other_choice($content)) { + if (\mod_questionnaire\question\choice::content_is_other_choice($content)) { // If this has an "other" text, use it. - $responsetxt = \mod_questionnaire\question\choice\choice::content_other_choice_display($content); + $responsetxt = \mod_questionnaire\question\choice::content_other_choice_display($content); $responsetxt1 = $responserow->response; } else if (($choicecodes == 1) && ($choicetext == 1)) { $responsetxt = $c.' : '.$content; @@ -3834,7 +3846,7 @@ public function response_analysis($rid, $resps, $compare, $isgroupmember, $allre * @throws moodle_exception */ public function save_mobile_data($userid, $sec, $completed, $rid, $submit, $action, array $responses) { - global $DB, $CFG; // Do not delete $CFG!!! + global $DB, $CFG; // Do not delete "$CFG". $ret = []; $response = $this->build_response_from_appdata($responses, $sec); diff --git a/questions.php b/questions.php index 2f9fa9b2..cab3f550 100644 --- a/questions.php +++ b/questions.php @@ -18,24 +18,24 @@ require_once($CFG->dirroot.'/mod/questionnaire/questionnaire.class.php'); require_once($CFG->dirroot.'/mod/questionnaire/classes/question/question.php'); // Needed for question type constants. -$id = required_param('id', PARAM_INT); // Course module ID +$id = required_param('id', PARAM_INT); // Course module ID. $action = optional_param('action', 'main', PARAM_ALPHA); // Screen. $qid = optional_param('qid', 0, PARAM_INT); // Question id. $moveq = optional_param('moveq', 0, PARAM_INT); // Question id to move. -$delq = optional_param('delq', 0, PARAM_INT); // Question id to delete +$delq = optional_param('delq', 0, PARAM_INT); // Question id to delete. $qtype = optional_param('type_id', 0, PARAM_INT); // Question type. $currentgroupid = optional_param('group', 0, PARAM_INT); // Group id. if (! $cm = get_coursemodule_from_id('questionnaire', $id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $cm->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } require_course_login($course, true, $cm); @@ -57,7 +57,7 @@ $questionnaire->add_page(new \mod_questionnaire\output\questionspage()); if (!$questionnaire->capabilities->editquestions) { - print_error('nopermissions', 'error', '', 'mod:questionnaire:edit'); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } $questionnairehasdependencies = $questionnaire->has_dependencies(); diff --git a/report.php b/report.php index cb413ca0..968d6077 100755 --- a/report.php +++ b/report.php @@ -44,20 +44,20 @@ if (!empty($SESSION->instance)) { $instance = $SESSION->instance; } else { - print_error('requiredparameter', 'questionnaire'); + throw new \moodle_exception('requiredparameter', 'mod_questionnaire'); } } $SESSION->instance = $instance; $usergraph = get_config('questionnaire', 'usergraph'); if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $instance))) { - print_error('incorrectquestionnaire', 'questionnaire'); + throw new \moodle_exception('incorrectquestionnaire', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $questionnaire->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $cm = get_coursemodule_from_instance("questionnaire", $questionnaire->id, $course->id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } require_course_login($course, true, $cm); @@ -80,8 +80,7 @@ $context = context_module::instance($cm->id); if (!$questionnaire->can_view_all_responses()) { // Should never happen, unless called directly by a snoop... - print_error('nopermissions', 'moodle', $CFG->wwwroot.'/mod/questionnaire/view.php?id='.$cm->id, - get_string('viewallresponses', 'mod_questionnaire')); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); } $questionnaire->canviewallgroups = has_capability('moodle/site:accessallgroups', $context); @@ -205,13 +204,13 @@ if (empty($questionnaire->survey)) { $id = $questionnaire->survey; notify ("questionnaire->survey = /$id/"); - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } else if ($questionnaire->survey->courseid != $course->id) { - print_error('surveyowner', 'questionnaire'); + throw new \moodle_exception('surveyowner', 'mod_questionnaire'); } else if (!$rid || !is_numeric($rid)) { - print_error('invalidresponse', 'questionnaire'); + throw new \moodle_exception('invalidresponse', 'mod_questionnaire'); } else if (!($resp = $DB->get_record('questionnaire_response', array('id' => $rid)))) { - print_error('invalidresponserecord', 'questionnaire'); + throw new \moodle_exception('invalidresponserecord', 'mod_questionnaire'); } $ruser = false; @@ -296,13 +295,13 @@ require_capability('mod/questionnaire:deleteresponses', $context); if (empty($questionnaire->survey)) { - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } else if ($questionnaire->survey->courseid != $course->id) { - print_error('surveyowner', 'questionnaire'); + throw new \moodle_exception('surveyowner', 'mod_questionnaire'); } else if (!$rid || !is_numeric($rid)) { - print_error('invalidresponse', 'questionnaire'); + throw new \moodle_exception('invalidresponse', 'mod_questionnaire'); } else if (!($response = $DB->get_record('questionnaire_response', array('id' => $rid)))) { - print_error('invalidresponserecord', 'questionnaire'); + throw new \moodle_exception('invalidresponserecord', 'mod_questionnaire'); } if (questionnaire_delete_response($response, $questionnaire)) { @@ -344,9 +343,9 @@ require_capability('mod/questionnaire:deleteresponses', $context); if (empty($questionnaire->survey)) { - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } else if ($questionnaire->survey->courseid != $course->id) { - print_error('surveyowner', 'questionnaire'); + throw new \moodle_exception('surveyowner', 'mod_questionnaire'); } // Available group modes (0 = no groups; 1 = separate groups; 2 = visible groups). @@ -532,7 +531,7 @@ if (!$questionnaire->capabilities->readallresponses && !$questionnaire->capabilities->readallresponseanytime) { echo $questionnaire->renderer->header(); // Should never happen, unless called directly by a snoop. - print_error('nopermissions', '', '', get_string('viewallresponses', 'questionnaire')); + throw new \moodle_exception('nopermissions', 'mod_questionnaire'); // Finish the page. echo $questionnaire->renderer->footer($course); break; @@ -682,9 +681,9 @@ case 'vresp': // View by response. default: if (empty($questionnaire->survey)) { - print_error('surveynotexists', 'questionnaire'); + throw new \moodle_exception('surveynotexists', 'mod_questionnaire'); } else if ($questionnaire->survey->courseid != $course->id) { - print_error('surveyowner', 'questionnaire'); + throw new \moodle_exception('surveyowner', 'mod_questionnaire'); } $ruser = false; $noresponses = false; diff --git a/show_nonrespondents.php b/show_nonrespondents.php index 33b7e07b..09284847 100644 --- a/show_nonrespondents.php +++ b/show_nonrespondents.php @@ -52,25 +52,25 @@ if ($id) { if (! $cm = get_coursemodule_from_id('questionnaire', $id)) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } if (! $course = $DB->get_record("course", array("id" => $cm->course))) { - print_error('coursemisconf'); + throw new \moodle_exception('coursemisconf', 'mod_questionnaire'); } if (! $questionnaire = $DB->get_record("questionnaire", array("id" => $cm->instance))) { - print_error('invalidcoursemodule'); + throw new \moodle_exception('invalidcoursemodule', 'mod_questionnaire'); } } if (!$context = context_module::instance($cm->id)) { - print_error('badcontext'); + throw new \moodle_exception('badcontext', 'mod_questionnaire'); } // We need the coursecontext to allow sending of mass mails. if (!$coursecontext = context_course::instance($course->id)) { - print_error('badcontext'); + throw new \moodle_exception('badcontext', 'mod_questionnaire'); } require_course_login($course, true, $cm); @@ -89,7 +89,7 @@ $sid = $questionnaire->sid; if (($formdata = data_submitted()) && !confirm_sesskey()) { - print_error('invalidsesskey'); + throw new \moodle_exception('invalidsesskey', 'mod_questionnaire'); } require_capability('mod/questionnaire:viewsingleresponse', $context); @@ -203,7 +203,11 @@ $tablecolumns = array('userpic', 'fullname'); // Extra columns copied from participants view. - $extrafields = get_extra_user_fields($context); + if (class_exists('\core_user\fields')) { + $extrafields = \core_user\fields::get_identity_fields(null, false); + } else { + $extrafields = get_extra_user_fields($context); + } $tableheaders = array(get_string('userpic'), get_string('fullnameuser')); if (in_array('email', $extrafields) || has_capability('moodle/course:viewhiddenuserfields', $context)) { diff --git a/tests/responsetypes_test.php b/tests/responsetypes_test.php index 4700f048..fb1c78e0 100644 --- a/tests/responsetypes_test.php +++ b/tests/responsetypes_test.php @@ -164,7 +164,7 @@ public function test_create_response_single() { } } $vals = ['q'.$question->id => $val, - 'q'.$question->id.\mod_questionnaire\question\choice\choice::id_other_choice_name($val) => 'Forty-four']; + 'q'.$question->id. \mod_questionnaire\question\choice::id_other_choice_name($val) => 'Forty-four']; $userid = 2; $response = $generator->create_question_response($questionnaire, $question, $vals, $userid); @@ -213,7 +213,7 @@ public function test_create_response_multiple() { $val[$cid] = $cid; } else if ($choice->content == '!other=Another number') { $val[$cid] = $cid; - $val[\mod_questionnaire\question\choice\choice::id_other_choice_name($cid)] = 'Forty-four'; + $val[\mod_questionnaire\question\choice::id_other_choice_name($cid)] = 'Forty-four'; $ocid = $cid; } } diff --git a/version.php b/version.php index 5888f14d..5c52a38b 100644 --- a/version.php +++ b/version.php @@ -24,8 +24,8 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2020111100; // The current module version (Date: YYYYMMDDXX) -$plugin->requires = 2019052000; // Moodle version (3.7). +$plugin->version = 2020111100; // The current module version (Date: YYYYMMDDXX). +$plugin->requires = 2020110900; // Moodle version (3.10). $plugin->component = 'mod_questionnaire';