rsemcs/dynmap/web/standalone/PostgreSQL_markers.php

102 lines
2.7 KiB
PHP

<?php
ob_start();
require_once 'PostgreSQL_funcs.php';
require 'PostgreSQL_config.php';
require 'PostgreSQL_access.php';
ob_end_clean();
session_start();
if (isset($_SESSION['userid'])) {
$userid = $_SESSION['userid'];
} else {
$userid = '-guest-';
}
$loggedin = false;
if (strcmp($userid, '-guest-')) {
$loggedin = true;
}
$path = $_REQUEST['marker'];
if ((!isset($path)) || strstr($path, "..")) {
header('HTTP/1.0 500 Error');
echo "<h1>500 Error</h1>";
echo "Bad marker: " . $path;
exit();
}
$parts = explode("/", $path);
if (($parts[0] != "faces") && ($parts[0] != "_markers_")) {
header('HTTP/1.0 500 Error');
echo "<h1>500 Error</h1>";
echo "Bad marker: " . $path;
exit();
}
initDbIfNeeded();
if ($parts[0] == "faces") {
if (count($parts) != 3) {
header('HTTP/1.0 500 Error');
echo "<h1>500 Error</h1>";
echo "Bad face: " . $path;
cleanupDb();
exit();
}
$ft = 0;
if ($parts[1] == "8x8") {
$ft = 0;
} elseif ($parts[1] == '16x16') {
$ft = 1;
} elseif ($parts[1] == '32x32') {
$ft = 2;
} elseif ($parts[1] == 'body') {
$ft = 3;
}
$pn = explode(".", $parts[2]);
$stmt = $db->prepare('SELECT Image from ' . $dbprefix . 'Faces WHERE PlayerName=? AND TypeID=?');
$res = $stmt->execute(array($pn[0], $ft));
$timage = $stmt->fetch();
if ($res && $timage) {
header('Content-Type: image/png');
echo stream_get_contents($timage[0]);
} else {
header('Location: ../images/blank.png');
}
} else { // _markers_
$in = explode(".", $parts[1]);
$name = implode(".", array_slice($in, 0, count($in) - 1));
$ext = $in[count($in) - 1];
if (($ext == "json") && (strpos($name, "marker_") == 0)) {
$world = substr($name, 7);
$stmt = $db->prepare('SELECT Content from ' . $dbprefix . 'MarkerFiles WHERE FileName=?');
$res = $stmt->execute(array($world));
$timage = $stmt->fetch();
header('Content-Type: application/json');
if ($res && $timage) {
echo stream_get_contents($timage[0]); //PDO returns arrays, even for single colums, and bytea is returned as stream.
} else {
echo "{ }";
}
} else {
$stmt = $db->prepare('SELECT Image from ' . $dbprefix . 'MarkerIcons WHERE IconName=?');
$res = $stmt->execute(array($name));
$timage = $stmt->fetch();
if ($res && $timage) {
header('Content-Type: image/png');
echo stream_get_contents($timage[0]);
} else {
header('Location: ../images/blank.png');
}
}
}
$stmt->closeCursor();
cleanupDb();
exit;