X-Git-Url: http://aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Ftaxonomy%2Fsrc%2FVocabularyListBuilder.php;h=b6f6921db43633e2324d9ce8ebecd0b25e07d282;hb=5b8bb166bfa98770daef9de5c127fc2e6ef02340;hp=8503c288a90637be0488cfdbefac0bd46e2e5dc9;hpb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;p=yaffs-website diff --git a/web/core/modules/taxonomy/src/VocabularyListBuilder.php b/web/core/modules/taxonomy/src/VocabularyListBuilder.php index 8503c288a..b6f6921db 100644 --- a/web/core/modules/taxonomy/src/VocabularyListBuilder.php +++ b/web/core/modules/taxonomy/src/VocabularyListBuilder.php @@ -4,8 +4,14 @@ namespace Drupal\taxonomy; 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\Messenger\MessengerInterface; +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. @@ -19,6 +25,74 @@ class VocabularyListBuilder extends DraggableListBuilder { */ 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; + + /** + * The messenger. + * + * @var \Drupal\Core\Messenger\MessengerInterface + */ + protected $messenger; + + /** + * 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. + * @param \Drupal\Core\Messenger\MessengerInterface $messenger + * The messenger. + */ + public function __construct(EntityTypeInterface $entity_type, + AccountInterface $current_user, + EntityTypeManagerInterface $entity_type_manager, + RendererInterface $renderer = NULL, + MessengerInterface $messenger) { + parent::__construct($entity_type, $entity_type_manager->getStorage($entity_type->id())); + + $this->currentUser = $current_user; + $this->entityTypeManager = $entity_type_manager; + $this->renderer = $renderer; + $this->messenger = $messenger; + } + + /** + * {@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'), + $container->get('messenger') + ); + } + /** * {@inheritdoc} */ @@ -36,16 +110,23 @@ class VocabularyListBuilder extends DraggableListBuilder { $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 +138,11 @@ class VocabularyListBuilder extends DraggableListBuilder { public function buildHeader() { $header['label'] = t('Vocabulary name'); $header['description'] = t('Description'); + + if ($this->currentUser->hasPermission('administer vocabularies') && !empty($this->weightKey)) { + $header['weight'] = t('Weight'); + } + return $header + parent::buildHeader(); } @@ -80,7 +166,25 @@ class VocabularyListBuilder extends DraggableListBuilder { unset($this->weightKey); } $build = parent::render(); - $build['table']['#empty'] = t('No vocabularies available. Add vocabulary.', [':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. Add vocabulary.', [ + ':link' => Url::fromRoute('entity.taxonomy_vocabulary.add_form')->toString(), + ]); + } + else { + $build['table']['#empty'] = t('No vocabularies available.'); + } + } + return $build; } @@ -101,7 +205,7 @@ class VocabularyListBuilder extends DraggableListBuilder { public function submitForm(array &$form, FormStateInterface $form_state) { parent::submitForm($form, $form_state); - drupal_set_message(t('The configuration options have been saved.')); + $this->messenger->addStatus($this->t('The configuration options have been saved.')); } }