| Server IP : 37.9.174.138 / Your IP : 216.73.216.117 Web Server : Apache System : Linux vps6.backend.sk 6.12.100+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.100-1 (2026-07-30) x86_64 User : ftpuser ( 1001) PHP Version : 8.4.24 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /var/www/html/backend-accounting.sk/app/app/classes/ |
Upload File : |
<?php
namespace app\classes;
class Translator {
private static $instance;
private $translates = array();
private $default_translates = array();
private $default_lang;
private $langs = array();
private $lang;
private $db;
private $all_langs = array();
private $app;
protected function __construct() {
$this->app = \App::getInstance();
$this->db = PDODatabase::getInstance();
$this->default_lang = $this->app->getConfig(\app\constants\Config::DEFAULT_LANG);
$this->lang = $this->app->getLang();
$this->app->setTranslator($this);
$langs = new PDOCollection("languages", "id");
$this->langs = array_column($langs->toArray(), "language", "id");
ksort($this->langs);
$translates = new PDOCollection("translates", "identificator", "SELECT translates.text, global_translator.identificator FROM translates JOIN global_translator ON global_translator.id = translates.global_translator_id AND translates.languages_id = (SELECT id FROM languages WHERE language=:lang)", array("lang" => $this->lang));
$this->translates = array_column($translates->toArray(), "text", "identificator");
$this->translates = array_map(function($element) {
return str_replace(array("\n", "\r"), '', $element);
}, $this->translates);
$defaultTranslates = new PDOCollection("translates", "identificator", "SELECT translates.text, global_translator.identificator FROM translates JOIN global_translator ON global_translator.id = translates.global_translator_id AND translates.languages_id = (SELECT id FROM languages WHERE language=:lang)", array("lang" => $this->default_lang));
$this->default_translates = array_column($defaultTranslates->toArray(), "text", "identificator");
$this->default_translates = array_map(function($element) {
return str_replace(array("\n", "\r"), '', $element);
}, $this->default_translates);
}
/**
* @return Translator
*/
public static function getInstance() {
if (Translator::$instance == NULL) {
Translator::$instance = new Translator();
}
return Translator::$instance;
}
public function addTranslate($default_lang_string = "") {
$inserts = array();
$this->db->addRecord("global_translator", array("identificator" => (md5(microtime()) . generateRandomString(10))));
$global_translator_id = $this->db->getLastInsertId();
foreach ($this->langs as $lang) {
$lang_id = array_search($lang, $this->langs);
if ($lang == $this->default_lang) {
array_push($inserts, "($global_translator_id, $lang_id, '$default_lang_string')");
} else {
array_push($inserts, "($global_translator_id, $lang_id, '')");
}
}
$this->db->sqlCommand("INSERT INTO translates(global_translator_id, languages_id, text) VALUES " . implode(", ", $inserts), array());
}
public function _get($string) {
if (str_replace(" ", "", $string) == "") {
return "";
}
$search = array_search($string, $this->default_translates);
if ($search) {
if (isset($this->translates[$search]) && str_replace(" ", "", $this->translates[$search]) != "") {
$return = $this->translates[$search];
} else {
$return = $this->default_translates[$search];
}
} else {
$this->addTranslate($string);
$this->default_translates[(md5(microtime()) . generateRandomString(10))] = $string;
$return = ($string);
}
// return "<font color='red'>" . $return . "</font>";
return $return;
}
public function _echo($string) {
echo $this->_get($string);
}
public function renderTranslates() {
$translates = array();
$collection = new PDOCollection("translates", "fid", "SELECT CONCAT(global_translator.identificator, languages.id) AS fid, translates.text, global_translator.identificator, languages.id FROM translates JOIN global_translator JOIN languages ON global_translator.id = translates.global_translator_id AND languages.id = translates.languages_id ORDER BY languages.id ASC, translates.text DESC;");
foreach ($collection->toArray() as $row) {
if (!array_key_exists($row["identificator"], $translates)) {
$translates[$row["identificator"]] = array();
}
$translates[$row["identificator"]][$row["id"]] = $row["text"];
}
?>
<table id="translates-table" class="table table table-striped table-bordered text-center">
<thead>
<tr>
<td class="nosort" style="width: 100px;"><b>Upraviť</b></td>
<?php
foreach ($this->langs as $lang) {
?>
<td><b><?php echo strtoupper($lang); ?></b></td>
<?php } ?>
</tr>
</thead>
<tbody>
<?php
foreach (array_reverse($translates) as $key => $translate) {
?>
<tr>
<td>
<form style="display: inline-table" name="editbutton" action="/admin/translates/edit/" method="get">
<input type="hidden" name="id" value="<?php echo $key; ?>">
<button data-toggle="tooltip" title="Upraviť" type="submit" class="btn btn-primary btn-sm inline">
<i class="glyphicon glyphicon-edit"></i>
</button>
</form>
<form style="display: inline-table" class="inline" target="_blank" name="editbutton" action="/admin/translates/edit/" method="get">
<input type="hidden" name="id" value="<?php echo $key; ?>">
<button data-toggle="tooltip" title="Upraviť v novej karte" type="submit" class="btn btn-primary btn-sm inline">
<i class="glyphicon glyphicon-new-window"></i>
</button>
</form>
</td>
<?php
ksort($translate);
foreach ($translate as $lang_translate) {
?>
<td style="text-align: center;"><?php echo get_words(strip_tags($lang_translate), 7); ?></td>
<?php
}
?>
</tr>
<?php
}
?>
</tbody>
</table>
<?php
}
public function renderTranslate($identificator) {
$c = 1;
$collection = new PDOCollection("translates", "languages_id", "SELECT translates.text, translates.global_translator_id, translates.languages_id FROM translates JOIN global_translator JOIN languages ON global_translator.id = translates.global_translator_id AND languages.id = translates.languages_id AND global_translator.identificator=:identificator ORDER BY languages.id ASC;", array("identificator" => $identificator));
$translates = array();
foreach ($collection->toArray() as $row) {
if ($this->langs[$row["languages_id"]] == $this->default_lang) {
$translates["disabled"] = $row["text"];
} else {
$translates[$row["global_translator_id"] . "-" . $row["languages_id"]] = $row["text"];
}
}
if (count($translates) == 0) {
throw new \Exception("Not found", 9001);
}
?>
<div class="col-md-8 col-md-offset-2" >
<form class="form-signin" onsubmit="updateTranslate($(this).serialize());
return false;" method="post">
<?php
foreach ($translates as $key => $translate) {
?>
<div class="form-group row">
<label class="control-label"><?php echo strtoupper($this->langs[$c]); ?></label>
<textarea <?php if ($key == "disabled") { ?> disabled <?php } ?> class="form-control input-lg" rows="3" <?php if ($key != "disabled") { ?> name="<?php echo $key ?>"<?php } ?> style="resize: vertical;"><?php echo $translate ?></textarea>
</div>
<?php
$c++;
}
?>
<div class="form-group row">
<input type="hidden" name="id" value="<?php echo $identificator; ?>">
<button class="btn btn-lg btn-primary btn-block" type="submit">Uložiť</button>
</div>
</form>
</div>
<?php
}
public function updateTranslate($identificator, $post) {
$app = \App::getInstance();
$translates = new PDOCollection("translates", "languages_id", "SELECT translates.text, translates.global_translator_id, translates.languages_id FROM translates JOIN global_translator JOIN languages ON global_translator.id = translates.global_translator_id AND languages.id = translates.languages_id AND global_translator.identificator=:identificator ORDER BY languages.id ASC;", array("identificator" => $identificator));
$c = 1;
foreach ($translates->toArray() as $row) {
$c++;
if ($this->langs[$row["languages_id"]] != $this->default_lang) {
$this->db->sqlCommand("UPDATE translates SET text=:text WHERE global_translator_id=:global_translator_id AND languages_id=:languages_id", array("text" => $app->convertToHtmlTags($post[$row["global_translator_id"] . "-" . $row["languages_id"]]), "global_translator_id" => $row["global_translator_id"], "languages_id" => $row["languages_id"]));
}
}
if ($c == 1) {
throw new Exception("Not found", 9001);
}
// exit;
}
public function renderSelectBox($name, $selectedValue, $class = "form-control") {
echo "<select class='" . $class . "' name='" . $name . "'>" . "\n";
foreach ($this->langs as $key => $value) {
if ($value == "default") {
continue;
}
echo "<option value='" . $key . "' " . str_replace($selectedValue, "selected", $key) . ">" . strtoupper($value) . "</option>";
}
echo "</select>" . "\n";
}
public function getLangById($id) {
if (!empty($this->langs[$id])) {
return $this->langs[$id];
}
return NULL;
}
public function setLang($lang) {
if (count($this->all_langs) < 1) {
foreach ($this->langs as $language) {
if ($language != $this->default_lang && $language != $this->lang) {
$this->all_langs[$language] = array();
$langs = new PDOCollection("translates", "identificator", "SELECT translates.text, global_translator.identificator FROM translates JOIN global_translator ON global_translator.id = translates.global_translator_id AND translates.languages_id = (SELECT id FROM languages WHERE language=:lang)", array("lang" => $lang));
foreach ($langs->toArray() as $row) {
$this->all_langs[$language][$row['identificator']] = str_replace(array("\n", "\r"), '', $row['text']);
}
}
}
}
$this->all_langs[$this->lang] = $this->translates;
$this->lang = $lang;
$this->translates = $this->all_langs[$lang];
}
public function getLangs() {
return $this->langs;
}
public function convertVarsText($text, array $data) {
$array = explode("{", $text);
$new_text = "";
foreach ($array as $part) {
if (contains_string($part, "}")) {
$var = substr($part, 0, mb_strpos($part, "}", 0, "UTF-8"));
if ($data[$var]["translate"] === TRUE) {
$value = $this->_get($data[$var]["value"]);
} else {
$value = $data[$var]["value"];
}
$new_text .= $value . substr($part, mb_strpos($part, "}", 0, "UTF-8") + 1);
} else {
$new_text .= $part;
}
}
return $new_text;
}
public function convertHtmlTemplate($text) {
$array = explode("[[[", $text);
$new_text = "";
foreach ($array as $part) {
if (contains_string($part, "]]]")) {
$var = mb_substr($part, 0, mb_strpos($part, "]]]", 0, "UTF-8"));
$value = $this->_get(trim($var));
$new_text .= $value . mb_substr($part, mb_strpos($part, "]]]", 0, "UTF-8") + 3);
} else {
$new_text .= $part;
}
}
return $new_text;
}
public function printJsTranslates($varName, array $translates) {
$implode = array();
foreach ($translates as $translate) {
$implode[] = '"' . $translate . '": "' . $this->_get($translate) . '"';
}
?>
<script>
var <?php echo $varName ?> = {<?php echo implode(', ', $implode) ?>};
</script>
<?php
}
public function getVar($key){
$var = $this->_get("var_" . $key);
if(strlen(trim($var)) === 0 || $var === "var_" . $key){
return false;
}
return $var;
}
}