Example #1
0
 /**
  * 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.');
     }
 }
Example #5
0
 /**
  * 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.');
     }
 }
Example #7
0
 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');
     }
 }
Example #9
0
 /**
  * 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.');
     }
 }
Example #13
0
 /**
  * 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.');
     }
 }
Example #14
0
 /**
  * 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.');
     }
 }
Example #15
0
 /**
  * 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.");
     }
 }
Example #20
0
 /**
  * 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.");
     }
 }
Example #21
0
 /**
  * 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();
 }
Example #26
0
 /**
  * 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.');
     }
 }
Example #27
0
 /**
  * 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.');
     }
 }