delivery-8.x-1.x-dev/src/Form/DeliveryPushForm.php

src/Form/DeliveryPushForm.php
<?php

namespace Drupal\delivery\Form;

use Drupal\Core\Entity\EntityRepositoryInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\Core\Form\ConfirmFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Drupal\delivery\DeliveryInterface;
use Drupal\delivery\DeliveryService;
use Drupal\delivery\Entity\DeliveryItem;
use Symfony\Component\DependencyInjection\ContainerInterface;

class DeliveryPushForm extends ConfirmFormBase {

  public static $BATCH_THRESHOLD = 10;

  /**
   * @var \Drupal\delivery\DeliveryInterface
   *  The delivery object.
   */
  protected $delivery;

  /**
   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
   *  The entity type manager service.
   */
  protected $entityTypeManager;

  /**
   * @var \Drupal\Core\Entity\EntityRepositoryInterface $entityRepository
   *  The entity repository service.
   */
  protected $entityRepository;

  /**
   * @var \Drupal\delivery\DeliveryService
   */
  protected $deliveryService;

  /**
   * @var \Drupal\Core\Messenger\MessengerInterface
   *  The messenger service.
   */
  protected $messenger;

  /**
   * DeliveryPushConfirmFom constructor.
   *
   * @param \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   * @param \Drupal\Core\Entity\EntityRepositoryInterface $entity_repository
   * @param \Drupal\delivery\DeliveryService $deliveryService
   */
  public function __construct(
    EntityTypeManagerInterface $entity_type_manager,
    MessengerInterface $messenger,
    EntityRepositoryInterface $entity_repository,
    DeliveryService $deliveryService
  ) {
    $this->deliveryService = $deliveryService;
    $this->entityTypeManager = $entity_type_manager;
    $this->messenger = $messenger;
    $this->entityRepository = $entity_repository;
  }

  /**
   * {@inheritdoc}
   */
  public static function create(ContainerInterface $container) {
    return new static(
      $container->get('entity_type.manager'),
      $container->get('messenger'),
      $container->get('entity.repository'),
      $container->get('delivery.service')
    );
  }

  /**
   * {@inheritdoc}
   */
  public function getQuestion() {
    return $this->t('Are you sure you want to push the changes of the %title delivery?', ['%title' => $this->delivery->label()]);
  }

  /**
   * {@inheritdoc}
   *
   * @throws \Drupal\Core\Entity\EntityMalformedException
   */
  public function getCancelUrl() {
    return $this->delivery->toUrl();
  }

  /**
   * {@inheritdoc}
   */
  public function getFormId() {
    return 'delivery_push_changes';
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state, DeliveryInterface $delivery = NULL) {
    $this->delivery = $delivery;

    $form = parent::buildForm($form, $form_state);
    $form_state->set('workspace_safe', TRUE);
    return $form;
  }

  /**
   * {@inheritdoc}
   */
  public function submitForm(array &$form, FormStateInterface $form_state) {
    $batch = [
      'finished' => [$this, 'finishPushChanges'],
      'title' => $this->t('Push changes'),
      'progress_message' => $this->t('Pushing changes @current of @total.'),
      'error_message' => $this->t('Error pushing changes.'),
    ];

    foreach ($this->delivery->items as $item) {
      $batch['operations'][] = [
        [$this, 'pushDeliveryItem'], [$item->target_id]
      ];
    }

    $form_state->setRedirectUrl($this->getCancelUrl());
    batch_set($batch);
  }

  /**
   *
   */
  public function pushDeliveryItem($item_id, &$context) {
    $deliveryItem = DeliveryItem::load($item_id);
    if (isset($deliveryItem->resolution->value)) {
      return;
    }
    $this->deliveryService->acceptDeliveryItem($deliveryItem, 'published');
  }

  /**
   *
   */
  public function finishPushChanges($success, $results) {
    if ($success) {
      $this->messenger->addStatus($this->t('The changes have been pushed.'));
    }
    else {
      $this->messenger->addError($this->t('An error occurred trying to push the changes.'), 'error');
    }
  }
}

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

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