DevelGenerateForm.php 3.2 KB

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