diff --git a/modules/webform_ui/src/Form/WebformUiElementFormBase.php b/modules/webform_ui/src/Form/WebformUiElementFormBase.php
index 744c7d87..b083c615 100644
--- a/modules/webform_ui/src/Form/WebformUiElementFormBase.php
+++ b/modules/webform_ui/src/Form/WebformUiElementFormBase.php
@@ -235,7 +235,7 @@ abstract class WebformUiElementFormBase extends FormBase implements WebformUiEle
'#disabled' => ($key) ? TRUE : FALSE,
// Allow key to populated using query string parameter.
// Use by 'Edit submit button(s)'.
- // @see \Drupal\webform_ui\WebformUiEntityForm::editForm
+ // @see \Drupal\webform_ui\WebformUiEntityEditForm::editForm
'#default_value' => $this->getRequest()->get('key') ?: $key ?: $webform_element->getDefaultKey(),
'#weight' => -98,
];
diff --git a/modules/webform_ui/src/WebformUiEntityForm.php b/modules/webform_ui/src/WebformUiEntityEditForm.php
similarity index 87%
rename from modules/webform_ui/src/WebformUiEntityForm.php
rename to modules/webform_ui/src/WebformUiEntityEditForm.php
index 24c95964..b018eed1 100644
--- a/modules/webform_ui/src/WebformUiEntityForm.php
+++ b/modules/webform_ui/src/WebformUiEntityEditForm.php
@@ -2,34 +2,102 @@
namespace Drupal\webform_ui;
+use Drupal\Core\Entity\BundleEntityFormBase;
use Drupal\Core\Serialization\Yaml;
use Drupal\Component\Utility\Unicode;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
+use Drupal\Core\Render\ElementInfoManagerInterface;
+use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Url;
use Drupal\webform\Element\WebformElementStates;
use Drupal\webform\Form\WebformEntityAjaxFormTrait;
use Drupal\webform\Utility\WebformDialogHelper;
-use Drupal\webform\WebformEntityForm;
+use Drupal\webform\Plugin\WebformElementManagerInterface;
+use Drupal\webform\WebformEntityElementsValidator;
+use Symfony\Component\DependencyInjection\ContainerInterface;
/**
- * Base for controller for webform UI.
+ * Webform manage elements UI form.
*/
-class WebformUiEntityForm extends WebformEntityForm {
+class WebformUiEntityEditForm extends BundleEntityFormBase {
use WebformEntityAjaxFormTrait;
+ /**
+ * The renderer.
+ *
+ * @var \Drupal\Core\Render\RendererInterface
+ */
+ protected $renderer;
+
+ /**
+ * Element info manager.
+ *
+ * @var \Drupal\Core\Render\ElementInfoManagerInterface
+ */
+ protected $elementInfo;
+
+ /**
+ * Webform element manager.
+ *
+ * @var \Drupal\webform\Plugin\WebformElementManagerInterface
+ */
+ protected $elementManager;
+
+ /**
+ * Webform element validator.
+ *
+ * @var \Drupal\webform\WebformEntityElementsValidator
+ */
+ protected $elementsValidator;
+
+ /**
+ * The webform token manager.
+ *
+ * @var \Drupal\webform\WebformTokenManagerInterface
+ */
+ protected $tokenManager;
+
+ /**
+ * Constructs a WebformUiEntityEditForm.
+ *
+ * @param \Drupal\Core\Render\RendererInterface $renderer
+ * The renderer.
+ * @param \Drupal\Core\Render\ElementInfoManagerInterface $element_info
+ * The element manager.
+ * @param \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager
+ * The webform element manager.
+ * @param \Drupal\webform\WebformEntityElementsValidator $elements_validator
+ * Webform element validator.
+ */
+ public function __construct(RendererInterface $renderer, ElementInfoManagerInterface $element_info, WebformElementManagerInterface $element_manager, WebformEntityElementsValidator $elements_validator) {
+ $this->renderer = $renderer;
+ $this->elementInfo = $element_info;
+ $this->elementManager = $element_manager;
+ $this->elementsValidator = $elements_validator;
+ }
+
/**
* {@inheritdoc}
*/
- public function editForm(array $form, FormStateInterface $form_state) {
+ public static function create(ContainerInterface $container) {
+ return new static(
+ $container->get('renderer'),
+ $container->get('plugin.manager.element_info'),
+ $container->get('plugin.manager.webform.element'),
+ $container->get('webform.elements_validator')
+ );
+ }
+
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildForm(array $form, FormStateInterface $form_state) {
/** @var \Drupal\webform\WebformInterface $webform */
$webform = $this->getEntity();
- if ($webform->isNew()) {
- return $form;
- }
-
$header = $this->getTableHeader();
// Build table rows for elements.
@@ -108,24 +176,21 @@ class WebformUiEntityForm extends WebformEntityForm {
// Must preload libraries required by (modal) dialogs.
WebformDialogHelper::attachLibraries($form);
$form['#attached']['library'][] = 'webform_ui/webform_ui';
- return $form;
+
+ $form = parent::buildForm($form, $form_state);
+
+ return $this->buildAjaxForm($form, $form_state);
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
+ parent::validateForm($form, $form_state);
+
/** @var \Drupal\webform\WebformInterface $webform */
$webform = $this->getEntity();
- // Don't validate new webforms because they don't have any initial
- // elements.
- if ($webform->isNew()) {
- return;
- }
-
- parent::validateForm($form, $form_state);
-
// Get raw flattened elements that will be used to rebuild element's YAML
// hierarchy.
$elements_flattened = $webform->getElementsDecodedAndFlattened();
@@ -184,7 +249,7 @@ class WebformUiEntityForm extends WebformEntityForm {
*/
protected function actionsElement(array $form, FormStateInterface $form_state) {
$form = parent::actionsElement($form, $form_state);
- $form['submit']['#value'] = ($this->entity->isNew()) ? $this->t('Save') : $this->t('Save elements');
+ $form['submit']['#value'] = $this->t('Save elements');
unset($form['delete']);
return $form;
}
@@ -329,7 +394,6 @@ class WebformUiEntityForm extends WebformEntityForm {
$row = [];
-
$element_dialog_attributes = WebformDialogHelper::getModalDialogAttributes(800);
$key = $element['#webform_key'];
diff --git a/modules/webform_ui/src/WebformUiOptionsForm.php b/modules/webform_ui/src/WebformUiOptionsForm.php
index 311a3dff..0770e6fb 100644
--- a/modules/webform_ui/src/WebformUiOptionsForm.php
+++ b/modules/webform_ui/src/WebformUiOptionsForm.php
@@ -22,7 +22,6 @@ class WebformUiOptionsForm extends WebformOptionsForm {
'#title_display' => 'invisible',
'#empty_options' => 10,
'#add_more' => 10,
- '#required' => TRUE,
'#default_value' => $this->getOptions(),
];
return $form;
diff --git a/modules/webform_ui/webform_ui.module b/modules/webform_ui/webform_ui.module
index ade37372..66f3e42a 100644
--- a/modules/webform_ui/webform_ui.module
+++ b/modules/webform_ui/webform_ui.module
@@ -20,10 +20,9 @@ function webform_ui_entity_type_alter(array &$entity_types) {
// and move the old webform source entity webform to a new 'source'
// webform handler.
$handlers = $webform_entity_type->getHandlerClasses();
- $handlers['form']['source'] = $handlers['form']['default'];
- $handlers['form']['default'] = 'Drupal\webform_ui\WebformUiEntityForm';
- $handlers['form']['duplicate'] = 'Drupal\webform_ui\WebformUiEntityForm';
- $handlers['form']['quick_edit'] = 'Drupal\webform_ui\WebformUiEntityForm';
+ $handlers['form']['source'] = $handlers['form']['edit'];
+ $handlers['form']['edit'] = 'Drupal\webform_ui\WebformUiEntityEditForm';
+ $handlers['form']['quick_edit'] = 'Drupal\webform_ui\WebformUiEntityEditForm';
$webform_entity_type->setHandlerClass('form', $handlers['form']);
}
@@ -35,8 +34,9 @@ function webform_ui_entity_type_alter(array &$entity_types) {
// and move the old webform option source entity webform to a new 'source'
// webform handler.
$handlers = $webform_options_entity_type->getHandlerClasses();
- $handlers['form']['source'] = $handlers['form']['default'];
- $handlers['form']['default'] = 'Drupal\webform_ui\WebformUiOptionsForm';
+ $handlers['form']['source'] = $handlers['form']['edit'];
+ $handlers['form']['add'] = 'Drupal\webform_ui\WebformUiOptionsForm';
+ $handlers['form']['edit'] = 'Drupal\webform_ui\WebformUiOptionsForm';
$handlers['form']['duplicate'] = 'Drupal\webform_ui\WebformUiOptionsForm';
$webform_options_entity_type->setHandlerClass('form', $handlers['form']);
}
diff --git a/src/Entity/Webform.php b/src/Entity/Webform.php
index a908642c..8fb9a8b4 100644
--- a/src/Entity/Webform.php
+++ b/src/Entity/Webform.php
@@ -37,13 +37,14 @@ use Drupal\webform\WebformSubmissionStorageInterface;
* "list_builder" = "Drupal\webform\WebformEntityListBuilder",
* "access" = "Drupal\webform\WebformEntityAccessControlHandler",
* "form" = {
- * "default" = "Drupal\webform\WebformEntityForm",
+ * "add" = "Drupal\webform\WebformEntityAddForm",
+ * "edit" = "Drupal\webform\WebformEntityEditForm",
* "settings" = "Drupal\webform\WebformEntitySettingsForm",
* "third_party_settings" = "Drupal\webform\WebformEntityThirdPartySettingsForm",
* "assets" = "Drupal\webform\WebformEntityAssetsForm",
* "access" = "Drupal\webform\WebformEntityAccessForm",
* "handlers" = "Drupal\webform\WebformEntityHandlersForm",
- * "duplicate" = "Drupal\webform\WebformEntityForm",
+ * "duplicate" = "Drupal\webform\WebformEntityAddForm",
* "delete" = "Drupal\webform\WebformEntityDeleteForm",
* }
* },
diff --git a/src/Entity/WebformOptions.php b/src/Entity/WebformOptions.php
index 747f03dd..579ae682 100644
--- a/src/Entity/WebformOptions.php
+++ b/src/Entity/WebformOptions.php
@@ -21,7 +21,8 @@ use Drupal\webform\WebformOptionsInterface;
* "access" = "Drupal\webform\WebformOptionsAccessControlHandler",
* "list_builder" = "Drupal\webform\WebformOptionsListBuilder",
* "form" = {
- * "default" = "Drupal\webform\WebformOptionsForm",
+ * "add" = "Drupal\webform\WebformOptionsForm",
+ * "edit" = "Drupal\webform\WebformOptionsForm",
* "duplicate" = "Drupal\webform\WebformOptionsForm",
* "delete" = "Drupal\Core\Entity\EntityDeleteForm",
* }
diff --git a/src/Form/WebformAjaxFormTrait.php b/src/Form/WebformAjaxFormTrait.php
index 4c3da372..10e05817 100644
--- a/src/Form/WebformAjaxFormTrait.php
+++ b/src/Form/WebformAjaxFormTrait.php
@@ -4,12 +4,14 @@ namespace Drupal\webform\Form;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\HtmlCommand;
+use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
use Drupal\Core\Url;
use Drupal\webform\Ajax\WebformCloseDialogCommand;
use Drupal\webform\Ajax\WebformRefreshCommand;
use Drupal\webform\Ajax\WebformScrollTopCommand;
+use Drupal\webform\Utility\WebformDialogHelper;
use Symfony\Component\HttpFoundation\RedirectResponse;
/**
@@ -55,6 +57,47 @@ trait WebformAjaxFormTrait {
];
}
+ /**
+ * Is the current request for an Ajax modal/dialog.
+ *
+ * @return bool
+ * TRUE if the current request is for an Ajax modal/dialog.
+ */
+ protected function isDialog() {
+ $wrapper_format = $this->getRequest()
+ ->get(MainContentViewSubscriber::WRAPPER_FORMAT);
+ return (in_array($wrapper_format, [
+ 'drupal_ajax',
+ 'drupal_modal',
+ 'drupal_dialog',
+ 'drupal_dialog_' . WebformDialogHelper::getOffCanvasTriggerName(),
+ ])) ? TRUE : FALSE;
+ }
+
+ /**
+ * Is the current request for an off canvas dialog.
+ *
+ * @return bool
+ * TRUE if the current request is for an off canvas dialog.
+ */
+ protected function isOffCanvasDialog() {
+ $wrapper_format = $this->getRequest()
+ ->get(MainContentViewSubscriber::WRAPPER_FORMAT);
+ return (in_array($wrapper_format, [
+ 'drupal_dialog_' . WebformDialogHelper::getOffCanvasTriggerName(),
+ ])) ? TRUE : FALSE;
+ }
+
+ /**
+ * Is the current request a quick edit page.
+ *
+ * @return bool
+ * TRUE if the current request a quick edit page.
+ */
+ protected function isQuickEdit() {
+ return (\Drupal::request()->query->get('destination')) ? TRUE : FALSE;
+ }
+
/**
* Get the form's Ajax wrapper id.
*
diff --git a/src/Form/WebformDialogFormTrait.php b/src/Form/WebformDialogFormTrait.php
index 87cd34cd..6458f72a 100644
--- a/src/Form/WebformDialogFormTrait.php
+++ b/src/Form/WebformDialogFormTrait.php
@@ -4,15 +4,10 @@ namespace Drupal\webform\Form;
use Drupal\Core\Ajax\AjaxResponse;
use Drupal\Core\Ajax\CloseDialogCommand;
-use Drupal\Core\EventSubscriber\MainContentViewSubscriber;
use Drupal\Core\Form\FormStateInterface;
-use Drupal\webform\Utility\WebformDialogHelper;
/**
* Trait class for Webform Ajax dialog support.
- *
- * @todo Issue #2785047: In Outside In mode, messages should appear in the off-canvas tray, not the main page.
- * @see https://www.drupal.org/node/2785047
*/
trait WebformDialogFormTrait {
@@ -25,47 +20,6 @@ trait WebformDialogFormTrait {
return $this->isDialog();
}
- /**
- * Is the current request for an Ajax modal/dialog.
- *
- * @return bool
- * TRUE if the current request is for an Ajax modal/dialog.
- */
- protected function isDialog() {
- $wrapper_format = $this->getRequest()
- ->get(MainContentViewSubscriber::WRAPPER_FORMAT);
- return (in_array($wrapper_format, [
- 'drupal_ajax',
- 'drupal_modal',
- 'drupal_dialog',
- 'drupal_dialog_' . WebformDialogHelper::getOffCanvasTriggerName(),
- ])) ? TRUE : FALSE;
- }
-
- /**
- * Is the current request for an off canvas dialog.
- *
- * @return bool
- * TRUE if the current request is for an off canvas dialog.
- */
- protected function isOffCanvasDialog() {
- $wrapper_format = $this->getRequest()
- ->get(MainContentViewSubscriber::WRAPPER_FORMAT);
- return (in_array($wrapper_format, [
- 'drupal_dialog_' . WebformDialogHelper::getOffCanvasTriggerName(),
- ])) ? TRUE : FALSE;
- }
-
- /**
- * Is the current request a quick edit page.
- *
- * @return bool
- * TRUE if the current request a quick edit page.
- */
- protected function isQuickEdit() {
- return (\Drupal::request()->query->get('destination')) ? TRUE : FALSE;
- }
-
/**
* Add modal dialog support to a form.
*
diff --git a/src/Form/WebformEntityAjaxFormTrait.php b/src/Form/WebformEntityAjaxFormTrait.php
index cbfaaac2..2e1f9d12 100644
--- a/src/Form/WebformEntityAjaxFormTrait.php
+++ b/src/Form/WebformEntityAjaxFormTrait.php
@@ -9,6 +9,9 @@ use Drupal\webform\Ajax\WebformHtmlCommand;
/**
* Trait class for Webform Ajax support.
+ *
+ * @todo Issue #2785047: In Outside In mode, messages should appear in the off-canvas tray, not the main page.
+ * @see https://www.drupal.org/node/2785047
*/
trait WebformEntityAjaxFormTrait {
diff --git a/src/WebformEntityAddForm.php b/src/WebformEntityAddForm.php
new file mode 100644
index 00000000..333bb306
--- /dev/null
+++ b/src/WebformEntityAddForm.php
@@ -0,0 +1,138 @@
+operation == 'duplicate') {
+ $this->setEntity($this->getEntity()->createDuplicate());
+ }
+ parent::prepareEntity();
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function buildForm(array $form, FormStateInterface $form_state) {
+ /** @var \Drupal\webform\WebformInterface $webform */
+ $webform = $this->getEntity();
+
+ // Customize title for duplicate webform.
+ if ($this->operation == 'duplicate') {
+ // Display custom title.
+ $form['#title'] = $this->t("Duplicate '@label' form", ['@label' => $webform->label()]);
+ }
+
+ $form = parent::buildForm($form, $form_state);
+
+ return $this->buildDialogForm($form, $form_state);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function form(array $form, FormStateInterface $form_state) {
+ /** @var \Drupal\webform\WebformInterface $webform */
+ $webform = $this->getEntity();
+
+ $form['id'] = [
+ '#type' => 'machine_name',
+ '#default_value' => $webform->id(),
+ '#machine_name' => [
+ 'exists' => '\Drupal\webform\Entity\Webform::load',
+ 'source' => ['title'],
+ ],
+ '#maxlength' => 32,
+ '#disabled' => (bool) $webform->id() && $this->operation != 'duplicate',
+ '#required' => TRUE,
+ ];
+ $form['title'] = [
+ '#type' => 'textfield',
+ '#title' => $this->t('Title'),
+ '#maxlength' => 255,
+ '#default_value' => $webform->label(),
+ '#required' => TRUE,
+ '#id' => 'title',
+ '#attributes' => [
+ 'autofocus' => 'autofocus',
+ ],
+ ];
+ $form['description'] = [
+ '#type' => 'webform_html_editor',
+ '#title' => $this->t('Administrative description'),
+ '#default_value' => $webform->get('description'),
+ ];
+ /** @var \Drupal\webform\WebformEntityStorageInterface $webform_storage */
+ $webform_storage = $this->entityTypeManager->getStorage('webform');
+ $form['category'] = [
+ '#type' => 'webform_select_other',
+ '#title' => $this->t('Category'),
+ '#options' => $webform_storage->getCategories(),
+ '#empty_option' => '<' . $this->t('None') . '>',
+ '#default_value' => $webform->get('category'),
+ ];
+ $form = $this->protectBundleIdElement($form);
+
+ return parent::form($form, $form_state);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function submitForm(array &$form, FormStateInterface $form_state) {
+ parent::submitForm($form, $form_state);
+
+ // Poormans duplication of translated webform configuration.
+ // This completely bypasses the config translation system and just
+ // duplicates any translated webform config stored in the database.
+ if ($this->operation == 'duplicate') {
+ $result = \Drupal::database()->select('config', 'c')
+ ->fields('c', ['collection', 'name', 'data'])
+ ->condition('c.name', 'webform.webform.' . \Drupal::routeMatch()->getRawParameter('webform'))
+ ->condition('c.collection', 'language.%', 'LIKE')
+ ->execute();
+ while ($record = $result->fetchAssoc()) {
+ $record['name'] = 'webform.webform.' . $this->entity->id();
+ \Drupal::database()->insert('config')
+ ->fields(['collection', 'name', 'data'])
+ ->values($record)
+ ->execute();
+ }
+ }
+
+ $form_state->setRedirectUrl(Url::fromRoute('entity.webform.edit_form', ['webform' => $this->getEntity()->id()]));
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function save(array $form, FormStateInterface $form_state) {
+ /** @var \Drupal\webform\WebformInterface $webform */
+ $webform = $this->getEntity();
+
+ $webform->save();
+
+ $context = [
+ '@label' => $webform->label(),
+ 'link' => $webform->toLink($this->t('Edit'), 'edit-form')->toString()
+ ];
+ $t_args = ['%label' => $webform->label()];
+ $this->logger('webform')->notice('Webform @label created.', $context);
+ drupal_set_message($this->t('Webform %label created.', $t_args));
+ }
+
+}
diff --git a/src/WebformEntityForm.php b/src/WebformEntityEditForm.php
similarity index 60%
rename from src/WebformEntityForm.php
rename to src/WebformEntityEditForm.php
index 2bd626f1..13921eb8 100644
--- a/src/WebformEntityForm.php
+++ b/src/WebformEntityEditForm.php
@@ -6,7 +6,6 @@ use Drupal\Core\Entity\BundleEntityFormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Render\Element;
use Drupal\Core\Render\ElementInfoManagerInterface;
-use Drupal\Core\Render\RendererInterface;
use Drupal\Core\Serialization\Yaml;
use Drupal\Core\Url;
use Drupal\webform\Form\WebformDialogFormTrait;
@@ -15,19 +14,12 @@ use Drupal\webform\Utility\WebformYaml;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
- * Base for controller for webform.
+ * Webform manage elements YAML source form.
*/
-class WebformEntityForm extends BundleEntityFormBase {
+class WebformEntityEditForm extends BundleEntityFormBase {
use WebformDialogFormTrait;
- /**
- * The renderer.
- *
- * @var \Drupal\Core\Render\RendererInterface
- */
- protected $renderer;
-
/**
* Element info manager.
*
@@ -57,10 +49,8 @@ class WebformEntityForm extends BundleEntityFormBase {
protected $tokenManager;
/**
- * Constructs a WebformEntityForm.
+ * Constructs a WebformEntityEditForm.
*
- * @param \Drupal\Core\Render\RendererInterface $renderer
- * The renderer.
* @param \Drupal\Core\Render\ElementInfoManagerInterface $element_info
* The element manager.
* @param \Drupal\webform\Plugin\WebformElementManagerInterface $element_manager
@@ -70,8 +60,7 @@ class WebformEntityForm extends BundleEntityFormBase {
* @param \Drupal\webform\WebformTokenManagerInterface $token_manager
* The webform token manager.
*/
- public function __construct(RendererInterface $renderer, ElementInfoManagerInterface $element_info, WebformElementManagerInterface $element_manager, WebformEntityElementsValidator $elements_validator, WebformTokenManagerInterface $token_manager) {
- $this->renderer = $renderer;
+ public function __construct(ElementInfoManagerInterface $element_info, WebformElementManagerInterface $element_manager, WebformEntityElementsValidator $elements_validator, WebformTokenManagerInterface $token_manager) {
$this->elementInfo = $element_info;
$this->elementManager = $element_manager;
$this->elementsValidator = $elements_validator;
@@ -84,7 +73,6 @@ class WebformEntityForm extends BundleEntityFormBase {
*/
public static function create(ContainerInterface $container) {
return new static(
- $container->get('renderer'),
$container->get('plugin.manager.element_info'),
$container->get('plugin.manager.webform.element'),
$container->get('webform.elements_validator'),
@@ -107,17 +95,7 @@ class WebformEntityForm extends BundleEntityFormBase {
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
- /** @var \Drupal\webform\WebformInterface $webform */
- $webform = $this->getEntity();
-
- // Customize title for duplicate webform.
- if ($this->operation == 'duplicate') {
- // Display custom title.
- $form['#title'] = $this->t("Duplicate '@label' form", ['@label' => $webform->label()]);
- }
-
$form = parent::buildForm($form, $form_state);
-
return $this->buildDialogForm($form, $form_state);
}
@@ -128,80 +106,6 @@ class WebformEntityForm extends BundleEntityFormBase {
/** @var \Drupal\webform\WebformInterface $webform */
$webform = $this->getEntity();
- // Only display id, title, and description for new webforms.
- // Once a webform is created this information is moved to the webform's settings
- // tab.
- if ($webform->isNew()) {
- $form['id'] = [
- '#type' => 'machine_name',
- '#default_value' => $webform->id(),
- '#machine_name' => [
- 'exists' => '\Drupal\webform\Entity\Webform::load',
- 'source' => ['title'],
- ],
- '#maxlength' => 32,
- '#disabled' => (bool) $webform->id() && $this->operation != 'duplicate',
- '#required' => TRUE,
- ];
- $form['title'] = [
- '#type' => 'textfield',
- '#title' => $this->t('Title'),
- '#maxlength' => 255,
- '#default_value' => $webform->label(),
- '#required' => TRUE,
- '#id' => 'title',
- '#attributes' => [
- 'autofocus' => 'autofocus',
- ],
- ];
- $form['description'] = [
- '#type' => 'webform_html_editor',
- '#title' => $this->t('Administrative description'),
- '#default_value' => $webform->get('description'),
- ];
- /** @var \Drupal\webform\WebformEntityStorageInterface $webform_storage */
- $webform_storage = $this->entityTypeManager->getStorage('webform');
- $form['category'] = [
- '#type' => 'webform_select_other',
- '#title' => $this->t('Category'),
- '#options' => $webform_storage->getCategories(),
- '#empty_option' => '<' . $this->t('None') . '>',
- '#default_value' => $webform->get('category'),
- ];
- $form = $this->protectBundleIdElement($form);
- }
-
- // Call the isolated edit webform that can be overridden by the
- // webform_ui.module.
- $form = $this->editForm($form, $form_state);
-
- return parent::form($form, $form_state);
- }
-
- /**
- * {@inheritdoc}
- */
- protected function actions(array $form, FormStateInterface $form_state) {
- $actions = parent::actions($form, $form_state);
- unset($actions['delete']);
- return $actions;
- }
-
- /**
- * Edit webform element's source code webform.
- *
- * @param array $form
- * An associative array containing the structure of the form.
- * @param \Drupal\Core\Form\FormStateInterface $form_state
- * The current state of the form.
- *
- * @return array
- * The webform structure.
- */
- protected function editForm(array $form, FormStateInterface $form_state) {
- /** @var \Drupal\webform\WebformInterface $webform */
- $webform = $this->getEntity();
-
$t_args = [
':form_api_href' => 'https://www.drupal.org/node/37775',
':render_api_href' => 'https://www.drupal.org/developing/api/8/render',
@@ -212,14 +116,23 @@ class WebformEntityForm extends BundleEntityFormBase {
'#mode' => 'yaml',
'#title' => $this->t('Elements (YAML)'),
'#description' => $this->t('Enter a Form API (FAPI) and/or a Render Array as YAML.', $t_args) . '
' .
- '' . $this->t('Please note that comments are not supported and will be removed.') . '',
+ '' . $this->t('Please note that comments are not supported and will be removed.') . '',
'#default_value' => $this->getElementsWithoutWebformTypePrefix($webform->get('elements')),
'#required' => TRUE,
'#element_validate' => ['::validateElementsYaml'],
];
$form['token_tree_link'] = $this->tokenManager->buildTreeLink();
- return $form;
+ return parent::form($form, $form_state);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ protected function actions(array $form, FormStateInterface $form_state) {
+ $actions = parent::actions($form, $form_state);
+ unset($actions['delete']);
+ return $actions;
}
/**
@@ -250,33 +163,6 @@ class WebformEntityForm extends BundleEntityFormBase {
}
}
- /**
- * {@inheritdoc}
- */
- public function submitForm(array &$form, FormStateInterface $form_state) {
- parent::submitForm($form, $form_state);
-
- // Poormans duplication of translated webform configuration.
- // This completely bypasses the config translation system and just
- // duplicates any translated webform config stored in the database.
- if ($this->operation == 'duplicate') {
- $result = \Drupal::database()->select('config', 'c')
- ->fields('c', ['collection', 'name', 'data'])
- ->condition('c.name', 'webform.webform.' . \Drupal::routeMatch()->getRawParameter('webform'))
- ->condition('c.collection', 'language.%', 'LIKE')
- ->execute();
- while ($record = $result->fetchAssoc()) {
- $record['name'] = 'webform.webform.' . $this->entity->id();
- \Drupal::database()->insert('config')
- ->fields(['collection', 'name', 'data'])
- ->values($record)
- ->execute();
- }
- }
-
- $form_state->setRedirectUrl(Url::fromRoute('entity.webform.edit_form', ['webform' => $this->getEntity()->id()]));
- }
-
/**
* {@inheritdoc}
*/
@@ -284,7 +170,6 @@ class WebformEntityForm extends BundleEntityFormBase {
/** @var \Drupal\webform\WebformInterface $webform */
$webform = $this->getEntity();
- $is_new = $webform->isNew();
$webform->save();
$context = [
@@ -292,14 +177,8 @@ class WebformEntityForm extends BundleEntityFormBase {
'link' => $webform->toLink($this->t('Edit'), 'edit-form')->toString()
];
$t_args = ['%label' => $webform->label()];
- if ($is_new) {
- $this->logger('webform')->notice('Webform @label created.', $context);
- drupal_set_message($this->t('Webform %label created.', $t_args));
- }
- else {
- $this->logger('webform')->notice('Webform @label elements saved.', $context);
- drupal_set_message($this->t('Webform %label elements saved.', $t_args));
- }
+ $this->logger('webform')->notice('Webform @label elements saved.', $context);
+ drupal_set_message($this->t('Webform %label elements saved.', $t_args));
}
/****************************************************************************/
diff --git a/src/WebformEntityListBuilder.php b/src/WebformEntityListBuilder.php
index 81669eb5..e2c96828 100644
--- a/src/WebformEntityListBuilder.php
+++ b/src/WebformEntityListBuilder.php
@@ -74,20 +74,13 @@ class WebformEntityListBuilder extends ConfigEntityListBuilder {
// Must manually add local actions to the webform because we can't alter local
// actions and add the needed dialog attributes.
// @see https://www.drupal.org/node/2585169
- if ($this->moduleHandler()->moduleExists('webform_ui')) {
- $add_form_attributes = WebformDialogHelper::getModalDialogAttributes(700, ['button', 'button-action', 'button--primary', 'button--small']);
- }
- else {
- $add_form_attributes = ['class' => ['button', 'button-action', 'button--primary', 'button--small']];
- }
-
if (\Drupal::currentUser()->hasPermission('create webform')) {
$build['local_actions'] = [
'add_form' => [
'#type' => 'link',
'#title' => $this->t('Add webform'),
'#url' => new Url('entity.webform.add_form'),
- '#attributes' => $add_form_attributes,
+ '#attributes' => WebformDialogHelper::getModalDialogAttributes(700, ['button', 'button-action', 'button--primary', 'button--small']),
],
];
}
diff --git a/webform.module b/webform.module
index be0a4f09..d68a29f7 100644
--- a/webform.module
+++ b/webform.module
@@ -699,7 +699,7 @@ function webform_theme_registry_alter(&$theme_registry) {
*
* @see template_preprocess_menu_local_action();
* @see \Drupal\webform\WebformEntityHandlersForm
- * @see \Drupal\webform_ui\WebformUiEntityForm
+ * @see \Drupal\webform_ui\WebformUiEntityEditForm
*/
function webform_preprocess_menu_local_action(&$variables) {
$link = $variables['element']['#link'];
diff --git a/webform.routing.yml b/webform.routing.yml
index 41435cc1..34799465 100644
--- a/webform.routing.yml
+++ b/webform.routing.yml
@@ -191,7 +191,7 @@ entity.webform.test:
entity.webform.add_form:
path: '/admin/structure/webform/add'
defaults:
- _entity_form: 'webform.default'
+ _entity_form: 'webform.add'
_title: 'Add webform'
requirements:
_entity_create_access: 'webform'
@@ -199,7 +199,7 @@ entity.webform.add_form:
entity.webform.edit_form:
path: '/admin/structure/webform/manage/{webform}'
defaults:
- _entity_form: 'webform.default'
+ _entity_form: 'webform.edit'
_title_callback: '\Drupal\webform\Controller\WebformController::title'
requirements:
_entity_access: 'webform.update'
@@ -352,7 +352,7 @@ entity.webform_options.collection:
entity.webform_options.add_form:
path: '/admin/structure/webform/settings/options/manage/add'
defaults:
- _entity_form: 'webform_options.default'
+ _entity_form: 'webform_options.add'
_title: 'Add webform options'
requirements:
_entity_create_access: 'webform_options'
@@ -360,7 +360,7 @@ entity.webform_options.add_form:
entity.webform_options.edit_form:
path: '/admin/structure/webform/settings/options/manage/{webform_options}/edit'
defaults:
- _entity_form: 'webform_options.default'
+ _entity_form: 'webform_options.edit'
_title_callback: '\Drupal\webform\Controller\WebformOptionsController::title'
requirements:
_entity_access: 'webform_options.update'