209     if (!isset(
$CONFIG->minusername)) {
 
  214         $msg = 
elgg_echo(
'registration:usernametooshort', array(
$CONFIG->minusername));
 
  215         throw new \RegistrationException($msg);
 
  220         $msg = 
elgg_echo(
'registration:usernametoolong', array(128));
 
  221         throw new \RegistrationException($msg);
 
  226         '\x{0080}-\x{009f}' . 
 
  228         '\x{2000}-\x{200f}' . 
 
  229         '\x{2028}-\x{202f}' . 
 
  231         '\x{e000}-\x{f8ff}' . 
 
  236         throw new \RegistrationException(
elgg_echo(
'registration:invalidchars'));
 
  241     $blacklist2 = 
'\'/\\
"*& ?#%^(){}[]~?<>;|¬`@+='; 
  243     $blacklist2 = elgg_trigger_plugin_hook('username:character_blacklist', 'user', 
  244         array('blacklist' => $blacklist2), $blacklist2); 
  246     for ($n = 0; $n < strlen($blacklist2); $n++) { 
  247         if (strpos($username, $blacklist2[$n]) !== false) { 
  248             $msg = elgg_echo('registration:invalidchars', array($blacklist2[$n], $blacklist2)); 
  249             $msg = htmlspecialchars($msg, ENT_QUOTES, 'UTF-8'); 
  250             throw new \RegistrationException($msg); 
  255     return elgg_trigger_plugin_hook('registeruser:validate:username', 'all', 
  256         array('username' => $username), $result); 
  267 function validate_password($password) { 
  270     if (!isset($CONFIG->min_password_length)) { 
  271         $CONFIG->min_password_length = 6; 
  274     if (strlen($password) < $CONFIG->min_password_length) { 
  275         $msg = elgg_echo('registration:passwordtooshort', array($CONFIG->min_password_length)); 
  276         throw new \RegistrationException($msg); 
  280     return elgg_trigger_plugin_hook('registeruser:validate:password', 'all', 
  281         array('password' => $password), $result); 
  292 function validate_email_address($address) { 
  293     if (!is_email_address($address)) { 
  294         throw new \RegistrationException(elgg_echo('registration:notemail')); 
  297     // Got here, so lets try a hook (defaulting to ok) 
  299     return elgg_trigger_plugin_hook('registeruser:validate:email', 'all', 
  300         array('email' => $address), $result); 
  316 function register_user($username, $password, $name, $email, $allow_multiple_emails = false) { 
  317     return _elgg_services()->usersTable->register($username, $password, $name, $email, $allow_multiple_emails); 
  328 function generate_invite_code($username) { 
  329     return _elgg_services()->usersTable->generateInviteCode($username); 
  342 function elgg_validate_invite_code($username, $code) { 
  343     return _elgg_services()->usersTable->validateInviteCode($username, $code); 
  355 function elgg_set_user_validation_status($user_guid, $status, $method = '') { 
  356     return _elgg_services()->usersTable->setValidationStatus($user_guid, $status, $method); 
  366 function elgg_get_user_validation_status($user_guid) { 
  367     return _elgg_services()->usersTable->getValidationStatus($user_guid); 
  379 function elgg_user_account_page_handler($page_elements, $handler) { 
  381     $base_dir = elgg_get_root_path() . 'pages/account'; 
  384             require_once("$base_dir/
login.php
"); 
  386         case 'forgotpassword': 
  387             require_once("$base_dir/forgotten_password.php
"); 
  389         case 'changepassword': 
  390             require_once("$base_dir/change_password.php
"); 
  393             require_once("$base_dir/
register.php
"); 
  408 function set_last_action($user_guid) { 
  409     _elgg_services()->usersTable->setLastAction($user_guid); 
  419 function set_last_login($user_guid) { 
  420     _elgg_services()->usersTable->setLastLogin($user_guid); 
  433 function user_create_hook_add_site_relationship($event, $object_type, $object) { 
  434     add_entity_relationship($object->getGUID(), 'member_of_site', elgg_get_site_entity()->guid); 
  447 function user_avatar_hook($hook, $entity_type, $returnvalue, $params) { 
  448     $user = $params['entity']; 
  449     $size = $params['size']; 
  451     if (isset($user->icontime)) { 
  454         return "_graphics/icons/
user/
default{
$size}.gif
"; 
  462 function elgg_user_hover_menu($hook, $type, $return, $params) { 
  463     $user = elgg_extract('entity', $params); 
  464     /* @var \ElggUser $user */ 
  466     if (!$user instanceof \ElggUser) { 
  470     if (!elgg_is_logged_in()) { 
  474     if (elgg_get_logged_in_user_guid() == $user->guid) { 
  476         $item = new \ElggMenuItem('profile:edit', elgg_echo('profile:edit'), $url); 
  477         $item->setSection('action'); 
  481         $item = new \ElggMenuItem('avatar:edit', elgg_echo('avatar:edit'), $url); 
  482         $item->setSection('action'); 
  486     // prevent admins from banning or deleting themselves 
  487     if (elgg_get_logged_in_user_guid() == $user->guid) { 
  491     if (elgg_is_admin_logged_in()) { 
  493         if (!$user->isBanned()) { 
  496             $actions[] = 'unban'; 
  498         $actions[] = 'delete'; 
  499         $actions[] = 'resetpassword'; 
  500         if (!$user->isAdmin()) { 
  501             $actions[] = 'makeadmin'; 
  503             $actions[] = 'removeadmin'; 
  506         foreach ($actions as $action) { 
  508             $url = elgg_add_action_tokens_to_url($url); 
  509             $item = new \ElggMenuItem($action, elgg_echo($action), $url); 
  510             $item->setSection('admin'); 
  511             $item->setConfirmText(true); 
  517         $item = new \ElggMenuItem('profile:edit', elgg_echo('profile:edit'), $url); 
  518         $item->setSection('admin'); 
  522         $item = new \ElggMenuItem('avatar:edit', elgg_echo('avatar:edit'), $url); 
  523         $item->setSection('admin'); 
  527         $item = new \ElggMenuItem('settings:edit', elgg_echo('settings:edit'), $url); 
  528         $item->setSection('admin'); 
  531         $url = "activity/owner/
$user->username
"; 
  532         $item = new \ElggMenuItem('activity:owner', elgg_echo('activity:owner'), $url); 
  533         $item->setSection('action'); 
  551 function elgg_users_setup_entity_menu($hook, $type, $return, $params) { 
  552     if (elgg_in_context('widgets')) { 
  556     $entity = $params['entity']; 
  557     if (!elgg_instanceof($entity, 'user')) { 
  560     /* @var \ElggUser $entity */ 
  562     if ($entity->isBanned()) { 
  563         $banned = elgg_echo('banned'); 
  570         $return = array(\ElggMenuItem::factory($options)); 
  573         $location = $entity->location; 
  574         if (is_string($location) && $location !== '') { 
  575             $location = htmlspecialchars($location, ENT_QUOTES, 'UTF-8', false); 
  577                 'name' => 'location', 
  582             $return[] = \ElggMenuItem::factory($options); 
  597 function elgg_profile_fields_setup() { 
  600     $profile_defaults = array ( 
  601         'description' => 'longtext', 
  602         'briefdescription' => 'text', 
  603         'location' => 'location', 
  604         'interests' => 'tags', 
  606         'contactemail' => 'email', 
  613     $loaded_defaults = array(); 
  614     $fieldlist = elgg_get_config('profile_custom_fields'); 
  615     if ($fieldlist || $fieldlist === '0') { 
  616         $fieldlistarray = explode(',', $fieldlist); 
  617         foreach ($fieldlistarray as $listitem) { 
  618             if ($translation = elgg_get_config("admin_defined_profile_{$listitem}
")) { 
  619                 $type = elgg_get_config("admin_defined_profile_type_{$listitem}
"); 
  620                 $loaded_defaults["admin_defined_profile_{$listitem}
"] = $type; 
  621                 add_translation(get_current_language(), array("profile:admin_defined_profile_{$listitem}
" => $translation)); 
  626     if (count($loaded_defaults)) { 
  627         $CONFIG->profile_using_custom = true; 
  628         $profile_defaults = $loaded_defaults; 
  631     $CONFIG->profile_fields = elgg_trigger_plugin_hook('profile:fields', 'profile', null, $profile_defaults); 
  633     // register any tag metadata names 
  634     foreach ($CONFIG->profile_fields as $name => $type) { 
  635         if ($type == 'tags' || $type == 'location' || $type == 'tag') { 
  636             elgg_register_tag_metadata_name($name); 
  637             // register a tag name translation 
  638             add_translation(get_current_language(), array("tag_names:
$name" => elgg_echo("profile:
$name"))); 
  653 function elgg_avatar_page_handler($page) { 
  656     $user = get_user_by_username($page[1]); 
  658         elgg_set_page_owner_guid($user->getGUID()); 
  661     if ($page[0] == 'edit') { 
  662         require_once("{
$CONFIG->path}pages/avatar/
edit.php
"); 
  665         set_input('size', $page[2]); 
  666         require_once("{
$CONFIG->path}pages/avatar/
view.php
"); 
  679 function elgg_profile_page_handler($page) { 
  682     $user = get_user_by_username($page[0]); 
  683     elgg_set_page_owner_guid($user->guid); 
  685     if ($page[1] == 'edit') { 
  686         require_once("{
$CONFIG->path}pages/profile/
edit.php
"); 
  698 function users_pagesetup() { 
  700     $owner = elgg_get_page_owner_entity(); 
  701     $viewer = elgg_get_logged_in_user_entity(); 
  704         elgg_register_menu_item('page', array( 
  705             'name' => 'edit_avatar', 
  707             'text' => elgg_echo('avatar:edit'), 
  708             'section' => '1_profile', 
  709             'contexts' => array('settings'), 
  712         elgg_register_menu_item('page', array( 
  713             'name' => 'edit_profile', 
  715             'text' => elgg_echo('profile:edit'), 
  716             'section' => '1_profile', 
  717             'contexts' => array('settings'), 
  723         elgg_register_menu_item('topbar', array( 
  724             'name' => 'usersettings', 
  726             'text' => elgg_view_icon('settings') . elgg_echo('settings'), 
  731         elgg_register_menu_item('topbar', array( 
  734             'text' => elgg_echo('logout'), 
  748 function users_init() { 
  750     elgg_register_page_handler('register', 'elgg_user_account_page_handler'); 
  751     elgg_register_page_handler('forgotpassword', 'elgg_user_account_page_handler'); 
  752     elgg_register_page_handler('changepassword', 'elgg_user_account_page_handler'); 
  753     elgg_register_page_handler('login', 'elgg_user_account_page_handler'); 
  754     elgg_register_page_handler('avatar', 'elgg_avatar_page_handler'); 
  755     elgg_register_page_handler('profile', 'elgg_profile_page_handler'); 
  757     elgg_register_plugin_hook_handler('register', 'menu:user_hover', 'elgg_user_hover_menu'); 
  759     elgg_register_action('register', '', 'public'); 
  760     elgg_register_action('useradd', '', 'admin'); 
  761     elgg_register_action('avatar/upload'); 
  762     elgg_register_action('avatar/crop'); 
  763     elgg_register_action('avatar/remove'); 
  764     elgg_register_action('profile/edit'); 
  766     elgg_register_plugin_hook_handler('entity:icon:url', 'user', 'user_avatar_hook'); 
  768     elgg_register_action('user/changepassword', '', 'public'); 
  769     elgg_register_action('user/requestnewpassword', '', 'public'); 
  771     // Register the user type 
  772     elgg_register_entity_type('user', ''); 
  774     elgg_register_plugin_hook_handler('register', 'menu:entity', 'elgg_users_setup_entity_menu', 501); 
  776     elgg_register_event_handler('create', 'user', 'user_create_hook_add_site_relationship'); 
  790 function users_test($hook, $type, $value, $params) { 
  792     $value[] = "{
$CONFIG->path}engine/tests/ElggUserTest.php
"; 
  796 return function(\Elgg\EventsService $events, \Elgg\HooksRegistrationService $hooks) { 
  797     $events->registerHandler('init', 'system', 'users_init', 0); 
  798     $events->registerHandler('init', 'system', 'elgg_profile_fields_setup', 10000); // Ensure this runs after other plugins 
  799     $events->registerHandler('pagesetup', 'system', 'users_pagesetup', 0); 
  800     $hooks->registerHandler('unit_test', 'system', 'users_test'); 
if($guid==elgg_get_logged_in_user_guid()) $name
 
$user_guid
Avatar remove action.
 
const CHARS_PASSWORD
Character set for temp passwords (no risk of embedded profanity/glyphs that look similar)
 
$CONFIG view
The current view type.
 
$guid
Removes an admin notice.
 
elgg_echo($message_key, $args=array(), $language="")
Given a message key, returns an appropriately translated full-text string.
 
login(\ElggUser $user, $persistent=false)
Logs in a specified \ElggUser.
 
logout()
Log the current user out.
 
get_user_by_code($hash)
Get user by persistent login password.
 
force_user_password_reset($user_guid, $password)
Low level function to reset a given user's password.
 
unban_user($user_guid)
Unban a user.
 
get_user_entity_as_row($guid)
Return the user specific details of a user by a row.
 
disable_user_entities($owner_guid)
Disables all of a user's entities.
 
execute_new_password_request($user_guid, $conf_code, $password=null)
Validate and change password for a user.
 
get_user_by_email($email)
Get an array of users from an email address.
 
get_user($guid)
Get a user object from a GUID.
 
find_active_users($options=array(), $limit=10, $offset=0, $count=false)
Return users (or the number of them) who have been active within a recent period.
 
generate_random_cleartext_password()
Generate a random 12 character clear text password.
 
validate_username($username)
Simple function which ensures that a username contains only valid characters.
 
get_user_by_username($username)
Get user by username.
 
send_new_password_request($user_guid)
Generate and send a password request email to a given user's registered email address.
 
make_user_admin($user_guid)
Makes user $guid an admin.
 
remove_user_admin($user_guid)
Removes user $guid's admin flag.
 
ban_user($user_guid, $reason="")
Ban a user.
 
elgg button elgg button action