contacts_events-8.x-1.x-dev/src/Form/OrderItemCancelForm.php

src/Form/OrderItemCancelForm.php
<?php

namespace Drupal\contacts_events\Form;

use Drupal\commerce_order\Entity\OrderItemInterface;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Form\FormStateInterface;

/**
 * The order item cancel form.
 *
 * @package Drupal\contacts_events\Form
 */
class OrderItemCancelForm extends ContentEntityForm {

  /**
   * {@inheritdoc}
   */
  public function form(array $form, FormStateInterface $form_state) {
    $message = $this->t('Are you sure you want to cancel %label?', ['%label' => $this->entity->label()]);

    $form['message'] = [
      '#theme_wrappers' => ['container'],
      '#markup' => $message,
    ];

    $form = parent::form($form, $form_state);

    $form['purchased_entity']['#access'] = $this->currentUser()->hasPermission('can manage bookings for contacts_events');

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function processForm($element, FormStateInterface $form_state, $form) {
    $element = parent::processForm($element, $form_state, $form);

    if (!empty($element['actions']['submit'])) {
      $element['actions']['submit']['#value'] = $this->t('Cancel ticket');
    }

    return $element;
  }

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

    if (!$this->entity instanceof OrderItemInterface) {
      return;
    }

    /** @var \Drupal\state_machine\Plugin\Field\FieldType\StateItem $state */
    $state = $this->entity->get('state')->first();
    $state->applyTransitionById('cancel');

    /** @var \Drupal\contacts_events\Entity\Ticket $ticket */
    $ticket = $this->entity->getPurchasedEntity();

    if (!$this->entity->get('mapped_price')->isEmpty()) {
      $mapped_price = $this->entity->get('mapped_price')->first()->getValue();
      $mapped_price['class_overridden'] = TRUE;
      $this->entity->set('mapped_price', $mapped_price);
      $ticket->setMappedPrice($mapped_price);
    }
    $this->entity->save();

    // Clear contact and email so they could be re-booked on to event.
    $ticket->set('contact', NULL);
    $ticket->set('email', NULL);
    $ticket->save();
  }

}

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

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