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'