contacts_events-8.x-1.x-dev/contacts_events.api.php
contacts_events.api.php
<?php /** * @file * Describes hooks for Contacts Events. */ use Drupal\Core\StringTranslation\TranslatableMarkup; /** * @addtogroup hooks * @{ */ /** * Allow denying of bookings with a reason displayed to the user. * * The first reason provided by an implementation will be displayed to the user. * * @param \Drupal\contacts_events\Entity\EventInterface $event * The event we are attempting to book for. * @param \Drupal\Core\Session\AccountInterface $account * The account the booking is for. * * @return \Drupal\Core\StringTranslation\TranslatableMarkup|null * A denial reason, or NULL to not deny. */ function hook_contacts_events_deny_booking(\Drupal\contacts_events\Entity\EventInterface $event, \Drupal\Core\Session\AccountInterface $account) { // Don't allow administrators to book for events. if (in_array('administrator', $account->getRoles())) { return new TranslatableMarkup('Administrators are now allowed to book on events.'); } return NULL; } /** * Allow modification of the ticket form. * * Using a custom hook instead of hook_inline_entity_form_entity_form_alter as * it runs in the base entityForm method, so won't pick up the changes made by * addAjaxPrice. */ function hook_contacts_events_ticket_form_alter(array &$form, \Drupal\Core\Form\FormStateInterface $form_state, \Drupal\contacts_events\Entity\Ticket $ticket, string $display_mode) { // Register a new field to be updated on ticket calculation ajax updates. $form['new_field']['#id'] = 'new-field-ajax-wrapper'; $form['price_update']['#element']->registerElementToUpdate($form['new_field']); } /** * Add to or modify the ticket summary page. * * @param array $build * The build array. * @param \Drupal\contacts_events\Entity\EventInterface $event * The event entity. * * @see \Drupal\contacts_events\Controller\TicketsController::summary() */ function hook_contacts_events_ticket_summary_alter(array &$build, \Drupal\contacts_events\Entity\EventInterface $event) { $build['teams'] = ['#type' => 'fieldset']; $build['teams']['delegates'] = [ '#type' => 'item', '#title' => new TranslatableMarkup('Delegates'), '#markup' => 10, '#description' => new TranslatableMarkup('Non team event delegates.'), ]; } /** * Provides custom evaluation logic for an event class. * * @param \Drupal\commerce_order\Entity\OrderItemInterface $order_item * Order item. * @param \Drupal\contacts_events\Entity\EventClassInterface $event_class * Event class. */ function hook_contacts_events_class_evaluate(\Drupal\commerce_order\Entity\OrderItemInterface $order_item, \Drupal\contacts_events\Entity\EventClassInterface $event_class) { if ($event_class->get('type') == 'contacts_ticket' && $event_class->id() == 'some_event_class') { if ($order_item->get('puchased_entity')->get('some_custom_value_to_compare')->value) { return TRUE; } } } /** * @} End of "addtogroup hooks". */