/**
  * return simple string
  *
  * all we want to store after going through a for is a simple string. If there
  * are any other languages being sent, this is where they get stored.
  *
  * @param  array $default value from client
  *
  * @return string
  *
  * @throws TransformationFailedException
  */
 public function reverseTransform($default)
 {
     $defaultLang = $this->utils->getDefaultLanguage();
     if (!isset($default[$defaultLang])) {
         throw new TransformationFailedException(sprintf('Value must contain "%s" string', $defaultLang));
     }
     $this->utils->insertTranslatable($default);
     return $default[$defaultLang];
 }
Exemplo n.º 2
0
 /**
  * @param FormBuilderInterface $builder form builder
  * @param array                $options array of options
  *
  * @return void
  */
 public function buildForm(FormBuilderInterface $builder, array $options)
 {
     $builder->addViewTransformer($this->transformer);
     $languages = $this->utils->getLanguages();
     $default = $this->utils->getDefaultLanguage();
     // handle what happens when no languages exist in db yet
     if (!in_array($default, $languages)) {
         $languages[] = $default;
     }
     foreach ($languages as $language) {
         $options = [];
         if ($language == $default) {
             $options['required'] = true;
         }
         $builder->add($language, 'text', $options);
     }
 }
 /**
  * remove translateable strings from object
  *
  * @param PreDeserializeEvent $event event
  *
  * @return void
  */
 public function onPreDeserialize(PreDeserializeEvent $event)
 {
     $eventClass = $event->getType()['name'];
     if (!class_exists($eventClass)) {
         throw new DeserializationException(sprintf('Can\' find class %s to deserialize', $eventClass));
     }
     $object = new $eventClass();
     if ($object instanceof TranslatableDocumentInterface) {
         $defaultLanguage = $this->utils->getDefaultLanguage();
         $data = $event->getData();
         foreach ($object->getTranslatableFields() as $field) {
             if (isset($data[$field])) {
                 $this->localizedFields[$field] = $data[$field];
                 $defaultValue = \reset($data[$field]);
                 if (array_key_exists($defaultLanguage, $data[$field])) {
                     $defaultValue = $data[$field][$defaultLanguage];
                 }
                 $data[$field] = $defaultValue;
             }
         }
         $event->setData($data);
     }
 }
 /**
  * Get default translation
  *
  * @param array $translations Translations
  * @return string
  */
 private function getDefaultTranslation(array $translations)
 {
     $defaultLanguage = $this->utils->getDefaultLanguage();
     return isset($translations[$defaultLanguage]) ? $translations[$defaultLanguage] : reset($translations);
 }