3 namespace Drupal\workflows\Form;
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;
13 * Form for adding workflows.
17 class WorkflowAddForm extends EntityForm {
20 * The workflow type plugin manager.
22 * @var \Drupal\Component\Plugin\PluginManagerInterface
24 protected $workflowTypePluginManager;
27 * WorkflowAddForm constructor.
29 * @param \Drupal\Component\Plugin\PluginManagerInterface $workflow_type_plugin_manager
30 * The workflow type plugin manager.
32 public function __construct(PluginManagerInterface $workflow_type_plugin_manager) {
33 $this->workflowTypePluginManager = $workflow_type_plugin_manager;
39 public static function create(ContainerInterface $container) {
41 $container->get('plugin.manager.workflows.type')
48 public function form(array $form, FormStateInterface $form_state) {
49 $form = parent::form($form, $form_state);
51 /* @var \Drupal\workflows\WorkflowInterface $workflow */
52 $workflow = $this->entity;
54 '#type' => 'textfield',
55 '#title' => $this->t('Label'),
57 '#default_value' => $workflow->label(),
62 '#type' => 'machine_name',
63 '#default_value' => $workflow->id(),
65 'exists' => [Workflow::class, 'load'],
69 $workflow_types = array_column($this->workflowTypePluginManager->getDefinitions(), 'label', 'id');
71 $form['workflow_type'] = [
73 '#title' => $this->t('Workflow type'),
75 '#options' => $workflow_types,
84 public function save(array $form, FormStateInterface $form_state) {
85 /* @var \Drupal\workflows\WorkflowInterface $workflow */
86 $workflow = $this->entity;
87 $return = $workflow->save();
88 if (empty($workflow->getTypePlugin()->getStates())) {
89 $this->messenger()->addStatus($this->t('Created the %label Workflow. In order for the workflow to be enabled there needs to be at least one state.', [
90 '%label' => $workflow->label(),
92 $form_state->setRedirectUrl($workflow->toUrl('add-state-form'));
95 $this->messenger()->addStatus($this->t('Created the %label Workflow.', [
96 '%label' => $workflow->label(),
98 $form_state->setRedirectUrl($workflow->toUrl('edit-form'));
106 protected function copyFormValuesToEntity(EntityInterface $entity, array $form, FormStateInterface $form_state) {
107 // This form can only set the workflow's ID, label and the weights for each
109 /** @var \Drupal\workflows\WorkflowInterface $entity */
110 $values = $form_state->getValues();
111 $entity->set('label', $values['label']);
112 $entity->set('id', $values['id']);
113 $entity->set('type', $values['workflow_type']);