403Webshell
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 :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/backend-accounting.sk/app/app/classes/Translator.php
<?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;
    }

}

Youez - 2016 - github.com/yon3zu
LinuXploit