You are here

public function BusinessRuleForm::formItems in Business Rules 8

Same name and namespace in other branches
  1. 2.x src/Form/BusinessRuleForm.php \Drupal\business_rules\Form\BusinessRuleForm::formItems()

Provide the form fields for add Business Rule's Items.

Parameters

array $form: The form array.

\Drupal\Core\Form\FormStateInterface $form_state: The form state object.

Return value

array The render array.

1 call to BusinessRuleForm::formItems()
BusinessRuleForm::form in src/Form/BusinessRuleForm.php
Gets the actual form array to be built.

File

src/Form/BusinessRuleForm.php, line 273

Class

BusinessRuleForm
Class BusinessRuleForm.

Namespace

Drupal\business_rules\Form

Code

public function formItems(array $form, FormStateInterface $form_state) {
  $user_input = $form_state
    ->getUserInput();

  /** @var \Drupal\business_rules\Entity\BusinessRule $rule */
  $rule = $this->entity;
  $label = $this
    ->t('Item');
  $label_plural = $this
    ->t('Items');
  $items = $rule
    ->getItems();
  uasort($items, function ($a, $b) {
    return $a
      ->getWeight() < $b
      ->getWeight() ? -1 : 1;
  });
  $header = [
    'type' => $this
      ->t('Type'),
    'label' => $label,
    'weight' => $this
      ->t('Weight'),
    'id' => $this
      ->t('Machine name'),
    'subtype' => $this
      ->t('Subtype'),
    'description' => $this
      ->t('Description'),
    'operations' => $this
      ->t('Operations'),
    'business_rule_item_type' => [
      'data' => '',
      'width' => '0px',
    ],
  ];
  $table['items'] = [
    '#type' => 'table',
    '#header' => $header,
    '#attributes' => [
      'id' => 'business_rules-items',
    ],
    '#empty' => $this
      ->t('There are currently no @label in this rule. Add one by selecting an option below.', [
      '@label' => $label_plural,
    ]),
    '#tabledrag' => [
      [
        'action' => 'order',
        'relationship' => 'sibling',
        'group' => 'items-order-weight',
      ],
    ],
  ];
  if (is_array($items)) {
    foreach ($items as $value) {
      if ($value
        ->getType() == 'condition') {
        $item = Condition::load($value
          ->getId());
      }
      elseif ($value
        ->getType() == 'action') {
        $item = Action::load($value
          ->getId());
      }
      $item_weight = !empty($item) ? $value
        ->getWeight() : '';
      $route_remove_item = 'business_rules.items.remove';
      if (!empty($item)) {
        $key = $item
          ->id();
        $listBuilder = $this->entityTypeManager
          ->getListBuilder($item
          ->getEntityTypeId());
        $operations = $listBuilder
          ->buildOperations($item);
        $operations['#links']['remove'] = [
          'title' => $this
            ->t('Remove'),
          'url' => Url::fromRoute($route_remove_item, [
            'business_rule' => $rule
              ->id(),
            'item_type' => $value
              ->getType(),
            'item_id' => $item
              ->id(),
            'method' => 'nojs',
          ], [
            'attributes' => [
              'class' => [
                'use-ajax',
              ],
            ],
          ]),
          'weight' => 1,
        ];
        uasort($operations['#links'], function ($a, $b) {
          return $a['weight'] < $b['weight'] ? -1 : 1;
        });
        foreach ($operations['#links'] as $i => $link) {
          $uri = $this->util
            ->getCurrentUri()
            ->toString();
          $operations['#links'][$i]['url']
            ->setRouteParameter('destination', $uri);
        }
        $item_weight = $this
          ->generateItemWeight('item', $item_weight);
        $weight = [
          '#type' => 'weight',
          '#title' => $this
            ->t('Weight for item'),
          '#title_display' => 'invisible',
          '#default_value' => $item_weight,
          '#delta' => 100,
          '#attributes' => [
            'class' => [
              'items-order-weight',
            ],
          ],
        ];
        $table['items'][$key] = [
          '#attributes' => [
            'class' => 'draggable',
            'id' => $item
              ->id(),
          ],
          '#weight' => isset($user_input['effects']) ? $user_input['effects'][$key]['weight'] : NULL,
          'type' => [
            '#markup' => $item
              ->getBusinessRuleItemTranslatedType(),
          ],
          'item' => [
            '#tree' => FALSE,
            'label' => [
              '#markup' => $item
                ->label(),
            ],
          ],
          'weight' => $weight,
          'id' => [
            '#markup' => $item
              ->id(),
          ],
          'subtype' => [
            '#markup' => $item
              ->getTypeLabel(),
          ],
          'description' => [
            '#markup' => $item
              ->getDescription(),
          ],
          'operations' => $operations,
          'business_rule_item_type' => [
            '#type' => 'value',
            '#value' => $value
              ->getType(),
          ],
        ];
      }
    }
  }
  $add_condition = Link::createFromRoute($this
    ->t('Add Condition'), 'business_rules.items.table', [
    'business_rule' => $rule
      ->id(),
    'item_type' => 'condition',
    'method' => 'nojs',
  ], [
    'attributes' => [
      'class' => [
        'use-ajax',
      ],
    ],
  ]);
  $add_action = Link::createFromRoute($this
    ->t('Add Action'), 'business_rules.items.table', [
    'business_rule' => $rule
      ->id(),
    'item_type' => 'action',
    'method' => 'nojs',
  ], [
    'attributes' => [
      'class' => [
        'use-ajax',
      ],
    ],
  ]);
  $table['add'][] = [
    'data' => [
      'add' => [
        '#type' => 'markup',
        '#markup' => $add_condition
          ->toString() . ' | ' . $add_action
          ->toString(),
        '#prefix' => '<div id="business_rule-add_buttons">',
        '#suffix' => '</div>',
      ],
    ],
  ];
  return $table;
}