From 9f0651a927cf7c119172c3f17478210b74bcb78e Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Fri, 23 Jun 2023 12:55:04 +0200 Subject: [PATCH 1/8] added choices page to navigation bar --- lang/en/ratingallocate.php | 1 + lib.php | 34 +++++++++++++++++++++++++++++++++- locallib.php | 9 ++++++++- renderer.php | 8 ++++++++ version.php | 2 +- 5 files changed, 51 insertions(+), 3 deletions(-) diff --git a/lang/en/ratingallocate.php b/lang/en/ratingallocate.php index c1b6e4fa..7aba6a26 100644 --- a/lang/en/ratingallocate.php +++ b/lang/en/ratingallocate.php @@ -276,6 +276,7 @@ $string['edit_choice'] = 'Edit choice'; $string['rating_endtime'] = 'Rating ends at'; $string['rating_begintime'] = 'Rating begins at'; +$string['choice_navigation'] = 'Choices'; $string['newchoicetitle'] = 'New choice {$a}'; $string['deletechoice'] = 'Delete choice'; $string['publishdate'] = 'Estimated publication date'; diff --git a/lib.php b/lib.php index 4869089f..f5ce97e2 100644 --- a/lib.php +++ b/lib.php @@ -366,7 +366,24 @@ function ratingallocate_pluginfile($course, $cm, $context, $filearea, array $arg * @param cm_info $cm */ function ratingallocate_extend_navigation(navigation_node $navref, stdclass $course, stdclass $module, cm_info $cm) { - + //global $PAGE; + + // $PAGE->navbar->ignore_active(); + /*$PAGE->navbar->add( + get_string('Choices'), + new moodle_url(dirname(__FILE__) . '/form_modify_choice.php') + ); + + $node = $navref->create( + 'Choices', + dirname(__FILE__) . '/form_modify_choice.php', + navigation_node::NODETYPE_LEAF, + null, + null, new pix_icon('i/choices', '') + ); + $node->showinflatnavigation = true; + $navref->add_node($node); + */ } /** @@ -381,6 +398,21 @@ function ratingallocate_extend_navigation(navigation_node $navref, stdclass $cou * {@link navigation_node} */ function ratingallocate_extend_settings_navigation(settings_navigation $settingsnav, navigation_node $ratingallocatenode = null) { + $hassecondary = $settingsnav->get_page()->has_secondary_navigation(); + if (!$context = context_module::instance($settingsnav->get_page()->cm->id, IGNORE_MISSING)) { + throw new \moodle_exception('badcontext'); + } + if (has_capability('mod/ratingallocate:modify_choices', $context)) { + $choicenode = navigation_node::create(get_string('choice_navigation', RATINGALLOCATE_MOD_NAME), + new moodle_url('/mod/ratingallocate/view.php', ['id' => $settingsnav->get_page()->cm->id, 'action' => ACTION_SHOW_CHOICES]), + navigation_node::TYPE_CUSTOM, null); + /* + $choicenode = navigation_node::create(get_string('choice_navigation', RATINGALLOCATE_MOD_NAME), + new moodle_url('/mod/ratingallocate/choices.php', ['id' => $settingsnav->get_page()->cm->id]), + navigation_node::TYPE_CUSTOM, null); + */ + $ratingallocatenode->add_node($choicenode); + } } diff --git a/locallib.php b/locallib.php index 9d2c5f34..782f16c7 100644 --- a/locallib.php +++ b/locallib.php @@ -392,6 +392,7 @@ private function process_action_show_choices() { if (has_capability('mod/ratingallocate:modify_choices', $this->context)) { global $OUTPUT; $renderer = $this->get_renderer(); + $status = $this->get_status(); // Notifications if no choices exist or too few in comparison to strategy settings. $availablechoices = $this->get_rateable_choices(); @@ -409,6 +410,11 @@ private function process_action_show_choices() { echo $renderer->render_header($this->ratingallocate, $this->context, $this->coursemodule->id); echo $OUTPUT->heading(get_string('show_choices_header', RATINGALLOCATE_MOD_NAME)); + // Get description dependent on status + $descriptionbaseid = 'modify_choices_group_desc_'; + $description = get_string($descriptionbaseid . $status, RATINGALLOCATE_MOD_NAME); + echo $renderer->format_text($description); + $renderer->ratingallocate_show_choices_table($this, true); echo $OUTPUT->single_button(new moodle_url('/mod/ratingallocate/view.php', array('id' => $this->coursemodule->id)), get_string('back'), 'get'); @@ -1070,10 +1076,11 @@ private function process_default() { } } } - // Print data and controls to edit the choices. + /* Print data and controls to edit the choices. if (has_capability('mod/ratingallocate:modify_choices', $this->context)) { $output .= $renderer->modify_choices_group($this->ratingallocateid, $this->coursemodule->id, $status); } + */ // Print data and controls for teachers. if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { diff --git a/renderer.php b/renderer.php index 2f68d6a6..0f97ea75 100644 --- a/renderer.php +++ b/renderer.php @@ -410,6 +410,14 @@ public function reports_group($ratingallocateid, $coursemoduleid, $status, $cont $output .= $this->heading(get_string('reports_group', RATINGALLOCATE_MOD_NAME), 2); $output .= $this->box_start(); + /* + $output .= $this->single_select($this->page->url, 'select_report', array( + 'show_table' => ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE, + 'show_allocation_table' => ACTION_SHOW_ALLOCATION_TABLE, + 'show_allocation_statistics' => ACTION_SHOW_CHOICES + )); + */ + $tableurl = new moodle_url($this->page->url, array('action' => ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE)); // Button with link to display information about the allocations and ratings. diff --git a/version.php b/version.php index db50618f..5046269c 100644 --- a/version.php +++ b/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2023062000; // The current module version (Date: YYYYMMDDXX). +$plugin->version = 2023062300; // The current module version (Date: YYYYMMDDXX). $plugin->requires = 2020061500; // Requires Moodle 3.9+. $plugin->maturity = MATURITY_STABLE; $plugin->release = 'v4.2-r1'; From 9e14a091f3809cfe95355aea2b896e62fe66a048 Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Fri, 23 Jun 2023 15:24:56 +0200 Subject: [PATCH 2/8] added reports page to navigation bar --- lib.php | 31 ++++++++----------------------- locallib.php | 26 ++++++++++---------------- renderer.php | 33 ++++++++++----------------------- version.php | 2 +- 4 files changed, 29 insertions(+), 63 deletions(-) diff --git a/lib.php b/lib.php index f5ce97e2..3ff69ac4 100644 --- a/lib.php +++ b/lib.php @@ -366,24 +366,7 @@ function ratingallocate_pluginfile($course, $cm, $context, $filearea, array $arg * @param cm_info $cm */ function ratingallocate_extend_navigation(navigation_node $navref, stdclass $course, stdclass $module, cm_info $cm) { - //global $PAGE; - - // $PAGE->navbar->ignore_active(); - /*$PAGE->navbar->add( - get_string('Choices'), - new moodle_url(dirname(__FILE__) . '/form_modify_choice.php') - ); - - $node = $navref->create( - 'Choices', - dirname(__FILE__) . '/form_modify_choice.php', - navigation_node::NODETYPE_LEAF, - null, - null, new pix_icon('i/choices', '') - ); - $node->showinflatnavigation = true; - $navref->add_node($node); - */ + } /** @@ -406,14 +389,16 @@ function ratingallocate_extend_settings_navigation(settings_navigation $settings $choicenode = navigation_node::create(get_string('choice_navigation', RATINGALLOCATE_MOD_NAME), new moodle_url('/mod/ratingallocate/view.php', ['id' => $settingsnav->get_page()->cm->id, 'action' => ACTION_SHOW_CHOICES]), navigation_node::TYPE_CUSTOM, null); - /* - $choicenode = navigation_node::create(get_string('choice_navigation', RATINGALLOCATE_MOD_NAME), - new moodle_url('/mod/ratingallocate/choices.php', ['id' => $settingsnav->get_page()->cm->id]), - navigation_node::TYPE_CUSTOM, null); - */ $ratingallocatenode->add_node($choicenode); } + if (has_capability('mod/ratingallocate:start_distribution', $context)) { + $reportsnode = navigation_node::create(get_string('reports_group', RATINGALLOCATE_MOD_NAME), + new moodle_url('/mod/ratingallocate/view.php', ['id' => $settingsnav->get_page()->cm->id, 'action' => ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE]), + navigation_node::TYPE_CUSTOM, null); + $ratingallocatenode->add_node($reportsnode); + } + } /** diff --git a/locallib.php b/locallib.php index 782f16c7..614ec628 100644 --- a/locallib.php +++ b/locallib.php @@ -965,20 +965,20 @@ public function distribute_users_without_choice(string $distributionalgorithm): private function process_action_show_ratings_and_alloc_table() { $output = ''; + // Print ratings table. if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { global $OUTPUT; $renderer = $this->get_renderer(); + $status = $this->get_status(); + $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context, ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE); + $output .= $renderer->ratings_table_for_ratingallocate($this->get_rateable_choices(), $this->get_ratings_for_rateable_choices(), $this->get_raters_in_course(), $this->get_allocations(), $this); $output = html_writer::div($output, 'ratingallocate_ratings_table_container'); - $output .= html_writer::empty_tag('br', array()); - $output .= $OUTPUT->single_button(new moodle_url('/mod/ratingallocate/view.php', array( - 'id' => $this->coursemodule->id)), get_string('back'), 'get'); - // Logging. $event = \mod_ratingallocate\event\ratings_and_allocation_table_viewed::create_simple( context_module::instance($this->coursemodule->id), $this->ratingallocateid); @@ -989,16 +989,16 @@ private function process_action_show_ratings_and_alloc_table() { private function process_action_show_allocation_table() { $output = ''; + // Print ratings table. if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { global $OUTPUT; $renderer = $this->get_renderer(); + $status = $this->get_status(); + $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context, ACTION_SHOW_ALLOCATION_TABLE); $output .= $renderer->allocation_table_for_ratingallocate($this); - $output .= html_writer::empty_tag('br', array()); - $output .= $OUTPUT->single_button(new moodle_url('/mod/ratingallocate/view.php', - array('id' => $this->coursemodule->id)), get_string('back'), 'get'); // Logging. $event = \mod_ratingallocate\event\allocation_table_viewed::create_simple( context_module::instance($this->coursemodule->id), $this->ratingallocateid); @@ -1013,12 +1013,11 @@ private function process_action_show_statistics() { if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { global $OUTPUT; $renderer = $this->get_renderer(); + $status = $this->get_status(); + $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context, ACTION_SHOW_STATISTICS); $output .= $renderer->statistics_table_for_ratingallocate($this); - $output .= html_writer::empty_tag('br', array()); - $output .= $OUTPUT->single_button(new moodle_url('/mod/ratingallocate/view.php', - array('id' => $this->coursemodule->id)), get_string('back'), 'get'); // Logging. $event = \mod_ratingallocate\event\allocation_statistics_viewed::create_simple( context_module::instance($this->coursemodule->id), $this->ratingallocateid); @@ -1076,11 +1075,6 @@ private function process_default() { } } } - /* Print data and controls to edit the choices. - if (has_capability('mod/ratingallocate:modify_choices', $this->context)) { - $output .= $renderer->modify_choices_group($this->ratingallocateid, $this->coursemodule->id, $status); - } - */ // Print data and controls for teachers. if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { @@ -1089,7 +1083,7 @@ private function process_default() { $undistributeduserscount, (int) $this->ratingallocate->algorithmstatus, (boolean) $this->ratingallocate->runalgorithmbycron); $output .= $renderer->publish_allocation_group($this->ratingallocateid, $this->coursemodule->id, $status); - $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context); + // $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context); } // Logging. diff --git a/renderer.php b/renderer.php index 0f97ea75..e54851e7 100644 --- a/renderer.php +++ b/renderer.php @@ -405,33 +405,20 @@ public function publish_allocation_group($ratingallocateid, $coursemoduleid, $st /** * Output the ratingallocate modfify allocation */ - public function reports_group($ratingallocateid, $coursemoduleid, $status, $context) { + public function reports_group($ratingallocateid, $coursemoduleid, $status, $context, $action = '') { $output = ''; $output .= $this->heading(get_string('reports_group', RATINGALLOCATE_MOD_NAME), 2); $output .= $this->box_start(); - /* - $output .= $this->single_select($this->page->url, 'select_report', array( - 'show_table' => ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE, - 'show_allocation_table' => ACTION_SHOW_ALLOCATION_TABLE, - 'show_allocation_statistics' => ACTION_SHOW_CHOICES - )); - */ - - $tableurl = new moodle_url($this->page->url, array('action' => ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE)); - - // Button with link to display information about the allocations and ratings. - $output .= $this->single_button($tableurl, get_string('show_table', RATINGALLOCATE_MOD_NAME), 'get'); - - $tableurl = new moodle_url($this->page->url, array('action' => ACTION_SHOW_ALLOCATION_TABLE)); - - // Button with link to display information about the allocations and ratings. - $output .= $this->single_button($tableurl, get_string('show_allocation_table', RATINGALLOCATE_MOD_NAME), 'get'); - - $tableurl = new moodle_url($this->page->url, array('action' => ACTION_SHOW_STATISTICS)); - - // Buttton with link to display statistical information about the allocations. - $output .= $this->single_button($tableurl, get_string('show_allocation_statistics', RATINGALLOCATE_MOD_NAME), 'get'); + $output .= $this->output->single_select( + new moodle_url('/mod/ratingallocate/view.php', array('id' => $coursemoduleid)), + 'action', array( + ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE =>get_string('show_table', RATINGALLOCATE_MOD_NAME), + ACTION_SHOW_ALLOCATION_TABLE => get_string('show_allocation_table', RATINGALLOCATE_MOD_NAME), + ACTION_SHOW_STATISTICS => get_string('show_allocation_statistics', RATINGALLOCATE_MOD_NAME) + ), + $action + ); /* TODO: File not readable $output .= html_writer::empty_tag('br', array()); diff --git a/version.php b/version.php index 5046269c..d7afdb16 100644 --- a/version.php +++ b/version.php @@ -25,7 +25,7 @@ defined('MOODLE_INTERNAL') || die(); -$plugin->version = 2023062300; // The current module version (Date: YYYYMMDDXX). +$plugin->version = 2023062301; // The current module version (Date: YYYYMMDDXX). $plugin->requires = 2020061500; // Requires Moodle 3.9+. $plugin->maturity = MATURITY_STABLE; $plugin->release = 'v4.2-r1'; From 998313c560728937d86e4ccf750613530b600e52 Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Tue, 27 Jun 2023 12:08:42 +0200 Subject: [PATCH 3/8] added active tabs to secondary navigation --- lib.php | 4 ++-- locallib.php | 16 +++++++++++----- renderer.php | 2 +- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/lib.php b/lib.php index 3ff69ac4..c4d68818 100644 --- a/lib.php +++ b/lib.php @@ -388,14 +388,14 @@ function ratingallocate_extend_settings_navigation(settings_navigation $settings if (has_capability('mod/ratingallocate:modify_choices', $context)) { $choicenode = navigation_node::create(get_string('choice_navigation', RATINGALLOCATE_MOD_NAME), new moodle_url('/mod/ratingallocate/view.php', ['id' => $settingsnav->get_page()->cm->id, 'action' => ACTION_SHOW_CHOICES]), - navigation_node::TYPE_CUSTOM, null); + navigation_node::TYPE_CUSTOM, null, 'mod_ratingallocate_choices'); $ratingallocatenode->add_node($choicenode); } if (has_capability('mod/ratingallocate:start_distribution', $context)) { $reportsnode = navigation_node::create(get_string('reports_group', RATINGALLOCATE_MOD_NAME), new moodle_url('/mod/ratingallocate/view.php', ['id' => $settingsnav->get_page()->cm->id, 'action' => ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE]), - navigation_node::TYPE_CUSTOM, null); + navigation_node::TYPE_CUSTOM, null, 'mod_ratingallocate_reports'); $ratingallocatenode->add_node($reportsnode); } diff --git a/locallib.php b/locallib.php index 614ec628..eac0c6b0 100644 --- a/locallib.php +++ b/locallib.php @@ -390,7 +390,8 @@ private function process_action_delete_rating() { private function process_action_show_choices() { if (has_capability('mod/ratingallocate:modify_choices', $this->context)) { - global $OUTPUT; + global $OUTPUT, $PAGE; + $PAGE->set_secondary_active_tab('mod_ratingallocate_choices'); $renderer = $this->get_renderer(); $status = $this->get_status(); @@ -428,7 +429,8 @@ private function process_action_edit_choice() { $output = ''; if (has_capability('mod/ratingallocate:modify_choices', $this->context)) { - global $OUTPUT; + global $OUTPUT, $PAGE; + $PAGE->set_secondary_active_tab('mod_ratingallocate_choices'); $choiceid = optional_param('choiceid', 0, PARAM_INT); if ($choiceid) { @@ -512,6 +514,7 @@ private function process_action_upload_choices() { $output = ''; if (has_capability('mod/ratingallocate:modify_choices', $this->context)) { global $OUTPUT; + $PAGE->set_secondary_active_tab('mod_ratingallocate_choices'); $url = new moodle_url('/mod/ratingallocate/view.php', array('id' => $this->coursemodule->id, @@ -968,7 +971,8 @@ private function process_action_show_ratings_and_alloc_table() { // Print ratings table. if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { - global $OUTPUT; + global $OUTPUT, $PAGE; + $PAGE->set_secondary_active_tab('mod_ratingallocate_reports'); $renderer = $this->get_renderer(); $status = $this->get_status(); $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context, ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE); @@ -992,7 +996,8 @@ private function process_action_show_allocation_table() { // Print ratings table. if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { - global $OUTPUT; + global $OUTPUT, $PAGE; + $PAGE->set_secondary_active_tab('mod_ratingallocate_reports'); $renderer = $this->get_renderer(); $status = $this->get_status(); $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context, ACTION_SHOW_ALLOCATION_TABLE); @@ -1011,7 +1016,8 @@ private function process_action_show_statistics() { $output = ''; // Print ratings table. if (has_capability('mod/ratingallocate:start_distribution', $this->context)) { - global $OUTPUT; + global $OUTPUT, $PAGE; + $PAGE->set_secondary_active_tab('mod_ratingallocate_reports'); $renderer = $this->get_renderer(); $status = $this->get_status(); $output .= $renderer->reports_group($this->ratingallocateid, $this->coursemodule->id, $status, $this->context, ACTION_SHOW_STATISTICS); diff --git a/renderer.php b/renderer.php index e54851e7..61c126b7 100644 --- a/renderer.php +++ b/renderer.php @@ -413,7 +413,7 @@ public function reports_group($ratingallocateid, $coursemoduleid, $status, $cont $output .= $this->output->single_select( new moodle_url('/mod/ratingallocate/view.php', array('id' => $coursemoduleid)), 'action', array( - ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE =>get_string('show_table', RATINGALLOCATE_MOD_NAME), + ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE => get_string('show_table', RATINGALLOCATE_MOD_NAME), ACTION_SHOW_ALLOCATION_TABLE => get_string('show_allocation_table', RATINGALLOCATE_MOD_NAME), ACTION_SHOW_STATISTICS => get_string('show_allocation_statistics', RATINGALLOCATE_MOD_NAME) ), From 7e0e18b715339ada6e26ecbe90784f1b26694bbe Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Tue, 27 Jun 2023 16:12:54 +0200 Subject: [PATCH 4/8] updated behat tests according to new navigation --- tests/behat/allocation_status.feature | 17 +++---- tests/behat/behat_mod_ratingallocate.php | 64 ++++++++++++++++++++++++ tests/behat/defaultratings.feature | 18 +++---- tests/behat/manual_allocation.feature | 2 +- tests/behat/mod_form.feature | 12 ++--- tests/behat/ratings.feature | 7 ++- tests/behat/validate_rating.feature | 9 ++-- 7 files changed, 95 insertions(+), 34 deletions(-) diff --git a/tests/behat/allocation_status.feature b/tests/behat/allocation_status.feature index 7b84c26f..f7cd1fb8 100644 --- a/tests/behat/allocation_status.feature +++ b/tests/behat/allocation_status.feature @@ -21,52 +21,51 @@ Feature: Students should get status information according to their rating and th | activity | course | idnumber | name | accesstimestart | | ratingallocate | C1 | ra1 | My Fair Allocation | ##yesterday## | And I log in as "teacher1" - And I am on the "My Fair Allocation" "ratingallocate activity" page - And I press "Edit Choices" + And I am on the "My Fair Allocation" "mod_ratingallocate > Choices" page And I add a new choice with the values: | title | My only choice | | Description (optional) | Test | | maxsize | 1 | And I log out And I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" And I press "Save changes" And I log out And I log in as "student2" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" And I click on "Deny" "radio" And I press "Save changes" And I log out And I log in as "teacher1" - And I am on the "My Fair Allocation" "ratingallocate activity editing" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page And I set the following fields to these values: | Rating begins at | ##2 days ago## | | Rating ends at | ##yesterday## | And I press "id_submitbutton" And I run the scheduled task "mod_ratingallocate\task\cron_task" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Publish Allocation" And I log out @javascript Scenario: As a user, who rated and was allocated, I should see my allocated choice. When I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page Then I should see "My only choice" in the "//*[contains(@class, 'allocation')]" "xpath_element" And I should see "My only choice" in the "//*[contains(@class, 'alert-success')]" "xpath_element" @javascript Scenario: As a user, who rated and was not allocated, I should see a warning. When I log in as "student2" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page Then I should see "You were not allocated to any choice!" in the "//*[contains(@class, 'allocation')]" "xpath_element" And I should see "You could not be allocated to any choice." in the "//*[contains(@class, 'alert-danger')]" "xpath_element" @javascript Scenario: As a user, who did not rate, I should not see my allocated choice When I log in as "student3" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page Then I should not see "Your Allocation" And I should see "The rating is over." in the "//*[contains(@class, 'alert-info')]" "xpath_element" diff --git a/tests/behat/behat_mod_ratingallocate.php b/tests/behat/behat_mod_ratingallocate.php index 4f657182..389d8bb9 100644 --- a/tests/behat/behat_mod_ratingallocate.php +++ b/tests/behat/behat_mod_ratingallocate.php @@ -572,4 +572,68 @@ public function i_rate_choices_with_the_following_points(TableNode $ratingdata) } } + /** + * Convert page names to URLs for steps like 'When I am on the "[identifier]" "[page type]" page'. + * + * Recognised page names are: + * | pagetype | name meaning | description | + * | View | Ratingallocate name | The ratingallocate info page | + * | Edit | Ratingallocate name | The edit ratingallocate page | + * | Choices | Ratingallocate name | The page for editing choices | + * | Reports | Ratingallocate name | The page for reports and statistics | + * + * @param string $type identifies which type of page this is, e.g. 'Choices'. + * @param string $identifier identifies the particular page, e.g. 'My Fair Allocation'. + * @return moodle_url the corresponding URL. + * @throws Exception with a meaningful error message if the specified page cannot be found. + */ + protected function resolve_page_instance_url(string $type, string $identifier): moodle_url { + + switch (strtolower($type)) { + case 'view': + return new moodle_url('/mod/ratingallocate/view.php', + ['id' => $this->get_cm_by_ratingallocate_name($identifier)->id]); + + case 'edit': + return new moodle_url('/course/modedit.php', [ + 'update' => $this->get_cm_by_ratingallocate_name($identifier)->id]); + + case 'choices': + return new moodle_url('/mod/ratingallocate/view.php', [ + 'id' => $this->get_cm_by_ratingallocate_name($identifier)->id,'action' => ACTION_SHOW_CHOICES + ]); + + case 'reports': + return new moodle_url('/mod/ratingallocate/view.php', [ + 'id' => $this->get_cm_by_ratingallocate_name($identifier)->id, + 'action' => ACTION_SHOW_RATINGS_AND_ALLOCATION_TABLE + ]); + + default: + throw new Exception('Unrecognised ratingallocate page type "' . $type . '."'); + } + } + + /** + * Get a ratingallocate instance by name. + * + * @param string $name ratingallocate name. + * @return stdClass the corresponding DB row. + */ + protected function get_ratingallocate_by_name(string $name): stdClass { + global $DB; + return $DB->get_record('ratingallocate', ['name' => $name], '*', MUST_EXIST); + } + + /** + * Get a ratingallocate cmid from the ratingallocate name. + * + * @param string $name ratingallocate name. + * @return stdClass cm from get_coursemodule_from_instance. + */ + protected function get_cm_by_ratingallocate_name(string $name): stdClass { + $ratingallocate = $this->get_ratingallocate_by_name($name); + return get_coursemodule_from_instance('ratingallocate', $ratingallocate->id, $ratingallocate->course); + } + } diff --git a/tests/behat/defaultratings.feature b/tests/behat/defaultratings.feature index 2ed5abe2..6b7f5c81 100644 --- a/tests/behat/defaultratings.feature +++ b/tests/behat/defaultratings.feature @@ -18,7 +18,7 @@ Feature: When a student starts a rating the default values of all choices | activity | course | idnumber | name | | ratingallocate | C1 | ra1 | My Fair Allocation | And I log in as "teacher1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Choices" page And I press "Edit Choices" And I add a new choice with the values: | title | My first choice | @@ -31,12 +31,12 @@ Feature: When a student starts a rating the default values of all choices @javascript Scenario: The default rating is the max rating - And I am on the "My Fair Allocation" "ratingallocate activity editing" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page And I select "strategy_lickert" from the "strategy" singleselect And I press "id_submitbutton" And I log out When I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" Then I should see the following rating form: | My first choice | 4 | @@ -44,13 +44,13 @@ Feature: When a student starts a rating the default values of all choices @javascript Scenario: The default rating should be changeable to a medium rating - And I am on the "My Fair Allocation" "ratingallocate activity editing" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page And I select "strategy_lickert" from the "strategy" singleselect And I select "3" from the "strategyopt[strategy_lickert][default]" singleselect And I press "id_submitbutton" And I log out When I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" Then I should see the following rating form: | My first choice | 3 | @@ -58,13 +58,13 @@ Feature: When a student starts a rating the default values of all choices @javascript Scenario: The default rating should be changeable to the lowest rating - And I am on the "My Fair Allocation" "ratingallocate activity editing" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page And I select "strategy_lickert" from the "strategy" singleselect And I select "0" from the "strategyopt[strategy_lickert][default]" singleselect And I press "id_submitbutton" And I log out When I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" Then I should see the following rating form: | My first choice | 0 | @@ -72,12 +72,12 @@ Feature: When a student starts a rating the default values of all choices @javascript Scenario: The default rating is the max rating - And I am on the "My Fair Allocation" "ratingallocate activity editing" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page And I select "strategy_lickert" from the "strategy" singleselect And I press "id_submitbutton" And I log out When I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" And I set the rating form to the following values: | My first choice | 2 | diff --git a/tests/behat/manual_allocation.feature b/tests/behat/manual_allocation.feature index 734816be..ad1a2963 100644 --- a/tests/behat/manual_allocation.feature +++ b/tests/behat/manual_allocation.feature @@ -34,7 +34,7 @@ Feature: Teachers should be able to alter the allocations manually. Scenario: As a teacher, I want to allocate a so far not allocated user. And I log in as "teacher1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Manual Allocation Form" Then I should see "Steve" assigned to "C1" And I should see "Steve" not assigned to "C2" diff --git a/tests/behat/mod_form.feature b/tests/behat/mod_form.feature index 225f0fdd..121514be 100644 --- a/tests/behat/mod_form.feature +++ b/tests/behat/mod_form.feature @@ -18,7 +18,7 @@ Feature: Creating a new rating allocation, where new choices need to And I am on "Course 1" course homepage with editing mode on And I add a "Fair Allocation" to section "0" and I fill the form with: | id_name | My Fair Allocation | - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Choices" page And I press "Edit Choices" And I add a new choice with the values: | title | My first choice | @@ -113,19 +113,19 @@ Feature: Creating a new rating allocation, where new choices need to And the choice with name "My fourth choice" should not be active Scenario: Create a new rating alloation and check the field runalgorithmbycron. It should be saved as true. - When I am on the "My Fair Allocation" "ratingallocate activity editing" page + When I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page And I set the field "runalgorithmbycron" to "1" And I press "id_submitbutton" - And I am on the "My Fair Allocation" "ratingallocate activity editing" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page Then the field "runalgorithmbycron" matches value "1" Scenario: Create a new rating alloation and uncheck the field runalgorithmbycron. It should be saved as false. - When I am on the "My Fair Allocation" "ratingallocate activity editing" page + When I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page And I set the field "runalgorithmbycron" to "" And I press "id_submitbutton" - And I am on the "My Fair Allocation" "ratingallocate activity editing" page + And I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page Then the field "runalgorithmbycron" matches value "" Scenario: Create a new rating alloation and assume the default for the field runalgorithmbycron is true. - When I am on the "My Fair Allocation" "ratingallocate activity editing" page + When I am on the "My Fair Allocation" "mod_ratingallocate > Edit" page Then the field "runalgorithmbycron" matches value "1" diff --git a/tests/behat/ratings.feature b/tests/behat/ratings.feature index 844092ef..1bd8a17d 100644 --- a/tests/behat/ratings.feature +++ b/tests/behat/ratings.feature @@ -17,8 +17,7 @@ Feature: When a student rates a rating should be saved and it should be possible | activity | course | idnumber | name | | ratingallocate | C1 | ra1 | My Fair Allocation | And I log in as "teacher1" - And I am on the "My Fair Allocation" "ratingallocate activity" page - And I press "Edit Choices" + And I am on the "My Fair Allocation" "mod_ratingallocate > Choices" page And I add a new choice with the values: | title | My first choice | | Description (optional) | Test 1 | @@ -36,7 +35,7 @@ Feature: When a student rates a rating should be saved and it should be possible @javascript Scenario: The user can create a rating When I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" And I press "Save changes" Then the user "student1" should have ratings @@ -44,7 +43,7 @@ Feature: When a student rates a rating should be saved and it should be possible @javascript Scenario: The user can delete a rating When I log in as "student1" - And I am on the "My Fair Allocation" "ratingallocate activity" page + And I am on the "My Fair Allocation" "mod_ratingallocate > View" page And I press "Edit Rating" And I press "Save changes" Then the user "student1" should have ratings diff --git a/tests/behat/validate_rating.feature b/tests/behat/validate_rating.feature index 5ae606b0..e680a12d 100644 --- a/tests/behat/validate_rating.feature +++ b/tests/behat/validate_rating.feature @@ -20,8 +20,7 @@ Feature: When a student attempts to rate choices it should be validated prior to | strategy | strategy_points | | Rating begins at | ##2 days ago## | | strategyopt[strategy_points][maxzero] | 2 | - And I am on the "Validated Rating" "ratingallocate activity" page - And I press "Edit Choices" + And I am on the "Validated Rating" "mod_ratingallocate > Choices" page And I add a new choice with the values: | title | My first choice | | Description (optional) | Test 1 | @@ -42,7 +41,7 @@ Feature: When a student attempts to rate choices it should be validated prior to Scenario: The user cannot enter values less than 0. When I log in as "student1" - And I am on the "Validated Rating" "ratingallocate activity" page + And I am on the "Validated Rating" "mod_ratingallocate > View" page And I press "Edit Rating" And I rate choices with the following points: | My first choice | -1 | @@ -54,7 +53,7 @@ Feature: When a student attempts to rate choices it should be validated prior to Scenario: The values entered by the user must sum up to the (default) maximum. When I log in as "student1" - And I am on the "Validated Rating" "ratingallocate activity" page + And I am on the "Validated Rating" "mod_ratingallocate > View" page And I press "Edit Rating" And I rate choices with the following points: | My first choice | 1 | @@ -66,7 +65,7 @@ Feature: When a student attempts to rate choices it should be validated prior to Scenario: The user may not rate more than a (default) number of choices with 0. When I log in as "student1" - And I am on the "Validated Rating" "ratingallocate activity" page + And I am on the "Validated Rating" "mod_ratingallocate > View" page And I press "Edit Rating" And I rate choices with the following points: | My first choice | 0 | From cac2f1d09d1c10c1f73fb2f54dd8d59ddf50d45c Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Tue, 27 Jun 2023 16:18:43 +0200 Subject: [PATCH 5/8] codestyle fixes --- tests/behat/behat_mod_ratingallocate.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/behat/behat_mod_ratingallocate.php b/tests/behat/behat_mod_ratingallocate.php index 389d8bb9..0a88076a 100644 --- a/tests/behat/behat_mod_ratingallocate.php +++ b/tests/behat/behat_mod_ratingallocate.php @@ -600,7 +600,7 @@ protected function resolve_page_instance_url(string $type, string $identifier): case 'choices': return new moodle_url('/mod/ratingallocate/view.php', [ - 'id' => $this->get_cm_by_ratingallocate_name($identifier)->id,'action' => ACTION_SHOW_CHOICES + 'id' => $this->get_cm_by_ratingallocate_name($identifier)->id, 'action' => ACTION_SHOW_CHOICES ]); case 'reports': From f38cad53609d34c0f3f6c5dbaf4298c42bd45749 Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Fri, 30 Jun 2023 10:57:32 +0200 Subject: [PATCH 6/8] updated behat tests according to new navigation page layout --- tests/behat/behat_mod_ratingallocate.php | 19 ++++++++++++++++++- tests/behat/defaultratings.feature | 1 - tests/behat/mod_form.feature | 1 - 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/tests/behat/behat_mod_ratingallocate.php b/tests/behat/behat_mod_ratingallocate.php index 0a88076a..b5800c39 100644 --- a/tests/behat/behat_mod_ratingallocate.php +++ b/tests/behat/behat_mod_ratingallocate.php @@ -572,6 +572,23 @@ public function i_rate_choices_with_the_following_points(TableNode $ratingdata) } } + /** + * Convert page names to URLs for steps like 'When I am on the "mod_ratingallocate > [page name]" page'. + * + * Recognised page names are: + * | None so far! | | + * + * @param string $page name of the page, with the component name removed e.g. 'Edit'. + * @return moodle_url the corresponding URL. + * @throws Exception with a meaningful error message if the specified page cannot be found. + */ + protected function resolve_page_url(string $page): moodle_url { + switch (strtolower($page)) { + default: + throw new Exception('Unrecognised mod_ratingallocate page type "' . $page . '."'); + } + } + /** * Convert page names to URLs for steps like 'When I am on the "[identifier]" "[page type]" page'. * @@ -582,7 +599,7 @@ public function i_rate_choices_with_the_following_points(TableNode $ratingdata) * | Choices | Ratingallocate name | The page for editing choices | * | Reports | Ratingallocate name | The page for reports and statistics | * - * @param string $type identifies which type of page this is, e.g. 'Choices'. + * @param string $type identifies which type of page this is, e.g. 'mod_ratingallocate > Choices'. * @param string $identifier identifies the particular page, e.g. 'My Fair Allocation'. * @return moodle_url the corresponding URL. * @throws Exception with a meaningful error message if the specified page cannot be found. diff --git a/tests/behat/defaultratings.feature b/tests/behat/defaultratings.feature index 6b7f5c81..76bb0b2e 100644 --- a/tests/behat/defaultratings.feature +++ b/tests/behat/defaultratings.feature @@ -19,7 +19,6 @@ Feature: When a student starts a rating the default values of all choices | ratingallocate | C1 | ra1 | My Fair Allocation | And I log in as "teacher1" And I am on the "My Fair Allocation" "mod_ratingallocate > Choices" page - And I press "Edit Choices" And I add a new choice with the values: | title | My first choice | | Description (optional) | Test 1 | diff --git a/tests/behat/mod_form.feature b/tests/behat/mod_form.feature index 121514be..0b6a6585 100644 --- a/tests/behat/mod_form.feature +++ b/tests/behat/mod_form.feature @@ -19,7 +19,6 @@ Feature: Creating a new rating allocation, where new choices need to And I add a "Fair Allocation" to section "0" and I fill the form with: | id_name | My Fair Allocation | And I am on the "My Fair Allocation" "mod_ratingallocate > Choices" page - And I press "Edit Choices" And I add a new choice with the values: | title | My first choice | | Description (optional) | Test 1 | From d3a37d1f25bcd850d048149c46b5800edaf33be6 Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Wed, 25 Oct 2023 14:44:09 +0200 Subject: [PATCH 7/8] fixed undefined constant error --- lib.php | 1 + 1 file changed, 1 insertion(+) diff --git a/lib.php b/lib.php index c4d68818..e2e699e9 100644 --- a/lib.php +++ b/lib.php @@ -40,6 +40,7 @@ // define('NEWMODULE_ULTIMATE_ANSWER', 42); require_once(dirname(__FILE__) . '/db/db_structure.php'); +require_once(dirname(__FILE__) . '/locallib.php'); use ratingallocate\db as this_db; From e66be02cddcc16559b22a3cedf840c7e9ece5c91 Mon Sep 17 00:00:00 2001 From: Irina Hoppe Date: Wed, 10 Jan 2024 10:19:40 +0100 Subject: [PATCH 8/8] removed moodle 3.9 and 3.11 from workflow as it is no longer supported --- .github/workflows/moodle-ci.yml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/.github/workflows/moodle-ci.yml b/.github/workflows/moodle-ci.yml index f793c641..a8a6d2d3 100644 --- a/.github/workflows/moodle-ci.yml +++ b/.github/workflows/moodle-ci.yml @@ -112,18 +112,6 @@ jobs: moodle-branch: ['MOODLE_401_STABLE', 'MOODLE_402_STABLE'] database: ['mariadb', 'pgsql'] include: - - php: '7.4' - moodle-branch: 'MOODLE_39_STABLE' - database: 'mariadb' - - php: '7.4' - moodle-branch: 'MOODLE_39_STABLE' - database: 'pgsql' - - php: '8.0' - moodle-branch: 'MOODLE_311_STABLE' - database: 'mariadb' - - php: '8.0' - moodle-branch: 'MOODLE_311_STABLE' - database: 'pgsql' - php: '8.0' moodle-branch: 'MOODLE_400_STABLE' database: 'mariadb'