/** * Override roles config, so that we do not loose permissions when roles are recreated from config * Iterate through new roles so that we have record of them in UI * * @return type */ function get_roles_config($hook, $type, $return, $params) { foreach ($return as $role_name => $role_options) { if (roles_get_role_by_name($role_name)) { unset($return[$role_name]); } } return $return; }
function upload_users_set_role($hook, $type, $return, $params) { $header = $params['header']; $user = $params['user']; $value = $params['value']; if ($header == 'user_upload_role') { $role = roles_get_role_by_name($value); roles_set_role($role, $user); return true; } return $return; }
/** * Assigns user role when user is created * * @param string $event "create" * @param string $type "user" * @param ElggUser $user User entity * @return void */ function roles_create_user($event, $type, $user) { $rolename = get_input('role', false); if (elgg_is_admin_logged_in() && $rolename) { // admin is adding a user, give them the role they asked for $role = roles_get_role_by_name($rolename); if ($role) { roles_set_role($role, $user); } } }
/** * * Saves user role upon changing role on the user settings page * * @param string $hook_name Equals "usersettings:save" * @param string $entity_type Equals "user" * @param mixed $return_value * @param mixed $params An associative array of parameters provided by the hook trigger */ function roles_user_settings_save($hook_name, $entity_type, $return_value, $params) { $role_name = get_input('role'); $user_id = get_input('guid'); $role_name = roles_filter_role_name($role_name); $role = roles_get_role_by_name($role_name); $user = get_entity($user_id); $res = roles_set_role($role, $user); if ($res === false) { register_error(elgg_echo('user:role:fail')); return false; } else { if ($res === true) { system_message(elgg_echo('user:role:success')); return true; } } return null; }
/** * Caches permissions associated with a role object. Also resolves all role extensions. * * @global array $PERMISSIONS_CACHE In-memory cache for role permission * @param ElggRole $role The role to cache permissions for */ function roles_cache_permissions($role) { global $PERMISSIONS_CACHE; if (!is_array($PERMISSIONS_CACHE[$role->name])) { $PERMISSIONS_CACHE[$role->name] = array(); } // Let' start by processing role extensions $extends = $role->extends; if (!empty($role->extends) && !is_array($extends)) { $extends = array($extends); } if (is_array($extends) && !empty($extends)) { foreach ($extends as $extended_role_name) { $extended_role = roles_get_role_by_name($extended_role_name); if (!isset($PERMISSIONS_CACHE[$extended_role->name])) { roles_cache_permissions($extended_role); } foreach ($PERMISSIONS_CACHE[$extended_role->name] as $type => $permission_rules) { if (is_array($PERMISSIONS_CACHE[$role->name][$type])) { $PERMISSIONS_CACHE[$role->name][$type] = array_merge($PERMISSIONS_CACHE[$role->name][$type], $permission_rules); } else { $PERMISSIONS_CACHE[$role->name][$type] = $permission_rules; } } } } $permissions = unserialize($role->permissions); foreach ($permissions as $type => $permission_rules) { if (is_array($PERMISSIONS_CACHE[$role->name][$type])) { $PERMISSIONS_CACHE[$role->name][$type] = array_merge($PERMISSIONS_CACHE[$role->name][$type], $permission_rules); } else { $PERMISSIONS_CACHE[$role->name][$type] = $permission_rules; } } }
/** * Get roles plugin getter options * @return array */ function hj_inbox_roles_role_getter_options($role_name) { if (!elgg_is_active_plugin('roles')) { return array(); } $role = roles_get_role_by_name($role_name); if (!$role) { return array(); } global $INBOX_TABLE_ITERATOR; $INBOX_TABLE_ITERATOR++; $table = "inb{$INBOX_TABLE_ITERATOR}"; $dbprefix = elgg_get_config('dbprefix'); return array('types' => 'user', 'wheres' => array("EXISTS (SELECT * FROM {$dbprefix}entity_relationships {$table} WHERE {$table}.guid_one = e.guid AND {$table}.relationship = 'has_role' AND {$table}.guid_two = {$role->guid})")); }
<?php /** * Change user role */ namespace Elgg\Roles\UI; $guid = get_input('guid'); $role_name = get_input('role'); $user = get_entity($guid); $role = roles_get_role_by_name($role_name); if (!elgg_is_admin_logged_in()) { register_error(elgg_echo(PLUGIN_ID . ':set:error:admin_gatekeeper')); forward(REFERER); } if (!elgg_instanceof($user, 'user')) { register_error(elgg_echo(PLUGIN_ID . ':set:error:no_user')); forward(REFERER); } if (!elgg_instanceof($role, 'object', 'role')) { register_error(elgg_echo(PLUGIN_ID . ':set:error:no_role')); forward(REFERER); } $current_role = roles_get_role($user); if ($role->guid == $current_role->guid) { register_error(elgg_echo(PLUGIN_ID . ':set:error:equivalent_role')); forward(REFERER); } if (roles_set_role($role, $user)) { system_message(elgg_echo(PLUGIN_ID . ':set:success')); if (elgg_is_xhr()) {
/** * Set user role upon import * * @global array $UPLOAD_USERS_ROLES_CACHE Cache roles * @param string $hook Equals 'header:custom_method' * @param string $type Equals 'upload_users' * @param boolean $return Return flag received by the hook * @param array $params An array of additional hook parameters * @return boolean If true, the upload script will not attempt to store the value as metadata */ function upload_users_set_role($hook, $type, $return, $params) { if (!elgg_is_active_plugin('roles')) { return $return; } $metadata_name = $params['metadata_name']; $user = $params['user']; $value = $params['value']; if ($metadata_name != 'user_upload_role' || !$value || !elgg_instanceof($user, 'user')) { return $return; } global $UPLOAD_USERS_ROLES_CACHE; if (!isset($UPLOAD_USERS_ROLES_CACHE[$value])) { $role = roles_get_role_by_name($value); if ($role) { $UPLOAD_USERS_ROLES_CACHE[$value] = $role; } } else { $role = $UPLOAD_USERS_ROLES_CACHE[$value]; } $return['status'] = roles_set_role($role, $user); elgg_log("Upload users: assigning role {$value} to {$user->guid}; Status: {$return['status']}"); return $return; }
$current_role = get_entity($guid); $name = strtolower(get_input('name')); $title = get_input('title'); if (!$title) { $title = elgg_echo("roles:role:{$name}"); } $extends = get_input('extends', array()); foreach ($extends as $role_guid => $order) { if (!$order) { continue; } $role_name = get_entity($role_guid)->name; $ordered_extends[$order] = $role_name; } $ordered_extends = array_values($ordered_extends); if (!$current_role && roles_get_role_by_name($name)) { register_error(elgg_echo(PLUGIN_ID . ':edit:duplicate', array($name))); forward(REFERER); } if (elgg_instanceof($current_role, 'object', 'role')) { // Update existing role obejct $current_role->title = $title; $current_role->extends = $ordered_extends; if ($current_role->save()) { system_message(elgg_echo(PLUGIN_ID . ':edit:success', array($name))); $forward_url = $current_role->getURL(); } } else { $site = elgg_get_site_entity(); // Create new role object $new_role = new \ElggRole();
<?php namespace Elgg\Roles\UI; $role = roles_get_role_by_name(get_input('role', DEFAULT_ROLE)); echo '<h3>' . elgg_echo(PLUGIN_ID . ':users:in_role', array($role->title)) . '</h3>'; $list = elgg_list_entities_from_relationship(array('types' => 'user', 'relationship' => 'has_role', 'relationship_guid' => $role->guid, 'inverse_relationship' => true, 'pagination' => true)); if (!$list) { echo '<p>' . elgg_echo(PLUGIN_ID . ':users:none', array($role->title)) . '</p>'; } else { echo $list; }