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.'));
}
}