/** * Get main select builder. * * @return Builder */ public function getSource() { $builder = new Builder(); $builder->from('Core\\Model\\LanguageTranslation')->where('language_id = ' . $this->_language->getId()); $showUntranslated = (bool) $this->getDI()->getRequest()->get('untranslated', 'int', 0); if ($showUntranslated) { $builder->where("original = translated"); } if ($search = $this->getDI()->getRequest()->get('search')) { $builder->where("original LIKE '%{$search}%'")->orWhere("translated LIKE '%{$search}%'"); } return $builder; }
/** * Parse import data. * Import translations and language if needed. * * @param DIBehaviour $di Dependency injection. * @param array $data Data to parse. * * @throws Exception * @return Language */ public static function parseImportData($di, $data) { if (empty($data['language']) || empty($data['locale']) || empty($data['locale'])) { throw new Exception($di->getI18n()->_('Language translations package must contains fields (not empty): name, language, locale...')); } /** * Get related language. */ $language = Language::findFirst(["language = '{$data['language']}' AND locale = '{$data['locale']}'"]); if (!$language) { $language = new Language(); $language->assign($data); if (!$language->save()) { throw new Exception(implode(', ', $language->getMessages())); } } /** * Import into database. */ $table = LanguageTranslation::getTableName(); $sql = "INSERT IGNORE INTO `{$table}` (language_id, scope, original, translated) VALUES "; $sqlValues = []; $counter = 0; $totals = []; foreach ($data['content'] as $scope => $translations) { $totals[$scope] = 0; foreach ($translations as $original => $translated) { $sqlValues[] = PHP_EOL . sprintf('(%d, "%s", "%s", "%s")', $language->getId(), mysql_real_escape_string($scope), mysql_real_escape_string($original), mysql_real_escape_string($translated)); $counter++; $totals[$scope]++; if ($counter == self::LANGUAGE_IMPORT_BATCH_SIZE) { $counter = 0; $sqlValues = ''; $di->getModelsManager()->execute($sql . implode(',', $sqlValues)); } } } if (!empty($sqlValues)) { $di->getDb()->execute($sql . implode(',', $sqlValues)); } return [$language, $totals]; }