ticket-8.x-1.x-dev/ticket.module

ticket.module
<?php

use Drupal\Core\Link;
/**
 * @file
 * Contains ticket.module.
 */

use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\ticket\Entity\TicketTypeInterface;
use Drupal\Core\Url;
use Drupal\field\Entity\FieldConfig;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\ticket\Entity\RegistrationType;

/**
 * Implements hook_help().
 */
function ticket_help($route_name, RouteMatchInterface $route_match) {
  switch ($route_name) {
    // Main module help for the ticket module.
    case 'help.page.ticket':
      $output = '';
      $output .= '<h3>' . t('About') . '</h3>';
      $output .= '<p>' . t('Provides functionality for events to have tickets.') . '</p>';
      return $output;

    default:
  }
}

/**
 * Implements hook_theme().
 */
function ticket_theme() {
  return [
    'ticket_add_list' => [
      'variables' => ['content' => NULL],
    ],
    'registration_add_list' => [
      'variables' => ['content' => NULL],
    ],
  ];
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function ticket_theme_suggestions_ticket(array $variables) {
  $suggestions = [];
  $ticket = $variables['elements']['#ticket'];
  $ticket_sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');

  $suggestions[] = 'ticket__' . $ticket_sanitized_view_mode;
  $suggestions[] = 'ticket__' . $ticket->bundle();
  $suggestions[] = 'ticket__' . $ticket->bundle() . '__' . $ticket_sanitized_view_mode;
  $suggestions[] = 'ticket__' . $ticket->id();
  $suggestions[] = 'ticket__' . $ticket->id() . '__' . $ticket_sanitized_view_mode;
}

/**
 * Implements hook_theme_suggestions_HOOK().
 */
function ticket_theme_suggestions_registration(array $variables) {
  $registration = $variables['elements']['#registration'];
  $registration_sanitized_view_mode = strtr($variables['elements']['#view_mode'], '.', '_');

  $suggestions[] = 'registration__' . $registration_sanitized_view_mode;
  $suggestions[] = 'registration__' . $registration->bundle();
  $suggestions[] = 'registration__' . $registration->bundle() . '__' . $registration_sanitized_view_mode;
  $suggestions[] = 'registration__' . $registration->id();
  $suggestions[] = 'registration__' . $registration->id() . '__' . $registration_sanitized_view_mode;
  return $suggestions;
}

/**
 * Prepares variables for list of available ticket type templates.
 *
 * Default template: ticket-add-list.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - content: An array of ticket types.
 *
 * @see ticket_add_page()
 */
function template_preprocess_ticket_add_list(array &$variables) {
  $variables['ticket_type'] = [];
  if (!empty($variables['content'])) {
    foreach ($variables['content'] as $ticket_type) {
      $variables['ticket_types'][$ticket_type->id()] = [
        'ticket_type' => $ticket_type->id(),
        'add_link' => Link::fromTextAndUrl($ticket_type->label(), new Url('ticket.add', ['ticket_type' => $ticket_type->id()])),
        'description' => [
          '#markup' => $ticket_type->getDescription(),
        ],
      ];
    }
  }
}

/**
 * Prepares variables for list of available registration type templates.
 *
 * Default template: registration-add-list.html.twig.
 *
 * @param array $variables
 *   An associative array containing:
 *   - content: An array of registration types.
 *
 * @see registration_add_page()
 */
function template_preprocess_registration_add_list(array &$variables) {
  $variables['registration_type'] = [];
  if (!empty($variables['content'])) {
    foreach ($variables['content'] as $registration_type) {
      $variables['registration_types'][$registration_type->id()] = [
        'registration_type' => $registration_type->id(),
        'add_link' => Link::fromTextAndUrl($registration_type->label(), new Url('registration.add', ['registration_type' => $registration_type->id()])),
        'description' => [
          '#markup' => $registration_type->getDescription(),
        ],
      ];
    }
  }
}

/**
 * Creates a Registration Type Entity.
 *
 * @var object $entity
 *
 * @return entity
 *   The modified entity.
 */
function ticket_entity_insert($entity) {
  if ($entity->getEntityTypeId() == "ticket") {
    $trid = create_trid($entity);
    $label = create_label($entity);
    $registrations = RegistrationType::loadMultiple();
    if (!isset($registrations[$trid])) {
      $registration_type = RegistrationType::create([
        'trid' => $trid,
        'label' => $label,
      ]);
      $registration_type->save();
      $entity->setRegistrationType($trid);
      $entity->save();
    }
  }
  return $entity;
}

/**
 * Creates a trid string.
 *
 * @var \Drupal\ticket\Entity\Ticket $entity
 *
 * @return string
 *   The trid string for the registration type.
 */
function create_trid($entity) {
  return "ticket_" . $entity->id() . "_registration";
}

/**
 * Creates a label string.
 *
 * @var object \Drupal\ticket\Entity\Ticket $entity
 *
 * @return string
 *   The label for the registration type.
 */
function create_label($entity) {
  return $entity->getName() . " Registration";
}

/**
 * Adds a registration field by default to new ticket type entities.
 *
 * @var \Drupal\ticket\Entity\TicketTypeInterface $ticketType
 * @var string $label
 *
 * @return field
 *   A field object.
 */
function ticket_type_add_registration(TicketTypeInterface $ticketType, $label = "Registration") {
  // Add or remove the registration type field, as needed.
  $field_storage = FieldStorageConfig::loadByName('ticket', 'field_ticket_registration_type');
  $field = FieldConfig::loadByName('ticket', $ticketType->id(), 'field_ticket_registration_type');

  if (empty($field)) {
    $field = FieldConfig::create([
      'field_storage' => $field_storage,
      'bundle' => $ticketType->id(),
      'label' => $label,
      'settings' => ['display_summary' => TRUE],
    ]);
    $field->save();
  }

  return $field;
}

/**
 * Adds a date field by default to new ticket type entities.
 *
 * @var \Drupal\ticket\Entity\TicketTypeInterface $ticketType
 * @var string $label
 *
 * @return field
 *   A field object.
 */
function ticket_type_add_dates(TicketTypeInterface $ticketType, $label = "Registration Dates") {
  // Add or remove the registration dates field, as needed.
  $field_storage = FieldStorageConfig::loadByName('ticket', 'field_ticket_registration_dates');
  $field = FieldConfig::loadByName('ticket', $ticketType->id(), 'field_ticket_registration_dates');

  if (empty($field)) {
    $field = FieldConfig::create([
      'field_storage' => $field_storage,
      'bundle' => $ticketType->id(),
      'label' => $label,
      'settings' => ['display_summary' => TRUE],
    ]);
    $field->save();
  }

  // Assign widget settings for the 'default' form mode.
  \Drupal::service('entity_display.repository')->getFormDisplay('ticket', $ticketType->id(), 'default')
    ->setComponent('field_ticket_registration_dates', [
      'type' => 'daterange_default',
    ])
    ->save();

  return $field;
}

/**
 * Adds a quantity field by default to new ticket type entities.
 *
 * @var \Drupal\ticket\Entity\TicketTypeInterface $ticketType
 * @var string $label
 *
 * @return field
 *   A field object.
 */
function ticket_type_add_quantity(TicketTypeInterface $ticketType, $label = "Quantity of Tickets") {
  // Add or remove the body field, as needed.
  $field_storage = FieldStorageConfig::loadByName('ticket', 'field_ticket_quantity');
  $field = FieldConfig::loadByName('ticket', $ticketType->id(), 'field_ticket_quantity');

  if (empty($field)) {
    $field = FieldConfig::create([
      'field_storage' => $field_storage,
      'bundle' => $ticketType->id(),
      'label' => $label,
      'settings' => ['display_summary' => TRUE],
    ]);
    $field->save();
  }

  // Assign widget settings for the 'default' form mode.
  \Drupal::service('entity_display.repository')->getFormDisplay('ticket', $ticketType->id(), 'default')
    ->setComponent('field_ticket_quantity', [
      'type' => 'string_textfield',
    ])
    ->save();

  return $field;
}

/**
 * Adds a description field by default to new ticket type entities.
 *
 * @var \Drupal\ticket\Entity\TicketTypeInterface $ticketType
 * @var string $label
 *
 * @return field
 *   A field object.
 */
function ticket_type_add_description(TicketTypeInterface $ticketType, $label = "Description") {
  // Add or remove the body field, as needed.
  $field_storage = FieldStorageConfig::loadByName('ticket', 'field_ticket_description');
  $field = FieldConfig::loadByName('ticket', $ticketType->id(), 'field_ticket_description');

  if (empty($field)) {
    $field = FieldConfig::create([
      'field_storage' => $field_storage,
      'bundle' => $ticketType->id(),
      'label' => $label,
      'settings' => ['display_summary' => TRUE],
    ]);
    $field->save();
  }

  // Assign widget settings for the 'default' form mode.
  \Drupal::service('entity_display.repository')->getFormDisplay('ticket', $ticketType->id(), 'default')
    ->setComponent('field_ticket_description', [
      'type' => 'text_textarea_with_summary',
    ])
    ->save();

  // Assign display settings for the 'default' and 'teaser' view modes.
  \Drupal::service('entity_display.repository')->getViewDisplay('ticket', $ticketType->id(), 'default')
    ->setComponent('field_ticket_description', [
      'label' => 'hidden',
      'type' => 'text_default',
    ])
    ->save();

  // The teaser view mode is created by the Standard profile and therefore
  // might not exist.
  $view_modes = \Drupal::service('entity_display.repository')->getViewModes('ticket');
  if (isset($view_modes['teaser'])) {
    \Drupal::service('entity_display.repository')->getViewDisplay('ticket', $ticketType->id(), 'teaser')
      ->setComponent('field_ticket_description', [
        'label' => 'hidden',
        'type' => 'text_summary_or_trimmed',
      ])
      ->save();
  }

  return $field;
}

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

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