Version 1
[yaffs-website] / web / modules / contrib / devel / devel_generate / src / Form / DevelGenerateForm.php
1 <?php
2
3 namespace Drupal\devel_generate\Form;
4
5 use Drupal\Component\Plugin\PluginManagerInterface;
6 use Drupal\Core\Form\FormBase;
7 use Drupal\Core\Form\FormStateInterface;
8 use Drupal\devel_generate\DevelGenerateException;
9 use Symfony\Component\DependencyInjection\ContainerInterface;
10
11 /**
12  * Defines a form that allows privileged users to generate entities.
13  */
14 class DevelGenerateForm extends FormBase {
15
16   /**
17    * The manager to be used for instantiating plugins.
18    *
19    * @var \Drupal\Component\Plugin\PluginManagerInterface
20    */
21   protected $develGenerateManager;
22
23   /**
24    * Constructs a new DevelGenerateForm object.
25    *
26    * @param \Drupal\Component\Plugin\PluginManagerInterface $devel_generate_manager
27    *   The manager to be used for instantiating plugins.
28    */
29   public function __construct(PluginManagerInterface $devel_generate_manager) {
30     $this->develGenerateManager = $devel_generate_manager;
31   }
32
33   /**
34    * {@inheritdoc}
35    */
36   public static function create(ContainerInterface $container) {
37     return new static(
38       $container->get('plugin.manager.develgenerate')
39     );
40   }
41
42   /**
43    * {@inheritdoc}
44    */
45   public function getFormId() {
46     return 'devel_generate_form_' . $this->getPluginIdFromRequest();
47   }
48
49   /**
50    * Returns the value of the param _plugin_id for the current request.
51    *
52    * @see \Drupal\devel_generate\Routing\DevelGenerateRouteSubscriber
53    */
54   protected function getPluginIdFromRequest() {
55     $request = $this->getRequest();
56     return $request->get('_plugin_id');
57   }
58
59   /**
60    * Returns a DevelGenerate plugin instance for a given plugin id.
61    *
62    * @param string $plugin_id
63    *   The plugin_id for the plugin instance.
64    *
65    * @return \Drupal\devel_generate\DevelGenerateBaseInterface
66    *   A DevelGenerate plugin instance.
67    */
68   public function getPluginInstance($plugin_id) {
69     $instance = $this->develGenerateManager->createInstance($plugin_id, array());
70     return $instance;
71   }
72
73   /**
74    * {@inheritdoc}
75    */
76   public function buildForm(array $form, FormStateInterface $form_state) {
77     $plugin_id = $this->getPluginIdFromRequest();
78     $instance = $this->getPluginInstance($plugin_id);
79     $form = $instance->settingsForm($form, $form_state);
80     $form['actions'] = array('#type' => 'actions');
81     $form['actions']['submit'] = array(
82       '#type' => 'submit',
83       '#value' => $this->t('Generate'),
84       '#button_type' => 'primary',
85     );
86
87     return $form;
88   }
89
90   /**
91    * {@inheritdoc}
92    */
93   public function validateForm(array &$form, FormStateInterface $form_state) {
94     $plugin_id = $this->getPluginIdFromRequest();
95     $instance = $this->getPluginInstance($plugin_id);
96     $instance->settingsFormValidate($form, $form_state);
97   }
98
99   /**
100    * {@inheritdoc}
101    */
102   public function submitForm(array &$form, FormStateInterface $form_state) {
103     try {
104       $plugin_id = $this->getPluginIdFromRequest();
105       $instance = $this->getPluginInstance($plugin_id);
106       $instance->generate($form_state->getValues());
107     }
108     catch (DevelGenerateException $e) {
109       $this->logger('DevelGenerate', $this->t('Failed to generate elements due to "%error".', array('%error' => $e->getMessage())));
110       drupal_set_message($this->t('Failed to generate elements due to "%error".', array('%error' => $e->getMessage())));
111     }
112   }
113
114 }