Mercurial > hg > isophonics-drupal-site
diff core/modules/taxonomy/src/VocabularyListBuilder.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | 4c8ae668cc8c |
children | c2387f117808 |
line wrap: on
line diff
--- a/core/modules/taxonomy/src/VocabularyListBuilder.php Mon Apr 23 09:33:26 2018 +0100 +++ b/core/modules/taxonomy/src/VocabularyListBuilder.php Mon Apr 23 09:46:53 2018 +0100 @@ -4,8 +4,13 @@ use Drupal\Core\Config\Entity\DraggableListBuilder; use Drupal\Core\Entity\EntityInterface; +use Drupal\Core\Entity\EntityTypeInterface; +use Drupal\Core\Entity\EntityTypeManagerInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Render\RendererInterface; +use Drupal\Core\Session\AccountInterface; use Drupal\Core\Url; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines a class to build a listing of taxonomy vocabulary entities. @@ -20,6 +25,59 @@ protected $entitiesKey = 'vocabularies'; /** + * The current user. + * + * @var \Drupal\Core\Session\AccountInterface + */ + protected $currentUser; + + /** + * The entity manager. + * + * @var \Drupal\Core\Entity\EntityTypeManagerInterface + */ + protected $entityTypeManager; + + /** + * The renderer service. + * + * @var \Drupal\Core\Render\RendererInterface + */ + protected $renderer; + + /** + * Constructs a new VocabularyListBuilder object. + * + * @param \Drupal\Core\Entity\EntityTypeInterface $entity_type + * The entity type definition. + * @param \Drupal\Core\Session\AccountInterface $current_user + * The current user. + * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager + * The entity manager service. + * @param \Drupal\Core\Render\RendererInterface $renderer + * The renderer service. + */ + public function __construct(EntityTypeInterface $entity_type, AccountInterface $current_user, EntityTypeManagerInterface $entity_type_manager, RendererInterface $renderer = NULL) { + parent::__construct($entity_type, $entity_type_manager->getStorage($entity_type->id())); + + $this->currentUser = $current_user; + $this->entityTypeManager = $entity_type_manager; + $this->renderer = $renderer; + } + + /** + * {@inheritdoc} + */ + public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { + return new static( + $entity_type, + $container->get('current_user'), + $container->get('entity_type.manager'), + $container->get('renderer') + ); + } + + /** * {@inheritdoc} */ public function getFormId() { @@ -36,16 +94,23 @@ $operations['edit']['title'] = t('Edit vocabulary'); } - $operations['list'] = [ - 'title' => t('List terms'), - 'weight' => 0, - 'url' => $entity->urlInfo('overview-form'), - ]; - $operations['add'] = [ - 'title' => t('Add terms'), - 'weight' => 10, - 'url' => Url::fromRoute('entity.taxonomy_term.add_form', ['taxonomy_vocabulary' => $entity->id()]), - ]; + if ($entity->access('access taxonomy overview')) { + $operations['list'] = [ + 'title' => t('List terms'), + 'weight' => 0, + 'url' => $entity->toUrl('overview-form'), + ]; + } + + $taxonomy_term_access_control_handler = $this->entityTypeManager->getAccessControlHandler('taxonomy_term'); + if ($taxonomy_term_access_control_handler->createAccess($entity->id())) { + $operations['add'] = [ + 'title' => t('Add terms'), + 'weight' => 10, + 'url' => Url::fromRoute('entity.taxonomy_term.add_form', ['taxonomy_vocabulary' => $entity->id()]), + ]; + } + unset($operations['delete']); return $operations; @@ -57,6 +122,11 @@ public function buildHeader() { $header['label'] = t('Vocabulary name'); $header['description'] = t('Description'); + + if ($this->currentUser->hasPermission('administer vocabularies')) { + $header['weight'] = t('Weight'); + } + return $header + parent::buildHeader(); } @@ -80,7 +150,25 @@ unset($this->weightKey); } $build = parent::render(); - $build['table']['#empty'] = t('No vocabularies available. <a href=":link">Add vocabulary</a>.', [':link' => \Drupal::url('entity.taxonomy_vocabulary.add_form')]); + + // If the weight key was unset then the table is in the 'table' key, + // otherwise in vocabularies. The empty message is only needed if the table + // is possibly empty, so there is no need to support the vocabularies key + // here. + if (isset($build['table'])) { + $access_control_handler = $this->entityTypeManager->getAccessControlHandler('taxonomy_vocabulary'); + $create_access = $access_control_handler->createAccess(NULL, NULL, [], TRUE); + $this->renderer->addCacheableDependency($build['table'], $create_access); + if ($create_access->isAllowed()) { + $build['table']['#empty'] = t('No vocabularies available. <a href=":link">Add vocabulary</a>.', [ + ':link' => Url::fromRoute('entity.taxonomy_vocabulary.add_form')->toString() + ]); + } + else { + $build['table']['#empty'] = t('No vocabularies available.'); + } + } + return $build; }