diff --git a/lang/en/badges.php b/lang/en/badges.php index 21cf94e6a6a..ce03b75dbd9 100644 --- a/lang/en/badges.php +++ b/lang/en/badges.php @@ -246,6 +246,7 @@ $string['error:requesttimeout'] = 'The connection request timed out before it co $string['error:requesterror'] = 'The connection request failed (error code {$a}).'; $string['error:save'] = 'Cannot save the badge.'; $string['error:userdeleted'] = '{$a->user} (This user no longer exists in {$a->site})'; +$string['eventbadgeawarded'] = 'Badge awarded'; $string['evidence'] = 'Evidence'; $string['existingrecipients'] = 'Existing badge recipients'; $string['expired'] = 'Expired'; diff --git a/lib/badgeslib.php b/lib/badgeslib.php index 80b57cee9a7..9e348be14e4 100644 --- a/lib/badgeslib.php +++ b/lib/badgeslib.php @@ -398,6 +398,12 @@ class badge { $result = $DB->insert_record('badge_issued', $issued, true); if ($result) { + // Trigger badge awarded event. + $context = context_system::instance(); + $event = \core\event\badge_awarded::create(array('context' => $context, 'objectid' => $result, + 'courseid' => $this->courseid ? $this->courseid : 0, 'relateduserid' => $userid)); + $event->trigger(); + // Lock the badge, so that its criteria could not be changed any more. if ($this->status == BADGE_STATUS_ACTIVE) { $this->set_status(BADGE_STATUS_ACTIVE_LOCKED); diff --git a/lib/classes/event/badge_awarded.php b/lib/classes/event/badge_awarded.php new file mode 100644 index 00000000000..271d6f10bc6 --- /dev/null +++ b/lib/classes/event/badge_awarded.php @@ -0,0 +1,72 @@ +. + +/** + * Badge awarded event. + * + * @package core + * @copyright 2014 James Ballard + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core\event; +defined('MOODLE_INTERNAL') || die(); + +/** + * Event triggered after a badge is awarded to a user. + * + * @package core + * @since Moodle 2.7 + * @copyright 2014 James Ballard + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ +class badge_awarded extends base { + + /** + * Set basic properties for the event. + */ + protected function init() { + $this->data['objecttable'] = 'badge_issued'; + $this->data['crud'] = 'c'; + $this->data['edulevel'] = self::LEVEL_PARTICIPATING; + } + + /** + * Returns localised general event name. + * + * @return string + */ + public static function get_name() { + return get_string('eventbadgeawarded', 'badges'); + } + + /** + * Returns non-localised event description with id's for admin use only. + * + * @return string + */ + public function get_description() { + return "The user with id '$this->userid' was awarded the badge with id '$this->objectid'."; + } + + /** + * Returns relevant URL. + * @return \moodle_url + */ + public function get_url() { + return null; + } +}