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); $redirectback = \core_course\management\helper::action_category_hide($category); break; case 'movecategoryup': // They must have specified a category. required_param('categoryid', PARAM_INT); $redirectback = \core_course\management\helper::action_category_change_sortorder_up_one($category); break; case 'movecategorydown': // They must have specified a category. required_param('categoryid', PARAM_INT); $redirectback = \core_course\management\helper::action_category_change_sortorder_down_one($category);
/** * Tests hiding and showing of a category by its ID. * * This mimics the logic of {@link test_action_category_hide_and_show()} */ public function test_action_category_hide_and_show_by_id() { global $DB; $this->resetAfterTest(true); $generator = $this->getDataGenerator(); $category = $generator->create_category(); $subcategory = $generator->create_category(array('parent' => $category->id)); $course = $generator->create_course(array('category' => $subcategory->id)); $context = $category->get_context(); $parentcontext = $context->get_parent_context(); $subcontext = $subcategory->get_context(); list($user, $roleid) = $this->get_user_objects($generator, $parentcontext->id); $this->assertEquals(1, $category->visible); $parentassignment = course_capability_assignment::allow(self::CATEGORY_MANAGE, $roleid, $parentcontext->id); course_capability_assignment::allow(self::CATEGORY_VIEWHIDDEN, $roleid, $parentcontext->id); course_capability_assignment::allow(self::CATEGORY_MANAGE, $roleid, $context->id); course_capability_assignment::allow(array(self::COURSE_VIEW, self::COURSE_VIEWHIDDEN), $roleid, $subcontext->id); $this->assertTrue(\core_course\management\helper::action_category_hide_by_id($category->id)); $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(0, $cat->visible); $this->assertEquals(0, $cat->visibleold); $this->assertEquals(0, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(0, $course->visible); $this->assertEquals(1, $course->visibleold); // This doesn't change anything but should succeed still. $this->assertTrue(\core_course\management\helper::action_category_hide_by_id($category->id)); $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(0, $cat->visible); $this->assertEquals(0, $cat->visibleold); $this->assertEquals(0, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(0, $course->visible); $this->assertEquals(1, $course->visibleold); $this->assertTrue(\core_course\management\helper::action_category_show_by_id($category->id)); $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(1, $cat->visible); $this->assertEquals(1, $cat->visibleold); $this->assertEquals(1, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(1, $course->visible); $this->assertEquals(1, $course->visibleold); // This doesn't change anything but should succeed still. $this->assertTrue(\core_course\management\helper::action_category_show_by_id($category->id)); $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(1, $cat->visible); $this->assertEquals(1, $cat->visibleold); $this->assertEquals(1, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(1, $course->visible); $this->assertEquals(1, $course->visibleold); $parentassignment->assign(CAP_PROHIBIT); try { \core_course\management\helper::action_category_hide_by_id($category->id); $this->fail('Expected exception did not occur when trying to hide a category without permission.'); } catch (moodle_exception $ex) { // The category must still be visible. $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $this->assertEquals(1, $cat->visible); $this->assertEquals(1, $cat->visibleold); $this->assertEquals(1, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(1, $course->visible); $this->assertEquals(1, $course->visibleold); } // Hide the category so that we can test helper::show. $parentassignment->assign(CAP_ALLOW); \core_course\management\helper::action_category_hide_by_id($category->id); $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(0, $cat->visible); $this->assertEquals(0, $cat->visibleold); $this->assertEquals(0, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(0, $course->visible); $this->assertEquals(1, $course->visibleold); $parentassignment->assign(CAP_PROHIBIT); try { \core_course\management\helper::action_category_show_by_id($category->id); $this->fail('Expected exception did not occur when trying to show a category without permission.'); } catch (moodle_exception $ex) { // The category must still be hidden. $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(0, $cat->visible); $this->assertEquals(0, $cat->visibleold); $this->assertEquals(0, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(0, $course->visible); $this->assertEquals(1, $course->visibleold); } $parentassignment->assign(CAP_PREVENT); // Now we have capability on the category and subcategory but not the parent. // Try to mark the subcategory as visible. This should be possible although its parent is set to hidden. $this->assertTrue(\core_course\management\helper::action_category_show($subcategory)); $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(0, $cat->visible); $this->assertEquals(0, $cat->visibleold); $this->assertEquals(0, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(0, $course->visible); $this->assertEquals(1, $course->visibleold); // Now make the parent visible for the next test. $parentassignment->assign(CAP_ALLOW); $this->assertTrue(\core_course\management\helper::action_category_show_by_id($category->id)); $cat = coursecat::get($category->id); $subcat = coursecat::get($subcategory->id); $course = $DB->get_record('course', array('id' => $course->id), 'id, visible, visibleold', MUST_EXIST); $this->assertEquals(1, $cat->visible); $this->assertEquals(1, $cat->visibleold); $this->assertEquals(1, $subcat->visible); $this->assertEquals(1, $subcat->visibleold); $this->assertEquals(1, $course->visible); $this->assertEquals(1, $course->visibleold); $parentassignment->assign(CAP_PREVENT); // Make sure we can change the subcategory visibility. $this->assertTrue(\core_course\management\helper::action_category_hide($subcategory)); // But not the category visibility. try { \core_course\management\helper::action_category_hide_by_id($category->id); $this->fail('Expected exception did not occur when trying to hide a category without permission.'); } catch (moodle_exception $ex) { // The category must still be visible. $this->assertEquals(1, coursecat::get($category->id)->visible); } }