aquinas/router.php

167 lines
3.3 KiB
PHP

<?php
require "parsedown.php";
$tryuri = ltrim("$_SERVER[REQUEST_URI]", '/');
$tryuri = strtok($tryuri, "?");
$lockscn = $tryuri;
if (file_exists("$lockscn.lock" ))
load_page("404");
while ($lockscn != "") {
$files = scandir($lockscn);
if (!$files)
goto CONT;
for ($i = 2; $i < count($files); $i++) {
if ($files[$i] == "lock") {
load_page("404");
}
}
CONT:
$lockscn = substr($lockscn, 0, strrpos($lockscn, '/'));
}
if (file_exists("site.json")) {
$site = json_decode(file_get_contents("site.json"), true);
}
if (preg_match('/\.(?:jpg|png|css|ico|scss|js|ttf|woff|txt)/', $_SERVER["REQUEST_URI"])) {
return false;
}
load_page($tryuri);
/* HELPER FUNCTIONS START */
function get_path_content($path) {
$fs = scandir($path);
$titles;
for ($i = 2; $i < count($fs); $i++) {
$f = "$path/$fs[$i]";
if (!is_dir($f)) {
if (pathinfo($f, PATHINFO_EXTENSION) == "json") {
$titles[] = ["c" => json_decode(file_get_contents($f), true), "link" => uri_from_file($f)];
}
} else {
$fy = "$f/index.json";
if (file_exists($fy)) $titles[] = ["c" => json_decode(file_get_contents($fy), true), "link" => uri_from_file($fy)];
}
}
return $titles;
}
function uri_from_file($file) {
$name = substr($file, strrpos($file, '/')+1);
if ($name == "index.json") {
return substr($file, 0, -strlen($name)-1);
}
if (!strcmp(substr($file, strrpos($file, '.')+1), "json")) {
return substr($file, 0, -5);
}
}
function load_page($tryuri) {
global $site;
$mainphp = "";
$jsonf = "";
$parsef = "";
/* Looking for 3 things: a base, a content, and a template */
$tryf = "$tryuri/index";
$tryf = ltrim($tryf, '/');
if (file_exists("$tryf.json")) {
$jsonf = "$tryf.json";
} else if (file_exists("$tryuri.json")) {
$jsonf = "$tryuri.json";
}
if (file_exists("$tryf.php")) {
$mainphp = "$tryf.php";
}
else if (file_exists("$tryuri.php")) {
$mainphp = "$tryuri.php";
}
if (file_exists("$tryf.md")) {
$parsef = "$tryf.md";
} else if (file_exists("$tryuri.md")) {
$parsef = "$tryuri.md";
}
if (empty($mainphp) && empty($jsonf) && empty($parsef)) {
load_page("404");
return;
}
if (empty($mainphp)) {
while ($tryuri != "") {
if (file_exists("$tryuri/temp.php")) {
$mainphp = "$tryuri/temp.php";
goto endmain;
}
$tryuri = substr($tryuri, 0, strrpos($tryuri, '/'));
}
$mainphp = "temp.php";
}
endmain:
if (!empty($jsonf)) {
$file = file_get_contents($jsonf);
$obj = json_decode($file);
}
if (!empty($parsef)) {
$pd = new Parsedown();
$parse = $pd->text(file_get_contents($parsef));
}
$page['title'] = $obj->title;
$page['desc'] = $obj->desc;
if (empty($page['title'])) $page['title'] = $site['title'];
if (empty($page['desc'])) $page['desc'] = $site['desc'];
include "base.php";
die();
}
function img_src($src, $root = "" ) {
if (empty($root)) $root = $_SERVER['REQUEST_URI'];
if ($src[0] != '/') {
$write = "$root/$src";
} else $write = $src;
return $write;
}
$tt = microtime(true) - $_SERVER['REQUEST_TIME_FLOAT'];
echo <<<END
<script>
console.log("Generated page in " + $tt.toFixed(5) + " seconds.");
</script>
END;
?>