2015-08-27 12:03:05 -07:00
< ? php
/**
* @ file
* Provides views data for the datetime module .
*/
use Drupal\field\FieldStorageConfigInterface ;
/**
* Implements hook_field_views_data () .
*/
function datetime_field_views_data ( FieldStorageConfigInterface $field_storage ) {
2018-11-23 12:29:20 +00:00
return datetime_type_field_views_data_helper ( $field_storage , [], $field_storage -> getMainPropertyName ());
}
/**
* Provides Views integration for any datetime - based fields .
*
* Overrides the default Views data for datetime - based fields , adding datetime
* views plugins . Modules defining new datetime - based fields may use this
* function to simplify Views integration .
*
* @ param \Drupal\field\FieldStorageConfigInterface $field_storage
* The field storage config entity .
* @ param array $data
* Field view data or views_field_default_views_data ( $field_storage ) if empty .
* @ param string $column_name
* The schema column name with the datetime value .
*
* @ return array
* The array of field views data with the datetime plugin .
*
* @ see datetime_field_views_data ()
* @ see datetime_range_field_views_data ()
*/
function datetime_type_field_views_data_helper ( FieldStorageConfigInterface $field_storage , array $data , $column_name ) {
2015-08-27 12:03:05 -07:00
// @todo This code only covers configurable fields, handle base table fields
// in https://www.drupal.org/node/2489476.
2018-11-23 12:29:20 +00:00
$data = empty ( $data ) ? views_field_default_views_data ( $field_storage ) : $data ;
2015-08-27 12:03:05 -07:00
foreach ( $data as $table_name => $table_data ) {
// Set the 'datetime' filter type.
2018-11-23 12:29:20 +00:00
$data [ $table_name ][ $field_storage -> getName () . '_' . $column_name ][ 'filter' ][ 'id' ] = 'datetime' ;
2015-08-27 12:03:05 -07:00
// Set the 'datetime' argument type.
2018-11-23 12:29:20 +00:00
$data [ $table_name ][ $field_storage -> getName () . '_' . $column_name ][ 'argument' ][ 'id' ] = 'datetime' ;
2015-08-27 12:03:05 -07:00
// Create year, month, and day arguments.
2018-11-23 12:29:20 +00:00
$group = $data [ $table_name ][ $field_storage -> getName () . '_' . $column_name ][ 'group' ];
2015-08-27 12:03:05 -07:00
$arguments = [
// Argument type => help text.
'year' => t ( 'Date in the form of YYYY.' ),
2016-04-20 09:56:34 -07:00
'month' => t ( 'Date in the form of MM (01 - 12).' ),
'day' => t ( 'Date in the form of DD (01 - 31).' ),
'week' => t ( 'Date in the form of WW (01 - 53).' ),
'year_month' => t ( 'Date in the form of YYYYMM.' ),
'full_date' => t ( 'Date in the form of CCYYMMDD.' ),
2015-08-27 12:03:05 -07:00
];
foreach ( $arguments as $argument_type => $help_text ) {
2018-11-23 12:29:20 +00:00
$column_name_text = $column_name === $field_storage -> getMainPropertyName () ? '' : ':' . $column_name ;
$data [ $table_name ][ $field_storage -> getName () . '_' . $column_name . '_' . $argument_type ] = [
'title' => t ( '@label@column (@argument)' , [
'@label' => $field_storage -> getLabel (),
'@column' => $column_name_text ,
'@argument' => $argument_type ,
]),
2015-08-27 12:03:05 -07:00
'help' => $help_text ,
'argument' => [
2018-11-23 12:29:20 +00:00
'field' => $field_storage -> getName () . '_' . $column_name ,
2015-08-27 12:03:05 -07:00
'id' => 'datetime_' . $argument_type ,
2018-11-23 12:29:20 +00:00
'entity_type' => $field_storage -> getTargetEntityTypeId (),
'field_name' => $field_storage -> getName (),
2015-08-27 12:03:05 -07:00
],
'group' => $group ,
];
}
// Set the 'datetime' sort handler.
2018-11-23 12:29:20 +00:00
$data [ $table_name ][ $field_storage -> getName () . '_' . $column_name ][ 'sort' ][ 'id' ] = 'datetime' ;
2015-08-27 12:03:05 -07:00
}
return $data ;
}