contacts_events-8.x-1.x-dev/modules/printing/src/Plugin/views/field/TicketLink.php

modules/printing/src/Plugin/views/field/TicketLink.php
<?php

namespace Drupal\contacts_events_printing\Plugin\views\field;

use Drupal\contacts_events_printing\Controller\TicketPrintingController;
use Drupal\Core\Form\FormStateInterface;
use Drupal\views\Plugin\views\field\EntityLink;
use Drupal\views\ResultRow;

/**
 * Field handler to present a link to the printing the users ticket.
 *
 * @ingroup views_field_handlers
 *
 * @ViewsField("contacts_events_printing_ticket_link")
 */
class TicketLink extends EntityLink {

  /**
   * {@inheritdoc}
   *
   * If no ticket is found, let the booking manager go to the summary.
   */
  protected function getEntityLinkTemplate() {
    return 'booking_process';
  }

  /**
   * {@inheritdoc}
   */
  protected function getDefaultLabel() {
    return $this->t('Download');
  }

  /**
   * {@inheritdoc}
   */
  protected function checkUrlAccess(ResultRow $row) {
    /** @var \Drupal\commerce_order\Entity\OrderInterface $booking */
    $booking = $this->getEntity($row);

    /** @var \Drupal\contacts_events\Entity\EventInterface $event */
    $event = $booking->get('event')->entity;

    $printing_enabled = TicketPrintingController::isEventPrintingEnabled($event);
    if ($printing_enabled->isForbidden()) {
      return $printing_enabled;
    }

    $url = $this->getUrlInfo($row);
    return $this->accessManager->checkNamedRoute($url->getRouteName(), $url->getRouteParameters(), $this->currentUser(), TRUE);
  }

  /**
   * {@inheritdoc}
   */
  protected function getUrlInfo(ResultRow $row) {
    /** @var \Drupal\commerce_order\Entity\OrderInterface $booking */
    $booking = $this->getEntity($row);

    foreach ($booking->get('order_items')->referencedEntities() as $item) {
      /** @var \Drupal\commerce_order\Entity\OrderItemInterface $item */
      if ($item->bundle() !== 'contacts_ticket') {
        continue;
      }

      // Skip anonymous users to avoid no ticket holder tickets being selected.
      if (!$this->currentUser()->isAuthenticated()) {
        continue;
      }

      /** @var \Drupal\contacts_events\Entity\TicketInterface $ticket */
      $ticket = $item->getPurchasedEntity();
      if ((int) $ticket->getTicketHolderId() !== (int) $this->currentUser()->id()) {
        continue;
      }

      return $ticket->toUrl($this->options['ticket_route'])->setAbsolute($this->options['absolute']);
    }

    return parent::getUrlInfo($row);
  }

  /**
   * {@inheritdoc}
   */
  protected function defineOptions() {
    $options = parent::defineOptions();
    $options['ticket_route'] = ['default' => 'booking_ticket_print'];
    return $options;
  }

  /**
   * {@inheritdoc}
   */
  public function buildOptionsForm(&$form, FormStateInterface $form_state) {
    parent::buildOptionsForm($form, $form_state);

    $form['ticket_route'] = [
      '#type' => 'radios',
      '#title' => $this->t('Which page to show for download link.', [
        '%draft' => $this->t('Started'),
      ]),
      '#options' => [
        'booking_ticket_print' => 'Download',
        'booking_ticket' => 'View',
      ],
      '#description' => $this->t("One page will show a ticket view page while the other will download a pdf file."),
      '#default_value' => $this->options['ticket_route'],
    ];
  }

}

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

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