141 lines
7.0 KiB
PHP
141 lines
7.0 KiB
PHP
<?php
|
|
|
|
class GamUsino{
|
|
|
|
public function __construct($inputs = null){
|
|
|
|
$data = json_decode(base64_decode($_POST["GamUsino"]), true);
|
|
|
|
if($data){
|
|
if(isset($data["action"])){
|
|
switch($data["action"]){
|
|
case "load_polls":
|
|
self::response(200, [
|
|
"polls" => self::get_polls(self::load_database()),
|
|
"ip" => self::get_ip()
|
|
]);
|
|
break;
|
|
case "add_poll":
|
|
$database = self::load_database();
|
|
isset($database["polls"]) || ($database["polls"] = []);
|
|
foreach($database["polls"] as $poll)
|
|
$poll["name"] == $data["name"] && self::response(400, [
|
|
"message" => "poll_already_exists",
|
|
"name" => $data["name"]
|
|
]);
|
|
$database["polls"][] = [
|
|
"name" => $data["name"],
|
|
"options" => [],
|
|
"ip" => self::get_ip(),
|
|
"date" => time(),
|
|
"deleted" => false
|
|
];
|
|
self::save_database($database);
|
|
self::response(200, self::get_polls($database));
|
|
break;
|
|
case "get_poll":
|
|
$database = self::load_database();
|
|
$poll = isset($database["polls"]) && isset($database["polls"][$data["i"]]) ? $database["polls"][$data["i"]] : null;
|
|
self::response($poll ? 200 : 404, $poll ?? [
|
|
"message" => "poll_not_exists",
|
|
"i" => $data["i"]
|
|
]);
|
|
break;
|
|
case "add_option":
|
|
$database = self::load_database();
|
|
if(isset($database["polls"]) && isset($database["polls"][$data["i"]])){
|
|
foreach($database["polls"][$data["i"]]["options"] as $option)
|
|
$option["text"] == $data["text"] && self::response(400, [
|
|
"message" => "poll_option_already_exists",
|
|
"text" => $data["text"]
|
|
]);
|
|
$database["polls"][$data["i"]]["options"][] = [
|
|
"text" => $data["text"],
|
|
"points" => [],
|
|
"ip" => self::get_ip(),
|
|
"date" => time(),
|
|
"deleted" => false
|
|
];
|
|
self::save_database($database);
|
|
self::response(200, $database["polls"][$data["i"]]["options"]);
|
|
}else
|
|
self::response(404, [
|
|
"message" => "poll_not_exists",
|
|
"name" => $data["name"]
|
|
]);
|
|
break;
|
|
case "set_option":
|
|
$database = self::load_database();
|
|
if(isset($database["polls"]) && isset($database["polls"][$data["i"]])){
|
|
$ip = self::get_ip();
|
|
$done = false;
|
|
$date = time();
|
|
foreach($database["polls"][$data["i"]]["options"][$data["j"]]["points"] as $i => $option)
|
|
if($done = $option["ip"] == $ip){
|
|
$database["polls"][$data["i"]]["options"][$data["j"]]["points"][$i]["selected"] = $data["selected"];
|
|
$database["polls"][$data["i"]]["options"][$data["j"]]["points"][$i]["changes"] ++;
|
|
$database["polls"][$data["i"]]["options"][$data["j"]]["points"][$i]["date_last"] = $date;
|
|
break;
|
|
};
|
|
!$done && ($database["polls"][$data["i"]]["options"][$data["j"]]["points"][] = [
|
|
"ip" => $ip,
|
|
"selected" => $data["selected"],
|
|
"date_in" => $date,
|
|
"date_last" => $date,
|
|
"changes" => 1,
|
|
"deleted" => false
|
|
]);
|
|
self::save_database($database);
|
|
self::response(200, $database["polls"][$data["i"]]["options"]);
|
|
}else
|
|
self::response(404, [
|
|
"message" => "poll_not_exists",
|
|
"i" => $data["i"],
|
|
"j" => $data["j"]
|
|
]);
|
|
break;
|
|
default:
|
|
self::response(404, ["message" => "action_unknown"]);
|
|
break;
|
|
};
|
|
}else
|
|
self::response(405, ["message" => "no_action"]);
|
|
}else
|
|
self::response(405, ["message" => "no_data"]);
|
|
|
|
}
|
|
|
|
private static function get_polls($database){
|
|
return isset($database["polls"]) ? array_map(fn($poll) => ["name" => $poll["name"]], $database["polls"]) : [];
|
|
}
|
|
|
|
private static function response($code, $data){
|
|
|
|
echo json_encode([
|
|
"ok" => $code == 200,
|
|
"code" => $code,
|
|
"content" => $data
|
|
]);
|
|
exit(0);
|
|
|
|
}
|
|
|
|
private static function load_database(){
|
|
return file_exists(\GamUsino\Secrets::settings["database_path"]) ? json_decode(file_get_contents(\GamUsino\Secrets::settings["database_path"]), true) : [];
|
|
}
|
|
|
|
private static function save_database($database){
|
|
file_put_contents(\GamUsino\Secrets::settings["database_path"], json_encode($database));
|
|
}
|
|
|
|
public static function get_ip(){
|
|
foreach(["HTTP_X_REAL_IP", "HTTP_CLIENT_IP", "HTTP_X_FORWARDED_FOR", "REMOTE_ADDR"] as $key){
|
|
if(!empty($_SERVER[$key]))
|
|
return explode(",", $_SERVER[$key])[0];
|
|
if($ips = getenv($key))
|
|
return explode(",", $ips)[0];
|
|
};
|
|
return null;
|
|
}
|
|
|
|
}; |