/** * @param ContentEntityTypeInterface $entity * @return array */ public function getViewsData(ContentEntityTypeInterface $entity = NULL) { $data = parent::getViewsData(); if ($entity) { // Get some info to work off. /** @var string $entity_table */ $entity_table = $entity->get('base_table'); /** @var string $entity_data_table */ $entity_data_table = $entity->get('data_table'); /** @var string $entity_revision_table */ $entity_revision_table = $entity->get('revision_table'); // Replacements for all strings. $replacements = ['@entity_label' => $entity->getLabel(), '!entity_id' => $entity->id()]; if (!empty($entity_data_table)) { // Add the entity ID field. $data[$entity_data_table]['id']['field']['id'] = 'field'; // Add entity info. $data[$entity_data_table]['info']['field']['id'] = 'field'; $data[$entity_data_table]['info']['field']['link_to_entity default'] = TRUE; // Add the bundle (type). $data[$entity_data_table]['type']['field']['id'] = 'field'; } if (!empty($entity_table) && !empty($entity_revision_table)) { // Advertise this table as a possible base table. $data[$entity_revision_table]['table']['base']['help'] = $this->t('@entity_label revision is a history of changes to a "!entity_id" entity.', $replacements); $data[$entity_revision_table]['table']['base']['defaults']['title'] = 'info'; // @todo EntityViewsData should add these relationships by default. // https://www.drupal.org/node/2410275 $data[$entity_revision_table]['id']['relationship']['id'] = 'standard'; $data[$entity_revision_table]['id']['relationship']['base'] = $entity_table; $data[$entity_revision_table]['id']['relationship']['base field'] = 'id'; $data[$entity_revision_table]['id']['relationship']['title'] = $this->t('@entity_label', $replacements); $data[$entity_revision_table]['id']['relationship']['label'] = $this->t('Get the actual @entity_label from a @entity_label revision.', $replacements); $data[$entity_revision_table]['revision_id']['relationship']['id'] = 'standard'; $data[$entity_revision_table]['revision_id']['relationship']['base'] = $entity_table; $data[$entity_revision_table]['revision_id']['relationship']['base field'] = 'revision_id'; $data[$entity_revision_table]['revision_id']['relationship']['title'] = $this->t('@entity_label', $replacements); $data[$entity_revision_table]['revision_id']['relationship']['label'] = $this->t('Get the actual @entity_label from a @entity_label revision.', $replacements); } } return $data; }
/** * Gets an array of entity type permissions. * * @param ContentEntityTypeInterface $entity_type * The custom entity definition. * * @return array * The entity type permissions. * * @see \Drupal\user\PermissionHandlerInterface::getPermissions() */ public function entityPermissions(ContentEntityTypeInterface $entity_type = NULL) { $perms = []; if (!empty($entity_type)) { // Get the entity ID. $entity_type_id = $entity_type->id(); // Build replacement data for lables and descriptions. $replacements = ['@entity_type_id' => $entity_type_id, '@entity_label' => $entity_type->getLabel()]; // Add the default entity permissions. $perms = ["bypass {$entity_type_id} access" => ['title' => $this->t('Bypass @entity_label access control', $replacements), 'description' => $this->t('View, edit and delete all @entity_label regardless of permission restrictions.', $replacements), 'restrict access' => TRUE], "administer {$entity_type_id} types" => ['title' => $this->t('Administer @entity_label types', $replacements), 'description' => $this->t('Promote, change ownership, edit revisions, and perform other tasks across all @entity_label types.', $replacements), 'restrict access' => TRUE], "administer {$entity_type_id}" => ['title' => $this->t('Administer @entity_label', $replacements), 'restrict access' => TRUE], "access {$entity_type_id} overview" => ['title' => $this->t('Access the @entity_label overview page', $replacements), 'description' => $this->t('Get an overview of all @entity_label.', $replacements)], "access {$entity_type_id}" => ['title' => $this->t('View published @entity_label', $replacements)], "view own unpublished {$entity_type_id}" => ['title' => $this->t('View own unpublished @entity_label', $replacements)], "view all {$entity_type_id} revisions" => ['title' => $this->t('View all @entity_label revisions', $replacements)], "revert all {$entity_type_id} revisions" => ['title' => $this->t('Revert all @entity_label revisions', $replacements), 'description' => $this->t('Role requires permission <em>View all @entity_label revisions</em> and <em>edit rights</em> for @entity_label in question or <em>Administer @entity_label</em>.', $replacements)], "delete all {$entity_type_id} revisions" => ['title' => $this->t('Delete all @entity_label revisions', $replacements), 'description' => $this->t('Role requires permission to <em>View all @entity_label revisions</em> and <em>delete rights</em> for @entity_label in question or <em>Administer @entity_label</em>.', $replacements)]]; // Load bundles if any are defined. if (($entity_type_storage = $this->entityManager->getStorage($entity_type->getBundleEntityType())) && ($entity_types = $entity_type_storage->loadMultiple())) { // Generate entity permissions for all types for this entity. foreach ($entity_types as $type) { $perms += $this->buildPermissions($type); } } } return $perms; }
/** * Provides the page title for the entity form. * * @param \Drupal\Core\Entity\ContentEntityTypeInterface $entity_definition * The custom entity definition. * @param \Drupal\content_entity_base\Entity\EntityTypeBaseInterface $entity_bundle * The custom entity type bundle to use. * * @return string * The page title. */ public function getAddFormTitle(ContentEntityTypeInterface $entity_definition = NULL, EntityTypeBaseInterface $entity_bundle = NULL) { // Build the form page title using the type. return $this->t('Add %type @entity_label', ['@entity_label' => $entity_definition->getLabel(), '%type' => $entity_bundle ? $entity_bundle->label() : 'Invalid Bundle']); }