You are here

protected function ScheduledPublishWidget::addEntries in Scheduled Publish 8.3

Adds existing entries to the widget.

1 call to ScheduledPublishWidget::addEntries()
ScheduledPublishWidget::formElement in src/Plugin/Field/FieldWidget/ScheduledPublishWidget.php
Returns the form for a single field widget.

File

src/Plugin/Field/FieldWidget/ScheduledPublishWidget.php, line 176

Class

ScheduledPublishWidget
Plugin implementation of the 'scheduled_publish_widget' widget.

Namespace

Drupal\scheduled_publish\Plugin\Field\FieldWidget

Code

protected function addEntries(&$element, FormStateInterface $form_state, $parents, $field_name, $wrapper) {
  $entries = $form_state
    ->get([
    'scheduled_publish',
    $field_name,
  ]);
  $element['entries'] = [
    '#type' => 'container',
    '#attributes' => [
      'class' => 'scheduled-publish-entries',
    ],
  ];
  foreach ($entries as $key => $value) {

    // First check to see if this entry should be displayed as a form.
    if (!empty($value['form'])) {

      // Add the appropriate form.
      $element['entries'][$key]['form'] = [
        '#type' => 'container',
        '#attributes' => [
          'class' => 'scheduled-publish-entry-form',
        ],
        '#parents' => array_merge($parents, [
          'entries',
          $key,
          'form',
        ]),
        '#wrapper_attributes' => [
          'colspan' => 4,
        ],
      ];
      if ($value['form'] == 'edit') {
        $this
          ->buildEditForm($element['entries'][$key]['form'], $wrapper, $field_name, $value, $form_state);
      }
      elseif ($value['form'] == 'remove') {
        $this
          ->buildRemoveForm($element['entries'][$key]['form'], $wrapper, $field_name, $value);
      }
    }
    else {
      $element['entries'][$key] = [
        '#type' => 'container',
        '#attributes' => [
          'class' => 'scheduled-publish-entry',
        ],
        'date' => [
          '#type' => 'html_tag',
          '#tag' => 'div',
          '#value' => $value['date_display'],
        ],
        'state' => [
          '#type' => 'html_tag',
          '#tag' => 'div',
          '#value' => $value['state_display'],
          '#attributes' => [
            'class' => 'scheduled-publish-entry-state',
          ],
        ],
        'actions' => [
          '#type' => 'container',
          '#attributes' => [
            'class' => 'scheduled-publish-entry-actions',
          ],
          'edit' => [
            '#type' => 'button',
            '#value' => $this
              ->t('Edit'),
            '#name' => 'sp-' . $field_name . '-entry-edit-' . $key,
            '#limit_validation_errors' => [],
            '#ajax' => [
              'callback' => [
                get_called_class(),
                'getElement',
              ],
              'wrapper' => $wrapper,
            ],
            '#sp_id' => $field_name,
            '#sp_row_delta' => $key,
          ],
          'remove' => [
            '#type' => 'button',
            '#value' => $this
              ->t('Remove'),
            '#name' => 'sp-' . $field_name . '-entry-remove-' . $key,
            '#limit_validation_errors' => [],
            '#ajax' => [
              'callback' => [
                get_called_class(),
                'getElement',
              ],
              'wrapper' => $wrapper,
            ],
            '#sp_id' => $field_name,
            '#sp_row_delta' => $key,
          ],
        ],
      ];
    }
  }
}