コード例 #1
0
 /**
  * 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);
     }
 }
コード例 #2
0
ファイル: management.php プロジェクト: evltuma/moodle
 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;
 case 'showcategory':
     $categoryid = required_param('categoryid', PARAM_INT);
     $selectedcategoryid = optional_param('selectedcategory', null, PARAM_INT);
     $outcome->outcome = \core_course\management\helper::action_category_show_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));
     }