// They must have specified a category. required_param('categoryid', PARAM_INT); $sort = required_param('resort', PARAM_ALPHA); \core_course\management\helper::action_category_resort_courses($category, $sort); break; case 'showcourse': $redirectback = \core_course\management\helper::action_course_show($course); break; case 'hidecourse': $redirectback = \core_course\management\helper::action_course_hide($course); break; case 'movecourseup': // They must have specified a category and a course. required_param('categoryid', PARAM_INT); required_param('courseid', PARAM_INT); $redirectback = \core_course\management\helper::action_course_change_sortorder_up_one($course, $category); break; case 'movecoursedown': // They must have specified a category and a course. required_param('categoryid', PARAM_INT); required_param('courseid', PARAM_INT); $redirectback = \core_course\management\helper::action_course_change_sortorder_down_one($course, $category); break; case 'showcategory': // They must have specified a category. required_param('categoryid', PARAM_INT); $redirectback = \core_course\management\helper::action_category_show($category); break; case 'hidecategory': // They must have specified a category. required_param('categoryid', PARAM_INT);
/** * Tests moving a course up and down by one. */ public function test_action_course_movedown_and_moveup() { global $DB; $this->resetAfterTest(true); $generator = $this->getDataGenerator(); $category = $generator->create_category(); $course3 = $generator->create_course(array('category' => $category->id)); $course2 = $generator->create_course(array('category' => $category->id)); $course1 = $generator->create_course(array('category' => $category->id)); $context = $category->get_context(); // Update category object from DB so the course count is correct. $category = coursecat::get($category->id); list($user, $roleid) = $this->get_user_objects($generator, $context->id); $caps = course_capability_assignment::allow(self::CATEGORY_MANAGE, $roleid, $context->id); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course1->id, $course2->id, $course3->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course down. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_down_one(new course_in_list(get_course($course1->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course1->id, $course3->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course up. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_up_one(new course_in_list(get_course($course3->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course down by record. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_down_one_by_record(get_course($course2->id), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course3->id, $course2->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course up by record. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_up_one_by_record(get_course($course2->id), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Try move the bottom course down. This should return false and nothing changes. $this->assertFalse(\core_course\management\helper::action_course_change_sortorder_down_one(new course_in_list(get_course($course1->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Try move the top course up. This should return false and nothing changes. $this->assertFalse(\core_course\management\helper::action_course_change_sortorder_up_one(new course_in_list(get_course($course2->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Prohibit the ability to move. $caps->assign(CAP_PROHIBIT); // Reload the category. $category = coursecat::get($category->id); try { \core_course\management\helper::action_course_change_sortorder_down_one(new course_in_list(get_course($course2->id)), $category); $this->fail('Course moved without having the required permissions.'); } catch (moodle_exception $exception) { // Check nothing has changed. $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); } }