You are here

public function JsonapiResourceConfigListBuilder::render in JSON:API Extras 8.2

Same name and namespace in other branches
  1. 8.3 src/JsonapiResourceConfigListBuilder.php \Drupal\jsonapi_extras\JsonapiResourceConfigListBuilder::render()
  2. 8 src/JsonapiResourceConfigListBuilder.php \Drupal\jsonapi_extras\JsonapiResourceConfigListBuilder::render()

Builds the entity listing as renderable array for table.html.twig.

@todo Add a link to add a new item to the #empty text.

Overrides EntityListBuilder::render

File

src/JsonapiResourceConfigListBuilder.php, line 82

Class

JsonapiResourceConfigListBuilder
Provides a listing of JSON API Resource Config entities.

Namespace

Drupal\jsonapi_extras

Code

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 instanceof NullJsonapiResourceConfig) {
      $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;
}