Extra Fields: Allow to translate display text of options - refs BT#21533

pull/5832/head
Angel Fernando Quiroz Campos 10 months ago
parent 8d94cb80f2
commit 911dfc01ae
No known key found for this signature in database
GPG Key ID: B284841AE3E562CD
  1. 46
      public/main/extrafield/translate_option.php
  2. 15
      src/CoreBundle/Entity/ExtraFieldOptions.php

@ -2,6 +2,7 @@
/* For licensing terms, see /license.txt */ /* For licensing terms, see /license.txt */
use Chamilo\CoreBundle\Entity\ExtraFieldOptions;
use Chamilo\CoreBundle\Entity\Language; use Chamilo\CoreBundle\Entity\Language;
use Chamilo\CoreBundle\Framework\Container; use Chamilo\CoreBundle\Framework\Container;
use Gedmo\Translatable\Entity\Translation; use Gedmo\Translatable\Entity\Translation;
@ -20,9 +21,12 @@ $languageRepo = Container::getLanguageRepository();
$fieldId = (int) ($_REQUEST['id'] ?? 0); $fieldId = (int) ($_REQUEST['id'] ?? 0);
/** @var \Chamilo\CoreBundle\Entity\ExtraFieldOptions|null $extraFieldOption */ /** @var ExtraFieldOptions|null $extraFieldOption */
$extraFieldOption = $extraFieldOptionsRepo->find($fieldId); $extraFieldOption = $extraFieldOptionsRepo->find($fieldId);
$extraFieldOption->setLocale(Container::getParameter('locale'));
$em->refresh($extraFieldOption);
if (null === $extraFieldOption) { if (null === $extraFieldOption) {
api_not_allowed(true); api_not_allowed(true);
} }
@ -30,24 +34,27 @@ if (null === $extraFieldOption) {
$extraField = $extraFieldOption->getField(); $extraField = $extraFieldOption->getField();
$currentUrl = api_get_self().'?id='.$fieldId; $currentUrl = api_get_self().'?id='.$fieldId;
$qb = $languageRepo->getAllAvailable(); $languages = $languageRepo->getAllAvailable(true)->getQuery()->getResult();
$languages = $qb->getQuery()->getResult();
$form = new FormValidator('translate', 'POST', $currentUrl); $form = new FormValidator('translate', 'POST', $currentUrl);
$form->addHidden('id', $fieldId); $form->addHidden('id', $fieldId);
$form->addHeader($extraFieldOption->getDisplayText()); $form->addHeader($extraFieldOption->getDisplayText());
$repository = $em->getRepository(Translation::class); $translationsRepo = $em->getRepository(Translation::class);
$translations = $repository->findTranslations($extraFieldOption); $translations = $translationsRepo->findTranslations($extraFieldOption);
$defaults = []; $defaults = [];
/** @var Language $language */ /** @var Language $language */
foreach ($languages as $language) { foreach ($languages as $language) {
$iso = $language->getIsocode(); $iso = $language->getIsocode();
$variable = 'variable['.$iso.']'; $form->addText(
$form->addText($variable, $language->getOriginalName().' ('.$iso.')', false); 'language['.$language->getId().']',
if (isset($translations[$iso]) && $translations[$iso]['displayText']) { $language->getOriginalName(),
$defaults['variable['.$iso.']'] = $translations[$iso]['displayText']; false
);
if (!empty($translations[$iso]['displayText'])) {
$defaults['language['.$language->getId().']'] = $translations[$iso]['displayText'];
} }
} }
@ -72,23 +79,20 @@ $interbreadcrumb[] = [
if ($form->validate()) { if ($form->validate()) {
$values = $form->getSubmitValues(); $values = $form->getSubmitValues();
foreach ($languages as $language) { foreach ($languages as $language) {
if (!isset($values['variable'][$language->getIsocode()])) { if (empty($values['language'][$language->getId()])) {
continue;
}
$translation = $values['variable'][$language->getIsocode()];
if (empty($translation)) {
continue; continue;
} }
$extraFieldOption = $extraFieldOptionsRepo->find($fieldId); $translationsRepo->translate(
$extraFieldOption $extraFieldOption,
->setTranslatableLocale($language->getIsocode()) 'displayText',
->setDisplayText($translation) $language->getIsocode(),
; $values['language'][$language->getId()],
$em->persist($extraFieldOption); );
$em->flush();
} }
$em->flush();
Display::addFlash(Display::return_message(get_lang('Updated'))); Display::addFlash(Display::return_message(get_lang('Updated')));
api_location($currentUrl); api_location($currentUrl);
} }

@ -42,6 +42,9 @@ class ExtraFieldOptions
#[ORM\Column(name: 'option_order', type: 'integer', nullable: true)] #[ORM\Column(name: 'option_order', type: 'integer', nullable: true)]
protected ?int $optionOrder = null; protected ?int $optionOrder = null;
#[Gedmo\Locale]
private ?string $locale = null;
/** /**
* @return int * @return int
*/ */
@ -130,4 +133,16 @@ class ExtraFieldOptions
return $this; return $this;
} }
public function getLocale(): string
{
return $this->locale;
}
public function setLocale(string $locale): self
{
$this->locale = $locale;
return $this;
}
} }

Loading…
Cancel
Save