Files
peehaitchpea/api.php

160 lines
4.2 KiB
PHP

<?php
$dbuser = "peehaitchpea";
$dbpass = "ballsdeep";
$dbname = "peehaitchpea";
error_reporting(E_ALL);
ini_set("display_errors", "On");
// -----------------------------------------------------
// COMMON FUNCTIONS
// -----------------------------------------------------
date_default_timezone_set("UTC");
function query($query, $callback = null, $exceptioncallback = null) {
global $conn;
try {
$result = $conn->query($query);
} catch(mysqli_sql_exception $e) {
if($exceptioncallback !== null) $exceptioncallback($e);
return;
}
if($result === false) {
echo("SQL ERROR: " . mysqli_error($conn));
} else if($result === true) {
if($callback !== null) $callback(null, 0);
} else if($callback !== null && $result->num_rows > 0) {
$id = 0;
while($row = $result->fetch_assoc()) $callback($row, $id++);
}
}
// -----------------------------------------------------
// SQL INITIALIZATION
// -----------------------------------------------------
try {
$conn = new mysqli("localhost", $dbuser, $dbpass, $dbname);
} catch(mysqli_sql_exception $e) {
if(isset($_GET["geterrormsg"]))
die("Connection failed: " . $e);
else
die("SQL error. Try again later.");
}
if($conn->connect_error) {
if(isset($_GET["geterrormsg"]))
die("Connection failed: " . $conn->connect_error);
else
die("SQL error. Try again later.");
}
// -----------------------------------------------------
// INITIAL SETUP - CREATE NECESSARY TABLES
// -----------------------------------------------------
$tables = [];
query("SHOW TABLES;", function($row) {
global $tables;
$tables[] = $row[array_key_first($row)];
});
if(!in_array("for_moderation", $tables)) {
query("CREATE TABLE `for_moderation` (
`id` int NOT NULL AUTO_INCREMENT,
`text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");
}
if(!in_array("for_stallman", $tables)) {
query("CREATE TABLE `for_stallman` (
`id` int NOT NULL AUTO_INCREMENT,
`text` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
`selected` boolean NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;");
}
if(isset($_GET["cmd"])) {
$cmd = $_GET['cmd'];
switch($cmd) {
case "newmodmessages":
$arr = json_decode(file_get_contents("php://input"));
foreach ($arr as $value) {
query("INSERT INTO `for_moderation`(`text`) VALUES (\"" . $conn->real_escape_string($value) . "\");");
}
break;
case "newstallmanmessages":
$arr = json_decode(file_get_contents("php://input"));
foreach ($arr as $value) {
query("INSERT INTO `for_stallman`(`text`, `selected`) VALUES (\"" . $conn->real_escape_string($value) . "\", false);");
}
break;
case "getselectedmessage":
query("SELECT `text` FROM `for_stallman` WHERE `selected` = true LIMIT 1;", function($row) {
echo $row["text"];
});
break;
case "selectmessage":
query("UPDATE `for_stallman` SET `selected` = false");
query("UPDATE `for_stallman` SET `selected` = true WHERE `id` = " . file_get_contents("php://input") . ";");
break;
case "unselectmessage":
query("UPDATE `for_stallman` SET `selected` = false");
break;
case "getmodmessages":
$arr = [];
query("SELECT `id`, `text` FROM `for_moderation`;", function($row) {
global $arr;
$arr[$row["id"]] = $row["text"];
});
echo(json_encode($arr));
break;
case "getstallmanmessages":
$arr = [];
query("SELECT `id`, `text` FROM `for_stallman`;", function($row) {
global $arr;
$arr[$row["id"]] = $row["text"];
});
echo(json_encode($arr));
break;
case "deletemodmessages":
$arr = json_decode(file_get_contents("php://input"));
foreach ($arr as $value) {
query("DELETE FROM `for_moderation` WHERE `id` = " . $conn->real_escape_string($value) . ";");
}
break;
case "deletestallmanmessages":
$arr = json_decode(file_get_contents("php://input"));
foreach ($arr as $value) {
query("DELETE FROM `for_stallman` WHERE `id` = " . $conn->real_escape_string($value) . ";");
}
break;
default:
die("Loading React...");
}
}
?>