<?php /** * Copyright Maarch since 2008 under licence GPLv3. * See LICENCE.txt file at the root folder for more details. * This file is part of Maarch software. */ /** * @brief Language Controller * @author dev@maarch.org */ namespace SrcCore\controllers; use Respect\Validation\Validator; use Slim\Http\Request; use Slim\Http\Response; use SrcCore\models\CoreConfigModel; use SrcCore\models\ValidatorModel; use User\models\UserModel; class LanguageController { public static function get(array $args = []) { ValidatorModel::stringType($args, ['lang']); if (empty($args['lang'])) { $user = UserModel::getById(['select' => ['preferences'], 'id' => $GLOBALS['id']]); $user['preferences'] = json_decode($user['preferences'], true); $args['lang'] = $user['preferences']['lang']; } $language = LanguageController::getLanguage(['language' => $args['lang']]); return $language['lang']; } public function getByLang(Request $request, Response $response, array $args) { $language = LanguageController::getLanguage(['language' => $args['lang']]); return $response->withJson($language); } public static function getAvailableLanguages() { $files = array_diff(scandir('lang'), ['..', '.']); $loadedXml = CoreConfigModel::getConfig(); if (!empty((string)$loadedXml->config->customLangPathDirectory)) { $overloadDirectory = (string)$loadedXml->config->customLangPathDirectory; $files = array_merge($files, array_diff(scandir($overloadDirectory), ['..', '.'])); } $files = array_unique($files); $languages = []; foreach ($files as $value) { $languages[] = str_replace('.json', '', $value); } return $languages; } private static function getLanguage(array $args) { ValidatorModel::notEmpty($args, ['language']); ValidatorModel::stringType($args, ['language']); $language = ['lang' => []]; if (is_file("lang/{$args['language']}.json")) { $file = file_get_contents("lang/{$args['language']}.json"); $language = json_decode($file, true); } $loadedXml = CoreConfigModel::getConfig(); if (!empty((string)$loadedXml->config->customLangPathDirectory)) { $overloadDirectory = rtrim((string)$loadedXml->config->customLangPathDirectory, '/'); $overloadFile = "{$overloadDirectory}/{$args['language']}.json"; if (is_file($overloadFile)) { $file = file_get_contents($overloadFile); $overloadedLanguage = json_decode($file, true); foreach ($overloadedLanguage['lang'] as $key => $value) { $language['lang'][$key] = $value; } } } if (empty($language['lang'])) { return ['lang' => []]; } return $language; } public function generateLang(Request $request, Response $response) { if (!is_file('dist/main.js')) { return $response->withStatus(403)->withJson(['errors' => 'Route forbidden']); } $body = $request->getParsedBody(); if (!Validator::stringType()->notEmpty()->validate($body['langId'])) { return $response->withStatus(400)->withJson(['errors' => 'Body langId is empty or not a string']); } $path = "lang/{$body['langId']}.json"; if (!is_file($path) || !is_writable($path)) { return $response->withStatus(400)->withJson(['errors' => "lang/{$body['langId']}.json is not a file or is not writable"]); } $file = @fopen($path, 'w'); if ($file === false) { return $response->withStatus(400)->withJson(['errors' => "Cannot open file : lang/{$body['langId']}.json"]); } $content = json_encode($body['jsonContent'], JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); fwrite($file, $content); fclose($file); return $response->withStatus(204); } public static function getAvailableCoreLanguages(Request $request, Response $response) { $files = array_diff(scandir('lang'), ['..', '.']); $languages = []; foreach ($files as $value) { $path = 'lang/' . $value; $langName = str_replace('.json', '', $value) ; $fileContent = file_get_contents($path); $fileContent = json_decode($fileContent, true); $languages[$langName] = $fileContent; } return $response->withJson(['languages' => $languages]); } }