Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / content_moderation / src / Form / ContentModerationConfigureForm.php
diff --git a/web/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php b/web/core/modules/content_moderation/src/Form/ContentModerationConfigureForm.php
new file mode 100644 (file)
index 0000000..6006c9a
--- /dev/null
@@ -0,0 +1,142 @@
+<?php
+
+namespace Drupal\content_moderation\Form;
+
+use Drupal\Component\Serialization\Json;
+use Drupal\content_moderation\ModerationInformationInterface;
+use Drupal\Core\DependencyInjection\ContainerInjectionInterface;
+use Drupal\Core\Entity\EntityTypeBundleInfoInterface;
+use Drupal\Core\Entity\EntityTypeManagerInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Url;
+use Drupal\workflows\Plugin\WorkflowTypeConfigureFormBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * The content moderation WorkflowType configuration form.
+ *
+ * @see \Drupal\content_moderation\Plugin\WorkflowType\ContentModeration
+ */
+class ContentModerationConfigureForm extends WorkflowTypeConfigureFormBase implements ContainerInjectionInterface {
+
+  /**
+   * The entity type manager.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeManagerInterface
+   */
+  protected $entityTypeManager;
+
+  /**
+   * The moderation info service.
+   *
+   * @var \Drupal\content_moderation\ModerationInformationInterface
+   */
+  protected $moderationInfo;
+
+  /**
+   * The entity type type bundle info service.
+   *
+   * @var \Drupal\Core\Entity\EntityTypeBundleInfoInterface
+   */
+  protected $entityTypeBundleInfo;
+
+  /**
+   * Create an instance of ContentModerationConfigureForm.
+   */
+  public function __construct(EntityTypeManagerInterface $entityTypeManager, ModerationInformationInterface $moderationInformation, EntityTypeBundleInfoInterface $entityTypeBundleInfo) {
+    $this->entityTypeManager = $entityTypeManager;
+    $this->moderationInfo = $moderationInformation;
+    $this->entityTypeBundleInfo = $entityTypeBundleInfo;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('entity_type.manager'),
+      $container->get('content_moderation.moderation_information'),
+      $container->get('entity_type.bundle.info')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  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' => 700,
+                ]),
+              ],
+            ],
+          ],
+        ],
+      ];
+    }
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitConfigurationForm(array &$form, FormStateInterface $form_state) {
+    // Configuration is updated from modal windows launched from this form, no
+    // need to change any configuration here.
+  }
+
+}