+++ /dev/null
-<?php
-
-namespace Drupal\content_moderation\Form;
-
-use Drupal\content_moderation\Plugin\WorkflowType\ContentModeration;
-use Drupal\workflows\WorkflowInterface;
-use Drupal\Core\Entity\EntityForm;
-use Drupal\Core\Entity\EntityTypeManagerInterface;
-use Drupal\Core\Form\FormStateInterface;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-
-/**
- * Form for configuring moderation usage on a given entity bundle.
- */
-class BundleModerationConfigurationForm extends EntityForm {
-
- /**
- * Entity Type Manager service.
- *
- * @var \Drupal\Core\Entity\EntityTypeManagerInterface
- */
- protected $entityTypeManager;
-
- /**
- * {@inheritdoc}
- */
- public function __construct(EntityTypeManagerInterface $entity_type_manager) {
- $this->entityTypeManager = $entity_type_manager;
- }
-
- /**
- * {@inheritdoc}
- */
- public static function create(ContainerInterface $container) {
- return new static($container->get('entity_type.manager'));
- }
-
- /**
- * {@inheritdoc}
- *
- * Blank out the base form ID so that form alters that use the base form ID to
- * target both add and edit forms don't pick up this form.
- */
- public function getBaseFormId() {
- return NULL;
- }
-
- /**
- * {@inheritdoc}
- */
- public function form(array $form, FormStateInterface $form_state) {
- /* @var \Drupal\Core\Config\Entity\ConfigEntityInterface $bundle */
- $bundle = $this->getEntity();
- $bundle_of_entity_type = $this->entityTypeManager->getDefinition($bundle->getEntityType()->getBundleOf());
- /* @var \Drupal\workflows\WorkflowInterface[] $workflows */
- $workflows = $this->entityTypeManager->getStorage('workflow')->loadMultiple();
-
- $options = array_map(function (WorkflowInterface $workflow) {
- return $workflow->label();
- }, array_filter($workflows, function (WorkflowInterface $workflow) {
- return $workflow->status() && $workflow->getTypePlugin() instanceof ContentModeration;
- }));
-
- $selected_workflow = array_reduce($workflows, function ($carry, WorkflowInterface $workflow) use ($bundle_of_entity_type, $bundle) {
- $plugin = $workflow->getTypePlugin();
- if ($plugin instanceof ContentModeration && $plugin->appliesToEntityTypeAndBundle($bundle_of_entity_type->id(), $bundle->id())) {
- return $workflow->id();
- }
- return $carry;
- });
- $form['workflow'] = [
- '#type' => 'select',
- '#title' => $this->t('Select the workflow to apply'),
- '#default_value' => $selected_workflow,
- '#options' => $options,
- '#required' => FALSE,
- '#empty_value' => '',
- ];
-
- $form['original_workflow'] = [
- '#type' => 'value',
- '#value' => $selected_workflow,
- ];
-
- $form['bundle'] = [
- '#type' => 'value',
- '#value' => $bundle->id(),
- ];
-
- $form['entity_type'] = [
- '#type' => 'value',
- '#value' => $bundle_of_entity_type->id(),
- ];
-
- // Add a special message when moderation is being disabled.
- if ($selected_workflow) {
- $form['enable_workflow_note'] = [
- '#type' => 'item',
- '#description' => $this->t('After disabling moderation, any existing forward drafts will be accessible via the "Revisions" tab.'),
- '#access' => !empty($selected_workflow)
- ];
- }
-
- return parent::form($form, $form_state);
- }
-
- /**
- * {@inheritdoc}
- */
- public function submitForm(array &$form, FormStateInterface $form_state) {
- // If moderation is enabled, revisions MUST be enabled as well. Otherwise we
- // can't have forward revisions.
- drupal_set_message($this->t('Your settings have been saved.'));
- }
-
- /**
- * {@inheritdoc}
- */
- public function save(array $form, FormStateInterface $form_state) {
- $entity_type_id = $form_state->getValue('entity_type');
- $bundle_id = $form_state->getValue('bundle');
- $new_workflow_id = $form_state->getValue('workflow');
- $original_workflow_id = $form_state->getValue('original_workflow');
- if ($new_workflow_id === $original_workflow_id) {
- // Nothing to do.
- return;
- }
- if ($original_workflow_id) {
- /* @var \Drupal\workflows\WorkflowInterface $workflow */
- $workflow = $this->entityTypeManager->getStorage('workflow')->load($original_workflow_id);
- $workflow->getTypePlugin()->removeEntityTypeAndBundle($entity_type_id, $bundle_id);
- $workflow->save();
- }
- if ($new_workflow_id) {
- /* @var \Drupal\workflows\WorkflowInterface $workflow */
- $workflow = $this->entityTypeManager->getStorage('workflow')->load($new_workflow_id);
- $workflow->getTypePlugin()->addEntityTypeAndBundle($entity_type_id, $bundle_id);
- $workflow->save();
- }
- }
-
- /**
- * {@inheritdoc}
- */
- protected function actions(array $form, FormStateInterface $form_state) {
- $actions['submit'] = [
- '#type' => 'submit',
- '#value' => $this->t('Save'),
- '#submit' => ['::submitForm', '::save'],
- ];
-
- return $actions;
- }
-
-}