You are here

public function ConditionsItemsController::itemsTable in Business Rules 2.x

Same name and namespace in other branches
  1. 8 src/Controller/ConditionsItemsController.php \Drupal\business_rules\Controller\ConditionsItemsController::itemsTable()

The items table.

Parameters

string $condition_id: The condition id.

string $condition_item_type: The condition item type: success|fail.

string $item_type: The item type action|condition.

string $method: The method name: ajax|nojs.

Return value

array|\Drupal\Core\Ajax\AjaxResponse Render array or AjaxResponse.

1 string reference to 'ConditionsItemsController::itemsTable'
business_rules.routing.yml in ./business_rules.routing.yml
business_rules.routing.yml

File

src/Controller/ConditionsItemsController.php, line 155

Class

ConditionsItemsController
Class ConditionsItemsController.

Namespace

Drupal\business_rules\Controller

Code

public function itemsTable($condition_id, $condition_item_type, $item_type, $method) {
  $this
    ->init($item_type);

  /** @var \Drupal\business_rules\ConditionInterface $condition */
  $condition = Condition::load($condition_id);
  $this->items = $condition
    ->filterContextAvailableItems($this->items);
  if ($condition_item_type == 'success') {
    $this->savedItems = $condition
      ->getSuccessItems();
  }
  elseif ($condition_item_type == 'fail') {
    $this->savedItems = $condition
      ->getFailItems();
  }
  $table['#title'] = $this
    ->t('Add @label_plural on %condition', [
    '%condition' => $condition
      ->label(),
    '@label_plural' => $this->labelPlural,
  ]);
  $table['#attached']['library'][] = 'system/drupal.system.modules';
  $table['filters'] = [
    '#type' => 'container',
    '#attributes' => [
      'class' => [
        'table-filter',
        'js-show',
      ],
    ],
  ];
  $table['filters']['text'] = [
    '#type' => 'search',
    '#title' => $this
      ->t('Search'),
    '#size' => 30,
    '#placeholder' => $this
      ->t('Search for a @label key', [
      '@label' => $this->label,
    ]),
    '#attributes' => [
      'class' => [
        'table-filter-text',
      ],
      'data-table' => '.searchable-list',
      'autocomplete' => 'off',
      'title' => $this
        ->t('Enter a part of the @label key to filter by.', [
        '@label' => $this->label,
      ]),
    ],
  ];
  $table['help'] = [
    '#type' => 'markup',
    '#markup' => $this
      ->t('If the Condition is context dependent, only items with the same Entity/Bundle as the condition or with no context dependency are visible on this form.'),
  ];
  $header = [
    'label' => $this->label,
    'id' => $this
      ->t('Machine Name'),
    'type' => $this
      ->t('Type'),
    'description' => $this
      ->t('Description'),
    'operations' => $this
      ->t('Operations'),
    'filter' => [
      'data' => [
        '#markup' => 'filter',
      ],
      'style' => 'display: none',
    ],
  ];
  $rows = [];
  foreach ($this->items as $item) {
    if (!in_array($item
      ->Id(), array_keys($this->savedItems)) && $item
      ->id() != $condition
      ->id()) {
      $listBuilder = $this->entityTypeManager
        ->getListBuilder($item
        ->getEntityTypeId());
      $operations = $listBuilder
        ->buildOperations($item);
      $search_string = $item
        ->label() . ' ' . $item
        ->id() . ' ' . $item
        ->getTypeLabel() . ' ' . $item
        ->getDescription();
      $link = Link::createFromRoute($item
        ->label(), 'business_rules.condition.items.add', [
        'condition_id' => $condition_id,
        'condition_item_type' => $condition_item_type,
        'item_id' => $item
          ->Id(),
        'item_type' => $item_type,
      ]);
      $rows[$item
        ->id()] = [
        'label' => [
          'data' => $link,
        ],
        'id' => [
          'data' => [
            '#markup' => $item
              ->id(),
          ],
        ],
        'type' => [
          'data' => [
            '#markup' => $item
              ->getTypeLabel(),
          ],
        ],
        'description' => [
          'data' => [
            '#markup' => $item
              ->getDescription(),
          ],
        ],
        'operations' => [
          'data' => $operations,
        ],
        'filter' => [
          'data' => [
            [
              '#markup' => '<span class="table-filter-text-source">' . $search_string . '</span>',
            ],
          ],
          'style' => [
            'display: none',
          ],
        ],
      ];
    }
  }
  $table['business_rule_items'] = [
    '#type' => 'table',
    '#header' => $header,
    '#rows' => $rows,
    '#attributes' => [
      'class' => [
        'searchable-list',
      ],
    ],
  ];
  if ($method == 'ajax') {
    $table['#attached']['library'][] = 'core/drupal.dialog.ajax';
    $options = [
      'width' => '75%',
    ];
    $title = $this
      ->t('Add @item', [
      '@item' => $this->label,
    ]);
    $response = new AjaxResponse();
    $response
      ->addCommand(new OpenModalDialogCommand($title, $table, $options));
    return $response;
  }
  else {
    return $table;
  }
}