Esempio n. 1
0
 /**
  * Updates course module name
  *
  * @param int $itemid course module id
  * @param string $newvalue new name
  * @return static
  */
 public static function update($itemid, $newvalue)
 {
     $context = context_module::instance($itemid);
     // Check access.
     \external_api::validate_context($context);
     require_capability('moodle/course:manageactivities', $context);
     // Update value.
     set_coursemodule_name($itemid, $newvalue);
     $coursemodulerecord = get_coursemodule_from_id('', $itemid, 0, false, MUST_EXIST);
     // Return instance.
     $cm = get_fast_modinfo($coursemodulerecord->course)->get_cm($itemid);
     return new static($cm, true);
 }
Esempio n. 2
0
 public function test_check_updates()
 {
     global $DB;
     $this->resetAfterTest(true);
     $this->setAdminUser();
     // Create different types of activities.
     $course = self::getDataGenerator()->create_course();
     $tocreate = array('assign', 'book', 'choice', 'folder', 'forum', 'glossary', 'imscp', 'label', 'lti', 'page', 'quiz', 'resource', 'scorm', 'survey', 'url', 'wiki');
     $modules = array();
     foreach ($tocreate as $modname) {
         $modules[$modname]['instance'] = $this->getDataGenerator()->create_module($modname, array('course' => $course->id));
         $modules[$modname]['cm'] = get_coursemodule_from_id(false, $modules[$modname]['instance']->cmid);
         $modules[$modname]['context'] = context_module::instance($modules[$modname]['instance']->cmid);
     }
     $student = self::getDataGenerator()->create_user();
     $studentrole = $DB->get_record('role', array('shortname' => 'student'));
     self::getDataGenerator()->enrol_user($student->id, $course->id, $studentrole->id);
     $this->setUser($student);
     $since = time();
     $this->waitForSecond();
     $params = array();
     foreach ($modules as $modname => $data) {
         $params[$data['cm']->id] = array('contextlevel' => 'module', 'id' => $data['cm']->id, 'since' => $since);
     }
     // Check there is nothing updated because modules are fresh new.
     $result = core_course_external::check_updates($course->id, $params);
     $result = external_api::clean_returnvalue(core_course_external::check_updates_returns(), $result);
     $this->assertCount(0, $result['instances']);
     $this->assertCount(0, $result['warnings']);
     // Update a module after a second.
     $this->waitForSecond();
     set_coursemodule_name($modules['forum']['cm']->id, 'New forum name');
     $found = false;
     $result = core_course_external::check_updates($course->id, $params);
     $result = external_api::clean_returnvalue(core_course_external::check_updates_returns(), $result);
     $this->assertCount(1, $result['instances']);
     $this->assertCount(0, $result['warnings']);
     foreach ($result['instances'] as $module) {
         foreach ($module['updates'] as $update) {
             if ($module['id'] == $modules['forum']['cm']->id and $update['name'] == 'configuration') {
                 $found = true;
             }
         }
     }
     $this->assertTrue($found);
     // Do not retrieve the configuration field.
     $filter = array('files');
     $found = false;
     $result = core_course_external::check_updates($course->id, $params, $filter);
     $result = external_api::clean_returnvalue(core_course_external::check_updates_returns(), $result);
     $this->assertCount(0, $result['instances']);
     $this->assertCount(0, $result['warnings']);
     $this->assertFalse($found);
     // Add invalid cmid.
     $params[] = array('contextlevel' => 'module', 'id' => -2, 'since' => $since);
     $result = core_course_external::check_updates($course->id, $params);
     $result = external_api::clean_returnvalue(core_course_external::check_updates_returns(), $result);
     $this->assertCount(1, $result['warnings']);
     $this->assertEquals(-2, $result['warnings'][0]['itemid']);
 }
Esempio n. 3
0
 public function test_course_check_module_updates_since()
 {
     global $CFG, $DB, $USER;
     require_once $CFG->dirroot . '/mod/glossary/lib.php';
     require_once $CFG->dirroot . '/rating/lib.php';
     require_once $CFG->dirroot . '/comment/lib.php';
     $this->resetAfterTest(true);
     $CFG->enablecompletion = true;
     $course = $this->getDataGenerator()->create_course(array('enablecompletion' => 1));
     $glossary = $this->getDataGenerator()->create_module('glossary', array('course' => $course->id, 'completion' => COMPLETION_TRACKING_AUTOMATIC, 'completionview' => 1, 'allowcomments' => 1, 'assessed' => RATING_AGGREGATE_AVERAGE, 'scale' => 100));
     $glossarygenerator = $this->getDataGenerator()->get_plugin_generator('mod_glossary');
     $context = context_module::instance($glossary->cmid);
     $modinfo = get_fast_modinfo($course);
     $cm = $modinfo->get_cm($glossary->cmid);
     $user = $this->getDataGenerator()->create_user();
     $studentrole = $DB->get_record('role', array('shortname' => 'student'));
     $this->getDataGenerator()->enrol_user($user->id, $course->id, $studentrole->id);
     $from = time();
     $teacher = $this->getDataGenerator()->create_user();
     $teacherrole = $DB->get_record('role', array('shortname' => 'teacher'));
     $this->getDataGenerator()->enrol_user($teacher->id, $course->id, $teacherrole->id);
     assign_capability('mod/glossary:viewanyrating', CAP_ALLOW, $studentrole->id, $context->id, true);
     // Check nothing changed right now.
     $updates = course_check_module_updates_since($cm, $from);
     $this->assertFalse($updates->configuration->updated);
     $this->assertFalse($updates->completion->updated);
     $this->assertFalse($updates->gradeitems->updated);
     $this->assertFalse($updates->comments->updated);
     $this->assertFalse($updates->ratings->updated);
     $this->assertFalse($updates->introfiles->updated);
     $this->assertFalse($updates->outcomes->updated);
     $this->waitForSecond();
     // Do some changes.
     $this->setUser($user);
     $entry = $glossarygenerator->create_content($glossary);
     $this->setUser($teacher);
     // Name.
     set_coursemodule_name($glossary->cmid, 'New name');
     // Add some ratings.
     $rm = new rating_manager();
     $result = $rm->add_rating($cm, $context, 'mod_glossary', 'entry', $entry->id, 100, 50, $user->id, RATING_AGGREGATE_AVERAGE);
     // Change grades.
     $glossary->cmidnumber = $glossary->cmid;
     glossary_update_grades($glossary, $user->id);
     $this->setUser($user);
     // Completion status.
     glossary_view($glossary, $course, $cm, $context, 'letter');
     // Add one comment.
     $args = new stdClass();
     $args->context = $context;
     $args->course = $course;
     $args->cm = $cm;
     $args->area = 'glossary_entry';
     $args->itemid = $entry->id;
     $args->client_id = 1;
     $args->component = 'mod_glossary';
     $manager = new comment($args);
     $manager->add('blah blah blah');
     // Check upgrade status.
     $updates = course_check_module_updates_since($cm, $from);
     $this->assertTrue($updates->configuration->updated);
     $this->assertTrue($updates->completion->updated);
     $this->assertTrue($updates->gradeitems->updated);
     $this->assertTrue($updates->comments->updated);
     $this->assertTrue($updates->ratings->updated);
     $this->assertFalse($updates->introfiles->updated);
     $this->assertFalse($updates->outcomes->updated);
 }
Esempio n. 4
0
 /**
  * Updates course module name
  *
  * @param int $itemid course module id
  * @param string $newvalue new name
  * @return static
  */
 public static function update($itemid, $newvalue)
 {
     list($course, $cm) = get_course_and_cm_from_cmid($itemid);
     $context = context_module::instance($cm->id);
     // Check access.
     require_login($course, false, $cm, true, true);
     require_capability('moodle/course:manageactivities', $context);
     // Update value.
     set_coursemodule_name($cm->id, $newvalue);
     // Return instance.
     $cm = get_fast_modinfo($course)->get_cm($cm->id);
     return new static($cm, true);
 }