コード例 #1
0
 /**
  * Gets Gedmo default locale
  *
  * @return string
  */
 public function getDefaultLocale()
 {
     return $this->gedmoTranslatableListener->getDefaultLocale();
 }
コード例 #2
0
 /**
  * Makes additional translation of $entity $field into $locale using $value
  *
  * @param object $entity
  * @param string $field
  * @param string $locale
  * @param mixed  $value
  *
  * @return TranslationRepository
  * @access public
  * @author Etienne de Longeaux <*****@*****.**>
  */
 public function translate($entity, $field, $locale, $value)
 {
     $meta = $this->_em->getClassMetadata(get_class($entity));
     $listener = new \Gedmo\Translatable\TranslatableListener();
     //$this->getTranslatableListener();
     $config = $listener->getConfiguration($this->_em, $meta->name);
     if (!isset($config['fields']) || !in_array($field, $config['fields'])) {
         throw new \Gedmo\Exception\InvalidArgumentException("Entity: {$meta->name} does not translate field - {$field}");
     }
     if (in_array($locale, array($listener->getDefaultLocale(), $listener->getTranslatableLocale($entity, $meta)))) {
         $meta->getReflectionProperty($field)->setValue($entity, $value);
         $this->_em->persist($entity);
     } else {
         $ea = new TranslatableAdapterORM();
         $foreignKey = $meta->getReflectionProperty($meta->getSingleIdentifierFieldName())->getValue($entity);
         $objectClass = $meta->name;
         $class = $listener->getTranslationClass($ea, $meta->name);
         $transMeta = $this->_em->getClassMetadata($class);
         $trans = $this->findOneBy(compact('locale', 'field', 'object'));
         if (!$trans) {
             $trans = new $class();
             $transMeta->getReflectionProperty('object')->setValue($trans, $entity->getId());
             $transMeta->getReflectionProperty('field')->setValue($trans, $field);
             $transMeta->getReflectionProperty('locale')->setValue($trans, $locale);
         }
         $type = Type::getType($meta->getTypeOfField($field));
         $transformed = $type->convertToDatabaseValue($value, $this->_em->getConnection()->getDatabasePlatform());
         $transMeta->getReflectionProperty('content')->setValue($trans, $transformed);
         if ($this->_em->getUnitOfWork()->isInIdentityMap($entity)) {
             $this->_em->persist($trans);
         } else {
             $oid = spl_object_hash($entity);
             $listener->addPendingTranslationInsert($oid, $trans);
         }
     }
     return $this;
     //         $meta         = $this->_em->getClassMetadata(get_class($entity));
     //         $listener     = $this->getTranslatableListener();
     //         $config     = $listener->getConfiguration($this->_em, $meta->name);
     //         if (!isset($config['fields']) || !in_array($field, $config['fields'])) {
     //             throw new \Gedmo\Exception\InvalidArgumentException("Entity: {$meta->name} does not translate field - {$field}");
     //         }
     //         $ea         = new TranslatableAdapterORM();
     //         $class         = $listener->getTranslationClass($ea, $meta->name);
     //         $trans         = $this->findOneBy(compact('locale', 'field', 'object_id'));
     //         if (!$trans) {
     //             $entity->setTranslatableLocale('fr');
     //             $entity->addTranslation(new $class($locale, $field, $value));
     //         }
     //         $this->_em->persist($entity);
     //         $this->_em->flush();
 }