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.
15 class WorkflowAddForm extends EntityForm {
18 * The workflow type plugin manager.
20 * @var \Drupal\Component\Plugin\PluginManagerInterface
22 protected $workflowTypePluginManager;
25 * WorkflowAddForm constructor.
27 * @param \Drupal\Component\Plugin\PluginManagerInterface $workflow_type_plugin_manager
28 * The workflow type plugin manager.
30 public function __construct(PluginManagerInterface $workflow_type_plugin_manager) {
31 $this->workflowTypePluginManager = $workflow_type_plugin_manager;
37 public static function create(ContainerInterface $container) {
39 $container->get('plugin.manager.workflows.type')
46 public function form(array $form, FormStateInterface $form_state) {
47 $form = parent::form($form, $form_state);
49 /* @var \Drupal\workflows\WorkflowInterface $workflow */
50 $workflow = $this->entity;
52 '#type' => 'textfield',
53 '#title' => $this->t('Label'),
55 '#default_value' => $workflow->label(),
56 '#description' => $this->t('Label for the Workflow.'),
61 '#type' => 'machine_name',
62 '#default_value' => $workflow->id(),
64 'exists' => [Workflow::class, 'load'],
68 $workflow_types = array_map(function ($plugin_definition) {
69 return $plugin_definition['label'];
70 }, $this->workflowTypePluginManager->getDefinitions());
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 // Initialize the workflow using the selected type plugin.
88 $workflow = $workflow->getTypePlugin()->initializeWorkflow($workflow);
89 $return = $workflow->save();
90 if (empty($workflow->getStates())) {
91 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.', [
92 '%label' => $workflow->label(),
94 $form_state->setRedirectUrl($workflow->toUrl('add-state-form'));
97 drupal_set_message($this->t('Created the %label Workflow.', [
98 '%label' => $workflow->label(),
100 $form_state->setRedirectUrl($workflow->toUrl('edit-form'));
108 protected function copyFormValuesToEntity(EntityInterface $entity, array $form, FormStateInterface $form_state) {
109 // This form can only set the workflow's ID, label and the weights for each
111 /** @var \Drupal\workflows\WorkflowInterface $entity */
112 $values = $form_state->getValues();
113 $entity->set('label', $values['label']);
114 $entity->set('id', $values['id']);
115 $entity->set('type', $values['workflow_type']);