diff options
-rw-r--r-- | classes/Profile.php | 74 | ||||
-rw-r--r-- | classes/User.php | 68 |
2 files changed, 96 insertions, 46 deletions
diff --git a/classes/Profile.php b/classes/Profile.php index 7c1e9db33..2668efcc7 100644 --- a/classes/Profile.php +++ b/classes/Profile.php @@ -587,4 +587,78 @@ class Profile extends Memcached_DataObject return $location; } + + function hasRole($name) + { + $role = User_role::pkeyGet(array('user_id' => $this->id, + 'role' => $name)); + return (!empty($role)); + } + + function grantRole($name) + { + $role = new User_role(); + + $role->user_id = $this->id; + $role->role = $name; + $role->created = common_sql_now(); + + $result = $role->insert(); + + if (!$result) { + common_log_db_error($role, 'INSERT', __FILE__); + return false; + } + + return true; + } + + function revokeRole($name) + { + $role = User_role::pkeyGet(array('user_id' => $this->id, + 'role' => $name)); + + if (empty($role)) { + throw new Exception('Cannot revoke role "'.$name.'" for user #'.$this->id.'; does not exist.'); + } + + $result = $role->delete(); + + if (!$result) { + common_log_db_error($role, 'DELETE', __FILE__); + throw new Exception('Cannot revoke role "'.$name.'" for user #'.$this->id.'; database error.'); + } + + return true; + } + + function isSandboxed() + { + return $this->hasRole(User_role::SANDBOXED); + } + + function isSilenced() + { + return $this->hasRole(User_role::SILENCED); + } + + function sandbox() + { + $this->grantRole(User_role::SANDBOXED); + } + + function unsandbox() + { + $this->revokeRole(User_role::SANDBOXED); + } + + function silence() + { + $this->grantRole(User_role::SILENCED); + } + + function unsilence() + { + $this->revokeRole(User_role::SILENCED); + } } diff --git a/classes/User.php b/classes/User.php index 0e8404377..1dca59f23 100644 --- a/classes/User.php +++ b/classes/User.php @@ -657,50 +657,6 @@ class User extends Memcached_DataObject return Design::staticGet('id', $this->design_id); } - function hasRole($name) - { - $role = User_role::pkeyGet(array('user_id' => $this->id, - 'role' => $name)); - return (!empty($role)); - } - - function grantRole($name) - { - $role = new User_role(); - - $role->user_id = $this->id; - $role->role = $name; - $role->created = common_sql_now(); - - $result = $role->insert(); - - if (!$result) { - common_log_db_error($role, 'INSERT', __FILE__); - return false; - } - - return true; - } - - function revokeRole($name) - { - $role = User_role::pkeyGet(array('user_id' => $this->id, - 'role' => $name)); - - if (empty($role)) { - throw new Exception('Cannot revoke role "'.$name.'" for user #'.$this->id.'; does not exist.'); - } - - $result = $role->delete(); - - if (!$result) { - common_log_db_error($role, 'DELETE', __FILE__); - throw new Exception('Cannot revoke role "'.$name.'" for user #'.$this->id.'; database error.'); - } - - return true; - } - /** * Does this user have the right to do X? * @@ -779,13 +735,33 @@ class User extends Memcached_DataObject // XXX delete group block? Reset blocker? } + function hasRole($name) + { + $profile = $this->getProfile(); + return $profile->hasRole($name); + } + + function grantRole($name) + { + $profile = $this->getProfile(); + return $profile->grantRole($name); + } + + function revokeRole($name) + { + $profile = $this->getProfile(); + return $profile->revokeRole($name); + } + function isSandboxed() { - return $this->hasRole(User_role::SANDBOXED); + $profile = $this->getProfile(); + return $profile->isSandboxed(); } function isSilenced() { - return $this->hasRole(User_role::SILENCED); + $profile = $this->getProfile(); + return $profile->isSilenced(); } } |