Esempio n. 1
0
                                 $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))));
                     }
                 }
             }
         }
 }
 if ($redirectback) {
     if ($redirectmessage) {
         redirect($PAGE->url, $redirectmessage, 5);
 /**
  * Test resorting of courses within a category.
  *
  * \core_course\management\helper::action_category_resort_courses
  */
 public function test_action_category_resort_courses()
 {
     global $DB;
     $this->resetAfterTest(true);
     $generator = $this->getDataGenerator();
     $category = $generator->create_category();
     $course1 = $generator->create_course(array('category' => $category->id, 'fullname' => 'Experimental Chemistry', 'shortname' => 'Course A', 'idnumber' => '10001'));
     $course2 = $generator->create_course(array('category' => $category->id, 'fullname' => 'Learn to program: Jade', 'shortname' => 'Beginning Jade', 'idnumber' => '10003'));
     $course3 = $generator->create_course(array('category' => $category->id, 'fullname' => 'Advanced algebra', 'shortname' => 'Advanced algebra', 'idnumber' => '10002'));
     $syscontext = context_system::instance();
     // Update category object from DB so the course count is correct.
     $category = coursecat::get($category->id);
     list($user, $roleid) = $this->get_user_objects($generator, $syscontext->id);
     $caps = course_capability_assignment::allow(self::CATEGORY_MANAGE, $roleid, $syscontext->id);
     // Check that sort order in the DB matches what we've got in the cache.
     $courses = $category->get_courses();
     $this->assertInternalType('array', $courses);
     $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder');
     $this->assertEquals(array_keys($dbcourses), array_keys($courses));
     // Resort by fullname.
     \core_course\management\helper::action_category_resort_courses($category, 'fullname');
     $courses = $category->get_courses();
     $this->assertInternalType('array', $courses);
     $this->assertEquals(array($course3->id, $course1->id, $course2->id), array_keys($courses));
     $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder');
     $this->assertEquals(array_keys($dbcourses), array_keys($courses));
     // Resort by shortname.
     \core_course\management\helper::action_category_resort_courses($category, 'shortname');
     $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');
     $this->assertEquals(array_keys($dbcourses), array_keys($courses));
     // Resort by idnumber.
     \core_course\management\helper::action_category_resort_courses($category, 'idnumber');
     $courses = $category->get_courses();
     $this->assertInternalType('array', $courses);
     $this->assertEquals(array($course1->id, $course3->id, $course2->id), array_keys($courses));
     $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder');
     $this->assertEquals(array_keys($dbcourses), array_keys($courses));
     // Try with a field that cannot be sorted on.
     try {
         \core_course\management\helper::action_category_resort_courses($category, 'category');
         $this->fail('Category courses resorted by invalid sort field.');
     } catch (coding_exception $exception) {
         // Test things are as they were before.
         $courses = $category->get_courses();
         $this->assertInternalType('array', $courses);
         $this->assertEquals(array($course1->id, $course3->id, $course2->id), array_keys($courses));
         $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder');
         $this->assertEquals(array_keys($dbcourses), array_keys($courses));
     }
     // Try with a completely bogus field.
     try {
         \core_course\management\helper::action_category_resort_courses($category, 'monkeys');
         $this->fail('Category courses resorted by completely ridiculous field.');
     } catch (coding_exception $exception) {
         // Test things are as they were before.
         $courses = $category->get_courses();
         $this->assertInternalType('array', $courses);
         $this->assertEquals(array($course1->id, $course3->id, $course2->id), array_keys($courses));
         $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder');
         $this->assertEquals(array_keys($dbcourses), array_keys($courses));
     }
     // Prohibit resorting.
     $caps->assign(CAP_PROHIBIT);
     // Refresh our coursecat object.
     $category = coursecat::get($category->id);
     // We should no longer have permission to do this. Test it out!
     try {
         \core_course\management\helper::action_category_resort_courses($category, 'shortname');
         $this->fail('Courses 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.
         $courses = $category->get_courses();
         $this->assertInternalType('array', $courses);
         $this->assertEquals(array($course1->id, $course3->id, $course2->id), array_keys($courses));
         $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder');
         $this->assertEquals(array_keys($dbcourses), array_keys($courses));
     }
 }