diff --git a/.github/workflows/moodle-ci.yml b/.github/workflows/moodle-ci.yml index 5ae01946..d3e3a4f8 100644 --- a/.github/workflows/moodle-ci.yml +++ b/.github/workflows/moodle-ci.yml @@ -115,18 +115,6 @@ jobs: - php: '8.2' moodle-branch: 'MOODLE_401_STABLE' 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' diff --git a/backup/moodle2/backup_ratingallocate_activity_stepslib.php b/backup/moodle2/backup_ratingallocate_activity_stepslib.php index 3ebd04fd..b682791f 100644 --- a/backup/moodle2/backup_ratingallocate_activity_stepslib.php +++ b/backup/moodle2/backup_ratingallocate_activity_stepslib.php @@ -18,7 +18,7 @@ require_once(dirname(__FILE__) . '/backup_restore_helper.php'); -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; /** * Define the complete ratingallocate structure for backup, with [file and] id annotations @@ -35,38 +35,38 @@ protected function define_structure() { $userinfo = $this->get_setting_value('userinfo'); // Define each element separated. - $class = 'ratingallocate\db\ratingallocate'; + $class = 'mod_ratingallocate\db\ratingallocate'; $ratingallocate = new backup_nested_element(get_tablename_for_tableClass($class), get_id_for_tableClass($class), get_fields_for_tableClass($class)); - $class = 'ratingallocate\db\ratingallocate_choices'; + $class = 'mod_ratingallocate\db\ratingallocate_choices'; $ratingallocatechoices = new backup_nested_element(get_tablename_for_tableClass($class) . 's'); $ratingallocatechoice = new backup_nested_element(get_tablename_for_tableClass($class), get_id_for_tableClass($class), get_fields_for_tableClass($class)); - $class = 'ratingallocate\db\ratingallocate_ratings'; + $class = 'mod_ratingallocate\db\ratingallocate_ratings'; $ratingallocateratings = new backup_nested_element(get_tablename_for_tableClass($class) . 's'); $ratingallocaterating = new backup_nested_element(get_tablename_for_tableClass($class), get_id_for_tableClass($class), get_fields_for_tableClass($class)); - $class = 'ratingallocate\db\ratingallocate_allocations'; + $class = 'mod_ratingallocate\db\ratingallocate_allocations'; $ratingallocateallocations = new backup_nested_element(get_tablename_for_tableClass($class) . 's'); $ratingallocateallocation = new backup_nested_element(get_tablename_for_tableClass($class), get_id_for_tableClass($class), get_fields_for_tableClass($class)); - $groupchoiceclass = 'ratingallocate\db\ratingallocate_group_choices'; + $groupchoiceclass = 'mod_ratingallocate\db\ratingallocate_group_choices'; $groupchoices = new backup_nested_element(get_tablename_for_tableClass($groupchoiceclass) . 's'); $groupchoice = new backup_nested_element(get_tablename_for_tableClass($groupchoiceclass), get_id_for_tableClass($groupchoiceclass), get_fields_for_tableClass($groupchoiceclass)); - $choicegroupclass = 'ratingallocate\db\ratingallocate_ch_gengroups'; + $choicegroupclass = 'mod_ratingallocate\db\ratingallocate_ch_gengroups'; $ratingallocatechoicegroups = new backup_nested_element(get_tablename_for_tableClass($choicegroupclass) . 's'); $ratingallocatechoicegroup = new backup_nested_element(get_tablename_for_tableClass($choicegroupclass), get_id_for_tableClass($choicegroupclass), get_fields_for_tableClass($choicegroupclass)); - $groupingclass = 'ratingallocate\db\ratingallocate_groupings'; + $groupingclass = 'mod_ratingallocate\db\ratingallocate_groupings'; $ratingallocategroupings = new backup_nested_element(get_tablename_for_tableClass($groupingclass) . 's'); $ratingallocategrouping = new backup_nested_element(get_tablename_for_tableClass($groupingclass), get_id_for_tableClass($groupingclass), @@ -92,9 +92,9 @@ protected function define_structure() { $ratingallocatechoicegroups->add_child($ratingallocatechoicegroup); // Define sources. - $ratingallocate->set_source_table(get_tablename_for_tableClass('ratingallocate\db\ratingallocate'), + $ratingallocate->set_source_table(get_tablename_for_tableClass('mod_ratingallocate\db\ratingallocate'), array(this_db\ratingallocate::ID => backup::VAR_ACTIVITYID), this_db\ratingallocate_choices::ID . ' ASC'); - $ratingallocatechoice->set_source_table(get_tablename_for_tableClass('ratingallocate\db\ratingallocate_choices'), + $ratingallocatechoice->set_source_table(get_tablename_for_tableClass('mod_ratingallocate\db\ratingallocate_choices'), array(this_db\ratingallocate_choices::RATINGALLOCATEID => backup::VAR_PARENTID), this_db\ratingallocate_choices::ID . ' ASC'); $groupchoice->set_source_table(get_tablename_for_tableClass($groupchoiceclass), ['choiceid' => backup::VAR_PARENTID]); @@ -105,11 +105,11 @@ protected function define_structure() { if ($userinfo) { $ratingallocaterating->set_source_table(get_tablename_for_tableClass( - 'ratingallocate\db\ratingallocate_ratings'), + 'mod_ratingallocate\db\ratingallocate_ratings'), array(this_db\ratingallocate_ratings::CHOICEID => backup::VAR_PARENTID), this_db\ratingallocate_ratings::ID . ' ASC'); $ratingallocateallocation->set_source_table( - get_tablename_for_tableClass('ratingallocate\db\ratingallocate_allocations'), + get_tablename_for_tableClass('mod_ratingallocate\db\ratingallocate_allocations'), array( this_db\ratingallocate_allocations::RATINGALLOCATEID => backup::VAR_ACTIVITYID, this_db\ratingallocate_allocations::CHOICEID => backup::VAR_PARENTID), diff --git a/backup/moodle2/restore_ratingallocate_activity_stepslib.php b/backup/moodle2/restore_ratingallocate_activity_stepslib.php index d27aa25c..d89b4437 100644 --- a/backup/moodle2/restore_ratingallocate_activity_stepslib.php +++ b/backup/moodle2/restore_ratingallocate_activity_stepslib.php @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; /** * diff --git a/classes/choice_importer.php b/classes/choice_importer.php index d7a3fb33..cd80e9c2 100644 --- a/classes/choice_importer.php +++ b/classes/choice_importer.php @@ -21,7 +21,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace mod_ratingallocate; -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; defined('MOODLE_INTERNAL') || die(); diff --git a/classes/dates.php b/classes/dates.php new file mode 100644 index 00000000..0e3e8313 --- /dev/null +++ b/classes/dates.php @@ -0,0 +1,70 @@ +. + +/** + * Contains the class for fetching the important dates in mod_ratingallocate for a given module instance and a user. + * + * @package mod_ratingallocate + * @copyright 2022 University of Vienna + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +declare(strict_types=1); + +namespace mod_ratingallocate; + +use core\activity_dates; + +/** + * Class for fetching the important dates in mod_ratingallocate for a given module instance and a user. + * + * @copyright 2022 Jakob Mischke + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class dates extends activity_dates { + /** + * Returns a list of important dates in mod_ratingallocate + * + * @return array + */ + protected function get_dates(): array { + global $DB; + + $timeopen = $this->cm->customdata['accesstimestart'] ?? null; + $timeclose = $this->cm->customdata['accesstimestop'] ?? null; + + $now = time(); + $dates = []; + + if ($timeopen) { + $openlabelid = $timeopen > $now ? 'activitydate:opens' : 'activitydate:opened'; + $dates[] = [ + 'label' => get_string($openlabelid, 'core_course'), + 'timestamp' => (int) $timeopen, + ]; + } + + if ($timeclose) { + $closelabelid = $timeclose > $now ? 'activitydate:closes' : 'activitydate:closed'; + $dates[] = [ + 'label' => get_string($closelabelid, 'core_course'), + 'timestamp' => (int) $timeclose, + ]; + } + + return $dates; + } +} diff --git a/classes/task/cron_task.php b/classes/task/cron_task.php index c91ded43..aca7c3a1 100644 --- a/classes/task/cron_task.php +++ b/classes/task/cron_task.php @@ -16,7 +16,7 @@ namespace mod_ratingallocate\task; -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; defined('MOODLE_INTERNAL') || die(); diff --git a/classes/task/distribute_unallocated_task.php b/classes/task/distribute_unallocated_task.php index 6f131caa..b0737b84 100644 --- a/classes/task/distribute_unallocated_task.php +++ b/classes/task/distribute_unallocated_task.php @@ -45,7 +45,10 @@ class distribute_unallocated_task extends adhoc_task { * @throws moodle_exception */ public function execute(): void { - global $DB; + global $CFG, $DB; + // Make sure to include the global definitions of constants defined in locallib. + require_once($CFG->dirroot . '/mod/ratingallocate/locallib.php'); + $data = $this->get_custom_data(); if (empty($data->distributionalgorithm) || !in_array($data->distributionalgorithm, [ACTION_DISTRIBUTE_UNALLOCATED_EQUALLY, ACTION_DISTRIBUTE_UNALLOCATED_FILL])) { diff --git a/classes/task/send_distribution_notification.php b/classes/task/send_distribution_notification.php index 2913ef0c..2a70360b 100644 --- a/classes/task/send_distribution_notification.php +++ b/classes/task/send_distribution_notification.php @@ -26,7 +26,7 @@ require_once(dirname(__FILE__) . '/../../db/db_structure.php'); -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; class send_distribution_notification extends \core\task\adhoc_task { // Gets executed by the task runner. Will lookup the ratingallocation object and diff --git a/db/db_structure.php b/db/db_structure.php index 1095c0e7..2c3959a7 100644 --- a/db/db_structure.php +++ b/db/db_structure.php @@ -23,7 +23,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -namespace ratingallocate\db; +namespace mod_ratingallocate\db; defined('MOODLE_INTERNAL') || die(); class ratingallocate { diff --git a/lang/en/ratingallocate.php b/lang/en/ratingallocate.php index 816d4935..519ca55a 100644 --- a/lang/en/ratingallocate.php +++ b/lang/en/ratingallocate.php @@ -278,6 +278,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 53ee070d..57d77ec5 100644 --- a/lib.php +++ b/lib.php @@ -40,8 +40,9 @@ // 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; +use mod_ratingallocate\db as this_db; // ////////////////////////////////////////////////////////////////////////////// // Moodle core API // @@ -381,6 +382,23 @@ 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, '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, 'mod_ratingallocate_reports'); + $ratingallocatenode->add_node($reportsnode); + } } @@ -734,3 +752,41 @@ function ratingallocate_reset_course_form_definition($mform) { function ratingallocate_reset_course_form_defaults($course) { return ['reset_ratings_and_allocations' => 1]; } + +/** + * Add a get_coursemodule_info function in case any ratingallocate type wants to add 'extra' information + * for the course (see resource). + * + * Given a course_module object, this function returns any "extra" information that may be needed + * when printing this activity in a course listing. See get_array_of_activities() in course/lib.php. + * + * @param stdClass $coursemodule The coursemodule object (record). + * @return cached_cm_info An object on information that the courses + * will know about (most noticeably, an icon). + */ +function ratingallocate_get_coursemodule_info($coursemodule) { + global $DB; + + $dbparams = array('id' => $coursemodule->instance); + if (! $ratingallocate = $DB->get_record('ratingallocate', $dbparams)) { + return false; + } + + $result = new cached_cm_info(); + $result->name = $ratingallocate->name; + + if ($coursemodule->showdescription) { + // Convert intro to html. Do not filter cached version, filters run at display time. + $result->content = format_module_intro('ratingallocate', $ratingallocate, $coursemodule->id, false); + } + + // Populate some other values that can be used in calendar or on dashboard. + if ($ratingallocate->accesstimestart) { + $result->customdata['accesstimestart'] = $ratingallocate->accesstimestart; + } + if ($ratingallocate->accesstimestop) { + $result->customdata['accesstimestop'] = $ratingallocate->accesstimestop; + } + + return $result; +} diff --git a/locallib.php b/locallib.php index 14d7abdc..f9074831 100644 --- a/locallib.php +++ b/locallib.php @@ -29,7 +29,7 @@ use core_availability\info_module; use mod_ratingallocate\task\distribute_unallocated_task; -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; global $CFG; @@ -328,7 +328,7 @@ private function process_action_give_rating() { // Rating is possible... // Suche das richtige Formular nach Strategie. - $strategyform = 'ratingallocate\\' . $this->ratingallocate->strategy . '\\mod_ratingallocate_view_form'; + $strategyform = 'mod_ratingallocate\\' . $this->ratingallocate->strategy . '\\mod_ratingallocate_view_form'; $mform = new $strategyform($PAGE->url->out(), $this); $mform->add_action_buttons(); @@ -390,15 +390,17 @@ 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(); // Notifications if no choices exist or too few in comparison to strategy settings. $availablechoices = $this->get_rateable_choices(); $strategysettings = $this->get_strategy_class()->get_static_settingfields(); - if (array_key_exists(ratingallocate\strategy_order\strategy::COUNTOPTIONS, $strategysettings)) { + if (array_key_exists(mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS, $strategysettings)) { $necessarychoices = - $strategysettings[ratingallocate\strategy_order\strategy::COUNTOPTIONS][2]; + $strategysettings[mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS][2]; } else { $necessarychoices = 0; } @@ -409,6 +411,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'); @@ -422,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) { @@ -506,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, @@ -959,20 +968,21 @@ 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; + 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); + $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); @@ -983,16 +993,17 @@ 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; + 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); $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); @@ -1005,14 +1016,14 @@ 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); $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); @@ -1070,17 +1081,15 @@ 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)) { $undistributeduserscount = count($this->get_undistributed_users()); + $output .= $renderer->render_ratingallocate_allocation_status($this->coursemodule->id, $status, $undistributeduserscount); $output .= $renderer->render_ratingallocate_publish_allocation($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. @@ -1211,9 +1220,9 @@ public function handle_view() { $choicestatus->availablechoices = $this->filter_choices_by_groups($choicestatus->availablechoices, $USER->id); $strategysettings = $this->get_strategy_class()->get_static_settingfields(); - if (array_key_exists(ratingallocate\strategy_order\strategy::COUNTOPTIONS, $strategysettings)) { + if (array_key_exists(mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS, $strategysettings)) { $choicestatus->necessarychoices = - $strategysettings[ratingallocate\strategy_order\strategy::COUNTOPTIONS][2]; + $strategysettings[mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS][2]; } else { $choicestatus->necessarychoices = 0; } @@ -2045,7 +2054,7 @@ public function get_options_titles(array $ratings) { * Returns the strategy class for the ratingallocate */ private function get_strategy_class() { - $strategyclassp = 'ratingallocate\\' . $this->ratingallocate->strategy . '\\strategy'; + $strategyclassp = 'mod_ratingallocate\\' . $this->ratingallocate->strategy . '\\strategy'; $allsettings = json_decode($this->ratingallocate->setting, true); if (array_key_exists($this->ratingallocate->strategy, $allsettings)) { return new $strategyclassp($allsettings[$this->ratingallocate->strategy]); @@ -2195,7 +2204,7 @@ public function is_setup_ok() { $choicecount = count($this->get_rateable_choices()); $strategyclass = $this->get_strategy_class(); $strategysettings = $strategyclass->get_static_settingfields(); - $necessarychoices = $strategysettings[ratingallocate\strategy_order\strategy::COUNTOPTIONS][2]; + $necessarychoices = $strategysettings[mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS][2]; if ($choicecount < $necessarychoices) { return false; } diff --git a/mod_form.php b/mod_form.php index 61f3099e..45adb8bf 100644 --- a/mod_form.php +++ b/mod_form.php @@ -126,7 +126,7 @@ public function definition() { foreach (\strategymanager::get_strategies() as $strategy) { // Load strategy class. - $strategyclassp = 'ratingallocate\\' . $strategy . '\\strategy'; + $strategyclassp = 'mod_ratingallocate\\' . $strategy . '\\strategy'; $strategyclass = new $strategyclassp(); // Add options fields. @@ -218,7 +218,7 @@ public function definition_after_data() { // Add dynamic settings fields. foreach (\strategymanager::get_strategies() as $strategy) { // Load strategy class. - $strategyclassp = 'ratingallocate\\' . $strategy . '\\strategy'; + $strategyclassp = 'mod_ratingallocate\\' . $strategy . '\\strategy'; if (isset($allstrategyoptions) && array_key_exists($strategy, $allstrategyoptions)) { $strategyclass = new $strategyclassp($allstrategyoptions[$strategy]); } else { @@ -276,7 +276,7 @@ public function validation($data, $files) { // User has to select one strategy. $errors['strategy'] = get_string('strategy_not_specified', self::MOD_NAME); } else { - $strategyclassp = 'ratingallocate\\' . $data['strategy'] . '\\strategy'; + $strategyclassp = 'mod_ratingallocate\\' . $data['strategy'] . '\\strategy'; if (array_key_exists($data['strategy'], $data['strategyopt'])) { $strategyclass = new $strategyclassp($data['strategyopt'][$data['strategy']]); $settingerrors = $strategyclass->validate_settings(); diff --git a/renderer.php b/renderer.php index eda26d6f..8b05f56f 100644 --- a/renderer.php +++ b/renderer.php @@ -14,7 +14,7 @@ // You should have received a copy of the GNU General Public License // along with Moodle. If not, see . -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; defined('MOODLE_INTERNAL') || die(); @@ -573,25 +573,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(); - $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/solver/solver-template.php b/solver/solver-template.php index c805f6c3..3b9e8370 100644 --- a/solver/solver-template.php +++ b/solver/solver-template.php @@ -204,7 +204,9 @@ protected function setup_graph($choicecount, $usercount, $fromuserid, $fromchoic } foreach ($fromchoiceid as $id => $choice) { $this->graph[$choice] = array(); - $this->graph[$choice][] = new edge($choice, $sink, 0, $choicedata[$id]->maxsize); + if ($choicedata[$id]->maxsize > 0) { + $this->graph[$choice][] = new edge($choice, $sink, 0, $choicedata[$id]->maxsize); + } } // Add the edges representing the ratings to the graph. diff --git a/strategy/strategy01_yes_no.php b/strategy/strategy01_yes_no.php index a05c26e2..e8328f43 100644 --- a/strategy/strategy01_yes_no.php +++ b/strategy/strategy01_yes_no.php @@ -26,7 +26,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ -namespace ratingallocate\strategy_yesno; +namespace mod_ratingallocate\strategy_yesno; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir . '/formslib.php'); diff --git a/strategy/strategy02_yes_maybe_no.php b/strategy/strategy02_yes_maybe_no.php index 05a57377..226f0a37 100644 --- a/strategy/strategy02_yes_maybe_no.php +++ b/strategy/strategy02_yes_maybe_no.php @@ -27,7 +27,7 @@ */ // Namespace is mandatory! -namespace ratingallocate\strategy_yesmaybeno; +namespace mod_ratingallocate\strategy_yesmaybeno; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir . '/formslib.php'); diff --git a/strategy/strategy03_lickert.php b/strategy/strategy03_lickert.php index 8f750ff0..cff271cc 100644 --- a/strategy/strategy03_lickert.php +++ b/strategy/strategy03_lickert.php @@ -26,7 +26,7 @@ */ // Namespace is mandatory! -namespace ratingallocate\strategy_lickert; +namespace mod_ratingallocate\strategy_lickert; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir . '/formslib.php'); diff --git a/strategy/strategy04_points.php b/strategy/strategy04_points.php index 7e93b0d0..33b58249 100644 --- a/strategy/strategy04_points.php +++ b/strategy/strategy04_points.php @@ -27,7 +27,7 @@ */ // Namespace is mandatory! -namespace ratingallocate\strategy_points; +namespace mod_ratingallocate\strategy_points; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir . '/formslib.php'); diff --git a/strategy/strategy05_order.php b/strategy/strategy05_order.php index 54f4f26a..6abc6cc4 100644 --- a/strategy/strategy05_order.php +++ b/strategy/strategy05_order.php @@ -26,7 +26,7 @@ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ // Namespace is mandatory! -namespace ratingallocate\strategy_order; +namespace mod_ratingallocate\strategy_order; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir . '/formslib.php'); diff --git a/strategy/strategy06_tickyes.php b/strategy/strategy06_tickyes.php index 45fe1f44..23d243fb 100644 --- a/strategy/strategy06_tickyes.php +++ b/strategy/strategy06_tickyes.php @@ -27,7 +27,7 @@ */ // Namespace is mandatory! -namespace ratingallocate\strategy_tickyes; +namespace mod_ratingallocate\strategy_tickyes; defined('MOODLE_INTERNAL') || die(); require_once($CFG->libdir . '/formslib.php'); diff --git a/tests/backup_restore_test.php b/tests/backup_restore_test.php index b7ed3def..5e91b123 100644 --- a/tests/backup_restore_test.php +++ b/tests/backup_restore_test.php @@ -24,7 +24,7 @@ require_once($CFG->dirroot . '/backup/util/includes/backup_includes.php'); require_once($CFG->dirroot . '/backup/util/includes/restore_includes.php'); -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; /** * mod_ratingallocate backup restore procedure test 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..b5800c39 100644 --- a/tests/behat/behat_mod_ratingallocate.php +++ b/tests/behat/behat_mod_ratingallocate.php @@ -572,4 +572,85 @@ 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'. + * + * 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. '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. + */ + 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..76bb0b2e 100644 --- a/tests/behat/defaultratings.feature +++ b/tests/behat/defaultratings.feature @@ -18,8 +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 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 | @@ -31,12 +30,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 +43,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 +57,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 +71,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..0b6a6585 100644 --- a/tests/behat/mod_form.feature +++ b/tests/behat/mod_form.feature @@ -18,8 +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 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 | @@ -113,19 +112,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 | diff --git a/tests/cron_test.php b/tests/cron_test.php index 40a8880c..6be4c450 100644 --- a/tests/cron_test.php +++ b/tests/cron_test.php @@ -20,7 +20,7 @@ require_once(__DIR__ . '/generator/lib.php'); require_once(__DIR__ . '/../locallib.php'); -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; /** * mod_ratingallocate cron tests diff --git a/tests/generator/lib.php b/tests/generator/lib.php index 76fba82a..b195d634 100644 --- a/tests/generator/lib.php +++ b/tests/generator/lib.php @@ -18,7 +18,7 @@ require_once(dirname(__FILE__) . '/../../locallib.php'); -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; /** * mod_ratinallocate generator tests diff --git a/tests/locallib_test.php b/tests/locallib_test.php index 789ec24c..a6322f5e 100644 --- a/tests/locallib_test.php +++ b/tests/locallib_test.php @@ -20,7 +20,7 @@ require_once(dirname(__FILE__) . '/generator/lib.php'); require_once(dirname(__FILE__) . '/../locallib.php'); -use ratingallocate\db as this_db; +use mod_ratingallocate\db as this_db; /** * mod_ratingallocate generator tests diff --git a/tests/mod_ratingallocate_allocate_unrated_test.php b/tests/mod_ratingallocate_allocate_unrated_test.php index b74971bd..a26a1f66 100644 --- a/tests/mod_ratingallocate_allocate_unrated_test.php +++ b/tests/mod_ratingallocate_allocate_unrated_test.php @@ -38,6 +38,27 @@ */ class mod_ratingallocate_allocate_unrated_test extends \advanced_testcase { + /** @var stdClass Course object. */ + private stdClass $course; + /** @var stdClass Enrolled teacher. */ + private stdClass $teacher; + /** @var stdClass Green group. */ + private stdClass $green; + /** @var stdClass Blue group. */ + private stdClass $blue; + /** @var stdClass Red group. */ + private stdClass $red; + /** @var array Students in the green group. */ + private array $studentsgreen = []; + /** @var array Students in the blue group. */ + private array $studentsblue = []; + /** @var array Students in the red group. */ + private array $studentsred = []; + /** @var array Students belonging to no group. */ + private array $studentsnogroup = []; + /** @var object Rating allocate object. */ + private object $ratingallocate; + protected function setUp(): void { parent::setUp(); $this->resetAfterTest(true); diff --git a/tests/mod_ratingallocate_strategy_test.php b/tests/mod_ratingallocate_strategy_test.php index 52305f2c..8b950f86 100644 --- a/tests/mod_ratingallocate_strategy_test.php +++ b/tests/mod_ratingallocate_strategy_test.php @@ -32,16 +32,16 @@ class mod_ratingallocate_strategy_test extends \advanced_testcase { */ public function test_yes_no_validation() { // Attribute required. - $settings = array(\ratingallocate\strategy_yesno\strategy::MAXCROSSOUT => null); - $strategy = new \ratingallocate\strategy_yesno\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_yesno\strategy::MAXCROSSOUT => null); + $strategy = new \mod_ratingallocate\strategy_yesno\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_yesno\strategy::MAXCROSSOUT => -1); - $strategy = new \ratingallocate\strategy_yesno\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_yesno\strategy::MAXCROSSOUT => -1); + $strategy = new \mod_ratingallocate\strategy_yesno\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_yesno\strategy::MAXCROSSOUT => 1); - $strategy = new \ratingallocate\strategy_yesno\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_yesno\strategy::MAXCROSSOUT => 1); + $strategy = new \mod_ratingallocate\strategy_yesno\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); } @@ -50,16 +50,16 @@ public function test_yes_no_validation() { */ public function test_yes_maybe_no_validation() { // Attribute required. - $settings = array(\ratingallocate\strategy_yesmaybeno\strategy::MAXNO => null); - $strategy = new \ratingallocate\strategy_yesmaybeno\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_yesmaybeno\strategy::MAXNO => null); + $strategy = new \mod_ratingallocate\strategy_yesmaybeno\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_yesmaybeno\strategy::MAXNO => -1); - $strategy = new \ratingallocate\strategy_yesmaybeno\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_yesmaybeno\strategy::MAXNO => -1); + $strategy = new \mod_ratingallocate\strategy_yesmaybeno\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_yesmaybeno\strategy::MAXNO => 1); - $strategy = new \ratingallocate\strategy_yesmaybeno\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_yesmaybeno\strategy::MAXNO => 1); + $strategy = new \mod_ratingallocate\strategy_yesmaybeno\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); } @@ -68,28 +68,28 @@ public function test_yes_maybe_no_validation() { */ public function test_lickert_validation() { // Attribute required. - $settings = array(\ratingallocate\strategy_lickert\strategy::COUNTLICKERT => null); - $strategy = new \ratingallocate\strategy_lickert\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_lickert\strategy::COUNTLICKERT => null); + $strategy = new \mod_ratingallocate\strategy_lickert\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute required. - $settings = array(\ratingallocate\strategy_lickert\strategy::MAXNO => null); - $strategy = new \ratingallocate\strategy_lickert\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_lickert\strategy::MAXNO => null); + $strategy = new \mod_ratingallocate\strategy_lickert\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_lickert\strategy::COUNTLICKERT => 1); - $strategy = new \ratingallocate\strategy_lickert\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_lickert\strategy::COUNTLICKERT => 1); + $strategy = new \mod_ratingallocate\strategy_lickert\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_lickert\strategy::MAXNO => -1); - $strategy = new \ratingallocate\strategy_lickert\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_lickert\strategy::MAXNO => -1); + $strategy = new \mod_ratingallocate\strategy_lickert\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_lickert\strategy::COUNTLICKERT => 3); - $strategy = new \ratingallocate\strategy_lickert\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_lickert\strategy::COUNTLICKERT => 3); + $strategy = new \mod_ratingallocate\strategy_lickert\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_lickert\strategy::MAXNO => 1); - $strategy = new \ratingallocate\strategy_lickert\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_lickert\strategy::MAXNO => 1); + $strategy = new \mod_ratingallocate\strategy_lickert\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); } @@ -98,40 +98,40 @@ public function test_lickert_validation() { */ public function test_points_validation() { // Attribute required. - $settings = array(\ratingallocate\strategy_points\strategy::MAXZERO => null); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::MAXZERO => null); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute required. - $settings = array(\ratingallocate\strategy_points\strategy::TOTALPOINTS => null); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::TOTALPOINTS => null); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute required. - $settings = array(\ratingallocate\strategy_points\strategy::MAXPERCHOICE => null); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::MAXPERCHOICE => null); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_points\strategy::MAXZERO => -1); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::MAXZERO => -1); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_points\strategy::TOTALPOINTS => 0); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::TOTALPOINTS => 0); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_points\strategy::MAXPERCHOICE => 0); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::MAXPERCHOICE => 0); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_points\strategy::MAXZERO => 0); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::MAXZERO => 0); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_points\strategy::TOTALPOINTS => 1); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::TOTALPOINTS => 1); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_points\strategy::MAXPERCHOICE => 1); - $strategy = new \ratingallocate\strategy_points\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_points\strategy::MAXPERCHOICE => 1); + $strategy = new \mod_ratingallocate\strategy_points\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); } @@ -140,16 +140,16 @@ public function test_points_validation() { */ public function test_order_validation() { // Attribute required. - $settings = array(\ratingallocate\strategy_order\strategy::COUNTOPTIONS => null); - $strategy = new \ratingallocate\strategy_order\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS => null); + $strategy = new \mod_ratingallocate\strategy_order\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_order\strategy::COUNTOPTIONS => 0); - $strategy = new \ratingallocate\strategy_order\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS => 0); + $strategy = new \mod_ratingallocate\strategy_order\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_order\strategy::COUNTOPTIONS => 1); - $strategy = new \ratingallocate\strategy_order\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_order\strategy::COUNTOPTIONS => 1); + $strategy = new \mod_ratingallocate\strategy_order\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); } @@ -158,16 +158,16 @@ public function test_order_validation() { */ public function test_tickyes_validation() { // Attribute required. - $settings = array(\ratingallocate\strategy_tickyes\strategy::MINTICKYES => null); - $strategy = new \ratingallocate\strategy_tickyes\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_tickyes\strategy::MINTICKYES => null); + $strategy = new \mod_ratingallocate\strategy_tickyes\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // Attribute minimum error. - $settings = array(\ratingallocate\strategy_tickyes\strategy::MINTICKYES => 0); - $strategy = new \ratingallocate\strategy_tickyes\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_tickyes\strategy::MINTICKYES => 0); + $strategy = new \mod_ratingallocate\strategy_tickyes\strategy($settings); $this->assertCount(1, $strategy->validate_settings()); // No validation error. - $settings = array(\ratingallocate\strategy_tickyes\strategy::MINTICKYES => 1); - $strategy = new \ratingallocate\strategy_tickyes\strategy($settings); + $settings = array(\mod_ratingallocate\strategy_tickyes\strategy::MINTICKYES => 1); + $strategy = new \mod_ratingallocate\strategy_tickyes\strategy($settings); $this->assertCount(0, $strategy->validate_settings()); }