getStorage($entity_type->id()));
$this->entityTypeManager = $entity_type_manager;
}
/**
* {@inheritdoc}
*/
public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
return new static(
$entity_type,
$container->get('entity_type.manager')
);
}
/**
* {@inheritdoc}
*/
public function load() {
$entities = [
'enabled' => [],
'disabled' => [],
];
/** @var \Drupal\entityqueue\EntityQueueInterface $entity */
foreach (parent::load() as $entity) {
// Don't display queues which can not be edited by the user.
if (!$entity->access('update')) {
continue;
}
if ($entity->status()) {
$entities['enabled'][] = $entity;
}
else {
$entities['disabled'][] = $entity;
}
}
return $entities;
}
/**
* {@inheritdoc}
*/
public function buildHeader() {
$header['label'] = $this->t('Queue name');
$header['target_type'] = $this->t('Target type');
$header['handler'] = $this->t('Queue type');
$header['items'] = $this->t('Items');
return $header + parent::buildHeader();
}
/**
* {@inheritdoc}
*/
public function buildRow(EntityInterface $entity) {
$row = [
'data' => [
'label' => $entity->label(),
'target_type' => $this->entityTypeManager->getDefinition($entity->getTargetEntityTypeId())->getLabel(),
'handler' => $entity->getHandlerPlugin()->getPluginDefinition()['title'],
'items' => $this->getQueueItemsStatus($entity),
] + parent::buildRow($entity),
'title' => $this->t('Machine name: @name', ['@name' => $entity->id()]),
];
return $row;
}
/**
* {@inheritdoc}
*/
public function render() {
$entities = $this->load();
$build['#type'] = 'container';
$build['#attributes']['id'] = 'entity-queue-list';
$build['#attached']['library'][] = 'core/drupal.ajax';
$build['#cache'] = [
'contexts' => Cache::mergeContexts($this->entityType->getListCacheContexts(), ['user.permissions']),
'tags' => $this->entityType->getListCacheTags(),
];
$build['enabled']['heading']['#markup'] = '
' . $this->t('Enabled', [], ['context' => 'Plural']) . '
';
$build['disabled']['heading']['#markup'] = '' . $this->t('Disabled', [], ['context' => 'Plural']) . '
';
foreach (['enabled', 'disabled'] as $status) {
$build[$status]['#type'] = 'container';
$build[$status]['#attributes'] = ['class' => ['entity-queue-list-section', $status]];
$build[$status]['table'] = [
'#type' => 'table',
'#attributes' => [
'class' => ['entity-queue-listing-table'],
],
'#header' => $this->buildHeader(),
'#rows' => [],
'#cache' => [
'contexts' => $this->entityType->getListCacheContexts(),
'tags' => $this->entityType->getListCacheTags(),
],
];
foreach ($entities[$status] as $entity) {
$build[$status]['table']['#rows'][$entity->id()] = $this->buildRow($entity);
}
}
// @todo Use a placeholder for the entity label if this is abstracted to
// other entity types.
$build['enabled']['table']['#empty'] = $this->t('There are no enabled queues.');
$build['disabled']['table']['#empty'] = $this->t('There are no disabled queues.');
return $build;
}
/**
* {@inheritdoc}
*/
public function getDefaultOperations(EntityInterface $entity) {
$operations = parent::getDefaultOperations($entity);
if (isset($operations['edit'])) {
$operations['edit']['title'] = $this->t('Configure');
}
// Add AJAX functionality to enable/disable operations.
foreach (['enable', 'disable'] as $op) {
if (isset($operations[$op])) {
$operations[$op]['url'] = $entity->toUrl($op);
// Enable and disable operations should use AJAX.
$operations[$op]['attributes']['class'][] = 'use-ajax';
}
}
// Allow queue handlers to add their own operations.
$operations += $entity->getHandlerPlugin()->getQueueListBuilderOperations();
return $operations;
}
/**
* Returns the number of items in a subqueue or the number of subqueues.
*
* @param \Drupal\entityqueue\EntityQueueInterface $queue
* An entity queue object.
*
* @return string
* The number of items in a subqueue or the number of subqueues.
*/
protected function getQueueItemsStatus(EntityQueueInterface $queue) {
$handler = $queue->getHandlerPlugin();
$items = NULL;
if ($handler->supportsMultipleSubqueues()) {
$subqueues_count = $this->entityTypeManager->getStorage('entity_subqueue')->getQuery()
->condition('queue', $queue->id(), '=')
->count()
->execute();
$items = $this->t('@count subqueues', ['@count' => $subqueues_count]);
}
else {
$subqueue = EntitySubqueue::load($queue->id());
$items = $this->t('@count items', ['@count' => count($subqueue->items)]);
}
return $items;
}
}