diff --git a/auth/email/auth.php b/auth/email/auth.php index 461e198e44f..732dc4dba16 100644 --- a/auth/email/auth.php +++ b/auth/email/auth.php @@ -86,6 +86,9 @@ class auth_plugin_email extends auth_plugin_base { /// Save any custom profile field information profile_save_data($user); + $user = get_record('user', 'id', $user->id); + events_trigger('user_created', $user); + if (! send_confirmation_email($user)) { print_error('auth_emailnoemail','auth'); } diff --git a/auth/ldap/auth.php b/auth/ldap/auth.php index f9039b3c99f..1f0ab4b30b3 100644 --- a/auth/ldap/auth.php +++ b/auth/ldap/auth.php @@ -403,6 +403,9 @@ class auth_plugin_ldap extends auth_plugin_base { $this->update_user_record($user->username); update_internal_user_password($user, $plainslashedpassword); + $user = get_record('user', 'id', $user->id); + events_trigger('user_created', $user); + if (! send_confirmation_email($user)) { print_error('auth_emailnoemail', 'auth'); } diff --git a/course/category.php b/course/category.php index 32430f93b59..3190d40d17b 100644 --- a/course/category.php +++ b/course/category.php @@ -17,7 +17,7 @@ $moveto = optional_param('moveto', 0, PARAM_INT); $rename = optional_param('rename', '', PARAM_TEXT); $resort = optional_param('resort', 0, PARAM_BOOL); - $categorytheme= optional_param('categorytheme', false, PARAM_CLEAN); + $categorytheme= optional_param('categorytheme', false, PARAM_SAFEDIR); if ($CFG->forcelogin) { require_login(); @@ -59,12 +59,12 @@ if (has_capability('moodle/category:update', $context)) { /// Rename the category if requested if (!empty($rename) and confirm_sesskey()) { - $category->name = $rename; - if (! set_field("course_categories", "name", $category->name, "id", $category->id)) { + if (! set_field("course_categories", "name", $rename, "id", $category->id)) { notify("An error occurred while renaming the category"); } - // MDL-9983 - events_trigger('category_updated', $category); + $category->name = stripslashes($rename); + //trigger events + events_trigger('course_category_updated', $category); } /// Set the category theme if requested diff --git a/course/delete.php b/course/delete.php index 7864fa02f89..fc254f5e3e6 100644 --- a/course/delete.php +++ b/course/delete.php @@ -72,12 +72,9 @@ print_heading($strdeletingcourse); - delete_course($course->id); + delete_course($course); fix_course_sortorder(); //update course count in catagories - // MDL-9983 - events_trigger('course_deleted', $course); - print_heading( get_string("deletedcourse", "", format_string($course->shortname)) ); print_continue("category.php?id=$course->category"); diff --git a/course/edit.php b/course/edit.php index 4e1135707c5..64f495a1d56 100644 --- a/course/edit.php +++ b/course/edit.php @@ -122,8 +122,6 @@ if (!update_course($data)) { print_error('coursenotupdated'); } - // MDL-9983 - events_trigger('course_updated', $data); redirect($CFG->wwwroot."/course/view.php?id=$course->id"); } } diff --git a/course/lib.php b/course/lib.php index 222750ce3ab..c34cde12ad9 100644 --- a/course/lib.php +++ b/course/lib.php @@ -2724,7 +2724,7 @@ function category_delete_full($category, $showfeedback=true) { if ($courses = get_records('course', 'category', $category->id, 'sortorder ASC')) { foreach ($courses as $course) { - if (!delete_course($course->id, false)) { + if (!delete_course($course, false)) { notify("Error deleting course $course->shortname"); return false; } @@ -2743,7 +2743,7 @@ function category_delete_full($category, $showfeedback=true) { delete_records('course_categories', 'id', $category->id); delete_context(CONTEXT_COURSECAT, $category->id); - events_trigger('category_deleted', $category); + events_trigger('course_category_deleted', $category); notify(get_string('coursecategorydeleted', '', format_string($category->name)), 'notifysuccess'); @@ -2793,7 +2793,7 @@ function category_delete_move($category, $newparentid, $showfeedback=true) { delete_records('course_categories', 'id', $category->id); delete_context(CONTEXT_COURSECAT, $category->id); - events_trigger('category_deleted', $category); + events_trigger('course_category_deleted', $category); notify(get_string('coursecategorydeleted', '', format_string($category->name)), 'notifysuccess'); @@ -2978,6 +2978,9 @@ function create_course($data) { add_to_log(SITEID, 'course', 'new', 'view.php?id='.$course->id, $data->fullname.' (ID '.$course->id.')'); + //trigger events + events_trigger('course_created', $course); + return $course; } @@ -2985,7 +2988,7 @@ function create_course($data) { } -/* +/** * Update a course and return true or false * * @param object $data - all the data needed for an entry in the 'course' table @@ -3070,6 +3073,8 @@ function update_course($data) { } } + //trigger events + events_trigger('course_updated', $course); return true; diff --git a/group/group.php b/group/group.php index db3c508b2b6..3ef4bd86144 100644 --- a/group/group.php +++ b/group/group.php @@ -60,11 +60,6 @@ if ($id and $delete) { } else if (confirm_sesskey()){ if (groups_delete_group($id)) { - // MDL-9983 - $eventdata = new object(); - $eventdata->group = $id; - $eventdata->course = $courseid; - events_trigger('group_deleted', $eventdata); redirect('index.php?id='.$course->id); } else { print_error('erroreditgroup', 'group', $returnurl); diff --git a/group/grouping.php b/group/grouping.php index d1bde1beb2e..a37f5780b8c 100644 --- a/group/grouping.php +++ b/group/grouping.php @@ -60,11 +60,6 @@ if ($id and $delete) { } else if (confirm_sesskey()){ if (groups_delete_grouping($id)) { - // MDL-9983 - $eventdata = new object(); - $eventdata->group = $id; - $eventdata->course = $courseid; - events_trigger('grouping_deleted', $eventdata); redirect($returnurl); } else { print_error('erroreditgrouping', 'group', $returnurl); diff --git a/group/lib.php b/group/lib.php index 25ff1e85807..968d12cae92 100644 --- a/group/lib.php +++ b/group/lib.php @@ -3,7 +3,7 @@ * Extra library for groups and groupings. * * @copyright © 2006 The Open University - * @author J.White AT open.ac.uk + * @author J.White AT open.ac.uk, Petr Skoda (skodak) * @license http://www.gnu.org/copyleft/gpl.html GNU Public License * @package groups */ @@ -41,11 +41,11 @@ function groups_add_member($groupid, $userid) { //update group info set_field('groups', 'timemodified', $member->timeadded, 'id', $groupid); - // MDL-9983 + //trigger groups events $eventdata = new object(); $eventdata->groupid = $groupid; - $eventdata->userid = $userid; - events_trigger('group_user_added', $eventdata); + $eventdata->userid = $userid; + events_trigger('groups_member_added', $eventdata); return true; } @@ -71,6 +71,12 @@ function groups_remove_member($groupid, $userid) { //update group info set_field('groups', 'timemodified', time(), 'id', $groupid); + //trigger groups events + $eventdata = new object(); + $eventdata->groupid = $groupid; + $eventdata->userid = $userid; + events_trigger('groups_member_removed', $eventdata); + return true; } @@ -89,11 +95,18 @@ function groups_create_group($data, $um=false) { $data->name = trim($data->name); $id = insert_record('groups', $data); - if ($id and $um) { - //update image - if (save_profile_image($id, $um, 'groups')) { - set_field('groups', 'picture', 1, 'id', $id); + if ($id) { + $data->id = $id; + if ($um) { + //update image + if (save_profile_image($id, $um, 'groups')) { + set_field('groups', 'picture', 1, 'id', $id); + } + $data->picture = 1; } + + //trigger groups events + events_trigger('groups_group_created', stripslashes_recursive($data)); } return $id; @@ -110,7 +123,16 @@ function groups_create_grouping($data) { $data->timecreated = time(); $data->timemodified = $data->timecreated; $data->name = trim($data->name); - return insert_record('groupings', $data); + + $id = insert_record('groupings', $data); + + if ($id) { + //trigger groups events + $data->id = $id; + events_trigger('groups_grouping_created', stripslashes_recursive($data)); + } + + return $id; } /** @@ -127,11 +149,17 @@ function groups_update_group($data, $um=false) { $data->name = trim($data->name); $result = update_record('groups', $data); - if ($result and $um) { - //update image - if (save_profile_image($data->id, $um, 'groups')) { - set_field('groups', 'picture', 1, 'id', $data->id); + if ($result) { + if ($um) { + //update image + if (save_profile_image($data->id, $um, 'groups')) { + set_field('groups', 'picture', 1, 'id', $data->id); + $data->picture = 1; + } } + + //trigger groups events + events_trigger('groups_group_updated', stripslashes_recursive($data)); } return $result; @@ -146,21 +174,32 @@ function groups_update_grouping($data) { global $CFG; $data->timemodified = time(); $data->name = trim($data->name); - return update_record('groupings', $data); + $result = update_record('groupings', $data); + if ($result) { + //trigger groups events + events_trigger('groups_grouping_updated', stripslashes_recursive($data)); + } + return $result; } /** * Delete a group best effort, first removing members and links with courses and groupings. * Removes group avatar too. - * @param int $groupid The group to delete + * @param mixed $grouporid The id of group to delete or full group object * @return boolean True if deletion was successful, false otherwise */ -function groups_delete_group($groupid) { +function groups_delete_group($grouporid) { global $CFG; require_once($CFG->libdir.'/gdlib.php'); - if (empty($groupid)) { - return false; + if (is_object($grouporid)) { + $groupid = $grouporid->id; + $group = $grouporid; + } else { + $groupid = $grouporid; + if (!$group = get_record('groups', 'id', $groupid)) { + return false; + } } // delete group calendar events @@ -172,7 +211,14 @@ function groups_delete_group($groupid) { //then imge delete_profile_image($groupid, 'groups'); //group itself last - return delete_records('groups', 'id', $groupid); + $result = delete_records('groups', 'id', $groupid); + + if ($result) { + //trigger groups events + events_trigger('groups_group_deleted', $group); + } + + return $result; } /** @@ -180,10 +226,15 @@ function groups_delete_group($groupid) { * @param int $groupingid * @return bool success */ -function groups_delete_grouping($groupingid) { - if (empty($groupingid)) { - return false; - +function groups_delete_grouping($groupingorid) { + if (is_object($groupingorid)) { + $groupingid = $groupingorid->id; + $grouping = $groupingorid; + } else { + $groupingid = $groupingorid; + if (!$grouping = get_record('groupings', 'id', $groupingorid)) { + return false; + } } //first delete usage in groupings_groups @@ -193,7 +244,14 @@ function groups_delete_grouping($groupingid) { // remove the groupingid from all course modules set_field('course_modules', 'groupingid', 0, 'groupingid', $groupingid); //group itself last - return delete_records('groupings', 'id', $groupingid); + $result = delete_records('groupings', 'id', $groupingid); + + if ($result) { + //trigger groups events + events_trigger('groups_grouping_deleted', $grouping); + } + + return $result; } /** @@ -208,6 +266,9 @@ function groups_delete_group_members($courseid, $showfeedback=false) { $groupssql = "SELECT id FROM {$CFG->prefix}groups g WHERE g.courseid = $courseid"; delete_records_select('groups_members', "groupid IN ($groupssql)"); + //trigger groups events + events_trigger('groups_members_removed', $courseid); + if ($showfeedback) { notify(get_string('deleted').' groups_members'); } @@ -227,6 +288,9 @@ function groups_delete_groupings_groups($courseid, $showfeedback=false) { $groupssql = "SELECT id FROM {$CFG->prefix}groups g WHERE g.courseid = $courseid"; delete_records_select('groupings_groups', "groupid IN ($groupssql)"); + //trigger groups events + events_trigger('groups_groupings_groups_removed', $courseid); + if ($showfeedback) { notify(get_string('deleted').' groupings_groups'); } @@ -261,6 +325,10 @@ function groups_delete_groups($courseid, $showfeedback=false) { delete_records_select('event', "groupid IN ($groupssql)"); delete_records('groups', 'courseid', $courseid); + + //trigger groups events + events_trigger('groups_groups_deleted', $courseid); + if ($showfeedback) { notify(get_string('deleted').' groups'); } @@ -288,6 +356,10 @@ function groups_delete_groupings($courseid, $showfeedback=false) { set_field('course_modules', 'groupingid', 0, 'course', $courseid); delete_records('groupings', 'courseid', $courseid); + + //trigger groups events + events_trigger('groups_groupings_deleted', $courseid); + if ($showfeedback) { notify(get_string('deleted').' groupings'); } diff --git a/group/members.php b/group/members.php index 2f92c8afdf4..a9bb4a4bab3 100644 --- a/group/members.php +++ b/group/members.php @@ -64,12 +64,6 @@ if ($frm = data_submitted() and confirm_sesskey()) { if (!groups_remove_member($groupid, $userid)) { print_error('erroraddremoveuser', 'group', $returnurl); } - - // MDL-9983 - $eventdata = new object(); - $eventdata -> groupid = $groupid; - $eventdata -> userid = $userid; - events_trigger('group_user_removed', $eventdata); } } } diff --git a/lib/db/events.php b/lib/db/events.php index d4a782d25fc..95ffa9c8e32 100644 --- a/lib/db/events.php +++ b/lib/db/events.php @@ -26,6 +26,50 @@ /////////////////////////////////////////////////////////////////////////// + +/* List of handlers */ + $handlers = array (); // no handlers for now in core + + +/* List of events thrown from Moodle core + +==== user related events ==== + +user_created - object user table record +user_updated - object user table record +user_deleted - object user table record + +==== course related events ==== + +course_category_updated - object course_categories table record +course_category_created - object course_categories table record +course_category_deleted - object course_categories table record + +course_created - object course table record +course_updated - object course table record +course_deleted - object course table record + +==== group related events ==== + +groups_group_created - object groups_group table record +groups_group_updated - object groups_group table record +groups_group_deleted - object groups_group table record + +groups_member_added - object userid, groupid properties +groups_member_removed - object userid, groupid properties + +groups_grouping_created - object groups_grouping table record +groups_grouping_updated - object groups_grouping table record +groups_grouping_deleted - object groups_grouping table record + +groups_members_removed - int course id - removed all members from all groups in course +groups_groupings_groups_removed - int course id - removed all groups from all groupings in course +groups_groups_deleted - int course id - deleted all course groups +groups_groupings_deleted - int course id - deleted all course groupings + + +*/ + ?> diff --git a/lib/eventslib.php b/lib/eventslib.php index 519ea6bf5f7..f75f9cfa176 100755 --- a/lib/eventslib.php +++ b/lib/eventslib.php @@ -366,7 +366,7 @@ function events_cron($eventname='') { /** * Function to call all eventhandlers when triggering an event * @param eventname - name of the event - * @param eventdata - event data object + * @param eventdata - event data object (without magic quotes) * @return number of failed events * * PUBLIC @@ -423,7 +423,7 @@ function events_trigger($eventname, $eventdata) { if ($event === false) { $event = new object(); $event->userid = $USER->id; - $event->eventdata = serialize($eventdata); + $event->eventdata = addslashes(serialize($eventdata)); $event->timecreated = time(); if (debugging()) { $dump = ''; diff --git a/lib/moodlelib.php b/lib/moodlelib.php index 805b64e36e2..274df97ff0d 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -3010,6 +3010,8 @@ function delete_user($user) { // notify auth plugin - do not block the delete even when plugin fails $authplugin = get_auth_plugin($user->auth); $authplugin->user_delete($user); + + events_trigger('user_deleted', $user); return true; } else { @@ -3437,16 +3439,26 @@ function set_login_session_preferences() { * Delete a course, including all related data from the database, * and any associated files from the moodledata folder. * - * @param int $courseid The id of the course to delete. + * @param mixed $courseorid The id of the course or course object to delete. * @param bool $showfeedback Whether to display notifications of each action the function performs. * @return bool true if all the removals succeeded. false if there were any failures. If this * method returns false, some of the removals will probably have succeeded, and others * failed, but you have no way of knowing which. */ -function delete_course($courseid, $showfeedback = true) { +function delete_course($courseorid, $showfeedback = true) { global $CFG; $result = true; + if (is_object($courseorid)) { + $courseid = $courseorid->id; + $course = $courseorid; + } else { + $courseid = $courseorid; + if (!$course = get_record('course', 'id', $courseid)) { + return false; + } + } + // frontpage course can not be deleted!! if ($courseid == SITEID) { return false; @@ -3481,6 +3493,11 @@ function delete_course($courseid, $showfeedback = true) { $result = false; } + if ($result) { + //trigger events + events_trigger('course_deleted', $course); + } + return $result; } diff --git a/login/change_password.php b/login/change_password.php index 1c9ea1872ea..385a95936a5 100644 --- a/login/change_password.php +++ b/login/change_password.php @@ -73,12 +73,6 @@ $strpasswordchanged = get_string('passwordchanged'); - // MDL-9983 - $eventdata = new object(); - $eventdata -> user = $USER; - $eventdata -> newpassword = $data -> newpassword1; - events_trigger('password_changed', $eventdata); - add_to_log($course->id, 'user', 'change password', "view.php?id=$USER->id&course=$course->id", "$USER->id"); $fullname = fullname($USER, true); diff --git a/user/edit.php b/user/edit.php index a2d0cc3ea58..9c4a880cece 100644 --- a/user/edit.php +++ b/user/edit.php @@ -181,14 +181,16 @@ } } + // reload from db + $usernew = get_record('user', 'id', $user->id); + events_trigger('user_updated', $usernew); + if ($USER->id == $user->id) { // Override old $USER session variable if needed - $usernew = (array)get_record('user', 'id', $user->id); // reload from db - foreach ($usernew as $variable => $value) { + foreach ((array)$usernew as $variable => $value) { $USER->$variable = $value; } } - events_trigger('user_updated', $usernew); if (!$email_changed || !$CFG->emailchangeconfirmation) { redirect("$CFG->wwwroot/user/view.php?id=$user->id&course=$course->id"); diff --git a/user/editadvanced.php b/user/editadvanced.php index 0788229510d..26c3d379d17 100644 --- a/user/editadvanced.php +++ b/user/editadvanced.php @@ -99,6 +99,7 @@ if (!$usernew->id = insert_record('user', $usernew)) { error('Error creating user record'); } + $usercreated = true; } else { if (!update_record('user', $usernew)) { error('Error updating user record'); @@ -120,9 +121,7 @@ } } } - - // MDL-9983 - events_trigger('user_updated', $usernew); + $usercreated = false; } //update preferences @@ -147,10 +146,19 @@ // save custom profile fields data profile_save_data($usernew); + // reload from db + $usernew = get_record('user', 'id', $usernew->id); + + // trigger events + if ($usercreated) { + events_trigger('user_created', $usernew); + } else { + events_trigger('user_updated', $usernew); + } + if ($user->id == $USER->id) { // Override old $USER session variable - $usernew = (array)get_record('user', 'id', $usernew->id); // reload from db - foreach ($usernew as $variable => $value) { + foreach ((array)$usernew as $variable => $value) { $USER->$variable = $value; } if (!empty($USER->newadminuser)) {