function _account_sync_roles in Account Sync 6
Same name and namespace in other branches
- 7.2 account_sync.receiver.inc \_account_sync_roles()
Returns the list of roles that should be set on the given account.
If a role exists both on this site and on the sending site then sync it against the account that was sent.
Parameters
$all_roles: user_roles() from the sending site
$new_roles: roles as set on the account that was sent
$existing_roles: roles as they exist on the matching user account on this site
2 calls to _account_sync_roles()
- account_sync_update_user in ./
account_sync.receiver.inc - XMLRPC callback to update the user account on /this/ drupal site.
- _account_sync_edit_roles in ./
account_sync.receiver.inc - Helper to convert the $account role format into the $edit role format.
File
- ./
account_sync.receiver.inc, line 83 - Handler inc for receiving and updating user account data.
Code
function _account_sync_roles($all_roles, $new_roles, $existing_roles = NULL) {
// If not matching roles based on role name, then we can return. This implies
// that the rids on this site are identical to those on the sending site.
if (!variable_get('account_sync_match_roles', FALSE)) {
return $new_roles;
}
// Set any roles that exist both on this site AND are enabled on the user
// account that was sent to us.
$roles = array();
foreach (user_roles() as $rid => $role_name) {
if ($rid == DRUPAL_ANONYMOUS_RID || $rid == DRUPAL_AUTHENTICATED_RID) {
continue;
}
if (in_array($role_name, $new_roles)) {
$roles[$rid] = $role_name;
}
}
// Set any roles that are currently enabled on the user on this site and
// don't exist on the sending site.
if (isset($existing_roles)) {
foreach ($existing_roles as $rid => $name) {
// Add in any roles that were already set but don't exist on the
// foreign site.
if (!in_array($name, $all_roles)) {
$roles[$rid] = $name;
}
}
}
return $roles;
}