/** * Test moving a categories up and down. */ public function test_action_category_movedown_and_moveup() { global $DB; $this->resetAfterTest(true); $generator = $this->getDataGenerator(); $parent = $generator->create_category(); $cat1 = $generator->create_category(array('parent' => $parent->id, 'name' => 'One')); $cat2 = $generator->create_category(array('parent' => $parent->id, 'name' => 'Two')); $cat3 = $generator->create_category(array('parent' => $parent->id, 'name' => 'Three')); $syscontext = context_system::instance(); list($user, $roleid) = $this->get_user_objects($generator, $syscontext->id); course_capability_assignment::allow(self::CATEGORY_MANAGE, $roleid, $syscontext->id); // Check everything is where we expect it to be. $this->assertEquals(array('One', 'Two', 'Three'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); // Move the top category down one. $this->assertTrue(\core_course\management\helper::action_category_change_sortorder_down_one($cat1)); // Reload out objects. $cat1 = coursecat::get($cat1->id); $cat2 = coursecat::get($cat2->id); $cat3 = coursecat::get($cat3->id); // Verify that caches were cleared. $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat1->id)), $cat1->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat2->id)), $cat2->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat3->id)), $cat3->sortorder); // Verify sorting. $this->assertEquals(array('Two', 'One', 'Three'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); // Move the bottom category up one. $this->assertTrue(\core_course\management\helper::action_category_change_sortorder_up_one($cat3)); // Reload out objects. $cat1 = coursecat::get($cat1->id); $cat2 = coursecat::get($cat2->id); $cat3 = coursecat::get($cat3->id); // Verify that caches were cleared. $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat1->id)), $cat1->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat2->id)), $cat2->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat3->id)), $cat3->sortorder); // Verify sorting. $this->assertEquals(array('Two', 'Three', 'One'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); // Move the top category down one. $this->assertTrue(\core_course\management\helper::action_category_change_sortorder_down_one_by_id($cat2->id)); $this->assertEquals(array('Three', 'Two', 'One'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); // Move the top category down one. $this->assertTrue(\core_course\management\helper::action_category_change_sortorder_up_one_by_id($cat1->id)); $this->assertEquals(array('Three', 'One', 'Two'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); // Reload out objects the above actions will have caused the objects to become stale. $cat1 = coursecat::get($cat1->id); $cat2 = coursecat::get($cat2->id); $cat3 = coursecat::get($cat3->id); // Verify that caches were cleared. $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat1->id)), $cat1->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat2->id)), $cat2->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat3->id)), $cat3->sortorder); // Verify sorting. // Test moving the top category up one. Nothing should change but it should return false. $this->assertFalse(\core_course\management\helper::action_category_change_sortorder_up_one($cat3)); // Reload out objects. $cat1 = coursecat::get($cat1->id); $cat2 = coursecat::get($cat2->id); $cat3 = coursecat::get($cat3->id); // Verify that caches were cleared. $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat1->id)), $cat1->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat2->id)), $cat2->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat3->id)), $cat3->sortorder); // Verify sorting. $this->assertEquals(array('Three', 'One', 'Two'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); // Test moving the bottom category down one. Nothing should change but it should return false. $this->assertFalse(\core_course\management\helper::action_category_change_sortorder_down_one($cat2)); // Reload out objects. $cat1 = coursecat::get($cat1->id); $cat2 = coursecat::get($cat2->id); $cat3 = coursecat::get($cat3->id); // Verify that caches were cleared. $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat1->id)), $cat1->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat2->id)), $cat2->sortorder); $this->assertEquals($DB->get_field('course_categories', 'sortorder', array('id' => $cat3->id)), $cat3->sortorder); // Verify sorting. $this->assertEquals(array('Three', 'One', 'Two'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); // Prevent moving on the parent. course_capability_assignment::prevent(self::CATEGORY_MANAGE, $roleid, $parent->get_context()->id); try { \core_course\management\helper::action_category_change_sortorder_up_one($cat1); } catch (moodle_exception $exception) { // Check everything is still where it should be. $this->assertEquals(array('Three', 'One', 'Two'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); } try { \core_course\management\helper::action_category_change_sortorder_down_one($cat3); } catch (moodle_exception $exception) { // Check everything is still where it should be. $this->assertEquals(array('Three', 'One', 'Two'), array_keys($DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder', 'name'))); } }
case 'movecourseafter': $courseid = required_param('courseid', PARAM_INT); $moveaftercourseid = required_param('moveafter', PARAM_INT); $outcome->outcome = \core_course\management\helper::action_course_change_sortorder_after_course($courseid, $moveaftercourseid); break; case 'hidecourse': $courseid = required_param('courseid', PARAM_INT); $outcome->outcome = \core_course\management\helper::action_course_hide_by_record($courseid); break; case 'showcourse': $courseid = required_param('courseid', PARAM_INT); $outcome->outcome = \core_course\management\helper::action_course_show_by_record($courseid); break; case 'movecategoryup': $categoryid = required_param('categoryid', PARAM_INT); $outcome->outcome = \core_course\management\helper::action_category_change_sortorder_up_one_by_id($categoryid); break; case 'movecategorydown': $categoryid = required_param('categoryid', PARAM_INT); $outcome->outcome = \core_course\management\helper::action_category_change_sortorder_down_one_by_id($categoryid); break; case 'hidecategory': $categoryid = required_param('categoryid', PARAM_INT); $selectedcategoryid = optional_param('selectedcategory', null, PARAM_INT); $outcome->outcome = \core_course\management\helper::action_category_hide_by_id($categoryid); $outcome->categoryvisibility = \core_course\management\helper::get_category_children_visibility($categoryid); $outcome->coursevisibility = \core_course\management\helper::get_category_courses_visibility($categoryid); if ($selectedcategoryid !== null) { $outcome->coursevisibility = array_merge($outcome->coursevisibility, \core_course\management\helper::get_category_courses_visibility($selectedcategoryid)); } break;