Security update for Core, with self-updated composer
[yaffs-website] / web / core / modules / workflows / src / Form / WorkflowAddForm.php
1 <?php
2
3 namespace Drupal\workflows\Form;
4
5 use Drupal\Component\Plugin\PluginManagerInterface;
6 use Drupal\workflows\Entity\Workflow;
7 use Drupal\Core\Entity\EntityForm;
8 use Drupal\Core\Entity\EntityInterface;
9 use Drupal\Core\Form\FormStateInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
11
12 /**
13  * Form for adding workflows.
14  */
15 class WorkflowAddForm extends EntityForm {
16
17   /**
18    * The workflow type plugin manager.
19    *
20    * @var \Drupal\Component\Plugin\PluginManagerInterface
21    */
22   protected $workflowTypePluginManager;
23
24   /**
25    * WorkflowAddForm constructor.
26    *
27    * @param \Drupal\Component\Plugin\PluginManagerInterface $workflow_type_plugin_manager
28    *   The workflow type plugin manager.
29    */
30   public function __construct(PluginManagerInterface $workflow_type_plugin_manager) {
31     $this->workflowTypePluginManager = $workflow_type_plugin_manager;
32   }
33
34   /**
35    * {@inheritdoc}
36    */
37   public static function create(ContainerInterface $container) {
38     return new static(
39       $container->get('plugin.manager.workflows.type')
40     );
41   }
42
43   /**
44    * {@inheritdoc}
45    */
46   public function form(array $form, FormStateInterface $form_state) {
47     $form = parent::form($form, $form_state);
48
49     /* @var \Drupal\workflows\WorkflowInterface $workflow */
50     $workflow = $this->entity;
51     $form['label'] = [
52       '#type' => 'textfield',
53       '#title' => $this->t('Label'),
54       '#maxlength' => 255,
55       '#default_value' => $workflow->label(),
56       '#required' => TRUE,
57     ];
58
59     $form['id'] = [
60       '#type' => 'machine_name',
61       '#default_value' => $workflow->id(),
62       '#machine_name' => [
63         'exists' => [Workflow::class, 'load'],
64       ],
65     ];
66
67     $workflow_types = array_column($this->workflowTypePluginManager->getDefinitions(), 'label', 'id');
68
69     $form['workflow_type'] = [
70       '#type' => 'select',
71       '#title' => $this->t('Workflow type'),
72       '#required' => TRUE,
73       '#options' => $workflow_types,
74     ];
75
76     return $form;
77   }
78
79   /**
80    * {@inheritdoc}
81    */
82   public function save(array $form, FormStateInterface $form_state) {
83     /* @var \Drupal\workflows\WorkflowInterface $workflow */
84     $workflow = $this->entity;
85     $return = $workflow->save();
86     if (empty($workflow->getTypePlugin()->getStates())) {
87       drupal_set_message($this->t('Created the %label Workflow. In order for the workflow to be enabled there needs to be at least one state.', [
88         '%label' => $workflow->label(),
89       ]));
90       $form_state->setRedirectUrl($workflow->toUrl('add-state-form'));
91     }
92     else {
93       drupal_set_message($this->t('Created the %label Workflow.', [
94         '%label' => $workflow->label(),
95       ]));
96       $form_state->setRedirectUrl($workflow->toUrl('edit-form'));
97     }
98     return $return;
99   }
100
101   /**
102    * {@inheritdoc}
103    */
104   protected function copyFormValuesToEntity(EntityInterface $entity, array $form, FormStateInterface $form_state) {
105     // This form can only set the workflow's ID, label and the weights for each
106     // state.
107     /** @var \Drupal\workflows\WorkflowInterface $entity */
108     $values = $form_state->getValues();
109     $entity->set('label', $values['label']);
110     $entity->set('id', $values['id']);
111     $entity->set('type', $values['workflow_type']);
112   }
113
114 }