arch-8.x-1.x-dev/modules/logger/src/Controller/LogController.php

modules/logger/src/Controller/LogController.php
<?php

namespace Drupal\arch_logger\Controller;

use Drupal\arch_logger\Services\ArchLogger;
use Drupal\arch_order\Entity\OrderInterface;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Link;
use Drupal\Core\Render\RendererInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;

/**
 * Returns responses for order log routes.
 */
class LogController extends ControllerBase implements ContainerInjectionInterface {

  /**
   * Arch logger service.
   *
   * @var \Drupal\arch_logger\Services\ArchLogger
   */
  protected $logger;

  /**
   * User storage.
   *
   * @var \Drupal\user\UserStorageInterface
   */
  protected $userStorage;

  /**
   * Order status storage.
   *
   * @var \Drupal\user\UserStorageInterface
   */
  protected $orderStatusStorage;

  /**
   * The date formatter service.
   *
   * @var \Drupal\Core\Datetime\DateFormatterInterface
   */
  protected $dateFormatter;

  /**
   * The renderer service.
   *
   * @var \Drupal\Core\Render\RendererInterface
   */
  protected $renderer;

  /**
   * LogController constructor.
   *
   * @param \Drupal\arch_logger\Services\ArchLogger $logger
   *   Arch logger service.
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   *   EntityType Manager object.
   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
   *   The date formatter service.
   * @param \Drupal\Core\Render\RendererInterface $renderer
   *   The renderer service.
   *
   * @throws \Drupal\Component\Plugin\Exception\InvalidPluginDefinitionException
   * @throws \Drupal\Component\Plugin\Exception\PluginNotFoundException
   */
  public function __construct(
    ArchLogger $logger,
    EntityTypeManagerInterface $entity_type_manager,
    DateFormatterInterface $date_formatter,
    RendererInterface $renderer,
  ) {
    $this->logger = $logger;
    $this->userStorage = $entity_type_manager->getStorage('user');
    $this->orderStatusStorage = $entity_type_manager->getStorage('order_status');
    $this->dateFormatter = $date_formatter;
    $this->renderer = $renderer;
  }

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

  /**
   * Log overview page of an order.
   *
   * @param \Drupal\arch_order\Entity\OrderInterface $order
   *   Order entity.
   *
   * @return mixed
   *   Renderable array of order logs.
   *
   * @throws \Drupal\Core\Entity\EntityMalformedException
   */
  public function listView(OrderInterface $order) {
    $logs = $this->logger->getByOrder($order);

    $build['#title'] = $this->t('Logs for %title', ['%title' => $order->label()]);
    $header = [
      '',
      $this->t('Message', [], ['context' => 'arch_logger']),
      $this->t('Order status', [], ['context' => 'arch_logger']),
      $this->t('User', [], ['context' => 'arch_logger']),
      $this->t('Date', [], ['context' => 'arch_logger']),
    ];

    $rows = [];
    foreach ($logs as $log) {
      $user = $this->userStorage->load($log->uid);

      $route_name = 'entity.order.history_item';
      $route_params = [
        'order' => $log->oid,
        'log_id' => $log->lid,
      ];

      $rows[] = [
        'id' => Link::createFromRoute('#' . $log->lid, $route_name, $route_params),
        'message' => Link::createFromRoute($log->message, $route_name, $route_params),
        'order_status' => $this->orderStatusStorage->load($log->status)->label(),
        'user' => $user->toLink(),
        'date' => $this->dateFormatter->format($log->created),
      ];
    }

    $build['order_log_table'] = [
      '#theme' => 'table',
      '#rows' => $rows,
      '#header' => $header,
      '#attributes' => ['class' => 'order-log-table'],
    ];

    return $build;
  }

  /**
   * Log details page.
   *
   * @param \Drupal\arch_order\Entity\OrderInterface $order
   *   Order entity.
   * @param int $log_id
   *   Log ID.
   *
   * @return mixed
   *   Renderable array of order log details.
   *
   * @throws \Drupal\Core\Entity\EntityMalformedException
   * @throws \Exception
   */
  public function view(OrderInterface $order, $log_id) {
    $log = $this->logger->getByOrderAndId($order, $log_id);
    if (empty($log)) {
      throw new NotFoundHttpException();
    }

    $user = $this->userStorage->load($log->uid);

    $details = '-';
    if (!empty($log->data)) {
      $details_render_array = [
        '#type' => 'html_tag',
        '#tag' => 'pre',
        // phpcs:disable DrupalPractice.FunctionCalls.InsecureUnserialize
        '#value' => var_export(unserialize($log->data), TRUE),
      ];
      $details = $this->renderer->render($details_render_array);
    }

    $build['#title'] = $this->t('Log for %title', ['%title' => $order->label()], ['context' => 'arch_logger']);
    $build['order_log_table'] = [
      '#theme' => 'table',
      '#rows' => [
        'order_number' => [
          $this->t('Order number', [], ['context' => 'arch_logger']),
          $order->toLink(),
        ],
        'message' => [
          $this->t('Message', [], ['context' => 'arch_logger']),
          $log->message,
        ],
        'order_status' => [
          $this->t('Order status', [], ['context' => 'arch_logger']),
          $this->orderStatusStorage->load($log->status)->label(),
        ],
        'user' => [
          $this->t('User', [], ['context' => 'arch_logger']),
          $user->toLink(),
        ],
        'date' => [
          $this->t('Date', [], ['context' => 'arch_logger']),
          $this->dateFormatter->format($log->created),
        ],
        'details' => [
          $this->t('Details', [], ['context' => 'arch_logger']),
          $details,
        ],
      ],
      '#attributes' => ['class' => 'order-log'],
    ];

    return $build;
  }

}

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

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