/** * Observe the events, and dispatch them if necessary. * * @param \core\event\base $event The event. * @return void */ public static function observer(\core\event\base $event) { if ($event->component === 'block_xp') { // Skip own events. } else { if (!$event->userid || isguestuser($event->userid) || is_siteadmin($event->userid)) { // Skip non-logged in users and guests. } else { if ($event->contextlevel !== CONTEXT_COURSE && $event->contextlevel !== CONTEXT_MODULE) { // Ignore events outside a course. } else { if ($event->edulevel !== \core\event\base::LEVEL_PARTICIPATING) { // Ignore events that are not participating. } else { if (!has_capability('block/xp:earnxp', $event->get_context(), $event->userid)) { // Skip the events if the user does not have the capability to earn XP, or if it is the admin. } else { // Keep the event, and proceed. $manager = block_xp_manager::get($event->courseid); $manager->capture_event($event); } } } } } }
/** * Custom validation. * * @throws \coding_exception */ protected function validate_data() { parent::validate_data(); if ($this->contextlevel != CONTEXT_MODULE) { throw new \coding_exception('Context level must be CONTEXT_MODULE.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['title'])) { throw new \coding_exception('The \'title\' value must be set in the object.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['subscriptionid'])) { throw new \coding_exception('The \'subscriptionid\' value must be set in other.'); } }
/** * Trigger new event. * * @internal to be used only from \core\event\base::trigger() method. * @param \core\event\base $event * * @throws \coding_Exception if used directly. */ public static function dispatch(\core\event\base $event) { if (during_initial_install()) { return; } if (!$event->is_triggered() or $event->is_dispatched()) { throw new \coding_exception('Illegal event dispatching attempted.'); } self::$buffer[] = $event; if (self::$dispatching) { return; } self::$dispatching = true; self::process_buffers(); self::$dispatching = false; }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->relateduserid)) { throw new \coding_exception('The \'relateduserid\' must be set.'); } }
public function get_events_select($selectwhere, array $params, $sort, $limitfrom, $limitnum) { global $DB; $sort = self::tweak_sort_by_id($sort); $events = array(); $records = $DB->get_records_select('logstore_standard_log', $selectwhere, $params, $sort, '*', $limitfrom, $limitnum); foreach ($records as $data) { $extra = array('origin' => $data->origin, 'ip' => $data->ip, 'realuserid' => $data->realuserid); $data = (array) $data; $id = $data['id']; $data['other'] = unserialize($data['other']); if ($data['other'] === false) { $data['other'] = array(); } unset($data['origin']); unset($data['ip']); unset($data['realuserid']); unset($data['id']); $event = \core\event\base::restore($data, $extra); // Add event to list if it's valid. if ($event) { $events[$id] = $event; } } return $events; }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['itemid'])) { throw new \coding_exception('The itemid needs to be set in $other'); } }
/** * Custom validations. * * @throws \coding_exception when validation fails. * @return void */ protected function validate_data() { parent::validate_data(); // Make sure this class is never used without proper object details. if (!$this->contextlevel === CONTEXT_MODULE) { throw new \coding_exception('Context level must be CONTEXT_MODULE.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->relateduserid)) { debugging('The \'relateduserid\' value must be specified in the event.', DEBUG_DEVELOPER); $this->relateduserid = $this->objectid; } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (empty($this->other['mode'])) { throw new \coding_exception('The \'mode\' value must be set in other.'); } if (empty($this->relateduserid)) { throw new \coding_exception('The \'relateduserid\' must be set.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['desc'])) { throw new \coding_exception('The \'desc\' value must be set in other.'); } if ($this->contextlevel != CONTEXT_MODULE) { throw new \coding_exception('Context level must be CONTEXT_MODULE.'); } }
/** * Custom validation. * * @throws \coding_exception when validation does not pass. * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['dataid'])) { throw new \coding_exception('The dataid must be set in $other.'); } if (!isset($this->other['viewid'])) { throw new \coding_exception('The viewid must be set in $other.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); // Make sure this class is never used without proper object details. if (empty($this->objectid) || empty($this->objecttable)) { throw new \coding_exception('The course_module_viewed event must define objectid and object table.'); } // Make sure the context level is set to module. if ($this->contextlevel != CONTEXT_MODULE) { throw new \coding_exception('Context level must be CONTEXT_MODULE.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['tourid'])) { throw new \coding_exception('The \'tourid\' value must be set in other.'); } if (!isset($this->other['stepindex'])) { throw new \coding_exception('The \'stepindex\' value must be set in other.'); } if (!isset($this->other['pageurl'])) { throw new \coding_exception('The \'pageurl\' value must be set in other.'); } }
protected function validate_data() { parent::validate_data(); if (!isset($this->userid)) { throw new \coding_exception('The user id must be set.'); } if (!isset($this->courseid)) { throw new \coding_exception('The course id must be set.'); } if (!isset($this->other['quizcmid']) && !isset($this->other['qcatid'])) { throw new \coding_exception('Either the quiz course module id or the question category id must be set.'); } }
/** * Observe the events, and dispatch them if necessary. * * @param \core\event\base $event The event. * @return void */ public static function observer(\core\event\base $event) { global $CFG; static $allowedcontexts = null; if ($allowedcontexts === null) { $allowedcontexts = array(CONTEXT_COURSE, CONTEXT_MODULE); if (isset($CFG->block_xp_context) && $CFG->block_xp_context == CONTEXT_SYSTEM) { $allowedcontexts[] = CONTEXT_SYSTEM; } } if ($event->component === 'block_xp') { // Skip own events. } else { if (!$event->userid || isguestuser($event->userid) || is_siteadmin($event->userid)) { // Skip non-logged in users and guests. } else { if ($event->anonymous) { // Skip all the events marked as anonymous. } else { if (!in_array($event->contextlevel, $allowedcontexts)) { // Ignore events that are not in the right context. } else { if ($event->edulevel !== \core\event\base::LEVEL_PARTICIPATING) { // Ignore events that are not participating. } else { if (!has_capability('block/xp:earnxp', $event->get_context(), $event->userid)) { // Skip the events if the user does not have the capability to earn XP. } else { // Keep the event, and proceed. $manager = block_xp_manager::get($event->courseid); $manager->capture_event($event); } } } } } } }
public function test_restore_event() { $event1 = \core_tests\event\unittest_executed::create(array('context' => context_system::instance(), 'other' => array('sample' => 1, 'xx' => 10))); $data1 = $event1->get_data(); $data1['eventname'] = '\\mod_xx\\event\\xx_yy'; $data1['component'] = 'mod_xx'; $data1['action'] = 'yy'; $data1['target'] = 'xx'; $extra1 = array('origin' => 'cli'); $event2 = \core\event\base::restore($data1, $extra1); $data2 = $event2->get_data(); $extra2 = $event2->get_logextra(); $this->assertInstanceOf('core\\event\\unknown_logged', $event2); $this->assertTrue($event2->is_triggered()); $this->assertTrue($event2->is_restored()); $this->assertNull($event2->get_url()); $this->assertEquals($data1, $data2); $this->assertEquals($extra1, $extra2); }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (empty($this->other['attemptid'])) { throw new \coding_exception("The 'attemptid' must be set in other."); } if (empty($this->other['cmielement'])) { throw new \coding_exception("The 'cmielement' must be set in other."); } // Trust that 'cmielement' represents a valid CMI datamodel element: // just check that the given value starts with 'cmi.'. if (strpos($this->other['cmielement'], 'cmi.', 0) !== 0) { throw new \coding_exception("A valid 'cmielement' must start with 'cmi.' ({$this->other['cmielement']})."); } // Warning: 'cmivalue' could be also "0" e.g. when 'cmielement' represents a score. if (!isset($this->other['cmivalue'])) { throw new \coding_exception("The 'cmivalue' must be set in other."); } }
/** * Custom validations. * * @throws \coding_exception when validation fails. * * @return void * * @since 1.0.0 */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['info'])) { throw new \coding_exception("The 'info' value must be set in other."); } if (!isset($this->other['cue'])) { throw new \coding_exception("The 'cue' value must be set in other."); } if (!isset($this->other['guess'])) { throw new \coding_exception("The 'guess' value must be set in other."); } }
/** * Api to buffer events to store, to reduce db queries. * * @param \core\event\base $event */ protected function buffer_event(\core\event\base $event) { // If there are no subscriptions for this event do not buffer it. if (!\tool_monitor\subscription_manager::event_has_subscriptions($event->eventname, $event->courseid)) { return; } $eventdata = $event->get_data(); $eventobj = new \stdClass(); $eventobj->eventname = $eventdata['eventname']; $eventobj->contextid = $eventdata['contextid']; $eventobj->contextlevel = $eventdata['contextlevel']; $eventobj->contextinstanceid = $eventdata['contextinstanceid']; if ($event->get_url()) { // Get link url if exists. $eventobj->link = $event->get_url()->out(); } else { $eventobj->link = ''; } $eventobj->courseid = $eventdata['courseid']; $eventobj->timecreated = $eventdata['timecreated']; $this->buffer[] = $eventobj; $this->count++; }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->other['quizid'])) { throw new \coding_exception('The \'quizid\' value must be set in other.'); } if (!isset($this->other['reportname'])) { throw new \coding_exception('The \'reportname\' value must be set in other.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { if (empty($this->other['info'])) { throw new \coding_exception('The event mod_attendance\\event\\session_updated must specify info.'); } if (empty($this->other['sessionid'])) { throw new \coding_exception('The event mod_attendance\\event\\session_updated must specify sessionid.'); } if (empty($this->other['action'])) { throw new \coding_exception('The event mod_attendance\\event\\session_updated must specify action.'); } parent::validate_data(); }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->relateduserid)) { throw new \coding_exception('The \'relateduserid\' must be set.'); } if (!isset($this->other['offlinequizid'])) { throw new \coding_exception('The \'offlinequizid\' value must be set in other.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { if (empty($this->other['sessionid'])) { throw new \coding_exception('The event mod_attendance\\event\\attendance_taken must specify sessionid.'); } parent::validate_data(); }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->objectid)) { throw new \coding_exception('The \'ouwikiid\' value must be set in the object.'); } if (!isset($this->other['info'])) { throw new \coding_exception('The \'info\' value must be set in other.'); } if (!isset($this->other['logurl'])) { throw new \coding_exception('The \'logurl\' value must be set in other.'); } if ($this->contextlevel != CONTEXT_MODULE) { throw new \coding_exception('Context level must be CONTEXT_MODULE.'); } }
/** * Returns an event from the log data. * * @param stdClass $data Log data * @return \core\event\base */ public function get_log_event($data) { $extra = array('origin' => $data->origin, 'ip' => $data->ip, 'realuserid' => $data->realuserid); $data = (array) $data; $id = $data['id']; $data['other'] = unserialize($data['other']); if ($data['other'] === false) { $data['other'] = array(); } unset($data['origin']); unset($data['ip']); unset($data['realuserid']); unset($data['id']); if (!($event = \core\event\base::restore($data, $extra))) { return null; } return $event; }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->relateduserid)) { throw new \coding_exception('The \'relateduserid\' must be set.'); } if (!isset($this->other['forumid'])) { throw new \coding_exception('The \'forumid\' value must be set in other.'); } if (!isset($this->other['discussion'])) { throw new \coding_exception('The \'discussion\' value must be set in other.'); } if ($this->contextlevel != CONTEXT_MODULE) { throw new \coding_exception('Context level must be CONTEXT_MODULE.'); } }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); }
/** * Custom validation. * * @throws \coding_exception * @return void */ protected function validate_data() { parent::validate_data(); if (!isset($this->relateduserid)) { throw new \coding_exception('The \'relateduserid\' must be set.'); } if (!isset($this->other['reportmode'])) { throw new \coding_exception('The \'reportmode\' value must be set in other.'); } switch ($this->contextlevel) { case CONTEXT_COURSE: case CONTEXT_SYSTEM: case CONTEXT_USER: // OK, expected context level. break; default: // Unexpected contextlevel. throw new \coding_exception('Context level must be either CONTEXT_SYSTEM, CONTEXT_COURSE or CONTEXT_USER.'); } }