contacts_events-8.x-1.x-dev/modules/printing/contacts_events_printing.module
modules/printing/contacts_events_printing.module
<?php /** * @file * Primary module hooks for Contacts Events Printing module. */ use Drupal\contacts_events\Entity\EventType; use Drupal\contacts_events\Entity\Ticket; use Drupal\contacts_events\Entity\TicketType; use Drupal\Core\Entity\Entity\EntityFormDisplay; use Drupal\Core\Entity\EntityTypeInterface; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\entity\BundleFieldDefinition; /** * Implements hook_theme(). */ function contacts_events_printing_theme() { return [ 'ticket_printing_content' => [ 'template' => 'ticket-printing-content', 'variables' => [ 'ticket' => NULL, 'show_badge' => FALSE, 'show_address' => FALSE, 'logo' => '', 'badge_logo' => '', 'badge_image' => '', 'order_id' => '', 'contact_id' => '', 'ticket_id' => '', 'team' => '', 'address' => '', 'name' => '', 'first_name' => '', 'event_name' => '', 'event_date' => '', 'booking_reference' => '', 'ticket_class' => '', 'barcode' => '', 'letter_text' => '', 'company_address' => '', 'company_registration' => '', 'segments' => NULL, ], ], ]; } /** * Implements hook_entity_type_build(). */ function contacts_events_printing_entity_type_build(array &$entity_types) { /** @var \Drupal\Core\Entity\EntityTypeInterface[] $entity_types */ $entity_types['contacts_ticket']->setLinkTemplate('booking_ticket', '/booking/{commerce_order}/ticket/{contacts_ticket}'); $entity_types['contacts_ticket']->setLinkTemplate('booking_ticket_print', '/booking/{commerce_order}/ticket/{contacts_ticket}/print'); } /** * Implements hook_theme_registry_alter(). * * Add ticket printing specific page template alter suggestion. */ function contacts_events_printing_theme_registry_alter(&$theme_registry) { $theme_registry['page__booking__ticket__render'] = [ 'template' => 'page--booking--ticket--render', 'path' => drupal_get_path('module', 'contacts_events_printing') . '/templates', 'base hook' => 'page', ]; } /** * Implements hook_entity_field_storage_info(). */ function contacts_events_printing_entity_field_storage_info(EntityTypeInterface $entity_type) { $fields = []; if ($entity_type->id() === 'contacts_ticket') { $fields['printed'] = BundleFieldDefinition::create('boolean') ->setName('printed') ->setTargetEntityTypeId('contacts_ticket') ->setLabel(new TranslatableMarkup('Ticket printed')); $fields['print_log'] = BundleFieldDefinition::create('ce_print_log') ->setName('print_log') ->setTargetEntityTypeId('contacts_ticket') ->setSetting('target_type', 'user') ->setLabel(new TranslatableMarkup('Print log')); } return $fields; } /** * Implements hook_entity_bundle_field_info(). */ function contacts_events_printing_entity_bundle_field_info(EntityTypeInterface $entity_type, $bundle, array $base_field_definitions) { $fields = []; if ($entity_type->id() === 'contacts_ticket') { $fields['printed'] = BundleFieldDefinition::create('boolean') ->setName('printed') ->setTargetEntityTypeId('contacts_ticket') ->setLabel(new TranslatableMarkup('Ticket printed')) ->setDisplayOptions('form', ['region' => 'hidden']) ->setDisplayConfigurable('form', TRUE) ->setDisplayConfigurable('view', TRUE); $fields['print_log'] = BundleFieldDefinition::create('ce_print_log') ->setName('print_log') ->setTargetEntityTypeId('contacts_ticket') ->setLabel(new TranslatableMarkup('Print log')) ->setSetting('target_type', 'user') ->setDisplayOptions('form', ['region' => 'hidden']) ->setDisplayConfigurable('form', FALSE) ->setDisplayConfigurable('view', TRUE); } return $fields; } /** * Implements hook_entity_extra_field_info(). */ function contacts_events_printing_entity_extra_field_info() { $extra = []; /** @var \Drupal\Core\Entity\EntityFieldManagerInterface $field_manager */ $field_manager = \Drupal::service('entity_field.manager'); foreach (TicketType::loadMultiple() as $bundle) { $fields = $field_manager->getFieldDefinitions('contacts_ticket', $bundle->id()); $definition = $fields['print_log']; $extra['contacts_ticket'][$bundle->id()]['form']['print_log:view'] = [ 'label' => $definition->getLabel(), 'description' => $definition->getDescription(), 'visible' => FALSE, ]; } foreach (EventType::loadMultiple() as $bundle) { $extra['contacts_event'][$bundle->id()]['form']['settings_ticket_printing'] = [ 'label' => new TranslatableMarkup('Enable Ticket Printing'), 'visible' => FALSE, ]; } return $extra; } /** * Implements hook_contacts_events_ticket_form_alter(). */ function contacts_events_printing_contacts_events_ticket_form_alter(array &$form, FormStateInterface $form_state, Ticket $ticket, string $display_mode) { $display = EntityFormDisplay::collectRenderDisplay($ticket, $display_mode); if ($options = $display->getComponent('print_log:view')) { $form['print_log'] = $ticket->get('print_log')->view(); $form['print_log']['#weight'] = $options['weight']; } } /** * Implements hook_contacts_event_form_alter(). */ function contacts_events_printing_form_contacts_event_form_alter(&$form, FormStateInterface $form_state, $form_id) { /** @var \Drupal\contacts_events\Entity\EventInterface $entity */ $entity = $form_state->getFormObject()->getEntity(); $form['settings_ticket_printing'] = [ '#type' => 'checkbox', '#title' => new TranslatableMarkup('Enable Ticket Printing'), '#description' => new TranslatableMarkup('Booking managers and Ticket holders can download paid in full tickets.'), '#default_value' => $entity->getSetting('printing.enabled'), '#parents' => array_merge($form['#parents'] ?? [], ['settings', 'printing', 'enabled']), ]; }