foldershare-8.x-1.2/src/Entity/FolderShareViewsData.php
src/Entity/FolderShareViewsData.php
<?php
namespace Drupal\foldershare\Entity;
use Drupal\views\EntityViewsData;
/**
* Provides descriptive information to views for listing files and folders.
*
* The Drupal core "views" module uses views data to guide it in directly
* querying the entity type's table and interpreting the fields of data
* contained in the table.
*
* This class defines a single getViewsData() method that returns an array
* describing the entity's fields, along with multiple virtual fields and
* view field plugins.
*
* @ingroup foldershare
*
* @see \Drupal\foldershare\Entity\FolderShare
*/
class FolderShareViewsData extends EntityViewsData {
/**
* {@inheritdoc}
*/
public function getViewsData() {
//
// Views data for fields includes a large amount of information
// built and used by the Views module. Most of it internal information
// that should rarely be adjusted here.
//
// Principal values that may be adjusted here:
//
// - $data[TABLE][FIELD]['title'] - a short name shown in the 'Title'
// column of fields that may be added to a view.
//
// - $data[TABLE][FIELD]['label'] - a short name used as the suggested
// column title if the field is added to a view.
//
// - $data[TABLE][FIELD]['help'] - a description shown in the
// 'Description' column to the right of fields that may be added
// to a view.
//
//
//
// Define entity fields
// --------------------
// The parent class automatically provides definitions for all fields
// in the FolderShare entity type.
//
// 'title' values are initialized to the field's label.
//
// 'label' values are not set and default to 'title' unless set below.
//
// 'help' values are initialized to the field's description.
//
// Also note that the parent class invokes other modules, such as the
// Comment module, to add their own entity-related fields. The Comment
// module, for instance, adds a field for 'Add comment link'.
$data = parent::getViewsData();
//
// Get tables
// ----------
// Get the table names. This includes the main folder entity table,
// and the sub-tables used for variable-length lists of file IDs
// and user IDs. This also includes the special folder usage table.
$baseTable = FolderShare::BASE_TABLE;
$viewIdsTable = $baseTable . '__grantviewuids';
$authorIdsTable = $baseTable . '__grantauthoruids';
//
// Remove fields
// -------------
// The parent class automatically lists some fields that are internal
// and are not intended to be shown.
//
// See also FolderShareAccessControlHandler, which disables these same
// fields from all view access.
unset($data[$baseTable]['uuid']);
unset($data[$baseTable]['langcode']);
// The underlying File object, if any, has its own description field,
// which we do not use. Remove it too.
unset($data[$baseTable]['file__description']);
// The underlying File object can be shown as a link to the file.
// Unfortunately, this link bypasses our access controls and shows
// the file's raw file path. That file path doesn't have the proper
// file name or file name extension. Remove these.
unset($data[$baseTable]['file__target_id']);
unset($data[$baseTable]['file__display']);
//
// Remove extras
// -------------
// The parent class adds several helper fields:
// - 'Link to ...' - a link to the entity's view page.
// - 'Rendered entity' - the entire rendered entity.
// - 'Operations links' - a pull-down menu of actions per row.
//
// The rendered entity does not make sense here, since it includes a
// view of child entities. And that view could include rendered entities
// which add more embedded views, and so on to create an enormous
// nested mess. So remove this.
unset($data[$baseTable]['rendered_entity']);
// The operations links extras do not make sense here. They trigger
// actions, but FolderShare does not define any actions. Further, they
// create an alternate (and poor) user interface that
// collides with FolderShare's own interface. So remove this.
unset($data[$baseTable]['operations']);
//
// Clean up fields
// ---------------
// FolderShare's field names and descriptions from the base field
// definitions are brief and aimed at describing the field for an
// edit form, rather than how the field's values can be used in a
// view. Adjust the text.
//
// Not all fields require clean up, so this is not an exhaustive list.
//
// ID.
$data[$baseTable]['id']['help'] =
$this->t('The unique entity ID of the item.');
// UID (owner) field.
$data[$baseTable]['uid']['help'] =
$this->t("The item's owner. To get user fields for the owner (e.g. account name), add the \"Owner\" relationship to the view using the \"Advanced\" section.");
$data[$baseTable]['uid']['filter']['id'] = 'user_name';
$data[$baseTable]['uid']['relationship']['title'] =
$this->t('Owner');
$data[$baseTable]['uid']['relationship']['help'] =
$this->t("The item's owner.");
// Parent folder ID.
$data[$baseTable]['parentid']['relationship']['title'] =
$this->t('Parent folder');
$data[$baseTable]['parentid']['relationship']['label'] =
$this->t('Parent folder');
// Root item ID.
$data[$baseTable]['rootid']['relationship']['title'] =
$this->t('Top-level item');
$data[$baseTable]['rootid']['relationship']['label'] =
$this->t('Top-level item');
// Name field.
$data[$baseTable]['name']['help'] =
$this->t('The name of the item. For files and images, this is the full file name, including the name extension.');
// Description field.
$data[$baseTable]['description__value']['title'] =
$this->t('Description (unformatted)');
$data[$baseTable]['description__value']['help'] =
$this->t('The description of the item, without formatting.');
$data[$baseTable]['description__format']['title'] =
$this->t('Description (formatted)');
$data[$baseTable]['description__format']['help'] =
$this->t('The description of the item, with formatting.');
// Size field.
$data[$baseTable]['size']['help'] =
$this->t('The size of the item (in bytes). For folders, this is the sum of the sizes of all items within the folder and any subfolders.');
// Created date.
$data[$baseTable]['created']['title'] =
$this->t('Creation date');
$data[$baseTable]['created']['help'] =
$this->t('The date and time when the item was created.');
// Modified date.
$data[$baseTable]['changed']['title'] =
$this->t('Modification date');
$data[$baseTable]['changed']['help'] =
$this->t('The date and time when the item was last modified (a.k.a. changed date).');
// Kind.
$data[$baseTable]['kind']['help'] =
$this->t('The kind of item, such as "file", "image", "media", or "folder".');
// System disabled & hidden.
$data[$baseTable]['systemdisabled']['help'] =
$this->t('A TRUE/FALSE value indicating if the entity has been disabled by the system during special operations. This is normally only useful for site developers and site administrators.');
$data[$baseTable]['systemhidden']['help'] =
$this->t('A TRUE/FALSE value indicating if the entity has been hidden by the system during special operations. This is normally only useful for site developers and site administrators.');
// Author grants.
$data[$authorIdsTable]['grantauthoruids_target_id']['title'] =
$this->t('Users that can author');
$data[$authorIdsTable]['grantauthoruids_target_id']['help'] =
$this->t("The users granted author access to the item. The owner is always on this list.");
$data[$authorIdsTable]['grantauthoruids_target_id']['relationship']['title'] =
$this->t('Users that can author');
$data[$authorIdsTable]['grantauthoruids_target_id']['relationship']['label'] =
$this->t('Users that can author');
// Viewer grants.
$data[$viewIdsTable]['grantviewuids_target_id']['title'] =
$this->t('Users that can view');
$data[$viewIdsTable]['grantviewuids_target_id']['help'] =
$this->t("The users granted view access to the item. The owner is always on this list.");
$data[$viewIdsTable]['grantviewuids_target_id']['relationship']['title'] =
$this->t('Users that can view');
$data[$viewIdsTable]['grantviewuids_target_id']['relationship']['label'] =
$this->t('Users that can view');
//
// Image field.
// - The FolderShare module adds the 'image' field.
// - The Image module adds entries for the image field's subfields:
// - 'image__target_id' = the entity ID of the image.
// - 'image__alt' = the image's ALT text.
// - 'image__title' = the image title.
// - 'image__width' = the image width.
// - 'image__height' = the image height.
//
// Since FolderShare does not support setting the 'alt' or 'title' text
// of an image, unset these fields.
//
// The image width and height could be useful, but the Image module does
// not provide meaningful help text. Update the text.
//
// The help text for the FolderShare image field is also minimal. Update
// it for views.
if (isset($data[$baseTable]['image__target_id']) === TRUE) {
unset($data[$baseTable]['image__alt']);
unset($data[$baseTable]['image__title']);
$data[$baseTable]['image__target_id']['help'] =
$this->t('An image file within a folder. If the item is a folder, data file, or media entity, then this field will be empty. See also the "file" and "media" fields.');
$data[$baseTable]['image__width']['help'] =
$this->t('The width (in pixels) of an image file within a folder.');
$data[$baseTable]['image__height']['help'] =
$this->t('The height (in pixels) of an image file within a folder.');
}
//
// Media field.
// - The FolderShare module adds the 'media' field.
// - The Media module does not add any subfields.
//
// The help text for the FolderShare media field is minimal. Update it
// for views.
$data[$baseTable]['media']['help'] =
$this->t('A media item within a folder. If the item is a folder, data file, or image, then this field will be empty. See also the "image" and "file" fields.');
//
// Clean up extras
// ---------------
// A few of the extras added automatically by the parent class need
// some cleanup.
//
// For some reason, the link item added by the parent class sets the
// title and help in the underlying 'field' array, and ignores it when
// set normally. So we have to override that to get the text right.
$data[$baseTable]['view_foldershare']['title'] =
$data[$baseTable]['view_foldershare']['field']['title'] =
$this->t('Link to item');
$data[$baseTable]['view_foldershare']['help'] =
$data[$baseTable]['view_foldershare']['field']['help'] =
$this->t("A link to the item's page. For files, the page describes and presents the page. For folders, the page lists the folder's contents.");
//
// Add special data fields
// -----------------------
// To make it easier to show a date broken into multiple columns,
// define multiple date values with different formatting.
//
// Created date.
$data[$baseTable]['created_fulldate'] = [
'title' => $this->t('Created date'),
'help' => $this->t('The item creation date in the form of CCYYMMDD.'),
'argument' => [
'field' => 'created',
'id' => 'date_fulldate',
],
];
$data[$baseTable]['created_year_month'] = [
'title' => $this->t('Created year + month'),
'help' => $this->t('The item creation date in the form of YYYYMM.'),
'argument' => [
'field' => 'created',
'id' => 'date_year_month',
],
];
$data[$baseTable]['created_year'] = [
'title' => $this->t('Created year'),
'help' => $this->t('The item creation date in the form of YYYY.'),
'argument' => [
'field' => 'created',
'id' => 'date_year',
],
];
$data[$baseTable]['created_month'] = [
'title' => $this->t('Created month'),
'help' => $this->t('The item creation date in the form of MM (01 - 12).'),
'argument' => [
'field' => 'created',
'id' => 'date_month',
],
];
$data[$baseTable]['created_day'] = [
'title' => $this->t('Created day'),
'help' => $this->t('The item creation date in the form of DD (01 - 31).'),
'argument' => [
'field' => 'created',
'id' => 'date_day',
],
];
$data[$baseTable]['created_week'] = [
'title' => $this->t('Created week'),
'help' => $this->t('The item creation date in the form of WW (01 - 53).'),
'argument' => [
'field' => 'created',
'id' => 'date_week',
],
];
// Changed date.
$data[$baseTable]['changed_fulldate'] = [
'title' => $this->t('Modified date'),
'help' => $this->t('The item modified date in the form of CCYYMMDD.'),
'argument' => [
'field' => 'changed',
'id' => 'date_fulldate',
],
];
$data[$baseTable]['changed_year_month'] = [
'title' => $this->t('Modified year + month'),
'help' => $this->t('The item modified date in the form of YYYYMM.'),
'argument' => [
'field' => 'changed',
'id' => 'date_year_month',
],
];
$data[$baseTable]['changed_year'] = [
'title' => $this->t('Modified year'),
'help' => $this->t('The item modified date in the form of YYYY.'),
'argument' => [
'field' => 'changed',
'id' => 'date_year',
],
];
$data[$baseTable]['changed_month'] = [
'title' => $this->t('Modified month'),
'help' => $this->t('The item modified date in the form of MM (01 - 12).'),
'argument' => [
'field' => 'changed',
'id' => 'date_month',
],
];
$data[$baseTable]['changed_day'] = [
'title' => $this->t('Modified day'),
'help' => $this->t('The item modified date in the form of DD (01 - 31).'),
'argument' => [
'field' => 'changed',
'id' => 'date_day',
],
];
$data[$baseTable]['changed_week'] = [
'title' => $this->t('Modified week'),
'help' => $this->t('The item modified date in the form of WW (01 - 53).'),
'argument' => [
'field' => 'changed',
'id' => 'date_week',
],
];
return $data;
}
}
