function ContentModerationConfigureForm::buildConfigurationForm

Same name in other branches
  1. 9 core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php \Drupal\content_moderation\Form\ContentModerationConfigureForm::buildConfigurationForm()
  2. 8.9.x core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php \Drupal\content_moderation\Form\ContentModerationConfigureForm::buildConfigurationForm()
  3. 10 core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php \Drupal\content_moderation\Form\ContentModerationConfigureForm::buildConfigurationForm()

Overrides PluginFormInterface::buildConfigurationForm

File

core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php, line 67

Class

ContentModerationConfigureForm
The content moderation WorkflowType configuration form.

Namespace

Drupal\content_moderation\Form

Code

public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
    $workflow = $form_state->getFormObject()
        ->getEntity();
    $header = [
        'type' => $this->t('Items'),
        'operations' => $this->t('Operations'),
    ];
    $form['entity_types_container'] = [
        '#type' => 'details',
        '#title' => $this->t('This workflow applies to:'),
        '#open' => TRUE,
    ];
    $form['entity_types_container']['entity_types'] = [
        '#type' => 'table',
        '#header' => $header,
        '#empty' => $this->t('There are no entity types.'),
    ];
    $entity_types = $this->entityTypeManager
        ->getDefinitions();
    foreach ($entity_types as $entity_type) {
        if (!$this->moderationInfo
            ->canModerateEntitiesOfEntityType($entity_type)) {
            continue;
        }
        $selected_bundles = [];
        foreach ($this->entityTypeBundleInfo
            ->getBundleInfo($entity_type->id()) as $bundle_id => $bundle) {
            if ($this->workflowType
                ->appliesToEntityTypeAndBundle($entity_type->id(), $bundle_id)) {
                $selected_bundles[$bundle_id] = $bundle['label'];
            }
        }
        $selected_bundles_list = [
            '#theme' => 'item_list',
            '#items' => $selected_bundles,
            '#context' => [
                'list_style' => 'comma-list',
            ],
            '#empty' => $this->t('none'),
        ];
        $form['entity_types_container']['entity_types'][$entity_type->id()] = [
            'type' => [
                '#type' => 'inline_template',
                '#template' => '<strong>{{ label }}</strong><br><span id="selected-{{ entity_type_id }}">{{ selected_bundles }}</span>',
                '#context' => [
                    'label' => $this->t('@bundle types', [
                        '@bundle' => $entity_type->getLabel(),
                    ]),
                    'entity_type_id' => $entity_type->id(),
                    'selected_bundles' => $selected_bundles_list,
                ],
            ],
            'operations' => [
                '#type' => 'operations',
                '#links' => [
                    'select' => [
                        'title' => $this->t('Select'),
                        'url' => Url::fromRoute('content_moderation.workflow_type_edit_form', [
                            'workflow' => $workflow->id(),
                            'entity_type_id' => $entity_type->id(),
                        ]),
                        'attributes' => [
                            'class' => [
                                'use-ajax',
                            ],
                            'data-dialog-type' => 'modal',
                            'data-dialog-options' => Json::encode([
                                'width' => 880,
                            ]),
                        ],
                    ],
                ],
            ],
        ];
    }
    $workflow_type_configuration = $this->workflowType
        ->getConfiguration();
    $form['workflow_settings'] = [
        '#type' => 'details',
        '#title' => $this->t('Workflow Settings'),
        '#open' => TRUE,
    ];
    $form['workflow_settings']['default_moderation_state'] = [
        '#title' => $this->t('Default moderation state'),
        '#type' => 'select',
        '#required' => TRUE,
        '#options' => array_map([
            State::class,
            'labelCallback',
        ], $this->workflowType
            ->getStates()),
        '#description' => $this->t('Select the state that new content will be assigned. This state will appear as the default in content forms and the available target states will be based on the transitions available from this state.'),
        '#default_value' => $workflow_type_configuration['default_moderation_state'] ?? 'draft',
    ];
    return $form;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.