2015-08-17 17:00:26 -07:00
< ? php
/**
* @ file
* Builds placeholder replacement tokens for user - related data .
*/
2015-08-27 12:03:05 -07:00
use Drupal\Core\Datetime\Entity\DateFormat ;
use Drupal\Core\Render\BubbleableMetadata ;
2015-08-17 17:00:26 -07:00
use Drupal\user\Entity\User ;
/**
* Implements hook_token_info () .
*/
function user_token_info () {
2017-04-13 15:53:35 +01:00
$types [ 'user' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Users' ),
'description' => t ( 'Tokens related to individual user accounts.' ),
'needs-data' => 'user' ,
2017-04-13 15:53:35 +01:00
];
$types [ 'current-user' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Current user' ),
'description' => t ( 'Tokens related to the currently logged in user.' ),
'type' => 'user' ,
2017-04-13 15:53:35 +01:00
];
2015-08-17 17:00:26 -07:00
2017-04-13 15:53:35 +01:00
$user [ 'uid' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'User ID' ),
'description' => t ( " The unique ID of the user account. " ),
2017-04-13 15:53:35 +01:00
];
$user [ 'name' ] = [
2015-10-08 11:40:12 -07:00
'name' => t ( " Deprecated: User Name " ),
'description' => t ( " Deprecated: Use account-name or display-name instead. " ),
2017-04-13 15:53:35 +01:00
];
$user [ 'account-name' ] = [
2015-10-08 11:40:12 -07:00
'name' => t ( " Account Name " ),
2015-08-17 17:00:26 -07:00
'description' => t ( " The login name of the user account. " ),
2017-04-13 15:53:35 +01:00
];
$user [ 'display-name' ] = [
2015-10-08 11:40:12 -07:00
'name' => t ( " Display Name " ),
'description' => t ( " The display name of the user account. " ),
2017-04-13 15:53:35 +01:00
];
$user [ 'mail' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( " Email " ),
'description' => t ( " The email address of the user account. " ),
2017-04-13 15:53:35 +01:00
];
$user [ 'url' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( " URL " ),
'description' => t ( " The URL of the account profile page. " ),
2017-04-13 15:53:35 +01:00
];
$user [ 'edit-url' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( " Edit URL " ),
'description' => t ( " The URL of the account edit page. " ),
2017-04-13 15:53:35 +01:00
];
2015-08-17 17:00:26 -07:00
2017-04-13 15:53:35 +01:00
$user [ 'last-login' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( " Last login " ),
'description' => t ( " The date the user last logged in to the site. " ),
'type' => 'date' ,
2017-04-13 15:53:35 +01:00
];
$user [ 'created' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( " Created " ),
'description' => t ( " The date the user account was created. " ),
'type' => 'date' ,
2017-04-13 15:53:35 +01:00
];
2015-08-17 17:00:26 -07:00
2017-04-13 15:53:35 +01:00
return [
2015-08-17 17:00:26 -07:00
'types' => $types ,
2017-04-13 15:53:35 +01:00
'tokens' => [ 'user' => $user ],
];
2015-08-17 17:00:26 -07:00
}
/**
* Implements hook_tokens () .
*/
2015-08-27 12:03:05 -07:00
function user_tokens ( $type , $tokens , array $data , array $options , BubbleableMetadata $bubbleable_metadata ) {
2015-08-17 17:00:26 -07:00
$token_service = \Drupal :: token ();
2017-04-13 15:53:35 +01:00
$url_options = [ 'absolute' => TRUE ];
2015-08-17 17:00:26 -07:00
if ( isset ( $options [ 'langcode' ])) {
$url_options [ 'language' ] = \Drupal :: languageManager () -> getLanguage ( $options [ 'langcode' ]);
$langcode = $options [ 'langcode' ];
}
else {
$langcode = NULL ;
}
2017-04-13 15:53:35 +01:00
$replacements = [];
2015-08-17 17:00:26 -07:00
if ( $type == 'user' && ! empty ( $data [ 'user' ])) {
2015-08-27 12:03:05 -07:00
/** @var \Drupal\user\UserInterface $account */
2015-08-17 17:00:26 -07:00
$account = $data [ 'user' ];
foreach ( $tokens as $name => $original ) {
switch ( $name ) {
// Basic user account information.
case 'uid' :
// In the case of hook user_presave uid is not set yet.
$replacements [ $original ] = $account -> id () ? : t ( 'not yet assigned' );
break ;
2015-10-08 11:40:12 -07:00
case 'display-name' :
$replacements [ $original ] = $account -> getDisplayName ();
if ( $account -> isAnonymous ()) {
$bubbleable_metadata -> addCacheableDependency ( \Drupal :: config ( 'user.settings' ));
}
break ;
2015-08-17 17:00:26 -07:00
case 'name' :
2015-10-08 11:40:12 -07:00
case 'account-name' :
$display_name = $account -> getAccountName ();
$replacements [ $original ] = $display_name ;
2015-08-27 12:03:05 -07:00
if ( $account -> isAnonymous ()) {
$bubbleable_metadata -> addCacheableDependency ( \Drupal :: config ( 'user.settings' ));
}
2015-08-17 17:00:26 -07:00
break ;
case 'mail' :
2015-10-08 11:40:12 -07:00
$replacements [ $original ] = $account -> getEmail ();
2015-08-17 17:00:26 -07:00
break ;
case 'url' :
$replacements [ $original ] = $account -> id () ? $account -> url ( 'canonical' , $url_options ) : t ( 'not yet assigned' );
break ;
case 'edit-url' :
$replacements [ $original ] = $account -> id () ? $account -> url ( 'edit-form' , $url_options ) : t ( 'not yet assigned' );
break ;
// These tokens are default variations on the chained tokens handled below.
case 'last-login' :
2015-08-27 12:03:05 -07:00
$date_format = DateFormat :: load ( 'medium' );
$bubbleable_metadata -> addCacheableDependency ( $date_format );
2015-08-17 17:00:26 -07:00
$replacements [ $original ] = $account -> getLastLoginTime () ? format_date ( $account -> getLastLoginTime (), 'medium' , '' , NULL , $langcode ) : t ( 'never' );
break ;
case 'created' :
2015-08-27 12:03:05 -07:00
$date_format = DateFormat :: load ( 'medium' );
$bubbleable_metadata -> addCacheableDependency ( $date_format );
2015-08-17 17:00:26 -07:00
// In the case of user_presave the created date may not yet be set.
$replacements [ $original ] = $account -> getCreatedTime () ? format_date ( $account -> getCreatedTime (), 'medium' , '' , NULL , $langcode ) : t ( 'not yet created' );
break ;
}
}
if ( $login_tokens = $token_service -> findWithPrefix ( $tokens , 'last-login' )) {
2017-04-13 15:53:35 +01:00
$replacements += $token_service -> generate ( 'date' , $login_tokens , [ 'date' => $account -> getLastLoginTime ()], $options , $bubbleable_metadata );
2015-08-17 17:00:26 -07:00
}
if ( $registered_tokens = $token_service -> findWithPrefix ( $tokens , 'created' )) {
2017-04-13 15:53:35 +01:00
$replacements += $token_service -> generate ( 'date' , $registered_tokens , [ 'date' => $account -> getCreatedTime ()], $options , $bubbleable_metadata );
2015-08-17 17:00:26 -07:00
}
}
if ( $type == 'current-user' ) {
$account = User :: load ( \Drupal :: currentUser () -> id ());
2015-08-27 12:03:05 -07:00
$bubbleable_metadata -> addCacheContexts ([ 'user' ]);
2017-04-13 15:53:35 +01:00
$replacements += $token_service -> generate ( 'user' , $tokens , [ 'user' => $account ], $options , $bubbleable_metadata );
2015-08-17 17:00:26 -07:00
}
return $replacements ;
}