Example #1
0
/**
 * Add a menu item to the user hover menu to allow admins to easily change role
 *
 * @param string $hook	Equals 'register'
 * @param string $type	Equals 'menu:user_hover'
 * @param array $menu	Current menu
 * @param array $params	Addiitonal params
 * @return array	Updated menu
 */
function user_hover_menu_setup($hook, $type, $menu, $params)
{
    $user = elgg_extract('entity', $params);
    if (!elgg_instanceof($user, 'user') || $user->isAdmin()) {
        return $menu;
    }
    if (!elgg_is_admin_logged_in()) {
        return $menu;
    }
    $role = roles_get_role($user);
    $menu[] = \ElggMenuItem::factory(array('name' => 'roles:set', 'text' => elgg_echo(PLUGIN_ID . ':set:role', array($role->title)), 'href' => 'ajax/view/roles/ajax/set?guid=' . $user->guid, 'data-guid' => $user->guid, 'section' => 'admin'));
    return $menu;
}
/**
 * Returns prototyped fields
 *
 * @param string $hook   "prototype"
 * @param string $type   "profile/edit"
 * @param array  $return Fields
 * @param array  $params Hook params
 * @return array
 */
function prototyper_profile_get_prototype_fields($hook, $type, $return, $params)
{
    $entity = elgg_extract('entity', $params);
    $role = false;
    if (elgg_is_active_plugin('roles')) {
        $role = roles_get_role($entity);
    }
    $role_name = $role ? $role->name : 'default';
    $prototype = elgg_get_plugin_setting("prototype:{$role_name}", 'prototyper_profile');
    if (!$prototype && $role_name != 'default') {
        $prototype = elgg_get_plugin_setting('prototype:default', 'prototyper_profile');
    }
    if ($prototype) {
        $prototype_fields = unserialize($prototype);
        $return = array_merge($return, $prototype_fields);
    } else {
        $fields = elgg_get_config('profile_fields');
        $return['name'] = ['type' => 'name', 'data_type' => 'attribute', 'label' => [get_current_language() => elgg_echo('user:name:label')], 'help' => false, 'validation_rules' => ['maxlength' => 50]];
        foreach ($fields as $shortname => $input_type) {
            $return[$shortname] = ['type' => $input_type, 'data_type' => 'metadata', 'label' => [get_current_language() => elgg_echo("profile:{$shortname}")], 'help' => false];
        }
    }
    return $return;
}
Example #3
0
/**
 * Processes event permissions from the role configuration array. Triggered by the 'ready','system' event.
 * This is to make sure that all plugins' init functions have been executed, and all event handlers have already been initialized
 * @return void
 */
function roles_events_permissions()
{
    $role = roles_get_role();
    if (!$role instanceof ElggRole) {
        return;
    }
    return roles()->setupEvents($role);
}
Example #4
0
/**
 *
 * Processes event permissions from the role configuration array. Triggered by the 'ready', 'system' event.
 * This is to make sure that all plugins' init functions have been executed, and all event handlers have already been initialized
 *
 * @param string $event Equals 'ready'
 * @param string $event_type Equals 'system'
 * @param mixed $object Not in use for this specific listener
 * @return boolean
 */
function roles_events_permissions($event, $type, $object)
{
    $role = roles_get_role();
    if (elgg_instanceof($role, 'object', 'role')) {
        $role_perms = roles_get_role_permissions($role, 'events');
        if (is_array($role_perms) && !empty($role_perms)) {
            foreach ($role_perms as $event => $perm_details) {
                list($event_name, $type) = explode('::', $event);
                if (!$type) {
                    $type = 'all';
                }
                switch ($perm_details['rule']) {
                    case 'deny':
                        $params = $perm_details['event'];
                        if (is_array($params)) {
                            $handler = $params['handler'];
                            elgg_unregister_event_handler($event_name, $type, $handler);
                        } else {
                            global $CONFIG;
                            unset($CONFIG->events[$event_name][$type]);
                        }
                        break;
                    case 'extend':
                        $params = $perm_details['event'];
                        $handler = $params['handler'];
                        $priority = isset($params['priority']) ? $params['priority'] : 500;
                        elgg_register_event_handler($event_name, $type, $handler, $priority);
                        break;
                    case 'replace':
                        $params = $perm_details['hook'];
                        $old_handler = $params['old_handler'];
                        $new_handler = $params['new_handler'];
                        $priority = isset($params['priority']) ? $params['priority'] : 500;
                        elgg_unregister_event_handler($event_name, $type, $old_handler);
                        elgg_register_event_handler($event_name, $type, $new_handler, $priority);
                        break;
                    case 'allow':
                    default:
                        break;
                }
            }
        }
    }
    return true;
}
Example #5
0
 /**
  * Replaces certain parts of path and URL type definitions with dynamic values
  *
  * @param string $str The string to operate on
  * @return string The updated, substituted string
  */
 public function replaceDynamicPaths($str)
 {
     $res = $str;
     $user = elgg_get_logged_in_user_entity();
     if ($user instanceof ElggUser) {
         $self_username = $user->username;
         $self_guid = $user->guid;
         $role = roles_get_role($user);
         $res = str_replace('{$self_username}', $self_username, $str);
         $res = str_replace('{$self_guid}', $self_guid, $res);
         if ($role instanceof ElggRole) {
             $res = str_replace('{$self_rolename}', $role->name, $res);
         }
     }
     // Safe way to get hold of the page owner before system, ready event
     $pageowner_guid = elgg_trigger_plugin_hook('page_owner', 'system', NULL, 0);
     $pageowner = get_entity($pageowner_guid);
     if ($pageowner instanceof ElggUser) {
         $pageowner_username = $pageowner->username;
         $pageowner_role = roles_get_role($pageowner);
         $res = str_replace('{$pageowner_name}', $pageowner_username, $res);
         $res = str_replace('{$pageowner_guid}', $pageowner_guid, $res);
         $res = str_replace('{$pageowner_rolename}', $pageowner_role->name, $res);
     }
     return $res;
 }
Example #6
0
<?php

/**
 * Provide a way of setting your language prefs
 *
 * @package Elgg
 * @subpackage Core
 */
$user = elgg_get_page_owner_entity();
$current_role = roles_get_role($user);
if ($current_role->isReservedRole()) {
    $current_role_name = NO_ROLE;
} else {
    $current_role_name = $current_role->name;
}
$roles_options = array(NO_ROLE => elgg_echo('roles:role:NO_ROLE'));
$all_roles = roles_get_all_selectable_roles();
if (is_array($all_roles) && !empty($all_roles)) {
    foreach ($all_roles as $role) {
        $roles_options[$role->name] = $role->getDisplayName();
    }
}
if (elgg_instanceof($user, 'user')) {
    ?>
	<div class="elgg-module elgg-module-info">
		<div class="elgg-head">
			<h3><?php 
    echo elgg_echo('user:set:role');
    ?>
</h3>
		</div>
Example #7
0
/**
 * Obtains a list of permissions associated with a particular role object
 *
 * @param ElggRole $role            The role to check for permissions
 * @param string   $permission_type The section from the configuration array ('actions', 'menus', 'views', etc.)
 * @return array The permission rules for the given role and permission type
 */
function roles_get_role_permissions($role = null, $permission_type = null)
{
    $role = isset($role) ? $role : roles_get_role();
    return roles()->getPermissions($role, $permission_type);
}
Example #8
0
/**
 * Page handler for CSV download
 *
 * @param array $page
 */
function upload_users_page_handler($page)
{
    admin_gatekeeper();
    switch ($page[0]) {
        default:
            return false;
        case 'report':
            $file_guid = get_input("guid");
            $file = get_entity($file_guid);
            if (!$file) {
                register_error(elgg_echo('upload_users:error:file_open_error'));
                forward("admin/users/upload");
            }
            header("Pragma: public");
            header("Content-type: text/csv");
            header("Content-Disposition: attachment; filename=\"{$file->originalfilename}\"");
            ob_clean();
            flush();
            readfile($file->getFilenameOnFilestore());
            exit;
            break;
        case 'sample':
            set_time_limit(0);
            $limit = get_input('limit', 20);
            $offset = get_input('offset', 0);
            $fileName = 'upload_users_sample.csv';
            header('Content-Description: File Transfer');
            header("Content-type: text/csv");
            header("Content-Disposition: attachment; filename={$fileName}");
            header('Expires: ' . gmdate('D, d M Y H:i:s \\G\\M\\T', strtotime("+1 day")), true);
            header("Pragma: public");
            $dbprefix = elgg_get_config('dbprefix');
            $query = "SELECT DISTINCT(md.name_id) FROM {$dbprefix}metadata md\n\t\t\t\t\tJOIN {$dbprefix}entities e ON md.entity_guid = e.guid\n\t\t\t\t\tWHERE e.type = 'user'";
            $md_names = get_data($query);
            foreach ($md_names as $md_name) {
                $string = get_metastring($md_name->name_id);
                if ($string && !is_int($string) && !in_array($string, array('name', 'username', 'password', 'email', 'user_upload_role'))) {
                    $md[] = $string;
                }
            }
            $results = array();
            $options = array('types' => 'user', 'limit' => $limit, 'offset' => $offset, 'order_by' => 'e.time_created ASC');
            $batch = new ElggBatch('elgg_get_entities', $options);
            foreach ($batch as $user) {
                $results[$user->guid] = array('name' => $user->name, 'username' => $user->username, 'password' => '', 'email' => $user->email, 'user_upload_role' => elgg_is_active_plugin('roles') ? roles_get_role()->name : null);
                foreach ($md as $string) {
                    $value = $user->{$string};
                    if (is_array($value)) {
                        $value = implode(', ', $value);
                    }
                    $results[$user->guid][$string] = $value;
                }
            }
            $fh = @fopen('php://output', 'w');
            $headerDisplayed = false;
            foreach ($results as $data) {
                // Add a header row if it hasn't been added yet
                if (!$headerDisplayed) {
                    // Use the keys from $data as the titles
                    fputcsv($fh, array_keys($data));
                    $headerDisplayed = true;
                }
                // Put the data into the stream
                fputcsv($fh, $data);
            }
            fclose($fh);
            exit;
            break;
    }
}