/** * Tests moving a course up and down by one. */ public function test_action_course_movedown_and_moveup() { global $DB; $this->resetAfterTest(true); $generator = $this->getDataGenerator(); $category = $generator->create_category(); $course3 = $generator->create_course(array('category' => $category->id)); $course2 = $generator->create_course(array('category' => $category->id)); $course1 = $generator->create_course(array('category' => $category->id)); $context = $category->get_context(); // Update category object from DB so the course count is correct. $category = coursecat::get($category->id); list($user, $roleid) = $this->get_user_objects($generator, $context->id); $caps = course_capability_assignment::allow(self::CATEGORY_MANAGE, $roleid, $context->id); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course1->id, $course2->id, $course3->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course down. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_down_one(new course_in_list(get_course($course1->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course1->id, $course3->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course up. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_up_one(new course_in_list(get_course($course3->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course down by record. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_down_one_by_record(get_course($course2->id), $category)); $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', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Move a course up by record. $this->assertTrue(\core_course\management\helper::action_course_change_sortorder_up_one_by_record(get_course($course2->id), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Try move the bottom course down. This should return false and nothing changes. $this->assertFalse(\core_course\management\helper::action_course_change_sortorder_down_one(new course_in_list(get_course($course1->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Try move the top course up. This should return false and nothing changes. $this->assertFalse(\core_course\management\helper::action_course_change_sortorder_up_one(new course_in_list(get_course($course2->id)), $category)); $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); // Prohibit the ability to move. $caps->assign(CAP_PROHIBIT); // Reload the category. $category = coursecat::get($category->id); try { \core_course\management\helper::action_course_change_sortorder_down_one(new course_in_list(get_course($course2->id)), $category); $this->fail('Course moved without having the required permissions.'); } catch (moodle_exception $exception) { // Check nothing has changed. $courses = $category->get_courses(); $this->assertInternalType('array', $courses); $this->assertEquals(array($course2->id, $course3->id, $course1->id), array_keys($courses)); $dbcourses = $DB->get_records('course', array('category' => $category->id), 'sortorder', 'id'); $this->assertEquals(array_keys($dbcourses), array_keys($courses)); } }
require_once $CFG->dirroot . '/course/lib.php'; $action = required_param('action', PARAM_ALPHA); require_sesskey(); // Gotta have the sesskey. require_login(); // Gotta be logged in (of course). $PAGE->set_context(context_system::instance()); // Prepare an outcome object. We always use this. $outcome = new stdClass(); $outcome->error = false; $outcome->outcome = false; echo $OUTPUT->header(); switch ($action) { case 'movecourseup': $courseid = required_param('courseid', PARAM_INT); $outcome->outcome = \core_course\management\helper::action_course_change_sortorder_up_one_by_record($courseid); break; case 'movecoursedown': $courseid = required_param('courseid', PARAM_INT); $outcome->outcome = \core_course\management\helper::action_course_change_sortorder_down_one_by_record($courseid); break; case 'movecourseintocategory': $courseid = required_param('courseid', PARAM_INT); $categoryid = required_param('categoryid', PARAM_INT); $course = get_course($courseid); $oldcategory = coursecat::get($course->category); $category = coursecat::get($categoryid); $outcome->outcome = \core_course\management\helper::move_courses_into_category($category, $courseid); $perpage = (int) get_user_preferences('coursecat_management_perpage', $CFG->coursesperpage); $totalcourses = $oldcategory->get_courses_count(); $totalpages = ceil($totalcourses / $perpage);