/** * 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; }
/** * 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); }
/** * * 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; }
/** * 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; }
<?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>
/** * 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); }
/** * 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; } }