コード例 #1
0
ファイル: management.php プロジェクト: abhilash1994/moodle
 $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::action_category_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);
コード例 #2
0
 /**
  * Test moving courses between categories.
  */
 public function test_action_category_move_courses_into()
 {
     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::action_category_move_courses_into($sub1, $sub2, 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::action_category_move_courses_into($sub2, $sub1, 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::action_category_move_courses_into($cat2, $sub2, array($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));
     // Try moving a course from a category its not part of.
     try {
         \core_course\management\helper::action_category_move_courses_into($cat2, $sub2, array($course4->id));
         $this->fail('Moved a course from a category it wasn\'t within');
     } catch (moodle_exception $exception) {
         // Check that everything is as it was.
         $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 that again with two courses, one of which is in the right place.
     try {
         \core_course\management\helper::action_category_move_courses_into($cat2, $sub2, array($course4->id, $course1->id));
         $this->fail('Moved a course from a category it wasn\'t within');
     } catch (moodle_exception $exception) {
         // Check that everything is as it was. Nothing should have been moved.
         $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());
     }
     // 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::action_category_move_courses_into($sub1, $sub2, 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::action_category_move_courses_into($sub2, $cat2, 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;
 }