MDL-9983, MDL-13998 core events related cleanup; merged from MOODLE_19_STABLE
authorskodak <skodak>
Sun, 6 Jul 2008 17:57:06 +0000 (17:57 +0000)
committerskodak <skodak>
Sun, 6 Jul 2008 17:57:06 +0000 (17:57 +0000)
15 files changed:
auth/email/auth.php
auth/ldap/auth.php
course/category.php
course/delete.php
course/edit.php
course/lib.php
group/group.php
group/grouping.php
group/lib.php
group/members.php
lib/db/events.php
lib/moodlelib.php
login/change_password.php
user/edit.php
user/editadvanced.php

index a67754e..fa5e510 100644 (file)
@@ -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');
         }
index 8b8d1cf..8904224 100644 (file)
@@ -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');
         }
index 61f1c89..a179354 100644 (file)
@@ -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();
     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
index 36d1bac..967126d 100644 (file)
 
     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");
index 0318851..85e16d5 100644 (file)
             if (!update_course($data)) {
                 print_error('coursenotupdated');
             }
-            // MDL-9983
-            events_trigger('course_updated', $data);
             redirect($CFG->wwwroot."/course/view.php?id=$course->id");
         }
     }
index 620e519..efdf443 100644 (file)
@@ -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;
 
index a012e9f..b75326a 100644 (file)
@@ -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);
index 36e103f..7be2c8c 100644 (file)
@@ -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);
index e3d8c08..1fcd841 100644 (file)
@@ -3,7 +3,7 @@
  * Extra library for groups and groupings.
  *
  * @copyright &copy; 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');
     }
index 61d39ac..c1703c9 100644 (file)
@@ -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);
         }
     }
 }
index d4a782d..95ffa9c 100644 (file)
 ///////////////////////////////////////////////////////////////////////////
 
 
+
+/* 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
+
+
+*/
+
 ?>
index c96c1e7..6cfa70e 100644 (file)
@@ -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\r
+ * @todo Finish documenting this function
  */
 function rc4decrypt($data) {
     $password = 'nfgjeingjk';
index ecb40b3..9bfc3c9 100644 (file)
 
         $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&amp;course=$course->id", "$USER->id");
 
         $fullname = fullname($USER, true);
index b88fdd0..4af4102 100644 (file)
             }
         }
 
+        // 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");
index 8061265..958d40b 100644 (file)
@@ -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');
                     }
                 }
             }
-
-            // MDL-9983
-            events_trigger('user_updated', $usernew);
+            $usercreated = false;
         }
 
         //update preferences
         // 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)) {