$cm = get_coursemodule_from_instance('glossary', $glossary->id, 0, false, MUST_EXIST); $course = $DB->get_record('course', array('id' => $cm->course), '*', MUST_EXIST); require_login($course, false, $cm); $context = context_module::instance($cm->id); require_capability('mod/glossary:approve', $context); if ($newstate != $entry->approved && confirm_sesskey()) { $newentry = new stdClass(); $newentry->id = $entry->id; $newentry->approved = $newstate; $newentry->timemodified = time(); // wee need this date here to speed up recent activity, TODO: use timestamp in approved field instead in 2.0 $DB->update_record("glossary_entries", $newentry); // Trigger event about entry approval/disapproval. $params = array('context' => $context, 'objectid' => $entry->id); if ($newstate) { $event = \mod_glossary\event\entry_approved::create($params); } else { $event = \mod_glossary\event\entry_disapproved::create($params); } $entry->approved = $newstate ? 1 : 0; $entry->timemodified = $newentry->timemodified; $event->add_record_snapshot('glossary_entries', $entry); $event->trigger(); // Update completion state $completion = new completion_info($course); if ($completion->is_enabled($cm) == COMPLETION_TRACKING_AUTOMATIC && $glossary->completionentries) { $completion->update_state($cm, COMPLETION_COMPLETE, $entry->userid); } // Reset caches. if ($entry->usedynalink) { \mod_glossary\local\concept_cache::reset_glossary($glossary);
public function test_entry_approved() { global $DB; // There is no proper API to call to trigger this event, so what we are // doing here is simply making sure that the events returns the right information. $this->setAdminUser(); $course = $this->getDataGenerator()->create_course(); $student = $this->getDataGenerator()->create_user(); $rolestudent = $DB->get_record('role', array('shortname' => 'student')); $this->getDataGenerator()->enrol_user($student->id, $course->id, $rolestudent->id); $teacher = $this->getDataGenerator()->create_user(); $roleteacher = $DB->get_record('role', array('shortname' => 'teacher')); $this->getDataGenerator()->enrol_user($teacher->id, $course->id, $roleteacher->id); $this->setUser($teacher); $glossary = $this->getDataGenerator()->create_module('glossary', array('course' => $course, 'defaultapproval' => 0)); $context = context_module::instance($glossary->cmid); $this->setUser($student); $glossarygenerator = $this->getDataGenerator()->get_plugin_generator('mod_glossary'); $entry = $glossarygenerator->create_content($glossary); $this->assertEquals(0, $entry->approved); // Approve entry, trigger and validate event. $this->setUser($teacher); $newentry = new stdClass(); $newentry->id = $entry->id; $newentry->approved = true; $newentry->timemodified = time(); $DB->update_record("glossary_entries", $newentry); $params = array('context' => $context, 'objectid' => $entry->id); $event = \mod_glossary\event\entry_approved::create($params); $sink = $this->redirectEvents(); $event->trigger(); $events = $sink->get_events(); $this->assertCount(1, $events); $event = reset($events); // Checking that the event contains the expected values. $this->assertInstanceOf('\\mod_glossary\\event\\entry_approved', $event); $this->assertEquals(CONTEXT_MODULE, $event->contextlevel); $this->assertEquals($glossary->cmid, $event->contextinstanceid); $expected = array($course->id, "glossary", "approve entry", "showentry.php?id={$glossary->cmid}&eid={$entry->id}", $entry->id, $glossary->cmid); $this->assertEventLegacyLogData($expected, $event); $this->assertEventContextNotUsed($event); // Disapprove entry, trigger and validate event. $this->setUser($teacher); $newentry = new stdClass(); $newentry->id = $entry->id; $newentry->approved = false; $newentry->timemodified = time(); $DB->update_record("glossary_entries", $newentry); $params = array('context' => $context, 'objectid' => $entry->id); $event = \mod_glossary\event\entry_disapproved::create($params); $sink = $this->redirectEvents(); $event->trigger(); $events = $sink->get_events(); $this->assertCount(1, $events); $event = reset($events); // Checking that the event contains the expected values. $this->assertInstanceOf('\\mod_glossary\\event\\entry_disapproved', $event); $this->assertEquals(CONTEXT_MODULE, $event->contextlevel); $this->assertEquals($glossary->cmid, $event->contextinstanceid); $expected = array($course->id, "glossary", "disapprove entry", "showentry.php?id={$glossary->cmid}&eid={$entry->id}", $entry->id, $glossary->cmid); $this->assertEventLegacyLogData($expected, $event); $this->assertEventContextNotUsed($event); }