コード例 #1
0
ファイル: management.php プロジェクト: abhilash1994/moodle
                                 if ($sortcategoriesby && coursecat::get(0)->can_resort_subcategories()) {
                                     \core_course\management\helper::action_category_resort_subcategories(coursecat::get(0), $sortcategoriesby);
                                 }
                                 $categorieslist = coursecat::make_categories_list('moodle/category:manage');
                                 $categoryids = array_keys($categorieslist);
                                 $categories = coursecat::get_many($categoryids);
                                 unset($categorieslist);
                             } else {
                                 break;
                             }
                         }
                     }
                     foreach ($categories as $cat) {
                         if ($sortcategoriesby && $cat->can_resort_subcategories()) {
                             // Don't clean up here, we'll do it once we're all done.
                             \core_course\management\helper::action_category_resort_subcategories($cat, $sortcategoriesby, false);
                         }
                         if ($sortcoursesby && $cat->can_resort_courses()) {
                             \core_course\management\helper::action_category_resort_courses($cat, $sortcoursesby, false);
                         }
                     }
                     coursecat::resort_categories_cleanup($sortcoursesby !== false);
                     if ($category === null && count($categoryids) === 1) {
                         // They're bulk sorting just a single category and they've not selected a category.
                         // Lets for convenience sake auto-select the category that has been resorted for them.
                         redirect(new moodle_url($PAGE->url, array('categoryid' => reset($categoryids))));
                     }
                 }
             }
         }
 }
コード例 #2
0
 /**
  * Tests resorting sub categories of a course.
  *
  * \core_course\management\helper::action_category_resort_courses
  */
 public function test_action_category_resort_subcategories()
 {
     global $DB;
     $this->resetAfterTest(true);
     $generator = $this->getDataGenerator();
     $parent = $generator->create_category();
     $cat1 = $generator->create_category(array('parent' => $parent->id, 'name' => 'School of Science', 'idnumber' => '10001'));
     $cat2 = $generator->create_category(array('parent' => $parent->id, 'name' => 'School of Commerce', 'idnumber' => '10003'));
     $cat3 = $generator->create_category(array('parent' => $parent->id, 'name' => 'School of Arts', 'idnumber' => '10002'));
     $syscontext = context_system::instance();
     list($user, $roleid) = $this->get_user_objects($generator, $syscontext->id);
     $caps = course_capability_assignment::allow(self::CATEGORY_MANAGE, $roleid, $syscontext->id);
     $categories = $parent->get_children();
     $this->assertInternalType('array', $categories);
     $dbcategories = $DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder');
     $this->assertEquals(array_keys($dbcategories), array_keys($categories));
     // Test sorting by name.
     \core_course\management\helper::action_category_resort_subcategories($parent, 'name');
     $categories = $parent->get_children();
     $this->assertInternalType('array', $categories);
     $this->assertEquals(array($cat3->id, $cat2->id, $cat1->id), array_keys($categories));
     $dbcategories = $DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder');
     $this->assertEquals(array_keys($dbcategories), array_keys($categories));
     // Test sorting by idnumber.
     \core_course\management\helper::action_category_resort_subcategories($parent, 'idnumber');
     $categories = $parent->get_children();
     $this->assertInternalType('array', $categories);
     $this->assertEquals(array($cat1->id, $cat3->id, $cat2->id), array_keys($categories));
     $dbcategories = $DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder');
     $this->assertEquals(array_keys($dbcategories), array_keys($categories));
     // Try with an invalid field.
     try {
         \core_course\management\helper::action_category_resort_subcategories($parent, 'summary');
         $this->fail('Categories resorted by invalid field.');
     } catch (coding_exception $exception) {
         // Check that nothing was changed.
         $categories = $parent->get_children();
         $this->assertInternalType('array', $categories);
         $this->assertEquals(array($cat1->id, $cat3->id, $cat2->id), array_keys($categories));
         $dbcategories = $DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder');
         $this->assertEquals(array_keys($dbcategories), array_keys($categories));
     }
     // Try with a completely bogus field.
     try {
         \core_course\management\helper::action_category_resort_subcategories($parent, 'monkeys');
         $this->fail('Categories resorted by completely bogus field.');
     } catch (coding_exception $exception) {
         // Check that nothing was changed.
         $categories = $parent->get_children();
         $this->assertInternalType('array', $categories);
         $this->assertEquals(array($cat1->id, $cat3->id, $cat2->id), array_keys($categories));
         $dbcategories = $DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder');
         $this->assertEquals(array_keys($dbcategories), array_keys($categories));
     }
     // Test resorting the top level category (puke).
     $topcat = coursecat::get(0);
     \core_course\management\helper::action_category_resort_subcategories($topcat, 'name');
     $categories = $topcat->get_children();
     $this->assertInternalType('array', $categories);
     $dbcategories = $DB->get_records('course_categories', array('parent' => '0'), 'sortorder');
     $this->assertEquals(array_keys($dbcategories), array_keys($categories));
     // Prohibit resorting.
     $caps->assign(CAP_PROHIBIT);
     // Refresh our coursecat object.
     $parent = coursecat::get($parent->id);
     // We should no longer have permission to do this. Test it out!
     try {
         \core_course\management\helper::action_category_resort_subcategories($parent, 'idnumber');
         $this->fail('Categories sorted without having the required permission.');
     } catch (moodle_exception $exception) {
         // Check its the right exception.
         $this->assertEquals('coursecat::can_resort', $exception->debuginfo);
         // Test things are as they were before.
         $categories = $parent->get_children();
         $this->assertInternalType('array', $categories);
         $this->assertEquals(array($cat1->id, $cat3->id, $cat2->id), array_keys($categories));
         $dbcategories = $DB->get_records('course_categories', array('parent' => $parent->id), 'sortorder');
         $this->assertEquals(array_keys($dbcategories), array_keys($categories));
     }
 }