importLanguage(new HttpRequest()); } /** * Import data from request * * @param RequestAbstract $request Request * * @return array * * @since 1.0.0 */ public function importFromRequest(RequestAbstract $request, ResponseAbstract $response) : array { $start = new \DateTime($request->getData('start') ?? 'now'); $end = new \DateTime($request->getData('end') ?? 'now'); $lang = []; $lang['Exchange'] = include __DIR__ . '/Lang/' . $request->header->l11n->language . '.lang.php'; $this->l11n->loadLanguage($request->header->l11n->language, 'Exchange', $lang); if ($request->hasData('db')) { $this->remote = ConnectionFactory::create([ 'db' => (string) ($request->getData('db')), 'host' => $request->getDataString('host') ?? '', 'port' => $request->getDataInt('port') ?? 0, 'database' => $request->getDataString('database') ?? '', 'login' => $request->getDataString('login') ?? '', 'password' => $request->getDataString('password') ?? '', 'datetimeformat' => $request->getDataString('datetimeformat') ?? 'Y-m-d H:i:s', ]); $this->remote->connect(); if ($this->remote->getStatus() !== DatabaseStatus::OK) { return ['status' => false]; } } $this->account = $request->header->account; $result = ['status' => true]; if ($request->getData('type') === 'language') { $this->importLanguage($request); $log = new ExchangeLog(); $log->createdBy = new NullAccount($this->account); $log->type = ExchangeType::IMPORT; $log->message = $this->l11n->getText($request->header->l11n->language, 'Exchange', '', 'LangFileImported'); $log->subtype = 'language'; $log->exchange = new NullInterfaceManager($request->getDataInt('id') ?? 0); $result['logs'][] = $log; } return $result; } /** * Import language * * @return void * * @since 1.0.0 */ public function importLanguage(RequestAbstract $request) : void { $upload = ApiController::uploadFilesToDestination($request->files); $fp = \fopen($upload['file0']['path'] . '/' . $upload['file0']['filename'], 'r'); if ($fp === false) { return; // @codeCoverageIgnore } $header = \fgetcsv($fp, 0, ';', '"'); if ($header === false) { return; // @codeCoverageIgnore } $languageArray = []; $supportedLanguages = \array_slice($header, 4); $keyLengths = []; while (($line = \fgetcsv($fp, 0, ';', '"')) !== false) { $translations = \array_slice($line, 4); $line[0] = \trim($line[0]); $line[1] = \trim($line[1]); $line[2] = \trim($line[2]); $line[3] = \trim($line[3]); if (($keyLengths[$line[0]][$line[1]][$line[2]] ?? 0) < \strlen($line[3])) { $keyLengths[$line[0]][$line[1]][$line[2]] = \strlen($line[3]); } foreach ($supportedLanguages as $index => $language) { if (empty($language = \trim($language))) { continue; // @codeCoverageIgnore } $languageArray[$line[0]][$line[1]][$line[2]][$line[3]][$language] = $translations[$index]; } } \fclose($fp); \unlink($upload['file0']['path'] . '/' . $upload['file0']['filename']); foreach ($languageArray as $module => $themes) { foreach ($themes as $theme => $files) { foreach ($files as $file => $keys) { foreach ($supportedLanguages as $language) { $langFile = __DIR__ . '/../../../../../../' . $module . '/Theme/' . $theme . '/Lang/' . ($file === '' ? '' : $file . '.') . \trim($language) . '.lang.php'; if (\is_file($langFile)) { \unlink($langFile); } $fp = \fopen($langFile, 'w+'); if ($fp === false) { continue; // @codeCoverageIgnore } \fwrite($fp, " [\n" ); \ksort($keys); foreach ($keys as $key => $values) { $key = \ltrim($key, '*'); \fwrite($fp, " '" . $key . "'" . \str_repeat(' ', $keyLengths[$module][$theme][$file] - \strlen($key)) . " => '" . \str_replace(['\\', '\''], ['\\\\', '\\\''], $values[$language] ?? '') . "',\n" ); } \fwrite($fp, "]];\n"); \fclose($fp); } } } } } }