vendor/wearemarketing/corebundle/Model/Translatable.php line 105

Open in your IDE?
  1. <?php
  2. namespace WAM\Bundle\CoreBundle\Model;
  3. use Doctrine\Common\Inflector\Inflector;
  4. use Knp\DoctrineBehaviors\Model\Translatable\Translatable as BaseTranslatable;
  5. use Sonata\AdminBundle\Exception\NoValueException;
  6. use Symfony\Component\PropertyAccess\Exception\AccessException;
  7. use WAM\Component\Core\Util\StringTools;
  8. /**
  9.  * Trait Translatable.
  10.  *
  11.  * @author Gerard Rico <grico@wearemarketing.com>
  12.  */
  13. trait Translatable
  14. {
  15.     use BaseTranslatable;
  16.     /**
  17.      * Returns translation entity class name.
  18.      *
  19.      * @return string
  20.      */
  21.     public static function getTranslationEntityClass()
  22.     {
  23.         return static::class.'Translation';
  24.     }
  25.     /**
  26.      * @param string $locale
  27.      *
  28.      * @return $this
  29.      */
  30.     public function setLocale($locale)
  31.     {
  32.         $this->setCurrentLocale($locale);
  33.         return $this;
  34.     }
  35.     /**
  36.      * @return string
  37.      */
  38.     public function getLocale()
  39.     {
  40.         return $this->getCurrentLocale();
  41.     }
  42.     public function getTranslation(string $locale null)
  43.     {
  44.         return $this->translate($localefalse);
  45.     }
  46.     public function clearTranslationsExcept(array $locales)
  47.     {
  48.         foreach ($this->getTranslations() as $locale => $translation) {
  49.             if (!in_array($locale$locales)) {
  50.                 $this->removeTranslation($translation);
  51.             }
  52.         }
  53.     }
  54.     public function setTranslations($translations)
  55.     {
  56.         if (!$translations instanceof \Traversable && !is_array($translations)) {
  57.             throw new \InvalidArgumentException('$translations parameter must be iterable');
  58.         }
  59.         $this->translations->clear();
  60.         foreach ($translations as $translation) {
  61.             $this->addTranslation($translation);
  62.         }
  63.         return $this;
  64.     }
  65.     public function __get($property)
  66.     {
  67.         $translation $this->translate(nullfalse);
  68.         $method 'get'.Inflector::classify($property);
  69.         if (!method_exists($translation$method)) {
  70.             throw new AccessException("Unable to get property $property");
  71.         }
  72.         return $translation->{$method}();
  73.     }
  74.     public function __set($property$value)
  75.     {
  76.         $translation $this->translate(nullfalse);
  77.         $method 'set'.Inflector::classify($property);
  78.         if (!method_exists($translation$method)) {
  79.             throw new AccessException("Unable to set property $property");
  80.         }
  81.         $translation->{$method}($value);
  82.     }
  83.     public function __call($method$arguments)
  84.     {
  85.         $translation $this->getTranslation();
  86.         $isSet StringTools::startsWith($method'set');
  87.         if (
  88.             !method_exists($translation$method)
  89.             and !StringTools::startsWith($method'get')
  90.             and !$isSet
  91.         ) {
  92.             $originalMethod $method;
  93.             $method 'get'.Inflector::classify($method);
  94.             if (!method_exists($translation$method)) {
  95.                 throw new NoValueException(sprintf('Unable to retrieve the value of `%s`'$originalMethod));
  96.             }
  97.         }
  98.         $result call_user_func_array(
  99.             [$translation$method],
  100.             $arguments
  101.         );
  102.         return $isSet $this $result;
  103.     }
  104. }