dynamic_image_generator-1.0.x-dev/src/Controller/DynamicImageGeneratorViewController.php

src/Controller/DynamicImageGeneratorViewController.php
<?php

namespace Drupal\dynamic_image_generator\Controller;

use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Link;
use Drupal\Core\Url;
use Symfony\Component\DependencyInjection\ContainerInterface;

/**
 * Controller for displaying generated dynamic images.
 */
class DynamicImageGeneratorViewController extends ControllerBase {

  /**
   * The entity type manager.
   *
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   */
  protected $entityTypeManager;

  /**
   * Constructs a DynamicImageGeneratorViewController object.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   The entity type manager.
   */
  public function __construct(EntityTypeManagerInterface $entity_type_manager) {
    $this->entityTypeManager = $entity_type_manager;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity_type.manager')
    );
  }

  /**
   * Displays the generated dynamic images page.
   *
   * @return array
   *   A render array.
   */
  public function generatedImagesPage() {
    $build = [];

    // Page header
    $build['header'] = [
      '#type' => 'markup',
      '#markup' => '<div class="generated-images-header">
        <h1>Generated Dynamic Images</h1>
        <p>Browse all automatically generated dynamic images.</p>
      </div>',
    ];

    // Try to embed the view
    try {
      $view_builder = $this->entityTypeManager->getViewBuilder('view');
      $view = \Drupal\views\Views::getView('generated_dynamic_images');

      if ($view && $view->access('page_1')) {
        $build['view'] = $view_builder->view($view, 'page_1');
      } else {
        // Fallback if view doesn't exist or no access
        $build['fallback'] = $this->buildFallbackTable();
      }
    }
    catch (\Exception $e) {
      // Fallback if view fails
      $build['fallback'] = $this->buildFallbackTable();
      \Drupal::logger('dynamic_image_generator')->error('Error loading generated images view: @error', [
        '@error' => $e->getMessage(),
      ]);
    }

    return $build;
  }

  /**
   * Build a fallback table when the view is not available.
   *
   * @return array
   *   Render array for fallback table.
   */
  protected function buildFallbackTable() {
    $build = [];

    try {
      // Get dynamic image media entities
      $media_storage = $this->entityTypeManager->getStorage('media');
      $query = $media_storage->getQuery()
        ->condition('bundle', 'dynamic_image')
        ->condition('status', 1)
        ->sort('created', 'DESC')
        ->range(0, 50)
        ->accessCheck(FALSE);

      $media_ids = $query->execute();

      if (empty($media_ids)) {
        $build['empty'] = [
          '#type' => 'markup',
          '#markup' => '<div class="empty-images-state">
            <h3>No Generated Images Found</h3>
            <p>No images have been generated yet.</p>
            <p><a href="/admin/structure/dynamic-image-templates/add" class="button button--primary">Create Image Template</a></p>
          </div>',
        ];
        return $build;
      }

      $media_entities = $media_storage->loadMultiple($media_ids);

      $rows = [];
      foreach ($media_entities as $media) {
        $created = \Drupal::service('date.formatter')->format($media->getCreatedTime(), 'medium');
        $rows[] = [
          'name' => $media->getName(),
          'created' => $created,
          'operations' => Link::fromTextAndUrl(t('View'), $media->toUrl()),
        ];
      }

      $build['table'] = [
        '#type' => 'table',
        '#header' => [
          t('Image Name'),
          t('Created'),
          t('Operations'),
        ],
        '#rows' => $rows,
        '#empty' => t('No generated images found.'),
      ];

    }
    catch (\Exception $e) {
      $build['error'] = [
        '#type' => 'markup',
        '#markup' => '<div class="error">Unable to load generated images.</div>',
      ];
    }

    return $build;
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc