From cf0d4444d81c4ed3688bf025b7fae5c0183e0995 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos <1697880+AngelFQC@users.noreply.github.com> Date: Thu, 21 Nov 2024 04:01:51 -0500 Subject: [PATCH] Extra Fields: Allow to translate display text - refs BT#21533 --- public/main/extrafield/translate.php | 49 +++++++++++++------------ public/main/inc/lib/extra_field.lib.php | 18 ++++++++- src/CoreBundle/Entity/ExtraField.php | 15 ++++++++ 3 files changed, 58 insertions(+), 24 deletions(-) diff --git a/public/main/extrafield/translate.php b/public/main/extrafield/translate.php index 9155440722..47c522b17f 100644 --- a/public/main/extrafield/translate.php +++ b/public/main/extrafield/translate.php @@ -14,11 +14,11 @@ require_once __DIR__.'/../inc/global.inc.php'; api_protect_admin_script(); $em = Database::getManager(); - +$request = Container::getRequest(); $extraFieldRepo = Container::getExtraFieldRepository(); $languageRepo = Container::getLanguageRepository(); -$fieldId = (int) ($_REQUEST['id'] ?? 0); +$fieldId = $request->query->getInt('extra_field'); /** @var ExtraField|null $extraField */ $extraField = $extraFieldRepo->find($fieldId); @@ -27,26 +27,32 @@ if (null === $extraField) { api_not_allowed(true); } -$currentUrl = api_get_self().'?id='.$fieldId; -$qb = $languageRepo->getAllAvailable(); -$languages = $qb->getQuery()->getResult(); +$currentUrl = api_get_self().'?extra_field='.$fieldId; +$languages = $languageRepo->getAllAvailable(true)->getQuery()->getResult(); $form = new FormValidator('translate', 'POST', $currentUrl); $form->addHidden('id', $fieldId); + +$extraField->setLocale(Container::getParameter('locale')); +$em->refresh($extraField); + $form->addHeader($extraField->getDisplayText()); -$repository = $em->getRepository(Translation::class); -$translations = $repository->findTranslations($extraField); +$translationsRepo = $em->getRepository(Translation::class); +$translations = $translationsRepo->findTranslations($extraField); $defaults = []; /** @var Language $language */ foreach ($languages as $language) { $iso = $language->getIsocode(); - $variable = 'variable['.$iso.']'; - $form->addText($variable, $language->getOriginalName().' ('.$iso.')', false); - if (isset($translations[$iso]) && $translations[$iso]['displayText']) { - $defaults['variable['.$iso.']'] = $translations[$iso]['displayText']; + $form->addText( + 'language['.$language->getId().']', + $language->getOriginalName(), + false + ); + if (!empty($translations[$iso]['displayText'])) { + $defaults['language['.$language->getId().']'] = $translations[$iso]['displayText']; } } @@ -70,23 +76,20 @@ $interbreadcrumb[] = [ if ($form->validate()) { $values = $form->getSubmitValues(); foreach ($languages as $language) { - if (!isset($values['variable'][$language->getIsocode()])) { - continue; - } - $translation = $values['variable'][$language->getIsocode()]; - if (empty($translation)) { + if (empty($values['language'][$language->getId()])) { continue; } - $extraField = $extraFieldRepo->find($fieldId); - $extraField - ->setTranslatableLocale($language->getIsocode()) - ->setDisplayText($translation) - ; - $em->persist($extraField); - $em->flush(); + $translationsRepo->translate( + $extraField, + 'displayText', + $language->getIsocode(), + $values['language'][$language->getId()] + ); } + $em->flush(); + Display::addFlash(Display::return_message(get_lang('Updated'))); api_location($currentUrl); } diff --git a/public/main/inc/lib/extra_field.lib.php b/public/main/inc/lib/extra_field.lib.php index 7e6390a8c0..4ffeffb4b1 100644 --- a/public/main/inc/lib/extra_field.lib.php +++ b/public/main/inc/lib/extra_field.lib.php @@ -2351,7 +2351,23 @@ class ExtraField extends Model } $form->addElement('header', $header); - $form->addElement('text', 'display_text', get_lang('Name')); + + if ('edit' === $action) { + $translateUrl = Container::getRouter()->generate( + 'legacy_main', + ['name' => 'extrafield/translate.php', 'extra_field' => $id] + ); + $translateButton = Display::toolbarButton( + get_lang('Translate this term'), + $translateUrl, + 'language', + 'plain' + ); + + $form->addElement('text', 'display_text', [get_lang('Name'), $translateButton]); + } else { + $form->addElement('text', 'display_text', get_lang('Name')); + } $form->addHtmlEditor('description', get_lang('Description'), false); diff --git a/src/CoreBundle/Entity/ExtraField.php b/src/CoreBundle/Entity/ExtraField.php index dcae1def5c..d3720f09c7 100644 --- a/src/CoreBundle/Entity/ExtraField.php +++ b/src/CoreBundle/Entity/ExtraField.php @@ -132,6 +132,9 @@ class ExtraField #[ORM\Column(name: 'auto_remove', type: 'boolean', options: ['default' => false])] protected bool $autoRemove = false; + #[Gedmo\Locale] + private ?string $locale = null; + public function __construct() { $this->options = new ArrayCollection(); @@ -328,4 +331,16 @@ class ExtraField return $this; } + + public function getLocale(): string + { + return $this->locale; + } + + public function setLocale(string $locale): self + { + $this->locale = $locale; + + return $this; + } }