This commit is contained in:
Dancbeunny98
2024-07-29 04:13:24 +03:00
parent 27e009af41
commit 3231a677c6
8 changed files with 560 additions and 312 deletions

172
index.php Normal file
View File

@@ -0,0 +1,172 @@
<?php
if(isset($_POST['data'])){
$data = json_decode($_POST['data'], true);
function guidv4($data = null) {
// Generate 16 bytes (128 bits) of random data or use the data passed into the function.
$data = $data ?? random_bytes(16);
assert(strlen($data) == 16);
// Set version to 0100
$data[6] = chr(ord($data[6]) & 0x0f | 0x40);
// Set bits 6-7 to 10
$data[8] = chr(ord($data[8]) & 0x3f | 0x80);
// Output the 36 character UUID.
return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
$host = $data['database']['host'];
$port = $data['database']['port'];
$user = $data['database']['user'];
$pass = $data['database']['pass'];
$database = $data['database']['base'];
$prefix = $data['database']['pref'];
$link = mysqli_connect($host, $user, $pass, $database, $port);
$link->set_charset('utf8');
if ($link == false){
exit(json_encode(array("success" => "false", "message"=> "Невозможно подключиться к MySQL" . mysqli_connect_error())));
}
$resCollection = $link->query("SELECT * FROM `".$prefix."collections` WHERE `name` = '" . $data['collection'] . "';");
$isSuccess = true;
$hasCollection = mysqli_num_rows($resCollection) > 0;
foreach($data['data'] as $key => $value){
// echo $key . " -> "; var_dump($value); echo '<br>';
if($hasCollection){
$rs = $link->query("SELECT `twin_id`, `twin_data` FROM `".$prefix."translations` WHERE `field_key` = '" . $key . "';");
$hasLocalization = mysqli_num_rows($rs) > 0;
if($hasLocalization){
//updating
$data = mysqli_fetch_assoc($rs);
$twinData = json_decode($data['twin_data'], true);
$twinData['dateUpdated'] = time()*1000;
$res = $link->query("UPDATE `".$prefix."translations` SET `twin_data` = '".str_replace("\"", '\\"',json_encode($twinData))."' , `content` = '".str_replace("\"", '\\"', json_encode($value, JSON_UNESCAPED_UNICODE))."' WHERE `twin_id` = '" . $data['twin_id'] . "';");
if(!$res) {
exit(json_encode(array("success" => "false", "message" => "Couldn't save " . $key . ": " . $link->error)));
break;
}
}else {
$twinData = array(
"dateCreated" => time()*1000,
"dateUpdated" => time()*1000,
"archived" => false,
"tags" => []
);
$twinId = guidv4();
//inserting
$stmt = $link->prepare("INSERT INTO `".$prefix."translations` (`collection`, `field_key`, `content`, `twin_id`, `twin_data`) VALUES (?,?,?,?,?)");
$stmt ->bind_param("sssss", $data['collection'], $key, json_encode($value, JSON_UNESCAPED_UNICODE), $twinId, json_encode($twinData));
$res = $stmt -> execute();
$stmt -> close();
if(!$res) {
exit(json_encode(array("success" => "false", "message" => "Couldn't save " . $key . ": " . $link->error)));
break;
}
}
}else {
$twinData = array(
"dateCreated" => time()*1000,
"dateUpdated" => time()*1000,
"archived" => false,
"tags" => []
);
$twinId = guidv4();
//inserting
$queryAddCollection = "INSERT INTO `".$prefix."collections` (`name`, `servers`, `blacklist`) VALUES ('".$data['collection']."', '[]', 1)";
// $queryAddTranslation = "INSERT INTO `".$prefix."translations` (`collection`, `field_key`, `content`, `twin_id`, `twin_data`) VALUES ('".$data['collection']."' , '".$key."' , '".str_replace("\"", '\\"', json_encode($value, JSON_UNESCAPED_UNICODE))."' , '".$twinId."' , '".str_replace("\"", '\\"',json_encode($twinData))."');";
$res = $link->query($queryAddCollection);
// $res = $link->query($queryAddTranslation);
$stmt = $link->prepare("INSERT INTO `".$prefix."translations` (`collection`, `field_key`, `content`, `twin_id`, `twin_data`) VALUES (?,?,?,?,?)");
$stmt ->bind_param("sssss", $data['collection'], $key, json_encode($value, JSON_UNESCAPED_UNICODE), $twinId, json_encode($twinData));
$res = $stmt -> execute();
$stmt -> close();
if(!$res) {
exit(json_encode(array("success" => "false", "message" => "Couldn't save " . $key . ": " . $link->error)));
break;
}
$hasCollection = true;
}
}
exit(json_encode(array("success" => "true")));
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Text Transformer</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.5.3/dist/css/bootstrap.min.css" integrity="sha384-TX8t27EcRE3e/ihU7zmQxVncDAy5uIKz4rEkgIXeMed4M0jlfIDPvg6uqKI2xXr2" crossorigin="anonymous">
<link rel="stylesheet" href="css/style.css">
<script src="js/jquery-3.7.1.min.js"></script>
</head>
<body>
<div class="row">
<div class="col-md-6 d-flex flex-column gap">
<div class="row justify-content-between">
<label for="key">Enter a key</label><input class="form-control-sm w-50" id="key" type="text" placeholder="Enter collection name">
</div>
<div class="row justify-content-between">
<div class="row justify-content-between w-100">
<label for="add_arg">Enter a new arg</label><input class="form-control-sm w-50" type="text" id="add_arg" placeholder="e.g. player admin">
</div>
<div class="args" id="args"></div>
</div>
</div>
<div class="col-md-6">
<div class="w-100 db">
<input type="text" id="db_host" name="" class="form-control-sm w-50" placeholder="Database host">
<input type="text" id="db_base" name="" class="form-control-sm w-50" placeholder="Database base">
<input type="text" id="db_user" name="" class="form-control-sm w-50" placeholder="Database user">
<input type="password" id="db_pass" name="" class="form-control-sm w-50" placeholder="Database password">
<input type="number" id="db_port" name="" class="form-control-sm w-50" placeholder="Database port" value="3306">
<input type="text" id="db_prefix" name="" class="form-control-sm w-50" placeholder="Triton table prefix" value="triton_">
</div>
<div class="row justify-content-between"><button id="reset" class="btn-sm btn-success">Новый документ</button><button id="btn" class="btn-sm btn-success">Upload translations to database</button></div>
</div>
</div>
<main class="row flex-column gap">
<div class="row justify-content-between align-items-center">
<div class="col-md-6 d-flex justify-content-between pr-2 align-items-center">
<span>Input</span>
<select id="language" class="form-control w-50">
<option value="choose" disabled selected>Choose language</option>
<option value="ru_RU">Russia</option>
<option value="en_GB">United Kingdom</option>
<option value="en_US">United States of America (USA)</option>
</select>
</div>
<div class="col-md-6 d-flex justify-content-between pl-2 align-items-center">
<span>Output</span>
<button class="btn btn-success" onclick="copyResult()">Copy result</button>
</div>
</div>
<div class="row flex-grow">
<div class="col-md-6 pr-2 h-100">
<textarea id="input" class="w-100 form-control h-100" disabled></textarea>
</div>
<div class="col-md-6 pl-2 h-100">
<textarea id="output" class="w-100 form-control h-100" disabled></textarea>
</div>
</div>
</main>
<footer>
<div class="w-100 row align-items-center justify-content-center p-2">
<p>2023-<span id="date"></span> &copy; <a href="https://discord.com/users/566255927926456320">DestKoder</a> & <a href="https:://quickfirecorp.ru">QuickFire Corp</a> All Rights Reserved</p>
</div>
</footer>
<script src="js/index.js"></script>
<script src="js/utils.js"></script>
</body>
</html>