Esempio n. 1
0
 $bulkmovecourses = optional_param('bulkmovecourses', false, PARAM_BOOL);
 $bulkmovecategories = optional_param('bulkmovecategories', false, PARAM_BOOL);
 $bulkresortcategories = optional_param('bulksort', false, PARAM_BOOL);
 if ($bulkmovecourses) {
     // Move courses out of the current category and into a new category.
     // They must have specified a category.
     required_param('categoryid', PARAM_INT);
     $movetoid = required_param('movecoursesto', PARAM_INT);
     $courseids = optional_param_array('bc', false, PARAM_INT);
     if ($courseids === false) {
         break;
     }
     $moveto = coursecat::get($movetoid);
     try {
         // If this fails we want to catch the exception and report it.
         $redirectback = \core_course\management\helper::move_courses_into_category($moveto, $courseids);
         if ($redirectback) {
             $a = new stdClass();
             $a->category = $moveto->get_formatted_name();
             $a->courses = count($courseids);
             $redirectmessage = get_string('bulkmovecoursessuccess', 'moodle', $a);
         }
     } catch (moodle_exception $ex) {
         $redirectback = false;
         $notificationsfail[] = $ex->getMessage();
     }
 } else {
     if ($bulkmovecategories) {
         $categoryids = optional_param_array('bcat', array(), PARAM_INT);
         $movetocatid = required_param('movecategoriesto', PARAM_INT);
         $movetocat = coursecat::get($movetocatid);
 public function test_move_courses_into_category()
 {
     global $DB, $CFG;
     $this->resetAfterTest(true);
     $generator = $this->getDataGenerator();
     $cat1 = $generator->create_category();
     $cat2 = $generator->create_category();
     $sub1 = $generator->create_category(array('parent' => $cat1->id));
     $sub2 = $generator->create_category(array('parent' => $cat1->id));
     $course1 = $generator->create_course(array('category' => $cat1->id));
     $course2 = $generator->create_course(array('category' => $sub1->id));
     $course3 = $generator->create_course(array('category' => $sub1->id));
     $course4 = $generator->create_course(array('category' => $cat2->id));
     $syscontext = context_system::instance();
     list($user, $roleid) = $this->get_user_objects($generator, $syscontext->id);
     course_capability_assignment::allow(array(self::CATEGORY_MANAGE, self::CATEGORY_VIEWHIDDEN), $roleid, $syscontext->id);
     // Check they are where we think they are.
     $this->assertEquals(1, $cat1->get_courses_count());
     $this->assertEquals(1, $cat2->get_courses_count());
     $this->assertEquals(2, $sub1->get_courses_count());
     $this->assertEquals(0, $sub2->get_courses_count());
     // Move the courses in sub category 1 to sub category 2.
     $this->assertTrue(\core_course\management\helper::move_courses_into_category($sub2->id, array($course2->id, $course3->id)));
     $this->assertEquals(1, $cat1->get_courses_count());
     $this->assertEquals(1, $cat2->get_courses_count());
     $this->assertEquals(0, $sub1->get_courses_count());
     $this->assertEquals(2, $sub2->get_courses_count());
     $courses = $DB->get_records('course', array('category' => $sub2->id), 'id');
     $this->assertEquals(array((int) $course2->id, (int) $course3->id), array_keys($courses));
     // Move the courses in sub category 2 back into to sub category 1.
     $this->assertTrue(\core_course\management\helper::move_courses_into_category($sub1->id, array($course2->id, $course3->id)));
     $this->assertEquals(1, $cat1->get_courses_count());
     $this->assertEquals(1, $cat2->get_courses_count());
     $this->assertEquals(2, $sub1->get_courses_count());
     $this->assertEquals(0, $sub2->get_courses_count());
     $courses = $DB->get_records('course', array('category' => $sub1->id), 'id');
     $this->assertEquals(array((int) $course2->id, (int) $course3->id), array_keys($courses));
     // Try moving just one course.
     $this->assertTrue(\core_course\management\helper::move_courses_into_category($sub2->id, $course4->id));
     $this->assertEquals(1, $cat1->get_courses_count());
     $this->assertEquals(0, $cat2->get_courses_count());
     $this->assertEquals(2, $sub1->get_courses_count());
     $this->assertEquals(1, $sub2->get_courses_count());
     $courses = $DB->get_records('course', array('category' => $sub2->id), 'id');
     $this->assertEquals(array((int) $course4->id), array_keys($courses));
     // Current state:
     // * $cat1 => $course1
     //    * $sub1 => $course2, $course3
     //    * $sub2 => $course4
     // * $cat2 =>.
     // Prevent the user from being able to move into $sub2.
     $sub2cap = course_capability_assignment::prohibit(self::CATEGORY_MANAGE, $roleid, $sub2->get_context()->id);
     $sub2 = coursecat::get($sub2->id);
     // Suppress debugging messages for a moment.
     $olddebug = $CFG->debug;
     $CFG->debug = 0;
     // Try to move a course into sub2. This shouldn't be possible because you should always be able to undo what you've done.
     // Try moving just one course.
     try {
         \core_course\management\helper::move_courses_into_category($sub2->id, array($course2->id));
         $this->fail('Invalid move of course between categories, action can\'t be undone.');
     } catch (moodle_exception $ex) {
         $this->assertEquals(get_string('cannotmovecourses', 'error'), $ex->getMessage());
     }
     // Nothing should have changed.
     $this->assertEquals(1, $cat1->get_courses_count());
     $this->assertEquals(0, $cat2->get_courses_count());
     $this->assertEquals(2, $sub1->get_courses_count());
     $this->assertEquals(1, $sub2->get_courses_count());
     // Now try moving a course out of sub2. Again should not be possible.
     // Try to move a course into sub2. This shouldn't be possible because you should always be able to undo what you've done.
     // Try moving just one course.
     try {
         \core_course\management\helper::move_courses_into_category($cat2->id, array($course4->id));
         $this->fail('Invalid move of course between categories, action can\'t be undone.');
     } catch (moodle_exception $ex) {
         $this->assertEquals(get_string('cannotmovecourses', 'error'), $ex->getMessage());
     }
     // Nothing should have changed.
     $this->assertEquals(1, $cat1->get_courses_count());
     $this->assertEquals(0, $cat2->get_courses_count());
     $this->assertEquals(2, $sub1->get_courses_count());
     $this->assertEquals(1, $sub2->get_courses_count());
     $CFG->debug = $olddebug;
 }
Esempio n. 3
0
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);
        if ($totalpages == 0) {
            $str = get_string('nocoursesyet');
        } else {
            if ($totalpages == 1) {
                $str = get_string('showingacourses', 'moodle', $totalcourses);
            } else {
                $a = new stdClass();
                $a->start = $page * $perpage + 1;
                $a->end = min(($page + 1) * $perpage, $totalcourses);
                $a->total = $totalcourses;
                $str = get_string('showingxofycourses', 'moodle', $a);
            }