]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
New events when granting and revoking roles
authorEvan Prodromou <evan@status.net>
Fri, 22 Oct 2010 14:31:50 +0000 (10:31 -0400)
committerEvan Prodromou <evan@status.net>
Fri, 22 Oct 2010 14:31:50 +0000 (10:31 -0400)
Four new events for when roles are granted or revoked.

EVENTS.txt
classes/Profile.php

index e5cafa857378400d380a45d1e83605f2e47c31fe..8e730945a41b34aa024301c9a057b2dd7fa6de75 100644 (file)
@@ -1142,3 +1142,19 @@ StartShowNoticeForm: before showing the notice form (before <form>)
 
 EndShowNoticeForm: after showing the notice form (after <form>)
 - $action: action being executed
+
+StartGrantRole: when a role is being assigned
+- $profile: profile that will have the role
+- $role: string name of the role
+
+EndGrantRole: when a role has been successfully assigned
+- $profile: profile that will have the role
+- $role: string name of the role
+
+StartRevokeRole: when a role is being revoked
+- $profile: profile that will lose the role
+- $role: string name of the role
+
+EndRevokeRole: when a role has been revoked
+- $profile: profile that lost the role
+- $role: string name of the role
index a32051d07dbc0c05b7bc5788124cc5dbb3b0a141..cb5ca54b0262527c70e75edcf1b10f808cc8214e 100644 (file)
@@ -758,43 +758,52 @@ class Profile extends Memcached_DataObject
 
     function grantRole($name)
     {
-        $role = new Profile_role();
+        if (Event::handle('StartGrantRole', array($this, $name))) {
 
-        $role->profile_id = $this->id;
-        $role->role       = $name;
-        $role->created    = common_sql_now();
+            $role = new Profile_role();
 
-        $result = $role->insert();
+            $role->profile_id = $this->id;
+            $role->role       = $name;
+            $role->created    = common_sql_now();
 
-        if (!$result) {
-            common_log_db_error($role, 'INSERT', __FILE__);
-            return false;
+            $result = $role->insert();
+
+            if (!$result) {
+                throw new Exception("Can't save role '$name' for profile '{$this->id}'");
+            }
+
+            Event::handle('EndGrantRole', array($this, $name));
         }
 
-        return true;
+        return $result;
     }
 
     function revokeRole($name)
     {
-        $role = Profile_role::pkeyGet(array('profile_id' => $this->id,
-                                            'role' => $name));
+        if (Event::handle('StartRevokeRole', array($this, $name))) {
 
-        if (empty($role)) {
-            // TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
-            // TRANS: %1$s is the role name, %2$s is the user ID (number).
-            throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; does not exist.'),$name, $this->id));
-        }
+            $role = Profile_role::pkeyGet(array('profile_id' => $this->id,
+                                                'role' => $name));
 
-        $result = $role->delete();
+            if (empty($role)) {
+                // TRANS: Exception thrown when trying to revoke an existing role for a user that does not exist.
+                // TRANS: %1$s is the role name, %2$s is the user ID (number).
+                throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; does not exist.'),$name, $this->id));
+            }
 
-        if (!$result) {
-            common_log_db_error($role, 'DELETE', __FILE__);
-            // TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
-            // TRANS: %1$s is the role name, %2$s is the user ID (number).
-            throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; database error.'),$name, $this->id));
-        }
+            $result = $role->delete();
 
-        return true;
+            if (!$result) {
+                common_log_db_error($role, 'DELETE', __FILE__);
+                // TRANS: Exception thrown when trying to revoke a role for a user with a failing database query.
+                // TRANS: %1$s is the role name, %2$s is the user ID (number).
+                throw new Exception(sprintf(_('Cannot revoke role "%1$s" for user #%2$d; database error.'),$name, $this->id));
+            }
+
+            Event::handle('EndRevokeRole', array($this, $name));
+
+            return true;
+        }
     }
 
     function isSandboxed()