arch-8.x-1.x-dev/modules/order/src/Form/OrderForm.php

modules/order/src/Form/OrderForm.php
<?php

namespace Drupal\arch_order\Form;

use Drupal\Component\Datetime\TimeInterface;
use Drupal\Core\Datetime\DateFormatterInterface;
use Drupal\Core\Entity\ContentEntityForm;
use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Session\AccountInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Form handler for the order edit forms.
 *
 * @internal
 */
class OrderForm extends ContentEntityForm {

  /**
   * The Current User object.
   *
   * @var \Drupal\Core\Session\AccountInterface
   */
  protected $currentUser;

  /**
   * Date formatter.
   *
   * @var \Drupal\Core\Datetime\DateFormatterInterface
   */
  protected $dateFormatter;

  /**
   * Constructs a OrderForm object.
   *
   * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
   *   The entity repository.
   * @param \Drupal\Core\Datetime\DateFormatterInterface $date_formatter
   *   Date formatter.
   * @param \Drupal\Core\Entity\EntityTypeBundleInfoInterface $entity_type_bundle_info
   *   Entity type bundle info.
   * @param \Drupal\Component\Datetime\TimeInterface $time
   *   The time service.
   * @param \Drupal\Core\Session\AccountInterface $current_user
   *   The current user.
   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
   *   Current request.
   */
  public function __construct(
    EntityRepositoryInterface $entity_repository,
    DateFormatterInterface $date_formatter,
    EntityTypeBundleInfoInterface $entity_type_bundle_info,
    TimeInterface $time,
    AccountInterface $current_user,
    RequestStack $request_stack,
  ) {
    parent::__construct(
      $entity_repository,
      $entity_type_bundle_info,
      $time
    );
    $this->dateFormatter = $date_formatter;
    $this->currentUser = $current_user;
    $this->requestStack = $request_stack;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity.repository'),
      $container->get('date.formatter'),
      $container->get('entity_type.bundle.info'),
      $container->get('datetime.time'),
      $container->get('current_user'),
      $container->get('request_stack')
    );
  }

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

    /** @var \Drupal\arch_order\Entity\OrderInterface $order */
    $order = $this->entity;

    // Sets 'Create new revision' checked by default if order is not a new one.
    if (!$order->isNew()) {
      $form['revision']['#default_value'] = TRUE;
    }

    if ($this->operation == 'edit') {
      $form['#title'] = $this->t('Edit @type <em>@title</em>', [
        '@type' => $order->getEntityTypeId(),
        '@title' => $order->label(),
      ]);
    }

    // Changed must be sent to the client, for later overwrite error checking.
    $form['changed'] = [
      '#type' => 'hidden',
      '#default_value' => $order->getChangedTime(),
    ];

    $form['advanced']['#attributes']['class'][] = 'entity-meta';

    $form['meta'] = [
      '#type' => 'details',
      '#group' => 'advanced',
      '#weight' => -10,
      '#title' => $this->t('Status', [], ['context' => 'arch_order']),
      '#attributes' => ['class' => ['entity-meta__header']],
      '#tree' => TRUE,
      '#access' => $this->currentUser->hasPermission('administer orders'),
    ];

    if ($order->isNew()) {
      $changed_markup = $this->t('Not saved yet');
    }
    else {
      $changed_markup = $this->dateFormatter->format($order->getChangedTime(), 'short');
    }
    $form['meta']['changed'] = [
      '#type' => 'item',
      '#title' => $this->t('Last saved'),
      '#markup' => $changed_markup,
      '#wrapper_attributes' => ['class' => ['entity-meta__last-saved']],
    ];

    $form['meta']['author'] = [
      '#type' => 'item',
      '#title' => $this->t('Customer', [], ['context' => 'arch_order']),
      '#markup' => (!empty($order->getOwner()) ? $order->getOwner()->getDisplayName() : ''),
      '#wrapper_attributes' => ['class' => ['entity-meta__author']],
    ];

    // Order creator information for administrators.
    $form['author'] = [
      '#type' => 'details',
      '#title' => $this->t('Authoring information'),
      '#group' => 'advanced',
      '#attributes' => [
        'class' => ['order-form-author'],
      ],
      '#attached' => [
        'library' => ['arch_order/drupal.order'],
      ],
      '#weight' => 90,
      '#optional' => TRUE,
    ];

    if (isset($form['uid'])) {
      $form['uid']['#group'] = 'author';
    }

    if (isset($form['created'])) {
      $form['created']['#group'] = 'author';
    }

    $form['#attached']['library'][] = 'arch_order/form';

    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function save(array $form, FormStateInterface $form_state) {
    /** @var \Drupal\arch_order\Entity\Order $order */
    $order = $this->entity;
    $insert = $order->isNew();
    $order->save();
    $order_link = $order->toLink($this->t('View'))->toString();
    $context = [
      '@type' => $order->getEntityTypeId(),
      '%title' => $order->label(),
      'link' => $order_link,
    ];
    $t_args = [
      '%title' => $order->toLink($order->label())->toString(),
    ];

    if ($insert) {
      $this->logger('arch')->notice('@type: added %title.', $context);
      $this->messenger()->addStatus($this->t('Order %title has been created.', $t_args, ['context' => 'arch_order']));
    }
    else {
      $this->logger('arch')->notice('@type: updated %title.', $context);
      $this->messenger()->addStatus($this->t('Order %title has been updated.', $t_args, ['context' => 'arch_order']));
    }

    if ($order->id()) {
      $form_state->setValue('oid', $order->id());
      $form_state->set('oid', $order->id());
      if ($order->access('view')) {
        $form_state->setRedirect(
          'entity.order.canonical',
          ['order' => $order->id()]
        );
      }
      else {
        $form_state->setRedirect('<front>');
      }
    }
    else {
      // In the unlikely case something went wrong on save, the order will be
      // rebuilt and order form redisplayed the same way as in preview.
      $this->messenger()->addError($this->t('The order could not be saved.', [], ['context' => 'arch_order']));
      $form_state->setRebuild();
    }
  }

}

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

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