diff --git a/src/Adapter/Translations/TranslationRouteFinder.php b/src/Adapter/Translations/TranslationRouteFinder.php index 9d222af0f5939..05ac3dfbddd1b 100644 --- a/src/Adapter/Translations/TranslationRouteFinder.php +++ b/src/Adapter/Translations/TranslationRouteFinder.php @@ -96,7 +96,7 @@ public function __construct( */ public function findRoute(ParameterBag $query) { - $routeProperties = $query->get('modify_translations'); + $routeProperties = $query->get('form')['modify_translations']; $propertyAccessor = PropertyAccess::createPropertyAccessor(); $route = 'admin_international_translation_overview'; @@ -152,7 +152,7 @@ public function findRoute(ParameterBag $query) */ public function findRouteParameters(ParameterBag $query) { - $routeProperties = $query->get('modify_translations'); + $routeProperties = $query->get('form')['modify_translations']; $propertyAccessor = PropertyAccess::createPropertyAccessor(); $language = $propertyAccessor->getValue($routeProperties, '[language]'); diff --git a/src/PrestaShopBundle/Controller/Admin/TranslationsController.php b/src/PrestaShopBundle/Controller/Admin/TranslationsController.php index 009a0da2455d0..8071986af0153 100644 --- a/src/PrestaShopBundle/Controller/Admin/TranslationsController.php +++ b/src/PrestaShopBundle/Controller/Admin/TranslationsController.php @@ -27,10 +27,6 @@ namespace PrestaShopBundle\Controller\Admin; use PrestaShop\PrestaShop\Core\Language\Copier\LanguageCopierConfig; -use PrestaShopBundle\Form\Admin\Improve\International\Translations\AddUpdateLanguageType; -use PrestaShopBundle\Form\Admin\Improve\International\Translations\CopyLanguageType; -use PrestaShopBundle\Form\Admin\Improve\International\Translations\ExportThemeLanguageType; -use PrestaShopBundle\Form\Admin\Improve\International\Translations\ModifyTranslationsType; use PrestaShopBundle\Security\Annotation\AdminSecurity; use Symfony\Component\HttpFoundation\BinaryFileResponse; use Symfony\Component\HttpFoundation\RedirectResponse; @@ -103,21 +99,15 @@ public function showSettingsAction(Request $request) $legacyController = $request->attributes->get('_legacy_controller'); $legacyContext = $this->get('prestashop.adapter.legacy.context'); $kpiRowFactory = $this->get('prestashop.core.kpi_row.factory.translations_page'); - - $modifyTranslationsForm = $this->createForm(ModifyTranslationsType::class); - $addUpdateLanguageForm = $this->createForm(AddUpdateLanguageType::class); - $copyLanguageForm = $this->createForm(CopyLanguageType::class); - $exportLanguageForm = $this->createForm(ExportThemeLanguageType::class); + $formHandler = $this->get('prestashop.admin.translations_settings.form_handler'); + $form = $formHandler->getForm(); return [ 'layoutTitle' => $this->trans('Translations', 'Admin.Navigation.Menu'), 'enableSidebar' => true, 'help_link' => $this->generateSidebarLink($legacyController), 'kpiRow' => $kpiRowFactory->build(), - 'modifyTranslationsForm' => $modifyTranslationsForm->createView(), - 'addUpdateLanguageForm' => $addUpdateLanguageForm->createView(), - 'exportLanguageForm' => $exportLanguageForm->createView(), - 'copyLanguageForm' => $copyLanguageForm->createView(), + 'translationSettingsForm' => $form->createView(), 'addLanguageUrl' => $legacyContext->getAdminLink('AdminLanguages', true, ['addlang' => '']), ]; } @@ -152,12 +142,13 @@ public function modifyTranslationsAction(Request $request) */ public function addUpdateLanguageAction(Request $request) { - $addUpdateLanguageForm = $this->createForm(AddUpdateLanguageType::class); + $formHandler = $this->get('prestashop.admin.translations_settings.form_handler'); + $addUpdateLanguageForm = $formHandler->getForm(); $addUpdateLanguageForm->handleRequest($request); if ($addUpdateLanguageForm->isSubmitted()) { $data = $addUpdateLanguageForm->getData(); - $isoCode = $data['iso_localization_pack']; + $isoCode = $data['add_update_language']['iso_localization_pack']; $languagePackImporter = $this->get('prestashop.adapter.language.pack.importer'); $errors = $languagePackImporter->import($isoCode); @@ -190,14 +181,15 @@ public function addUpdateLanguageAction(Request $request) */ public function exportThemeLanguageAction(Request $request) { - $exportThemeLanguageForm = $this->createForm(ExportThemeLanguageType::class); + $formHandler = $this->get('prestashop.admin.translations_settings.form_handler'); + $exportThemeLanguageForm = $formHandler->getForm(); $exportThemeLanguageForm->handleRequest($request); if ($exportThemeLanguageForm->isSubmitted()) { $data = $exportThemeLanguageForm->getData(); - $themeName = $data['theme_name']; - $isoCode = $data['iso_code']; + $themeName = $data['export_language']['theme_name']; + $isoCode = $data['export_language']['iso_code']; $langRepository = $this->get('prestashop.core.admin.lang.repository'); $locale = $langRepository->getLocaleByIsoCode($isoCode); @@ -227,17 +219,18 @@ public function exportThemeLanguageAction(Request $request) */ public function copyLanguageAction(Request $request) { - $form = $this->createForm(CopyLanguageType::class); + $formHandler = $this->get('prestashop.admin.translations_settings.form_handler'); + $form = $formHandler->getForm(); $form->handleRequest($request); if ($form->isSubmitted()) { $languageCopier = $this->get('prestashop.adapter.language.copier'); $data = $form->getData(); $languageCopierConfig = new LanguageCopierConfig( - $data['from_theme'], - $data['from_language'], - $data['to_theme'], - $data['to_language'] + $data['copy_language']['from_theme'], + $data['copy_language']['from_language'], + $data['copy_language']['to_theme'], + $data['copy_language']['to_language'] ); if ($errors = $languageCopier->copy($languageCopierConfig)) { diff --git a/src/PrestaShopBundle/Form/Admin/Improve/International/Translations/TranslationsSettingsFormHandler.php b/src/PrestaShopBundle/Form/Admin/Improve/International/Translations/TranslationsSettingsFormHandler.php new file mode 100644 index 0000000000000..e4592d41babe4 --- /dev/null +++ b/src/PrestaShopBundle/Form/Admin/Improve/International/Translations/TranslationsSettingsFormHandler.php @@ -0,0 +1,100 @@ + + * @copyright 2007-2018 PrestaShop SA + * @license https://opensource.org/licenses/OSL-3.0 Open Software License (OSL 3.0) + * International Registered Trademark & Property of PrestaShop SA + */ + +namespace PrestaShopBundle\Form\Admin\Improve\International\Translations; + +use PrestaShop\PrestaShop\Core\Form\FormHandlerInterface; +use PrestaShop\PrestaShop\Core\Hook\HookDispatcherInterface; +use Symfony\Component\Form\FormBuilderInterface; + +final class TranslationsSettingsFormHandler implements FormHandlerInterface +{ + /** + * @var FormBuilderInterface the form builder + */ + protected $formBuilder; + + /** + * @var HookDispatcherInterface the event dispatcher + */ + protected $hookDispatcher; + + /** + * @var string the hook name to be dispatched + */ + protected $hookName; + + /** + * @var array the list of Form Types + */ + protected $formTypes; + + /** + * @param FormBuilderInterface $formBuilder + * @param HookDispatcherInterface $hookDispatcher + * @param array $formTypes + * @param string $hookName + */ + public function __construct( + FormBuilderInterface $formBuilder, + HookDispatcherInterface $hookDispatcher, + array $formTypes, + $hookName + ) { + $this->formBuilder = $formBuilder; + $this->hookDispatcher = $hookDispatcher; + $this->formTypes = $formTypes; + $this->hookName = $hookName; + } + + /** + * {@inheritdoc} + */ + public function getForm() + { + foreach ($this->formTypes as $formName => $formType) { + $this->formBuilder->add($formName, $formType); + } + + $this->hookDispatcher->dispatchWithParameters( + "action{$this->hookName}Form", + [ + 'form_builder' => $this->formBuilder, + ] + ); + + return $this->formBuilder->getForm(); + } + + /** + * {@inheritdoc} + */ + public function save(array $data) + { + // Translations forms do not save data + return []; + } +} diff --git a/src/PrestaShopBundle/Resources/config/services/bundle/form/form_handler.yml b/src/PrestaShopBundle/Resources/config/services/bundle/form/form_handler.yml index da80e91919c70..521c4a9417880 100644 --- a/src/PrestaShopBundle/Resources/config/services/bundle/form/form_handler.yml +++ b/src/PrestaShopBundle/Resources/config/services/bundle/form/form_handler.yml @@ -251,6 +251,18 @@ services: 'webservice_configuration': 'PrestaShopBundle\Form\Admin\Configure\AdvancedParameters\Webservice\WebserviceType' - 'WebservicePage' + prestashop.admin.translations_settings.form_handler: + class: 'PrestaShopBundle\Form\Admin\Improve\International\Translations\TranslationsSettingsFormHandler' + arguments: + - '@=service("form.factory").createBuilder()' + - '@prestashop.core.hook.dispatcher' + - + 'modify_translations': 'PrestaShopBundle\Form\Admin\Improve\International\Translations\ModifyTranslationsType' + 'add_update_language': 'PrestaShopBundle\Form\Admin\Improve\International\Translations\AddUpdateLanguageType' + 'export_language': 'PrestaShopBundle\Form\Admin\Improve\International\Translations\ExportThemeLanguageType' + 'copy_language': 'PrestaShopBundle\Form\Admin\Improve\International\Translations\CopyLanguageType' + - 'TranslationSettingsPage' + # Entity form handler prestashop.admin.request_sql.form_handler: class: 'PrestaShopBundle\Form\Admin\Configure\AdvancedParameters\RequestSql\RequestSqlFormHandler' diff --git a/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/add_update_language.html.twig b/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/add_update_language.html.twig index 93662bb33b040..2266273a81f1b 100644 --- a/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/add_update_language.html.twig +++ b/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/add_update_language.html.twig @@ -52,6 +52,7 @@ {{ form_widget(addUpdateLanguageForm.iso_localization_pack, {'attr': {'data-minimumResultsForSearch': '7', 'data-toggle': 'select2'}}) }} + {{ form_rest(addUpdateLanguageForm) }} @@ -64,5 +65,5 @@ -{{ form_rest(addUpdateLanguageForm) }} + {{ form_end(addUpdateLanguageForm) }} diff --git a/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/copy_language.html.twig b/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/copy_language.html.twig index 262181abf1082..d08526a092b1e 100644 --- a/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/copy_language.html.twig +++ b/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/copy_language.html.twig @@ -76,8 +76,8 @@ + {{ form_rest(copyLanguageForm) }} - {{ form_rest(copyLanguageForm) }} + {{ form_rest(exportLanguageForm) }} @@ -76,5 +77,4 @@ -{{ form_rest(exportLanguageForm) }} {{ form_end(exportLanguageForm) }} diff --git a/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/modify_translations.html.twig b/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/modify_translations.html.twig index 3c9471affdddd..3b129ae0d2805 100644 --- a/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/modify_translations.html.twig +++ b/src/PrestaShopBundle/Resources/views/Admin/Improve/International/Translations/Blocks/modify_translations.html.twig @@ -92,8 +92,8 @@ {{ form_widget(modifyTranslationsForm.language) }} + {{ form_rest(modifyTranslationsForm) }} - {{ form_rest(modifyTranslationsForm) }}