예제 #1
0
 /**
  * @param $id
  * @param TranslatableEntity $entity
  */
 private function insertTranslation($id, TranslatableEntity $entity)
 {
     $table = $this->getTable();
     $languageColumn = $this->mapper->getLanguageColumn();
     $translationsTable = $this->mapper->getTranslationsTable($table);
     $translationsViaColumn = $this->mapper->getTranslationsColumn($table);
     // Translation
     $translation = array_intersect_key($entity->getModifiedRowData(), $entity->getTranslatableColumns());
     $translation[$translationsViaColumn] = $id;
     if ($entity->isDetached()) {
         foreach ($this->languages->getLanguages() as $language) {
             if (!isset($translation[$languageColumn]) || $translation[$languageColumn] != $language->id) {
                 $translation[$languageColumn] = $language->id;
             }
             $this->connection->query('INSERT INTO %n %v', $translationsTable, $translation);
         }
     } else {
         if (isset($translation[$languageColumn])) {
             $row = $this->connection->select('*')->from($translationsTable)->where('%n = %i', $languageColumn, $translation[$languageColumn])->where('%n = %i', $translationsViaColumn, $id)->fetchSingle();
             if (!$row) {
                 $this->connection->query('INSERT INTO %n %v', $translationsTable, $translation);
             } else {
                 $this->connection->query('UPDATE %n SET %a WHERE %n = ? AND %n = %s', $translationsTable, $translation, $translationsViaColumn, $id, $languageColumn, $translation[$languageColumn]);
             }
         }
     }
 }
예제 #2
0
 public function __construct($mask, $metadata = [], Languages $languages)
 {
     if (count($languages->getLanguages()) > 1) {
         $mask = $this->languageMask . $mask;
         if (!isset(Route::$styles['lang'])) {
             Route::addStyle('lang');
             Route::setStyleProperty('lang', Route::FILTER_IN, function ($code) use($languages) {
                 $languages->setCurrent($code);
                 return $languages->getCurrent()->code;
             });
         }
     }
     parent::__construct($mask, $metadata);
 }
예제 #3
0
 public function injectLocalization(Languages $languages, Translator $translator)
 {
     $this->languages = $languages->getLanguages();
     $this->language = $languages->getLanguage();
     $this->translator = $translator;
 }
예제 #4
0
 public function __construct(Languages $languages)
 {
     $this->languages = $languages->getLanguages();
 }