From 2942a5cd34dfd407f26d4d94fc31ff0f5c664118 Mon Sep 17 00:00:00 2001 From: skodak Date: Sun, 6 Jul 2008 17:57:06 +0000 Subject: [PATCH] MDL-9983, MDL-13998 core events related cleanup; merged from MOODLE_19_STABLE --- auth/email/auth.php | 3 + auth/ldap/auth.php | 3 + course/category.php | 10 ++-- course/delete.php | 5 +- course/edit.php | 2 - course/lib.php | 11 +++- group/group.php | 5 -- group/grouping.php | 5 -- group/lib.php | 116 ++++++++++++++++++++++++++++++-------- group/members.php | 6 -- lib/db/events.php | 44 +++++++++++++++ lib/moodlelib.php | 23 +++++++- login/change_password.php | 6 -- user/edit.php | 8 ++- user/editadvanced.php | 18 ++++-- 15 files changed, 195 insertions(+), 70 deletions(-) diff --git a/auth/email/auth.php b/auth/email/auth.php index a67754ee301..fa5e510a802 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 8b8d1cf62ba..8904224461a 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 61f1c897be8..a179354eead 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 (!$DB->set_field("course_categories", "name", $category->name, array("id"=>$category->id))) { + if (!$DB->set_field("course_categories", "name", $rename, array("id"=>$category->id))) { notify("An error occurred while renaming the category"); } - // MDL-9983 - events_trigger('category_updated', $category); + $category->name = $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 36d1bac8efb..967126d980f 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 0318851b10b..85e16d532b6 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 620e519ba81..efdf4435456 100644 --- a/course/lib.php +++ b/course/lib.php @@ -2772,7 +2772,7 @@ function category_delete_full($category, $showfeedback=true) { if ($courses = $DB->get_records('course', array('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; } @@ -2791,7 +2791,7 @@ function category_delete_full($category, $showfeedback=true) { $DB->delete_records('course_categories', array('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'); @@ -2841,7 +2841,7 @@ function category_delete_move($category, $newparentid, $showfeedback=true) { $DB->delete_records('course_categories', array('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'); @@ -2998,6 +2998,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; } @@ -3091,6 +3094,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 a012e9fdc12..b75326ae7d6 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 36e103f6536..7be2c8c1d1c 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 e3d8c08b6d2..1fcd8410c26 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 */ @@ -43,11 +43,11 @@ function groups_add_member($groupid, $userid) { //update group info $DB->set_field('groups', 'timemodified', $member->timeadded, array('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; } @@ -75,6 +75,12 @@ function groups_remove_member($groupid, $userid) { //update group info $DB->set_field('groups', 'timemodified', time(), array('id'=>$groupid)); + //trigger groups events + $eventdata = new object(); + $eventdata->groupid = $groupid; + $eventdata->userid = $userid; + events_trigger('groups_member_removed', $eventdata); + return true; } @@ -93,11 +99,18 @@ function groups_create_group($data, $um=false) { $data->name = trim($data->name); $id = $DB->insert_record('groups', $data); - if ($id and $um) { - //update image - if (save_profile_image($id, $um, 'groups')) { - $DB->set_field('groups', 'picture', 1, array('id'=>$id)); + if ($id) { + $data->id = $id; + if ($um) { + //update image + if (save_profile_image($id, $um, 'groups')) { + $DB->set_field('groups', 'picture', 1, array('id'=>$id)); + } + $data->picture = 1; } + + //trigger groups events + events_trigger('groups_group_created', $data); } return $id; @@ -114,7 +127,15 @@ function groups_create_grouping($data) { $data->timecreated = time(); $data->timemodified = $data->timecreated; $data->name = trim($data->name); - return $DB->insert_record('groupings', $data); + $id = $DB->insert_record('groupings', $data); + + if ($id) { + //trigger groups events + $data->id = $id; + events_trigger('groups_grouping_created', $data); + } + + return $id; } /** @@ -131,11 +152,17 @@ function groups_update_group($data, $um=false) { $data->name = trim($data->name); $result = $DB->update_record('groups', $data); - if ($result and $um) { - //update image - if (save_profile_image($data->id, $um, 'groups')) { + if ($result) { + if ($um) { + //update image + if (save_profile_image($data->id, $um, 'groups')) { $DB->set_field('groups', 'picture', 1, array('id'=>$data->id)); + $data->picture = 1; + } } + + //trigger groups events + events_trigger('groups_group_updated', $data); } return $result; @@ -150,21 +177,32 @@ function groups_update_grouping($data) { global $DB; $data->timemodified = time(); $data->name = trim($data->name); - return $DB->update_record('groupings', $data); + $result = $DB->update_record('groupings', $data); + if ($result) { + //trigger groups events + events_trigger('groups_grouping_updated', $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, $DB; 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 = $DB->get_record('groups', array('id'=>$groupid))) { + return false; + } } // delete group calendar events @@ -176,7 +214,13 @@ function groups_delete_group($groupid) { //then imge delete_profile_image($groupid, 'groups'); //group itself last - return $DB->delete_records('groups', array('id'=>$groupid)); + $result = $DB->delete_records('groups', array('id'=>$groupid)); + if ($result) { + //trigger groups events + events_trigger('groups_group_deleted', $group); + } + + return $result; } /** @@ -184,12 +228,17 @@ function groups_delete_group($groupid) { * @param int $groupingid * @return bool success */ -function groups_delete_grouping($groupingid) { +function groups_delete_grouping($groupingorid) { global $DB; - if (empty($groupingid)) { - return false; - + if (is_object($groupingorid)) { + $groupingid = $groupingorid->id; + $grouping = $groupingorid; + } else { + $groupingid = $groupingorid; + if (!$grouping = $DB->get_record('groupings', array('id'=>$groupingorid))) { + return false; + } } //first delete usage in groupings_groups @@ -199,7 +248,14 @@ function groups_delete_grouping($groupingid) { // remove the groupingid from all course modules $DB->set_field('course_modules', 'groupingid', 0, array('groupingid'=>$groupingid)); //group itself last - return $DB->delete_records('groupings', array('id'=>$groupingid)); + $result = $DB->delete_records('groupings', array('id'=>$groupingid)); + + if ($result) { + //trigger groups events + events_trigger('groups_grouping_deleted', $grouping); + } + + return $result; } /** @@ -214,6 +270,9 @@ function groups_delete_group_members($courseid, $showfeedback=false) { $groupssql = "SELECT id FROM {groups} g WHERE g.courseid = ?"; $DB->delete_records_select('groups_members', "groupid IN ($groupssql)", array($courseid)); + //trigger groups events + events_trigger('groups_members_removed', $courseid); + if ($showfeedback) { notify(get_string('deleted').' groups_members'); } @@ -233,6 +292,9 @@ function groups_delete_groupings_groups($courseid, $showfeedback=false) { $groupssql = "SELECT id FROM {groups} g WHERE g.courseid = ?"; $DB->delete_records_select('groupings_groups', "groupid IN ($groupssql)", array($courseid)); + //trigger groups events + events_trigger('groups_groupings_groups_removed', $courseid); + if ($showfeedback) { notify(get_string('deleted').' groupings_groups'); } @@ -266,6 +328,10 @@ function groups_delete_groups($courseid, $showfeedback=false) { $DB->delete_records_select('event', "groupid IN ($groupssql)", array($courseid)); $DB->delete_records('groups', array('courseid'=>$courseid)); + + //trigger groups events + events_trigger('groups_groups_deleted', $courseid); + if ($showfeedback) { notify(get_string('deleted').' groups'); } @@ -293,6 +359,10 @@ function groups_delete_groupings($courseid, $showfeedback=false) { $DB->set_field('course_modules', 'groupingid', 0, array('course'=>$courseid)); $DB->delete_records('groupings', array('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 61d39acbb7a..c1703c92085 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/moodlelib.php b/lib/moodlelib.php index c96c1e78265..6cfa70ed70d 100644 --- a/lib/moodlelib.php +++ b/lib/moodlelib.php @@ -2901,6 +2901,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 { @@ -3326,16 +3328,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, $DB; $result = true; + if (is_object($courseorid)) { + $courseid = $courseorid->id; + $course = $courseorid; + } else { + $courseid = $courseorid; + if (!$course = $DB->get_record('course', array('id'=>$courseid))) { + return false; + } + } + // frontpage course can not be deleted!! if ($courseid == SITEID) { return false; @@ -3370,6 +3382,11 @@ function delete_course($courseid, $showfeedback = true) { $result = false; } + if ($result) { + //trigger events + events_trigger('course_deleted', $course); + } + return $result; } @@ -5644,7 +5661,7 @@ function rc4encrypt($data) { * * @param string $data ? * @return string - * @todo Finish documenting this function + * @todo Finish documenting this function */ function rc4decrypt($data) { $password = 'nfgjeingjk'; diff --git a/login/change_password.php b/login/change_password.php index ecb40b38681..9bfc3c968a7 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 b88fdd0c2fa..4af41023783 100644 --- a/user/edit.php +++ b/user/edit.php @@ -180,14 +180,16 @@ } } + // reload from db + $usernew = $DB->get_record('user', array('id'=>$user->id)); + events_trigger('user_updated', $usernew); + if ($USER->id == $user->id) { // Override old $USER session variable if needed - $usernew = $DB->get_record('user', array('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 806126526ad..958d40bdce6 100644 --- a/user/editadvanced.php +++ b/user/editadvanced.php @@ -99,6 +99,7 @@ if (!$usernew->id = $DB->insert_record('user', $usernew)) { print_error('cannotcreateuser'); } + $usercreated = true; } else { if (!$DB->update_record('user', $usernew)) { print_error('cannotupdateuser'); @@ -118,9 +119,7 @@ } } } - - // MDL-9983 - events_trigger('user_updated', $usernew); + $usercreated = false; } //update preferences @@ -145,10 +144,19 @@ // save custom profile fields data profile_save_data($usernew); + // reload from db + $usernew = $DB->get_record('user', array('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 = $DB->get_record('user', array('id'=>$usernew->id)); // reload from db - foreach ($usernew as $variable => $value) { + foreach ((array)$usernew as $variable => $value) { $USER->$variable = $value; } if (!empty($USER->newadminuser)) {