Esempio n. 1
0
/**
 * 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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
/**
 * 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);
        }
    }
}
Esempio n. 4
0
/**
 *
 * 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;
}
Esempio n. 5
0
/**
 * 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;
        }
    }
}
Esempio n. 6
0
/**
 * 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})"));
}
Esempio n. 7
0
<?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()) {
Esempio n. 8
0
/**
 * 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;
}
Esempio n. 9
0
$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();
Esempio n. 10
0
<?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;
}