We are no longer offering accounts on this server. Consider https://gitlab.freedesktop.org/ as a place to host projects.

Commit 1d85bfec authored by Evan Prodromou's avatar Evan Prodromou

New events when granting and revoking roles

Four new events for when roles are granted or revoked.
parent 07bc50ea
......@@ -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
......@@ -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()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment