resourceTypeRepository = $resource_type_repository; $this->config = $config; } /** * {@inheritdoc} */ public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) { return new static( $entity_type, $container->get('entity.manager')->getStorage($entity_type->id()), $container->get('jsonapi.resource_type.repository'), $container->get('config.factory')->get('jsonapi_extras.settings') ); } /** * {@inheritdoc} */ public function buildHeader() { $header = [ 'name' => $this->t('Name'), 'entity_type' => $this->t('Entity type'), 'bundle' => $this->t('Bundle'), 'path' => $this->t('Path'), 'status' => $this->t('Status'), 'state' => $this->t('State'), 'operations' => $this->t('Operations'), ]; return $header + parent::buildHeader(); } /** * {@inheritdoc} */ public function render() { $list = []; $resource_status = [ 'enabled' => t('Enabled Resources'), 'disabled' => t('Disabled resources'), ]; $title = $this->t('Filter resources by name, entity type, bundle or path.'); $list['status']['filters']['text'] = [ '#type' => 'search', '#title' => $this->t('Filter'), '#title_display' => 'invisible', '#size' => 60, '#placeholder' => $title, '#attributes' => [ 'class' => ['jsonapi-resources-filter-text'], 'data-table' => '.jsonapi-resources-table', 'autocomplete' => 'off', 'title' => $title, ], ]; foreach ($resource_status as $status => $label) { $list[$status] = [ '#type' => 'details', '#title' => $label, '#open' => $status == 'enabled', '#attributes' => [ 'id' => 'jsonapi-' . $status . '-resources-list', ], '#attached' => [ 'library' => [ 'jsonapi_extras/admin', ], ], ]; $list[$status]['table'] = [ '#type' => 'table', '#header' => [ 'name' => $this->t('Name'), 'entity_type' => $this->t('Entity type'), 'bundle' => $this->t('Bundle'), 'path' => $this->t('Path'), 'status' => $this->t('Status'), 'state' => $this->t('State'), 'operations' => $this->t('Operations'), ], '#attributes' => [ 'class' => [ 'jsonapi-resources-table', ], ], '#attached' => [ 'library' => [ 'jsonapi_extras/admin', ], ], ]; } $prefix = $this->config->get('path_prefix'); foreach ($this->resourceTypeRepository->all() as $resource_type) { /** @var \Drupal\jsonapi_extras\ResourceType\ConfigurableResourceType $resource_type */ $entity_type_id = $resource_type->getEntityTypeId(); $bundle = $resource_type->getBundle(); $row = [ 'name' => ['#plain_text' => $resource_type->getTypeName()], 'entity_type' => ['#plain_text' => $entity_type_id], 'bundle' => ['#plain_text' => $bundle], 'path' => [ '#type' => 'html_tag', '#tag' => 'code', '#value' => sprintf('/%s/%s/%s', $prefix, $entity_type_id, $bundle), ], 'status' => [ '#type' => 'html_tag', '#tag' => 'span', '#value' => $this->t('Enabled'), '#attributes' => [ 'class' => [ 'label', 'label--status', ], ], ], 'state' => [ '#type' => 'html_tag', '#tag' => 'span', '#value' => $this->t('Default'), '#attributes' => [ 'class' => [ 'label', ], ], ], 'operations' => [ '#type' => 'operations', '#links' => [ 'overwrite' => [ 'title' => t('Overwrite'), 'weight' => -10, 'url' => Url::fromRoute('entity.jsonapi_resource_config.add_form', [ 'entity_type_id' => $entity_type_id, 'bundle' => $bundle, ]), ], ], ], ]; /** @var \Drupal\jsonapi_extras\Entity\JsonapiResourceConfig $resource_config */ $resource_config = $resource_type->getJsonapiResourceConfig(); if ($resource_config->id()) { $row['state']['#value'] = $this->t('Overwritten'); $row['state']['#attributes']['class'][] = 'label--overwritten'; $row['operations']['#links'] = $this->getDefaultOperations($resource_config); $row['operations']['#links']['delete']['title'] = $this->t('Revert'); if ($config_path = $resource_config->get('path')) { $row['path']['#value'] = sprintf('/%s/%s', $prefix, $config_path); } if ($resource_config->get('disabled')) { $row['status']['#value'] = $this->t('Disabled'); $row['status']['#attributes']['class'][] = 'label--status--disabled'; } } $list[$resource_config->get('disabled') ? 'disabled' : 'enabled']['table'][] = $row; } return $list; } }