2015-08-17 17:00:26 -07:00
< ? php
/**
* @ file
* Token integration for the views module .
*/
2015-08-27 12:03:05 -07:00
use Drupal\Core\Render\BubbleableMetadata ;
2015-08-17 17:00:26 -07:00
/**
* Implements hook_token_info () .
*/
function views_token_info () {
2017-04-13 15:53:35 +01:00
$info [ 'types' ][ 'view' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'View' , [], [ 'context' => 'View entity type' ]),
'description' => t ( 'Tokens related to views.' ),
'needs-data' => 'view' ,
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'label' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Label' ),
'description' => t ( 'The label of the view.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'description' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Description' ),
'description' => t ( 'The description of the view.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'id' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'ID' ),
'description' => t ( 'The machine-readable ID of the view.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'title' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Title' ),
'description' => t ( 'The title of current display of the view.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'url' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'URL' ),
'description' => t ( 'The URL of the view.' ),
'type' => 'url' ,
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'base-table' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Base table' ),
'description' => t ( 'The base table used for this view.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'base-field' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Base field' ),
'description' => t ( 'The base field used for this view.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'total-rows' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Total rows' ),
'description' => t ( 'The total amount of results returned from the view. The current display will be used.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'items-per-page' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Items per page' ),
'description' => t ( 'The number of items per page.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'current-page' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Current page' ),
'description' => t ( 'The current page of results the view is on.' ),
2017-04-13 15:53:35 +01:00
];
$info [ 'tokens' ][ 'view' ][ 'page-count' ] = [
2015-08-17 17:00:26 -07:00
'name' => t ( 'Page count' ),
'description' => t ( 'The total page count.' ),
2017-04-13 15:53:35 +01:00
];
2015-08-17 17:00:26 -07:00
return $info ;
}
/**
* Implements hook_tokens () .
*/
2015-08-27 12:03:05 -07:00
function views_tokens ( $type , $tokens , array $data , array $options , BubbleableMetadata $bubbleable_metadata ) {
2017-04-13 15:53:35 +01:00
$url_options = [ 'absolute' => TRUE ];
2015-08-17 17:00:26 -07:00
if ( isset ( $options [ 'language' ])) {
$url_options [ 'language' ] = $options [ 'language' ];
}
2017-04-13 15:53:35 +01:00
$replacements = [];
2015-08-17 17:00:26 -07:00
if ( $type == 'view' && ! empty ( $data [ 'view' ])) {
/** @var \Drupal\views\ViewExecutable $view */
$view = $data [ 'view' ];
2015-08-27 12:03:05 -07:00
$bubbleable_metadata -> addCacheableDependency ( $view -> storage );
2015-08-17 17:00:26 -07:00
foreach ( $tokens as $name => $original ) {
switch ( $name ) {
case 'label' :
2015-10-08 11:40:12 -07:00
$replacements [ $original ] = $view -> storage -> label ();
2015-08-17 17:00:26 -07:00
break ;
case 'description' :
2015-10-08 11:40:12 -07:00
$replacements [ $original ] = $view -> storage -> get ( 'description' );
2015-08-17 17:00:26 -07:00
break ;
case 'id' :
$replacements [ $original ] = $view -> storage -> id ();
break ;
case 'title' :
$title = $view -> getTitle ();
2015-10-08 11:40:12 -07:00
$replacements [ $original ] = $title ;
2015-08-17 17:00:26 -07:00
break ;
case 'url' :
2016-11-02 11:43:31 -07:00
try {
if ( $url = $view -> getUrl ()) {
$replacements [ $original ] = $url -> setOptions ( $url_options )
-> toString ();
}
}
catch ( \InvalidArgumentException $e ) {
// The view has no URL so we leave the value empty.
$replacements [ $original ] = '' ;
2015-08-17 17:00:26 -07:00
}
break ;
case 'base-table' :
$replacements [ $original ] = $view -> storage -> get ( 'base_table' );
break ;
case 'base-field' :
$replacements [ $original ] = $view -> storage -> get ( 'base_field' );
break ;
case 'total-rows' :
2017-04-13 15:53:35 +01:00
$replacements [ $original ] = ( int ) $view -> total_rows ;
2015-08-17 17:00:26 -07:00
break ;
case 'items-per-page' :
$replacements [ $original ] = ( int ) $view -> getItemsPerPage ();
break ;
case 'current-page' :
$replacements [ $original ] = ( int ) $view -> getCurrentPage () + 1 ;
break ;
case 'page-count' :
// If there are no items per page, set this to 1 for the division.
$per_page = $view -> getItemsPerPage () ? : 1 ;
2017-04-13 15:53:35 +01:00
$replacements [ $original ] = max ( 1 , ( int ) ceil ( $view -> total_rows / $per_page ));
2015-08-17 17:00:26 -07:00
break ;
}
}
}
return $replacements ;
}