contacts_events-8.x-1.x-dev/modules/villages/src/VillageListBuilder.php
modules/villages/src/VillageListBuilder.php
<?php namespace Drupal\contacts_events_villages; use Drupal\Core\Entity\EntityInterface; use Drupal\Core\Entity\EntityListBuilder; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Url; use Symfony\Component\DependencyInjection\ContainerInterface; /** * Defines a class to build a listing of Camping village group entities. * * @ingroup contacts_events_villages */ class VillageListBuilder extends EntityListBuilder { /** * Current route. * * @var \Drupal\Core\Routing\RouteMatchInterface */ protected $routeMatch; /** * {@inheritdoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { $self = parent::createInstance($container, $entity_type); $self->routeMatch = $container->get('current_route_match'); return $self; } /** * {@inheritdoc} */ protected function getEntityIds() { $query = $this->getStorage()->getQuery() ->sort('name'); $query->accessCheck(TRUE); // Filter by current event. if ($event = $this->routeMatch->getParameter('contacts_event')) { $query->condition('event', $event->id()); } // Only add the pager if a limit is specified. if ($this->limit) { $query->pager($this->limit); } return $query->execute(); } /** * {@inheritdoc} */ public function buildHeader() { $header['name'] = $this->t('Name'); $header['fill_value'] = $this->t('Max fill value'); $header['pitches'] = $this->t('Pitches'); $header['special_requirements'] = $this->t('Special Requirements'); return $header + parent::buildHeader(); } /** * {@inheritdoc} */ public function buildRow(EntityInterface $entity) { /** @var \Drupal\contacts_events_villages\Entity\Village $entity */ $row['name']['data'] = [ '#type' => 'html_tag', '#tag' => 'span', '#attributes' => ['style' => "color:{$entity->get('colour')->value}"], '#value' => $entity->label(), ]; $row['fill_value'] = $entity->get('fill_value')->value; $row['pitches'] = $entity->get('pitches')->value; $requirements = []; foreach ($entity->get('special_requirements') as $item) { /** @var \Drupal\taxonomy\Entity\Term $requirement */ $requirement = $item->entity; $requirements[] = $requirement->label(); } $row['special_requirements'] = implode(', ', $requirements); return $row + parent::buildRow($entity); } /** * {@inheritdoc} */ protected function getDefaultOperations(EntityInterface $entity) { /** @var \Drupal\contacts_events_villages\Entity\Village $entity */ $operations = parent::getDefaultOperations($entity); $url = Url::fromRoute('contacts_events_villages.host_info', [ 'contacts_event' => $entity->getEventId(), 'village' => $entity->id(), ]); $operations['host-info'] = [ 'title' => $this->t('Host info'), 'weight' => 50, 'url' => $url, ]; return $operations; } }