ifthenelse-8.x-1.x-dev-no-core/modules/contrib/if_then_else/src/IfthenelseRuleListBuilder.php

modules/contrib/if_then_else/src/IfthenelseRuleListBuilder.php
<?php

namespace Drupal\if_then_else;

use Drupal\Core\Config\Entity\DraggableListBuilder;
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\EntityStorageInterface;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Messenger\MessengerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Url;

/**
 * Defines a class to build a listing of ifthenelse rules.
 *
 * @see \Drupal\if_then_else\Entity\IfthenelseRule
 */
class IfthenelseRuleListBuilder extends DraggableListBuilder {

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

  /**
   * RoleListBuilder constructor.
   *
   * @param \Drupal\Core\Entity\EntityTypeInterface $entityType
   *   The entity type definition.
   * @param \Drupal\Core\Entity\EntityStorageInterface $storage
   *   The entity storage class.
   * @param \Drupal\Core\Messenger\MessengerInterface $messenger
   *   The messenger.
   */
  public function __construct(EntityTypeInterface $entityType,
                              EntityStorageInterface $storage,
                              MessengerInterface $messenger) {
    parent::__construct($entityType, $storage);
    $this->messenger = $messenger;
  }

  /**
   * {@inheritdoc}
   */
  public static function createInstance(ContainerInterface $container, EntityTypeInterface $entity_type) {
    return new static(
      $entity_type,
      $container->get('entity.manager')->getStorage($entity_type->id()),
      $container->get('messenger')
    );
  }

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

  /**
   * {@inheritdoc}
   */
  public function getDefaultOperations(EntityInterface $entity) {
    $operations = parent::getDefaultOperations($entity);
    $operations['edit'] = [
      'title' => $this
        ->t('Edit'),
      'weight' => 10,
      'url' => $entity
        ->toUrl('edit-form'),
    ];

    $operations['delete'] = [
      'title' => $this
        ->t('Delete'),
      'weight' => 100,
      'url' => $entity
        ->toUrl('delete-form'),
    ];

    $operations['clone'] = [
      'title' => $this
        ->t('Clone'),
      'weight' => 100,
      'url' => $entity->toUrl('clone'),
    ];

    if (!$entity->active) {
      $operations['enable'] = [
        'title' => $this
          ->t('Enable'),
        'weight' => 100,
        'url' => $entity->toUrl('enable'),
      ];
    }
    else {
      $operations['disable'] = [
        'title' => $this
          ->t('Disable'),
        'weight' => 100,
        'url' => $entity->toUrl('disable'),
      ];
    }
    return $operations;
  }

  /**
   * {@inheritdoc}
   */
  public function buildHeader() {
    // Create header of list.
    $header['label'] = t('Label');
    // $header['id'] = t('Rule Id');.
    return $header + parent::buildHeader();
  }

  /**
   * {@inheritdoc}
   */
  public function buildRow(EntityInterface $entity) {
    // Create body of list.
    $row['label'] = $entity->label();
    // $row['id'] = $entity->id();
    return $row + parent::buildRow($entity);
  }

  /**
   * {@inheritdoc}
   */
  public function buildForm(array $form, FormStateInterface $form_state) {
    $form['enabled']['heading']['#markup'] = '<h2>' . $this->t('Enabled', [], ['context' => 'Plural']) . '</h2>';
    $form['enabled']['#weight'] = -3;
    $form['enabled'][$this->entitiesKey] = [
      '#type' => 'table',
      '#header' => $this->buildHeader(),
      '#empty' => t('There are no @label enabled yet.', ['@label' => $this->entityType->getPluralLabel()]),
      '#tabledrag' => [
        [
          'action' => 'order',
          'relationship' => 'sibling',
          'group' => 'weight',
        ],
      ],
      '#weight' => 1,
    ];

    $form['disabled']['heading']['#markup'] = '<h2>' . $this->t('Disabled', [], ['context' => 'Plural']) . '</h2>';
    $disabled_header = $this->buildHeader();
    unset($disabled_header['weight']);
    $form['disabled'][$this->entitiesKey] = [
      '#type' => 'table',
      '#header' => $disabled_header,
      '#empty' => t('There are no @label disabled.', ['@label' => $this->entityType->getPluralLabel()]),
      '#weight' => 3,
    ];

    $this->entities = $this->load();
    $delta = 10;
    // Change the delta of the weight field if have more than 20 entities.
    if (!empty($this->weightKey)) {
      $count = count($this->entities);
      if ($count > 20) {
        $delta = ceil($count / 2);
      }
    }
    $button_status = FALSE;
    foreach ($this->entities as $entity) {
      $row = $this->buildRow($entity);
      if (isset($row['label'])) {
        $row['label'] = ['#markup' => $row['label']];
      }
      if (isset($row['weight'])) {
        $row['weight']['#delta'] = $delta;
      }
      if ($entity->active) {
        $form['enabled'][$this->entitiesKey][$entity->id()] = $row;
        $button_status = TRUE;
      }
      else {
        unset($row['weight']);
        $form['disabled'][$this->entitiesKey][$entity->id()] = $row;
      }
    }
    if ($button_status) {
      $form['actions']['#type'] = 'actions';
      $form['actions']['#weight'] = -2;
      $form['actions']['submit'] = [
        '#type' => 'submit',
        '#value' => t('Save'),
        '#button_type' => 'primary',
      ];

      $form['actions']['disable_rule'] = [
        '#title' => $this
          ->t('Disable All If Then Else'),
        '#type' => 'link',
        '#url' => Url::fromRoute('entity.ifthenelse.disable_all'),
        '#attributes' => ['class' => 'button js-form-submit form-submit'],
      ];
    }
    return $form;
  }

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

    $this->messenger->addStatus($this->t('Ifthenelse rule setting have been updated.'));
  }

}

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

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