ModerationStateTransitionListBuilder::buildForm

public ModerationStateTransitionListBuilder::buildForm(array $form, FormStateInterface $form_state)

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides DraggableListBuilder::buildForm

File

core/modules/content_moderation/src/ModerationStateTransitionListBuilder.php, line 109

Class

ModerationStateTransitionListBuilder
Provides a listing of Moderation state transition entities.

Namespace

Drupal\content_moderation

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $this->entities = $this->load();

  // Get all the moderation states and sort them by weight.
  $states = $this->stateStorage->loadMultiple();
  uasort($states, array($this->entityType->getClass(), 'sort'));

  /** @var \Drupal\content_moderation\ModerationStateTransitionInterface $entity */
  $groups = array_fill_keys(array_keys($states), []);
  foreach ($this->entities as $entity) {
    $groups[$entity->getFromState()][] = $entity;
  }

  foreach ($groups as $group_name => $entities) {
    $form[$group_name] = [
      '#type' => 'details',
      '#title' => $this->t('From @state to...', ['@state' => $states[$group_name]->label()]),
      // Make sure that the first group is always open.
      '#open' => $group_name === array_keys($groups) [0],
    ];

    $form[$group_name][$this->entitiesKey] = array(
      '#type' => 'table',
      '#header' => $this->buildHeader(),
      '#empty' => t('There is no @label yet.', array('@label' => $this->entityType->getLabel())),
      '#tabledrag' => array(
        array(
          'action' => 'order',
          'relationship' => 'sibling',
          'group' => 'weight',
        ),
      ),
    );

    $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);
      }
    }
    foreach ($entities as $entity) {
      $row = $this->buildRow($entity);
      if (isset($row['label'])) {
        $row['label'] = array('#markup' => $row['label']);
      }
      if (isset($row['weight'])) {
        $row['weight']['#delta'] = $delta;
      }
      $form[$group_name][$this->entitiesKey][$entity->id()] = $row;
    }
  }

  $form['actions']['#type'] = 'actions';
  $form['actions']['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save order'),
    '#button_type' => 'primary',
  );

  return $form;
}
doc_Drupal
2016-10-29 09:29:04
Comments
Leave a Comment

Please login to continue.