diff options
Diffstat (limited to 'Neutron-trunk/api')
70 files changed, 3125 insertions, 0 deletions
diff --git a/Neutron-trunk/api/.htaccess b/Neutron-trunk/api/.htaccess new file mode 100644 index 0000000..bc839cb --- /dev/null +++ b/Neutron-trunk/api/.htaccess @@ -0,0 +1,4 @@ +ErrorDocument 401 /cms-special/error/?id=401&description=Accès%20refusé +ErrorDocument 403 /cms-special/error/?id=403&description=Accès%20interdit +ErrorDocument 404 /cms-special/error/?id=404&description=Ressource%20introuvable +ErrorDocument 500 /cms-special/error/?id=500&description=Erreur%20interne
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/appearance.php b/Neutron-trunk/api/admin/appearance.php new file mode 100644 index 0000000..28ebe74 --- /dev/null +++ b/Neutron-trunk/api/admin/appearance.php @@ -0,0 +1,194 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { +if (isset($_POST['sitename'])) { + if (trim($_POST['sitename']) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["sitenamenone"]); + } + if (strpos($_POST['sitename'], '<') !== false || strpos($_POST['sitename'], '>') !== false || strpos($_POST['sitename'], '{') !== false || strpos($_POST['sitename'], '}') !== false || strpos($_POST['sitename'], '@') !== false || strpos($_POST['sitename'], '#') !== false || strpos($_POST['sitename'], '|') !== false) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["sitenameinvalid"]); + } + if (strlen($_POST['sitename']) > 75) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["sitenamelong"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["sitenamerecv"]); +} + +if (isset($_POST['alwaysmenu'])) { + (string)$am = $_POST['alwaysmenu']; +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["awmnone"]); +} + +if (isset($_POST['oldrenderer'])) { + (string)$or = $_POST['oldrenderer']; +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["olrnone"]); +} + +if (isset($_POST['showpages'])) { + (integer)$sp = $_POST['showpages']; +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["swpnone"]); +} + +if ($am == "true") { + if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/alwaysmenu")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/alwaysmenu", ""); + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/alwaysmenu")) { + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/alwaysmenu"); + } +} +// var_dump($or);require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit(); +if ($or == "true") { + if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/oldRenderer")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/oldRenderer", ""); + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/oldRenderer")) { + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/oldRenderer"); + } +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagesInMenuBar", $sp); + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_FILES['icon'])) { + if ($_FILES['icon']['error'] == 1) { + $maxsize = ini_get('upload_max_filesize'); + if ($maxsize > 1000) { + if ($maxsize > 1000000) { + $maxsizestr = round($maxsize / 1000000, 2) . " " . $lang["sizes"]["mib"]; + } else { + $maxsizestr = round($maxsize / 1000, 2) . " " . $lang["sizes"]["kib"]; + } + } else { + $maxsizestr = $maxsize . " " . $lang["sizes"]["bytes"]; + } + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filesize"] . " ({$maxsizestr})"); + } + if ($_FILES['icon']['error'] == 2) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileform"]); + } + if ($_FILES['icon']['error'] == 3) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileincomplete"]); + } + if ($_FILES['icon']['error'] == 4) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenotfound"]); + } + if ($_FILES['icon']['error'] == 6) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenotempdir"]); + } + if ($_FILES['icon']['error'] == 7) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filewriterror"]); + } + if ($_FILES['icon']['error'] == 8) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileint"]); + } + if ($_FILES['icon']['type'] != "image/png" && $_FILES['icon']['type'] != "image/jpeg" && $_FILES['icon']['type'] != "image/gif") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filemime2"]); + } + if ($_FILES['icon']['error'] == 0) { + imagepng(imagecreatefromstring(file_get_contents($_FILES['icon']['tmp_name'])), $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon.png"); + if ($_FILES['icon']['type'] == "image/png") { + copy($_FILES['icon']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon-uncomp.png"); + } else { + copy($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon.png", $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon-uncomp.png"); + } + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/favicon.php"; + unlink($_FILES['icon']['tmp_name']); + } +} + +if (isset($_FILES['banner'])) { + if ($_FILES['banner']['error'] == 1) { + $maxsize = ini_get('upload_max_filesize'); + if ($maxsize > 1000) { + if ($maxsize > 1000000) { + $maxsizestr = round($maxsize / 1000000, 2) . " " . $lang["sizes"]["mib"]; + } else { + $maxsizestr = round($maxsize / 1000, 2) . " " . $lang["sizes"]["kib"]; + } + } else { + $maxsizestr = $maxsize . " " . $lang["sizes"]["bytes"]; + } + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filesize"] . " ({$maxsizestr})"); + } + if ($_FILES['banner']['error'] == 2) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileform"]); + } + if ($_FILES['banner']['error'] == 3) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileincomplete"]); + } + if ($_FILES['banner']['error'] == 4) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenotfound"]); + } + if ($_FILES['banner']['error'] == 6) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenotempdir"]); + } + if ($_FILES['banner']['error'] == 7) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filewriterror"]); + } + if ($_FILES['banner']['error'] == 8) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileint"]); + } + if ($_FILES['banner']['type'] != "image/png" && $_FILES['banner']['type'] != "image/jpeg" && $_FILES['banner']['type'] != "image/gif") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filemime2"]); + } + if ($_FILES['banner']['error'] == 0) { + imagejpeg(imagecreatefromstring(file_get_contents($_FILES['banner']['tmp_name'])), $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/banner.jpg"); + $img = imagecreatefromjpeg($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/banner.jpg"); + $width = imagesx($img); + $height = imagesy($img); + $x_step = intval($width/$num_samples); + $y_step = intval($height/$num_samples); + $total_lum = 0; + $sample_no = 1; + for ($x=0; $x<$width; $x+=$x_step) { + for ($y=0; $y<$height; $y+=$y_step) { + $rgb = imagecolorat($img, $x, $y); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + $lum = ($r+$r+$b+$g+$g+$g)/6; + $total_lum += $lum; + $sample_no++; + } + } + $avg_lum = $total_lum / $sample_no; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/banner.mtd", ($avg_lum / 255) * 100); + unlink($_FILES['banner']['tmp_name']); + } +} + +$sitename = str_replace('>', '>', $_POST['sitename']); +$sitename = str_replace('<', '<', $sitename); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename", $sitename); +require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; +echo("ok"); +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/cache_content_reset.php b/Neutron-trunk/api/admin/cache_content_reset.php new file mode 100644 index 0000000..6e9e02b --- /dev/null +++ b/Neutron-trunk/api/admin/cache_content_reset.php @@ -0,0 +1,14 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache")) { + $dir = scandir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache"); + foreach ($dir as $file) { + if (!($file == "." || $file == ".." || $file == ".htaccess")) { + if (substr($file, 0, 5) == "page-") { + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/$file"); + } + } + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/cache_pages_update.php b/Neutron-trunk/api/admin/cache_pages_update.php new file mode 100644 index 0000000..3122731 --- /dev/null +++ b/Neutron-trunk/api/admin/cache_pages_update.php @@ -0,0 +1,72 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +$customSettings = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json")); +global $cache; +$cache = ""; + +function append(string $text) { + global $cache; + $cache = $cache . $text; +} + +function compareASCII($a, $b) { + $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a); + $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b); + return strcmp($at, $bt); +} + +$pages = scandir($_SERVER['DOCUMENT_ROOT']); +uasort($pages, 'compareASCII'); +$index = 0; +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) {$index = 1;} +append("@home|@indexHomeIcon"); +foreach ($pages as $page) { + if ((($page != ".." && $page != ".") && $index < 6) && (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $page)) && (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")) && (!in_array($page, $customSettings->hiddenPages))) { + append("\n{$page}|" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")); + $index++; + } +} +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) { + append("\n@galery|" . $lang["viewer"]["galery"]); +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd", $cache); + +$cache = ""; +$index = 0; +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) {$index = 1;} +append("@home|@indexHomeIcon"); +foreach ($pages as $page) { + if ((($page != ".." && $page != ".")) && (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $page)) && (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")) && (!in_array($page, $customSettings->hiddenPages))) { + append("\n{$page}|" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")); + $index++; + } +} +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) { + append("\n@galery|" . $lang["viewer"]["galery"]); +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd", $cache); + +/* --------------------------- */ +// Backwards compatibility with the old engine-cyclic +$cache = ""; + +$pages = scandir($_SERVER['DOCUMENT_ROOT']); +uasort($pages, 'compareASCII'); +foreach ($pages as $page) { + if ($page != ".." && $page != ".") { + if (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $page)) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")) { + if (!in_array($page, $customSettings->hiddenPages)) { + append("<a href=\"/{$page}\" title=\"/{$page}\" class=\"menulink-desktop\">" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename") . "</a>"); + } + } + } + } +} +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) {append("<a href=\"/cms-special/gallery\" title=\"/cms-special/gallery\" class=\"menulink-desktop\">" . $lang["viewer"]["galery"] . "</a>");} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd", $cache);
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/calendar_create.php b/Neutron-trunk/api/admin/calendar_create.php new file mode 100644 index 0000000..eff4682 --- /dev/null +++ b/Neutron-trunk/api/admin/calendar_create.php @@ -0,0 +1,155 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +function isJson($string) { + json_decode($string); + return (json_last_error() == JSON_ERROR_NONE); +} + +$jsonraw = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/caldb.json"); +if (isJson($jsonraw)) { + if (isset($_POST['name'])) { + $name = $_POST['name']; + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnodesc"]); + } + if (isset($_POST['desc'])) { + $desc = $_POST['desc']; + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnodesc"]); + } + if (isset($_POST['link'])) { + $link = $_POST['link']; + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnolink"]); + } + if (isset($_POST['day'])) { + $day = $_POST['day']; + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnoday"]); + } + if (isset($_POST['month'])) { + $month = $_POST['month']; + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnomonth"]); + } + if (isset($_POST['year'])) { + $year = $_POST['year']; + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnoyear"]); + } + $date = strtotime($year . "-" . $month . "-" . $day); + if (($month == "4" || $month == "6" || $month == "9" || $month == "11") && ($day == "31")) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calinvalidday"]); + } + if (($month == "2") && ($day == "30" || $day == "31" || ((bool)date('L', strtotime("$year-01-01")) === false && $day == "29"))) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calinvalidday"]); + } + if ((int)date('Y', $date) < (int)date('Y')) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calpast"]); + } + if (((int)date('m', $date) < (int)date('m')) && ((int)date('Y', $date) == (int)date('Y'))) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calpast"]); + } + if (((int)date('d', $date) < (int)date('d')) && ((int)date('m', $date) == (int)date('m'))) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calpast"]); + } + $name = str_replace('>', '>', $name); + $name = str_replace('<', '<', $name); + if (strlen($name) > 75) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnamelong"]); + } + if (trim($name) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calnamenone"]); + } + $desc = str_replace('>', '>', $desc); + $desc = str_replace('<', '<', $desc); + if ($day == "1") { + $daystr = $lang["api"]["calordinal"]; + } else { + $daystr = $day; + } + if ($month == "01") { + $monthstr = $lang["api"]["calminmonths"][0]; + } + if ($month == "02") { + $monthstr = $lang["api"]["calminmonths"][1]; + } + if ($month == "03") { + $monthstr = $lang["api"]["calminmonths"][2]; + } + if ($month == "04") { + $monthstr = $lang["api"]["calminmonths"][3]; + } + if ($month == "05") { + $monthstr = $lang["api"]["calminmonths"][4]; + } + if ($month == "06") { + $monthstr = $lang["api"]["calminmonths"][5]; + } + if ($month == "07") { + $monthstr = $lang["api"]["calminmonths"][6]; + } + if ($month == "08") { + $monthstr = $lang["api"]["calminmonths"][7]; + } + if ($month == "09") { + $monthstr = $lang["api"]["calminmonths"][8]; + } + if ($month == "10") { + $monthstr = $lang["api"]["calminmonths"][9]; + } + if ($month == "11") { + $monthstr = $lang["api"]["calminmonths"][10]; + } + if ($month == "12") { + $monthstr = $lang["api"]["calminmonths"][11]; + } + $json = json_decode($jsonraw); + foreach($json->events as $event) { + if (isset($event->timestamp)) { + if ($event->timestamp == $year . date('m', $date) . date('d', $date)) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calsameday"]); + } + } + } + $pos = count($json->events); + $json->events[$pos] = new stdClass(); + $json->events[$pos]->timestamp = $year . date('m', $date) . date('d', $date); + $json->events[$pos]->name = $name; + $json->events[$pos]->description = $desc; + if (substr($link, 0, 4) == "http") { + $json->events[$pos]->link = $link; + } else { + $json->events[$pos]->link = "http://" . $link; + } + $json->events[$pos]->datestr = $daystr . " " . $monthstr . " " . $year; + $newjsonraw = json_encode($json, JSON_PRETTY_PRINT); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/caldb.json", $newjsonraw); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["calerror"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/calendar_delete.php b/Neutron-trunk/api/admin/calendar_delete.php new file mode 100644 index 0000000..edeb86d --- /dev/null +++ b/Neutron-trunk/api/admin/calendar_delete.php @@ -0,0 +1,64 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['id'])) { + $id = $_POST['id']; +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenoid"]); +} + +function isJson($string) { + json_decode($string); + return (json_last_error() == JSON_ERROR_NONE); +} + +$jsonraw = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/caldb.json"); + +if (isJson($jsonraw)) { + $json = json_decode($jsonraw); + $pos = -1; + foreach ($json->events as $stdClass) { + $pos = $pos + 1; + if (isset($stdClass->timestamp)) { + if ($stdClass->timestamp == $id) { + unset($json->events[$pos]->timestamp); + unset($json->events[$pos]->datestr); + unset($json->events[$pos]->name); + unset($json->events[$pos]->description); + } + } + } + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/caldb.json", json_encode($json, JSON_PRETTY_PRINT)); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("CalDb1: ParseError: Unable to open database, JSON parse failed. Data might be corrupted"); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/calendar_nextevents.php b/Neutron-trunk/api/admin/calendar_nextevents.php new file mode 100644 index 0000000..6dc0cae --- /dev/null +++ b/Neutron-trunk/api/admin/calendar_nextevents.php @@ -0,0 +1,36 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (isset($_POST['value'])) { + if (is_int((int)$_POST['value'])) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/calendar_events", $_POST['value']); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["valueinv"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["valuenone"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/create_page.php b/Neutron-trunk/api/admin/create_page.php new file mode 100644 index 0000000..f7d67e7 --- /dev/null +++ b/Neutron-trunk/api/admin/create_page.php @@ -0,0 +1,90 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['type'])) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnotype"]); +} + +if (isset($_POST['title'])) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnotitle"]); +} + +if (isset($_POST['content'])) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnocontent"]); +} + +$title = $_POST['title']; +$title = str_replace('>', '>', $title); +$title = str_replace('<', '<', $title); +if (substr($title, 0, 1) == " " || substr($title, 0, 1) == "-" || substr($title, 0, 1) == " " || substr($title, 0, 1) == "_" || substr($title, 0, 1) == "@" || substr($title, 0, 1) == "|" || substr($title, 0, 1) == "'" || substr($title, 0, 1) == "\"" || substr($title, 0, 1) == "~" || substr($title, 0, 1) == "&" || substr($title, 0, 1) == "=") { + $prefixed = true; +} else { + $prefixed = false; +} +$type = $_POST['type']; +$content = $_POST['content']; + +$slug = preg_replace("/[^0-9a-zA-Z ]/m", "", $title ); +$slug = str_replace(" ", "-", $slug); +$slug = strtolower($slug); + +if ($prefixed) { + $slug = "-" . $slug; +} + +if (trim($title) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgtitleempty"]); +} + +if ($slug == "api" || $slug == "cms-special" || $slug == "galery" || $slug == "cms-unrelated" || $slug == "vendor" || $slug == "data" || $slug == "resources" || $slug == "widgets" || $slug == "-htaccess" || $slug == "index" || $slug == "index-php") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnameinternal"]); +} + +if (strlen($slug) > 70) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnamelong"]); +} + +if ($type != "0" && $type != "1") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgtypenone"]); +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $slug)) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnameexists"]); +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $slug, $content); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes/" . $slug, $type); +mkdir($_SERVER['DOCUMENT_ROOT'] . "/" . $slug); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $slug . "/index.php", '<?php require_once "../resources/private/relative.php"; getRelativeDetails("' . $slug . '"); ?><?php require_once $_SERVER[\'DOCUMENT_ROOT\'] . "/api/engine-cyclic/render.php"; render(\'' . $slug . '\'); ?>'); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $slug . "/pagename", $title); +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; +require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; +require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/customization_colors.php b/Neutron-trunk/api/admin/customization_colors.php new file mode 100644 index 0000000..9e650e8 --- /dev/null +++ b/Neutron-trunk/api/admin/customization_colors.php @@ -0,0 +1,32 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (isset($_POST['color'])) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/color", $_POST['color']); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["nocolor"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/customization_theme.php b/Neutron-trunk/api/admin/customization_theme.php new file mode 100644 index 0000000..cc4d081 --- /dev/null +++ b/Neutron-trunk/api/admin/customization_theme.php @@ -0,0 +1,32 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (isset($_POST['theme'])) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/theme", $_POST['theme']); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["notheme"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/delete_page.php b/Neutron-trunk/api/admin/delete_page.php new file mode 100644 index 0000000..beaf8f0 --- /dev/null +++ b/Neutron-trunk/api/admin/delete_page.php @@ -0,0 +1,47 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['page'])) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $_POST['page'])) { + unlink($_SERVER['DOCUMENT_ROOT'] . "/" . $_POST['page'] . "/index.php"); + unlink($_SERVER['DOCUMENT_ROOT'] . "/" . $_POST['page'] . "/pagename"); + rmdir($_SERVER['DOCUMENT_ROOT'] . "/" . $_POST['page']); + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $_POST['page']); + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes/" . $_POST['page']); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnotfound"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pageselect"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/edit_page.php b/Neutron-trunk/api/admin/edit_page.php new file mode 100644 index 0000000..17d84bb --- /dev/null +++ b/Neutron-trunk/api/admin/edit_page.php @@ -0,0 +1,42 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + if (isset($_POST['content'])) { + if (isset($_POST['title'])) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $_POST['title'])) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $_POST['title'], $_POST['content']); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnotfound"]); + } + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pageselect"]); + } + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['inforec']); + } + } else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/flag_disable.php b/Neutron-trunk/api/admin/flag_disable.php new file mode 100644 index 0000000..d15b667 --- /dev/null +++ b/Neutron-trunk/api/admin/flag_disable.php @@ -0,0 +1,43 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['element'])) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["select"]); +} + +if (strpos($_POST['element'], ".")) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Flags Names cannot contain periods"); +} + +@unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/flag_" . $_POST['element']); + +require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; +require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/flag_enable.php b/Neutron-trunk/api/admin/flag_enable.php new file mode 100644 index 0000000..0f2a9f4 --- /dev/null +++ b/Neutron-trunk/api/admin/flag_enable.php @@ -0,0 +1,43 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['element'])) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["select"]); +} + +if (strpos($_POST['element'], ".")) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Flags Names cannot contain periods"); +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/flag_" . $_POST['element'], ""); + +require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; +require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/footer.php b/Neutron-trunk/api/admin/footer.php new file mode 100644 index 0000000..5422d0c --- /dev/null +++ b/Neutron-trunk/api/admin/footer.php @@ -0,0 +1,33 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + if (isset($_POST['footer'])) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/footer", $_POST['footer']); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['inforec']); + } + } else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/galery_create_category.php b/Neutron-trunk/api/admin/galery_create_category.php new file mode 100644 index 0000000..a849d05 --- /dev/null +++ b/Neutron-trunk/api/admin/galery_create_category.php @@ -0,0 +1,47 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (isset($_POST['category'])) { + $category = trim($_POST['category']); + $category = str_replace('>', '>', $category); + $category = str_replace('<', '<', $category); +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["mkcatnoname"]); +} + +$slug = preg_replace("/[^0-9a-zA-Z ]/m", "", $category ); +$slug = str_replace(" ", "-", $slug); +$slug = strtolower($slug); + +if ($slug == "unclassed") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnameinternal"]); +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/categories/" . $slug)) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["mkcatexists"]); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/categories/" . $slug, $category); + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/galery_delete_category.php b/Neutron-trunk/api/admin/galery_delete_category.php new file mode 100644 index 0000000..603a5d0 --- /dev/null +++ b/Neutron-trunk/api/admin/galery_delete_category.php @@ -0,0 +1,52 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +$slug = $_POST['id']; + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/categories/" . $slug)) { + $pictures = scandir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures"); + foreach ($pictures as $picture) { + if ($picture == "." || $picture == "..") {} else { + $raw = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $picture); + $args = explode('|', $raw); + if ($args == $raw) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filemdcorrupt"][0] . " ({$picture}) " . $lang["api"]["filemdcorrupt"][1]); + } + if ($args[1] == $slug) { + $args[1] = "unclassed"; + } else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/categories/" . $args[1]) || $args[1] == "unclassed") {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filecatnotfound"][0] . " ({$picture}) " . $lang["api"]["filecatnotfound"][1]); + } + } + $newraw = implode("|", $args); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $picture, $newraw); + } + } + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/categories/" . $slug); + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["catinvalid"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/galery_delete_image.php b/Neutron-trunk/api/admin/galery_delete_image.php new file mode 100644 index 0000000..88ca220 --- /dev/null +++ b/Neutron-trunk/api/admin/galery_delete_image.php @@ -0,0 +1,40 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (isset($_POST['id'])) { + // require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($_POST['id']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $_POST['id'])) { + $url = explode('|', file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $_POST['id']))[0]; + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $_POST['id'])) { + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $_POST['id']); + } + if (file_exists($_SERVER['DOCUMENT_ROOT'] . $url)) { + unlink($_SERVER['DOCUMENT_ROOT'] . $url); + } + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenoid"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/galery_label_picture.php b/Neutron-trunk/api/admin/galery_label_picture.php new file mode 100644 index 0000000..07b3b59 --- /dev/null +++ b/Neutron-trunk/api/admin/galery_label_picture.php @@ -0,0 +1,38 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (isset($_POST['id'])) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $_POST['id'])) { + $args = explode('|', file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $_POST['id'])); + $args[2] = $_POST['label']; + $raw = implode('|', $args); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $_POST['id'], $raw); + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileimgnotfound"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenoid"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/galery_publish_photo.php b/Neutron-trunk/api/admin/galery_publish_photo.php new file mode 100644 index 0000000..a4c9628 --- /dev/null +++ b/Neutron-trunk/api/admin/galery_publish_photo.php @@ -0,0 +1,120 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +function gen_uuid() { + return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', + // 32 bits for "time_low" + mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), + + // 16 bits for "time_mid" + mt_rand( 0, 0xffff ), + + // 16 bits for "time_hi_and_version", + // four most significant bits holds version number 4 + mt_rand( 0, 0x0fff ) | 0x4000, + + // 16 bits, 8 bits for "clk_seq_hi_res", + // 8 bits for "clk_seq_low", + // two most significant bits holds zero and one for variant DCE1.1 + mt_rand( 0, 0x3fff ) | 0x8000, + + // 48 bits for "node" + mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ) + ); +} + +$uuid = gen_uuid(); + +if (isset($_POST['category'])) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/categories/" . $_POST['category'])) { + + } else { + if ($_POST['category'] != "unclassed") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["catinvalid"]); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["catnone"]); +} + +if (isset($_FILES['file'])) { + if ($_FILES['file']['error'] == 1) { + $maxsize = ini_get('upload_max_filesize'); + if ($maxsize > 1000) { + if ($maxsize > 1000000) { + $maxsizestr = round($maxsize / 1000000, 2) . " " . $lang["sizes"]["mib"]; + } else { + $maxsizestr = round($maxsize / 1000, 2) . " " . $lang["sizes"]["kib"]; + } + } else { + $maxsizestr = $maxsize . " " . $lang["sizes"]["bytes"]; + } + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filesize"] . " ({$maxsizestr})"); + } + if ($_FILES['file']['error'] == 2) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileform"]); + } + if ($_FILES['file']['error'] == 3) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileincomplete"]); + } + if ($_FILES['file']['error'] == 4) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenotfound"]); + } + if ($_FILES['file']['error'] == 6) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filenotempdir"]); + } + if ($_FILES['file']['error'] == 7) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["filewriteerror"]); + } + if ($_FILES['file']['error'] == 8) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fileint"]); + } + if ($_FILES['file']['type'] != "image/png" && $_FILES['file']['type'] != "image/jpeg" && $_FILES['file']['type'] != "image/gif") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($file["api"]["filemime"] . " " . strtoupper(str_ireplace("image/", "", $_FILES['file']['type'])) . "."); + } + if ($_FILES['file']['error'] == 0) { + // if (/*!*//* <-- Fonction de test, décommentez le "!" pour forcer l'affichage de ce message */file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $uuid)) { + // echo("Vous êtes tombé sur une erreur très rare, bravo à vous !\n\nPrenez rapidement ce message en capture d'écran et transmettez le aux développeurs de Neutron.\n\nVous pouvez leur donner cette adresse de galerie Neutron comme preuve :\nmpcms-gallery://" . $uuid . "@"); + // if (isset($_SERVER['HTTP_HOST'])) { + // echo($_SERVER['HTTP_HOST']); + // } else { + // if (isset($_SERVER['SERVER_NAME'])) { + // echo($_SERVER['SERVER_NAME']); + // } else { + // echo("unknown"); + // } + // } + // echo("\n\nVotre site doit être publiquement accessible et vous ne devez pas avoir modifié Neutron pour que votre trouvaille soit référencée."); + // exit; + // } + imagejpeg(imagecreatefromstring(file_get_contents($_FILES['file']['tmp_name'])), $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/" . $uuid . ".jpg"); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures/" . $uuid, "/resources/upload/" . $uuid . ".jpg" . "|" . $_POST['category']); + unlink($_FILES['file']['tmp_name']); + if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/picdb.json")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/picdb.json", "{\"" . $_POST['category'] . "\":[\"" . $uuid . "\"]}"); + } + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/galery_toggle_state.php b/Neutron-trunk/api/admin/galery_toggle_state.php new file mode 100644 index 0000000..582faa9 --- /dev/null +++ b/Neutron-trunk/api/admin/galery_toggle_state.php @@ -0,0 +1,40 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (isset($_POST['state'])) { + $state = $_POST['state']; +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["nostate"]); +} + +if ($state == "1") { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled", ""); + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) { + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled"); + } + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/instant_language_change.php b/Neutron-trunk/api/admin/instant_language_change.php new file mode 100644 index 0000000..c4fd575 --- /dev/null +++ b/Neutron-trunk/api/admin/instant_language_change.php @@ -0,0 +1,33 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + if (isset($_POST['lang'])) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang", $_POST['lang']); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["inforec"]); + } + } else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/login.php b/Neutron-trunk/api/admin/login.php new file mode 100644 index 0000000..4a88f30 --- /dev/null +++ b/Neutron-trunk/api/admin/login.php @@ -0,0 +1,52 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?>
+<?php
+
+require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php";
+
+if (isset($_POST['password'])) {
+ if (isset($_POST['authkey'])) { // Use authentication key
+ if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/authkey")) {
+ if (trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/authkey")) == $_POST['password']) {
+ $token = str_ireplace("/", "-", password_hash(password_hash(rand(0, 999999) + rand(0, 999999) + rand(0, 999999) + rand(0, 999999) + rand(0, 999999), PASSWORD_BCRYPT, ['cost' => 12,]), PASSWORD_BCRYPT, ['cost' => 12,]));
+ if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens")) {
+ mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens");
+ }
+ $tokens = scandir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens");
+ foreach ($tokens as $deltoken) {
+ if ($deltoken == "." || $deltoken == "..") {} else {
+ unlink($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $deltoken);
+ }
+ }
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $token, "");
+ header("Set-Cookie: _NEUTRON_ADMIN_TOKEN={$token}; Path=/; Http-Only; SameSite=Strict");
+ require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
+ return;
+ } else {
+ require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["keyinvalid"]);
+ }
+ } else {
+ require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["keynone"]);
+ }
+ } else { // Use regular password
+ if (password_verify($_POST['password'], file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/password"))) {
+ $token = str_ireplace("/", "-", password_hash(password_hash(rand(0, 999999) + rand(0, 999999) + rand(0, 999999) + rand(0, 999999) + rand(0, 999999), PASSWORD_BCRYPT, ['cost' => 12,]), PASSWORD_BCRYPT, ['cost' => 12,]));
+ if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens")) {
+ mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens");
+ }
+ $tokens = scandir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens");
+ foreach ($tokens as $atoken) {
+ if ($atoken == "." || $atoken == "..") {} else {
+ unlink($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $atoken);
+ }
+ }
+ file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $token, "");
+ header("Set-Cookie: _NEUTRON_ADMIN_TOKEN={$token}; Path=/; Http-Only; SameSite=Strict");
+ require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
+ return;
+ } else {
+ require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["lgpassinvalid"]);
+ }
+ }
+} else {
+ require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["lgpassnone"]);
+}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/password.php b/Neutron-trunk/api/admin/password.php new file mode 100644 index 0000000..a823721 --- /dev/null +++ b/Neutron-trunk/api/admin/password.php @@ -0,0 +1,73 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['oldpass'])) { + if (trim($_POST['oldpass']) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fieldinvalid"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fieldinvalid"]); +} + +if (isset($_POST['newpass'])) { + if (trim($_POST['newpass']) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fieldinvalid"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fieldinvalid"]); +} + +if (isset($_POST['newpassr'])) { + if (trim($_POST['newpassr']) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fieldinvalid"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["fieldinvalid"]); +} + +if (password_verify($_POST['oldpass'], file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/password"))) { +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["passoldinvalid"]); +} + +if (strlen($_POST['newpass']) < 8) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["passaddmore"][0] . " " . (8 - strlen($_POST['newpass'])) . " " . $lang["api"]["passaddmore"][1]); +} + +if ($_POST['newpass'] == $_POST['newpassr']) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["passnewnomatch"]); +} + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + $tokens = scandir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens"); + foreach ($tokens as $token) { + if ($token == "." || $token == "..") {} else { + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $token); + } + } + } else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/password", password_hash($_POST['newpass'], PASSWORD_BCRYPT, ['cost' => 12,])); +require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/rename_page.php b/Neutron-trunk/api/admin/rename_page.php new file mode 100644 index 0000000..4091940 --- /dev/null +++ b/Neutron-trunk/api/admin/rename_page.php @@ -0,0 +1,75 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['page'])) { + $oldslug = $_POST['page']; + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) { + if (isset($_POST['newname'])) { + $newname = $_POST['newname']; + $newname = str_replace('>', '>', $newname); + $newname = str_replace('<', '<', $newname); + if (trim($newname) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnameempty"]); + } + $newslug = preg_replace("/[^0-9a-zA-Z ]/m", "", $newname ); + $newslug = str_replace(" ", "-", $newslug); + $newslug = strtolower($newslug); + if ($newslug == "api" || $newslug == "cms-special" || $newslug == "galery" || $newslug == "vendor" || $newslug == "cms-unrelated" || $newslug == "data" || $newslug == "resources" || $newslug == "widgets" || $newslug == "-htaccess" || $newslug == "index" || $newslug == "index-php") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnameinternal"]); + } + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $newslug)) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnameexists"]); + } + if (strlen($newslug) > 70) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnamelong"]); + } + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $newslug, file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $oldslug)); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes/" . $newslug, file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes/" . $oldslug)); + mkdir($_SERVER['DOCUMENT_ROOT'] . "/" . $newslug); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $newslug . "/index.php", '<?php require_once "../resources/private/relative.php"; getRelativeDetails(' . $newslug . '); ?><?php require_once $_SERVER[\'DOCUMENT_ROOT\'] . "/api/engine-cyclic/render.php"; render(\'' . $newslug . '\'); ?>'); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $newslug . "/pagename", $newname); + unlink($_SERVER['DOCUMENT_ROOT'] . "/" . $oldslug . "/index.php"); + unlink($_SERVER['DOCUMENT_ROOT'] . "/" . $oldslug . "/pagename"); + rmdir($_SERVER['DOCUMENT_ROOT'] . "/" . $oldslug); + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $oldslug); + unlink($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes/" . $oldslug); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnamenone"]); + } + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnotfound"]); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pgnone"]); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/reset.php b/Neutron-trunk/api/admin/reset.php new file mode 100644 index 0000000..7c67207 --- /dev/null +++ b/Neutron-trunk/api/admin/reset.php @@ -0,0 +1,87 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +function rrmdir($dir) { + if (is_dir($dir)) { + $objects = scandir($dir); + foreach ($objects as $object) { + if ($object != "." && $object != "..") { + if (is_dir($dir."/".$object)) + rrmdir($dir."/".$object); + else + unlink($dir."/".$object); + } + } + rmdir($dir); + } + } + + if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +sleep(2); + +if (isset($_POST['keep'])) { + if ($_POST['keep'] == "1") { + $keep = true; + } else { + $keep = false; + } +} else { + $keep = false; +} + +if ($keep) { + rrmdir($_SERVER['DOCUMENT_ROOT'] . "/resources/upload"); + mkdir($_SERVER['DOCUMENT_ROOT'] . "/resources/upload"); + copy($_SERVER['DOCUMENT_ROOT'] . "/resources/image/siteicon.png", $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon.png"); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json", '{"list":[],"settings":{}'); + rrmdir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens"); + rrmdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache"); + mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens"); + mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache"); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/footer", "#####"); + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +} else { + rrmdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent"); + rrmdir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens"); + mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/tokens"); + $links = scandir($_SERVER['DOCUMENT_ROOT']); + foreach ($links as $link) { + if ($link != "." && $link != "..") { + if (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $link)) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $link . "/pagename")) { + rrmdir($_SERVER['DOCUMENT_ROOT'] . "/" . $link); + } + } + } + } + rrmdir($_SERVER['DOCUMENT_ROOT'] . "/resources/upload"); + mkdir($_SERVER['DOCUMENT_ROOT'] . "/resources/upload"); + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/save_advanced.php b/Neutron-trunk/api/admin/save_advanced.php new file mode 100644 index 0000000..179f22d --- /dev/null +++ b/Neutron-trunk/api/admin/save_advanced.php @@ -0,0 +1,46 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +function isJson($string) { + json_decode($string); + return (json_last_error() == JSON_ERROR_NONE); +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + if (isset($_POST['content'])) { + if (true) { + if (isJson($_POST['content'])) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/customSettings.json", $_POST['content']); + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["advsyntax"]); + } + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["pageselect"]); + } + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["inforec"]); + } + } else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/admin/widgets.php b/Neutron-trunk/api/admin/widgets.php new file mode 100644 index 0000000..231543f --- /dev/null +++ b/Neutron-trunk/api/admin/widgets.php @@ -0,0 +1,64 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; + +if (isset($_COOKIE['_NEUTRON_ADMIN_TOKEN']) && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != ".." && $_COOKIE['_NEUTRON_ADMIN_TOKEN'] != "/") { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/tokens/" . $_COOKIE['_NEUTRON_ADMIN_TOKEN'])) { + + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang['api']['token']); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - APIDENY/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); + } +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - API/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +if (isset($_POST['element'])) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["select"]); +} + +if (isset($_POST['value'])) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["value"]); +} + +if ($_POST['value'] != "true" && $_POST['value'] != "false") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit($lang["api"]["incorrect"]); +} + +$settings = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); +$array = $settings->list; + +if ($_POST['value'] == "true") { + if (array_search($_POST['element'], $array) === false) { + array_push($array, $_POST['element']); + } +} + +if ($_POST['value'] == "false") { + if (array_search($_POST['element'], $array) !== false) { + unset($array[array_search($_POST['element'], $array)]); + sort($array); + } +} +$settings->list = $array; + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json", json_encode($settings, JSON_PRETTY_PRINT)); + +require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; +require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
\ No newline at end of file diff --git a/Neutron-trunk/api/bugs b/Neutron-trunk/api/bugs new file mode 100644 index 0000000..d12473d --- /dev/null +++ b/Neutron-trunk/api/bugs @@ -0,0 +1 @@ +https://jetbrains.minteck.ro.lt:1024/youtrack/newIssue?project=NEU&_dummy=
\ No newline at end of file diff --git a/Neutron-trunk/api/codename b/Neutron-trunk/api/codename new file mode 100644 index 0000000..1c883f0 --- /dev/null +++ b/Neutron-trunk/api/codename @@ -0,0 +1 @@ +Fluffy Fennec
\ No newline at end of file diff --git a/Neutron-trunk/api/cyclic_version b/Neutron-trunk/api/cyclic_version new file mode 100644 index 0000000..a625450 --- /dev/null +++ b/Neutron-trunk/api/cyclic_version @@ -0,0 +1 @@ +2.3.1
\ No newline at end of file diff --git a/Neutron-trunk/api/electrode/quit.php b/Neutron-trunk/api/electrode/quit.php new file mode 100644 index 0000000..6aaad20 --- /dev/null +++ b/Neutron-trunk/api/electrode/quit.php @@ -0,0 +1,12 @@ +<?php + +function quit (string $message = NULL) { + if (function_exists("__electrode_end_hooks")) { + __electrode_end_hooks(); + } + if (isset($message)) { + die($message); + } else { + die(); + } +} diff --git a/Neutron-trunk/api/electrode/version b/Neutron-trunk/api/electrode/version new file mode 100644 index 0000000..afaf360 --- /dev/null +++ b/Neutron-trunk/api/electrode/version @@ -0,0 +1 @@ +1.0.0
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/components/banner.php b/Neutron-trunk/api/engine-cyclic/components/banner.php new file mode 100644 index 0000000..800ead1 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/banner.php @@ -0,0 +1,10 @@ +<div id="page-banner"></div> +<style>:root { --mpcms-banner: url(<?php +rlgps("Loaded banner image"); +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/banner.jpg")) { + echo('"' . $GLOBALS["SYSTEM_ROOT"] . '/resources/upload/banner.jpg"'); +} else { + echo('"' . $GLOBALS["SYSTEM_ROOT"] . '/resources/image/default.jpg"'); +} + +?>); }</style>
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/components/content.php b/Neutron-trunk/api/engine-cyclic/components/content.php new file mode 100644 index 0000000..e3e3be5 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/content.php @@ -0,0 +1,22 @@ +<article id="page-content"> + <div id="page-elements"> + <div id="page-content-inner"> + <span id="page-content-colorbar"></span> + <h1><?= getPageName() ?></h1> + <?= getPageContent() ?> + </div> + <div id="page-content-widgets-desktop"><?php rlgps("Generating desktop widgets..."); ?> + <h3><?= $lang["menu"]["info"] ?></h3> + <?php require $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/widgets.php"; ?> + </div> + <div id="page-content-widgets-mobile" data-pushbar-id="widgets" data-pushbar-direction="right"><?php rlgps("Generating mobile widgets..."); ?> + <span class="mdc-list-item" onclick="pushbar.close();"> + <i class="material-icons-outlined mdc-list-item__graphic" aria-hidden="true">close</i> + <span class="mdc-list-item__text"><?= $lang["viewer"]["close"] ?></span> + </span> + <hr class="mdc-list-divider"> + <h3><?= $lang["menu"]["info"] ?></h3> + <?php require $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/widgets.php"; ?> + </div> + </div> +</article> diff --git a/Neutron-trunk/api/engine-cyclic/components/drawer.php b/Neutron-trunk/api/engine-cyclic/components/drawer.php new file mode 100644 index 0000000..f0e1db7 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/drawer.php @@ -0,0 +1,54 @@ +<?php + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd"), "|") === false)) { + rlgps("Regenerating cache"); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; +} + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd"), "|") === false)) { + rlgps("Regenerating cache"); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; +} + +?> + +<aside class="mdc-drawer" data-pushbar-direction="right" data-pushbar-id="navigation"> + <div class="mdc-drawer__content"> + <nav class="mdc-list"> + <a class="mdc-list-item" onclick="pushbar.close();"> + <i class="material-icons-outlined mdc-list-item__graphic" aria-hidden="true">close</i> + <span class="mdc-list-item__text"><?= $lang["viewer"]["close"] ?></span> + </a> + <hr class="mdc-list-divider"> + <a class="mdc-list-item <?= $_SERVER['PHP_SELF'] == "/index.php" ? " mdc-list-item--activated" : "" ?>" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/" aria-current="page"> + <i class="material-icons-outlined mdc-list-item__graphic" aria-hidden="true">home</i> + <span class="mdc-list-item__text"><?= $lang["viewer"]["home"] ?></span> + </a> + <?php + rlgps("Loading pages list from cache..."); + $preels = explode("\n", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd")); + $els = []; + foreach ($preels as $el) { + if (substr($el, 0, 1) != "@") { + $parts = explode("|", $el); + array_push($els, $parts); + } + } + rlgps("Generating menu"); + ?> + <?php foreach ($els as $el): if (trim($el[0]) !== ""): ?> + <a class="mdc-list-item" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/<?= $el[0] ?>"> + <i class="material-icons-outlined mdc-list-item__graphic" aria-hidden="true">insert_drive_file</i> + <span class="mdc-list-item__text"><?= $el[1] ?></span> + </a> + <?php endif;endforeach ?> + <?php if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures") && count(scandir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures")) > 2): ?> + <a class="mdc-list-item<?= $_SERVER['PHP_SELF'] == "/cms-special/gallery/index.php" ? " mdc-list-item--activated" : "" ?>" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/cms-special/gallery" aria-current="page"> + <i class="material-icons-outlined mdc-list-item__graphic" aria-hidden="true">image</i> + <span class="mdc-list-item__text"><?= $lang["viewer"]["gallery"] ?></span> + </a> + <?php rlgps("Putting gallery link");endif ?> + </nav> + </div> +</aside> +<div class="mdc-drawer-app-content">
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/components/favicon.php b/Neutron-trunk/api/engine-cyclic/components/favicon.php new file mode 100644 index 0000000..3d078a1 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/favicon.php @@ -0,0 +1,88 @@ +<?php + + class CircleCrop + { + + private $src_img; + private $src_w; + private $src_h; + private $dst_img; + private $dst_w; + private $dst_h; + + public function __construct($img, $dstWidth, $dstHeight) + { + $this->src_img = $img; + $this->src_w = imagesx($img); + $this->src_h = imagesy($img); + $this->dst_w = $dstWidth; + $this->dst_h = $dstHeight; + } + + public function __destruct() + { + if (is_resource($this->dst_img)) + { + imagedestroy($this->dst_img); + } + } + + public function display() + { + imagepng($this->dst_img, $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/favicon.png"); + return $this; + } + + public function reset() + { + if (is_resource(($this->dst_img))) + { + imagedestroy($this->dst_img); + } + $this->dst_img = imagecreatetruecolor($this->dst_w, $this->dst_h); + imagecopy($this->dst_img, $this->src_img, 0, 0, 0, 0, $this->dst_w, $this->dst_h); + return $this; + } + + public function size($dstWidth, $dstHeight) + { + $this->dst_w = $dstWidth; + $this->dst_h = $dstHeight; + return $this->reset(); + } + + public function crop() + { + $this->reset(); + + $mask = imagecreatetruecolor($this->dst_w, $this->dst_h); + $maskTransparent = imagecolorallocate($mask, 255, 0, 255); + imagecolortransparent($mask, $maskTransparent); + imagefilledellipse($mask, $this->dst_w / 2, $this->dst_h / 2, $this->dst_w, $this->dst_h, $maskTransparent); + + imagecopymerge($this->dst_img, $mask, 0, 0, 0, 0, $this->dst_w, $this->dst_h, 100); + + $dstTransparent = imagecolorallocate($this->dst_img, 255, 0, 255); + imagefill($this->dst_img, 0, 0, $dstTransparent); + imagefill($this->dst_img, $this->dst_w - 1, 0, $dstTransparent); + imagefill($this->dst_img, 0, $this->dst_h - 1, $dstTransparent); + imagefill($this->dst_img, $this->dst_w - 1, $this->dst_h - 1, $dstTransparent); + imagecolortransparent($this->dst_img, $dstTransparent); + + return $this; + } + + } + + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon-uncomp.png")) { + $path = $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon-uncomp.png"; + } else { + $path = $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon.png"; + } + + $image = imagecreatefrompng($path); + + $width = imagesx($image); + $height = imagesy($image); + $crop = new CircleCrop($image,$width,$height); + $crop->crop()->display();
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/components/footer.php b/Neutron-trunk/api/engine-cyclic/components/footer.php new file mode 100644 index 0000000..10a89ed --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/footer.php @@ -0,0 +1,23 @@ +<div id="footer-container"><?php rlgps("Generating footer"); ?> + <span id="page-footer-colorbar"></span> + <footer id="page-footer"> + <div id="page-footer-title"> + <div id="page-footer-title-inner" class="title"><?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename") ?></div> + <div id="page-footer-title-buttons"> + <a id="page-footer-title-top-button" onclick="$('html, body').animate({scrollTop:0},'20');"><button class="material-icons-outlined mdc-top-app-bar__navigation-icon mdc-icon-button" id="page-footer-title-top-button-inner" onclick="$('html, body').animate({scrollTop:0},'20');">arrow_upward</button></a> + <?php /** @var boolean $__electrode */ + if (isset($__electrode) && $__electrode): ?> + <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/cms-special/admin/home" id="page-footer-title-settings-button"><button class="material-icons-outlined mdc-top-app-bar__navigation-icon mdc-icon-button" id="page-footer-title-settings-button-inner">settings</button></a> + <?php else: ?> + <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/cms-special/admin" id="page-footer-title-settings-button"><button class="material-icons-outlined mdc-top-app-bar__navigation-icon mdc-icon-button" id="page-footer-title-settings-button-inner">settings</button></a> + <?php endif; ?> + </div> + </div> + <div id="page-footer-content"> + <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/footer") ?> + </div> + <div id="page-footer-links"> + <a href="<?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/public") ?>" target="_blank">Neutron <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version") ?></a> · <a href="<?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/bugs") ?>" target="_blank"><?= $lang["viewer"]["bugs"] ?></a> · <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/cms-special/version"><?= $lang["viewer"]["system"] ?></a> + </div> + </footer> +</div>
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/components/init.php b/Neutron-trunk/api/engine-cyclic/components/init.php new file mode 100644 index 0000000..d17792e --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/init.php @@ -0,0 +1,14 @@ +<?php +rlgps("Loading widgets"); +$json = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); +$widgets = $json->list; +foreach ($widgets as $widget): ?> +<?php $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/feature.json")); ?> +<?php + +if (isset($data->class) && is_string($data->class)) { + require $_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/source.php"; +} + +?> +<?php endforeach ?>
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/components/menubar.php b/Neutron-trunk/api/engine-cyclic/components/menubar.php new file mode 100644 index 0000000..b6bce59 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/menubar.php @@ -0,0 +1,52 @@ +<?php + +if ((!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd"), "<a") === false)) || (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd"), "|") === false)) || (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd"), "|") === false))) { + rlgps("Regenerating pages cache"); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; +} + +?> + +<header class="mdc-top-app-bar"> + <div class="mdc-top-app-bar__row"> + <section class="mdc-top-app-bar__section mdc-top-app-bar__section--align-start"> + <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/" id="menubar-home-link"> + <span id="menubar-logo"></span> + <span class="mdc-top-app-bar__title title rsp-desktoponly"><?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename") ?></span> + </a> + </section> + <section class="mdc-top-app-bar__section mdc-top-app-bar__section--align-end" role="toolbar"> + <span class="rsp-desktoponly" id="menuitems"> + <?php + rlgps("Loading pages from cache..."); + + $preels = explode("\n", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd")); + $els = []; + foreach ($preels as $el) { + if (substr($el, 0, 1) != "@") { + $parts = explode("|", $el); + array_push($els, $parts); + } + } + + ?> + <?php rlgps("Generating menubar");foreach ($els as $el): ?> + <?php if (trim($el[1]) != ""): ?> + <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/<?= $el[0] ?>" class="mdc-button rsp-desktoponly"> + <div class="mdc-button__ripple"></div> + <span class="mdc-button__label menubutton"><?= $el[1] ?></span> + </a> + <?php endif;endforeach; ?> + <?php if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures") && count(scandir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures")) > 2): ?> + <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/cms-special/gallery" class="mdc-button rsp-desktoponly"> + <div class="mdc-button__ripple"></div> + <span class="mdc-button__label menubutton"><?= $lang["viewer"]["gallery"] ?></span> + </a> + <?php endif ?> + </span> + <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/" class="material-icons-outlined mdc-top-app-bar__navigation-icon mdc-icon-button">home</a> + <button class="material-icons-outlined mdc-top-app-bar__navigation-icon mdc-icon-button" onclick="pushbar.open('navigation');">menu</button> + <button class="material-icons-outlined mdc-top-app-bar__action-item mdc-icon-button rsp-mobileonly rsp-widgetbar" onclick="pushbar.open('widgets');">info</button> + </section> + </div> +</header> diff --git a/Neutron-trunk/api/engine-cyclic/components/widgets.php b/Neutron-trunk/api/engine-cyclic/components/widgets.php new file mode 100644 index 0000000..c2a903c --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/components/widgets.php @@ -0,0 +1,18 @@ +<?php +rlgps("Loading widgets"); +$json = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); +$widgets = $json->list; +foreach ($widgets as $widget): ?> +<?php $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/feature.json")); ?> +<h6 class="widgets-header"><?= getName($data) ?></h6> +<?php + +if (isset($data->class) && is_string($data->class)) { + $class = $data->class; + new $class(); +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/source.php"; +} + +?> +<?php endforeach ?>
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/heads.php b/Neutron-trunk/api/engine-cyclic/heads.php new file mode 100644 index 0000000..0eeba9a --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/heads.php @@ -0,0 +1,40 @@ +<?php rlgps("Start DOM generation"); ?> +<!DOCTYPE html> +<html lang="<?= rlgps("Definied language");file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang"); ?>"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title><?php + + rlgps("Title generator"); + if (isset($MPCMSRendererPageNameValue) && $MPCMSRendererPageNameValue == "index") { + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename")); + } else { + echo(getPageName() . " · " . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename")); + } + + ?></title> + <link href="<?= $_MD_INCLUDES ?>/material-components-web.min.css" rel="stylesheet"> + <script src="<?= $_MD_INCLUDES ?>/material-components-web.min.js"></script> + <link rel="stylesheet" href="<?= $_MDI_PATH ?>"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/polymer/fonts.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/themes/<?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/color") ?>-<?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/theme") ?>.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/polymer/menubar.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/polymer/content.css"> + <link rel="shortcut icon" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/upload/favicon.png" type="image/png"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/polymer/responsive.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/polymer/scrollbars.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/polymer/warnings.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/polymer/gallery.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/lib/pushbar.js/library.css"> + <script src="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/lib/pushbar.js/library.js"></script> + <?php rlgps("Call <head> headers");require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/headers/documenthead.php"; ?> +</head> +<body> +<script> + pushbar = new Pushbar({ + blur: true, + overlay: true + }); +</script> +<?php rlgps("Call <body> headers");require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/headers/documentbody.php"; ?>
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/homepage.php b/Neutron-trunk/api/engine-cyclic/homepage.php new file mode 100644 index 0000000..995a76a --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/homepage.php @@ -0,0 +1,18 @@ +<?php + +ob_start(); +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/headers/preprocessor.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/includes/includes.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/heads.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/init.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/menubar.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/drawer.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/banner.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/content.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/footer.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/tails.php";
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/includes/cache.php b/Neutron-trunk/api/engine-cyclic/includes/cache.php new file mode 100644 index 0000000..80ea283 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/includes/cache.php @@ -0,0 +1,70 @@ +<?php + +// Create cache dir +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache")) { + mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache"); +} + +function cacheCheck(string $page) { + /* // If something goes wrong, use cache anyway + $cache = true; + + // Get a list of enabled widgets + $widgets = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); + if (json_last_error() != JSON_ERROR_NONE) { // If data is corrupted, silently think there are no widgets + $list = []; + rlgps("Warning: Widget information is corrupted"); + } else { + $list = $widgets->list; + } + + // Check if there is (at least) one widget that disables cache + foreach ($list as $widget) { + $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/widgets/$widget/feature.json")); + if (json_last_error() == JSON_ERROR_NONE) { + if (isset($data->cache)) { + if (is_bool($data->cache)) { + $cache = $data->cache; + if ($data->cache == false) { + rlgps("Widget \"$widget\" prevents the use of cache"); + } + } + } + } else { + rlgps("Warning: Metadata for the widget \"$widget\" is corrupted"); + } + } + + // Check if an update has been installed + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/last_version")) { + if (file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/last_version") == file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version")) {} else { + $cache = false; + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/last_version", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version")); + } + } else { + $cache = false; + require $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_content_reset.php"; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/last_version", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version")); + } + + // Is there any widget that disables cache? + if ($cache) { // no + // Does the cached version exists? + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/page-" . $page)) { // yes + header("X-FNS-NeutronCache: yes"); + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/page-" . $page)); // So let's output it + require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/debug.php";debugDump(); // And debug if needed + return true; + } else { // no + header("X-FNS-NeutronCache: no"); + return false; // Let the engine-cyclic render the page + } + } else { // yes + header("X-FNS-NeutronCache: no"); + return false; // Let the engine-cyclic render the page + } */ + + // Cache is now completely disabled due to problems + return false; +}
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/includes/getPageContent.php b/Neutron-trunk/api/engine-cyclic/includes/getPageContent.php new file mode 100644 index 0000000..31b202c --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/includes/getPageContent.php @@ -0,0 +1,14 @@ +<?php + +function getPageContent() { + rlgps("getPageContent() call"); + global $MPCMSRendererPageMarkup; + global $MPCMSRendererPageMarkupDN; + global $MPCMSRendererPageNameValue; + + if (isset($MPCMSRendererPageMarkup) && isset($MPCMSRendererPageMarkupDN)) { + return $MPCMSRendererPageMarkup; + } else { + return file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $MPCMSRendererPageNameValue); + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/includes/getPageName.php b/Neutron-trunk/api/engine-cyclic/includes/getPageName.php new file mode 100644 index 0000000..e364493 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/includes/getPageName.php @@ -0,0 +1,18 @@ +<?php + +function getPageName() { + rlgps("getPageName() call"); + global $MPCMSRendererPageMarkup; + global $MPCMSRendererPageMarkupDN; + global $MPCMSRendererPageNameValue; + + if (isset($MPCMSRendererPageMarkup) && isset($MPCMSRendererPageMarkupDN)) { + return $MPCMSRendererPageMarkupDN; + } else { + if ($MPCMSRendererPageNameValue == "index") { + return file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename"); + } else { + return file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $MPCMSRendererPageNameValue . "/pagename"); + } + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/includes/includes.php b/Neutron-trunk/api/engine-cyclic/includes/includes.php new file mode 100644 index 0000000..05f0f23 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/includes/includes.php @@ -0,0 +1,4 @@ +<?php + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/includes/getPageName.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/includes/getPageContent.php";
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/pages.php b/Neutron-trunk/api/engine-cyclic/pages.php new file mode 100644 index 0000000..995a76a --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/pages.php @@ -0,0 +1,18 @@ +<?php + +ob_start(); +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/headers/preprocessor.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/includes/includes.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/heads.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/init.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/menubar.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/drawer.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/banner.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/content.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/footer.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/tails.php";
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/render.php b/Neutron-trunk/api/engine-cyclic/render.php new file mode 100644 index 0000000..b5d5959 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/render.php @@ -0,0 +1,2 @@ +<?php
+require_once $_SERVER['DOCUMENT_ROOT'] . "/api/renderer/main.php";
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/special.php b/Neutron-trunk/api/engine-cyclic/special.php new file mode 100644 index 0000000..995a76a --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/special.php @@ -0,0 +1,18 @@ +<?php + +ob_start(); +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/lang/processor.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/headers/preprocessor.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/includes/includes.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/heads.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/init.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/menubar.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/drawer.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/banner.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/content.php"; +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/components/footer.php"; + +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/tails.php";
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/tails.php b/Neutron-trunk/api/engine-cyclic/tails.php new file mode 100644 index 0000000..9e9e5f4 --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/tails.php @@ -0,0 +1,4 @@ +</div> +</body> +</html> +<?php rlgps("Finished generating DOM"); ?>
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-cyclic/wrapper.php b/Neutron-trunk/api/engine-cyclic/wrapper.php new file mode 100644 index 0000000..196060d --- /dev/null +++ b/Neutron-trunk/api/engine-cyclic/wrapper.php @@ -0,0 +1,42 @@ +<?php + +function render(string $page) { + global $MPCMSRendererPageNameValue; + + if ($page == "index") { + $MPCMSRendererPageNameValue = "index"; + rlgps("Processing website homepage"); + if (!cacheCheck("index")) { + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/homepage.php"; + + $content = ob_get_contents(); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/page-index", $content); + require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/debug.php";debugDump(); + } else { + rlgps("Received page from cache"); + } + } else { + $MPCMSRendererPageNameValue = $page; + rlgps("Processing /{$page}"); + if (!cacheCheck($page)) { + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/pages.php"; + + $content = ob_get_contents(); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/page-" . $page, $content); + require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/debug.php";debugDump(); + } else { + rlgps("Received page from cache"); + } + } +} + +function renderSpecial(string $markup, string $displayName = "Page") { + global $MPCMSRendererPageMarkup; + global $MPCMSRendererPageMarkupDN; + + $MPCMSRendererPageMarkup = $markup; + $MPCMSRendererPageMarkupDN = $displayName; + rlgps("Processing special page"); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/special.php"; + require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/debug.php";debugDump(); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/engine-jaw/homepage.php b/Neutron-trunk/api/engine-jaw/homepage.php new file mode 100644 index 0000000..e5f76c8 --- /dev/null +++ b/Neutron-trunk/api/engine-jaw/homepage.php @@ -0,0 +1,297 @@ +<?php +rlgps("Homepage"); +if ((!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd"), "<a") === false)) || (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd"), "|") === false)) || (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd"), "|") === false))) { + rlgps("Regenerating pages cache"); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; +} + +?> +<?php + +function getAvgLuminance($filename, $num_samples=30) { + rlgps("Gathering average luminance from image"); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/banner.mtd")) { + rlgps("Already in cache"); + return file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/banner.mtd"); + } else { + $img = imagecreatefromjpeg($filename); + $width = imagesx($img); + $height = imagesy($img); + $x_step = intval($width/$num_samples); + $y_step = intval($height/$num_samples); + $total_lum = 0; + $sample_no = 1; + for ($x=0; $x<$width; $x+=$x_step) { + for ($y=0; $y<$height; $y+=$y_step) { + $rgb = imagecolorat($img, $x, $y); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + $lum = ($r+$r+$b+$g+$g+$g)/6; + $total_lum += $lum; + $sample_no++; + } + } + $avg_lum = $total_lum / $sample_no; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/banner.mtd", ($avg_lum / 255) * 100); + return ($avg_lum / 255) * 100; + } +} + +?> +<?php +rlgps("Loading widgets"); +$json = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); +$widgets = $json->list; +foreach ($widgets as $widget): ?> +<?php $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/feature.json")); ?> +<?php + +if (isset($data->class) && is_string($data->class)) { + require $_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/source.php"; +} + +?> +<?php endforeach ?> +<?php ob_start();echo("<!--\n\n" . str_replace('%year%', date('Y'), file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/private/license")) . "\n\n-->") ?> +<?php + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) { + $ready = true; +} else { + $ready = false; +} + +if ($ready) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagesInMenuBar")) { + $pimb = (integer)file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagesInMenuBar"); + } else { + $pimb = 4; + } +} +rlgps("Starting DOM generation"); +?> + +<!DOCTYPE html> +<html lang="fr"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta http-equiv="X-UA-Compatible" content="ie=edge"> + <?php + + /** @var string $GLOBALS["SYSTEM_ROOT"] */ + + if ($ready) { + echo('<link rel="stylesheet" href="' . $GLOBALS["SYSTEM_ROOT"] . '/resources/css/main.css">'); + echo('<link rel="stylesheet" href="' . $GLOBALS["SYSTEM_ROOT"] . '/resources/lib/pushbar.js/library.css">'); + echo('<script src="' . $GLOBALS["SYSTEM_ROOT"] . '/resources/lib/pushbar.js/library.js"></script>'); + echo('<link rel="shortcut icon" href="' . $GLOBALS["SYSTEM_ROOT"] . '/resources/upload/siteicon-uncomp.png" type="image/png">'); + } else { + echo('<link rel="stylesheet" href="' . $GLOBALS["SYSTEM_ROOT"] . '/resources/css/ready.css">'); + } + + ?> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/fonts-import.css"> + <link rel="stylesheet" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/css/ui.css"> + <title><?php + + function asciiComp($a, $b) { + $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a); + $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b); + return strcmp($at, $bt); + } + + if ($ready) { + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename")); + } else { + echo("Neutron"); + } + + ?></title> + <?php + + if ($ready) { + require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/header.php"; + } + + ?> +</head> +<body> + <?php + + if (!$ready) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("<script>location.href='{$GLOBALS["SYSTEM_ROOT"]}/cms-special/setup';</script>"); + } + + if ($ready) { + echo("<script type=\"text/javascript\">\nvar pushbar = new Pushbar({\nblur:true,\noverlay:true,\n});\n</script>"); + } + + rlgps("Banner generation"); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/banner.jpg")) { + $banner = "{$GLOBALS["SYSTEM_ROOT"]}/resources/upload/banner.jpg"; + if (getAvgLuminance($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/banner.jpg") > 50) { + $blackBannerText = true; + } else { + $blackBannerText = false; + } + } else { + $banner = "{$GLOBALS["SYSTEM_ROOT"]}/resources/image/default.jpg"; + if (getAvgLuminance($_SERVER['DOCUMENT_ROOT'] . "/resources/image/default.jpg") > 50) { + $blackBannerText = true; + } else { + $blackBannerText = false; + } + } + rlgps("Branding"); + ?> + <div id="always-on-top"> + <div id="siteadmin"><a class="sab" href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/cms-special/version"><span class="branding-desktop"><?= $lang["viewer"]["powered"] ?> Neutron <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version") ?></span><span class="branding-mobile">Neutron <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version") ?></span></a><a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/cms-special/admin" id="siteadmin-button"><img id="siteadmin-img" src="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/image/admin.svg"><?= $lang["viewer"]["manage"] ?></a></div> + </div> + <div id="banner" style='background-image: url("<?= $banner ?>");'> + <img id="banner-logo" src="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/upload/siteicon.png"><span id="banner-name" <?php if ($blackBannerText) {echo("class=\"banner-black\"");} ?>><?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename") ?></span> + </div> + <div id="menubar"><span class="menubar-link menubar-mobile" id="menubar-link-navigation" onclick="pushbar.open('panel-navigation')"><img src="/resources/image/menu.svg" class="menubar-img"><span class="menubar-link-text"><?= $lang["viewer"]["menu"] ?></span></span> + <?php + rlgps("Menubar"); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/alwaysmenu")) { + echo('<span class="menubar-link menubar-desktop" id="menubar-link-navigation" onclick="pushbar.open(\'panel-navigation\')"><img src="' . $GLOBALS["SYSTEM_ROOT"] . '/resources/image/menu.svg" class="menubar-img"><span class="menubar-link-text">' . $lang["viewer"]["menu"] . '</span></span>'); + } else { + $count = 0; + echo('<a href="' . $GLOBALS["SYSTEM_ROOT"] . '/" title="' . $GLOBALS["SYSTEM_ROOT"] . '/" class="menulink-desktop">' . $lang["viewer"]["home"] . '</a>'); + $count = $count + 1; + + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd")) { + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd")); + } else { + $pages = scandir($_SERVER['DOCUMENT_ROOT']); + uasort($pages, 'asciiComp'); + foreach ($pages as $page) { + if ($page != ".." && $page != ".") { + if (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $page)) { + if ($count < $pimb) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")) { + if (!in_array($page, $customSettings->hiddenPages)) { + echo("<a href=\"{$GLOBALS["SYSTEM_ROOT"]}/{$page}\" title=\"/{$GLOBALS["SYSTEM_ROOT"]}{$page}\" class=\"menulink-desktop\">" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename") . "</a>"); + $count = $count + 1; + } + } + } + } + } + } + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures") && count(scandir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures")) > 2) {echo("<a href=\"{$GLOBALS["SYSTEM_ROOT"]}/cms-special/gallery\" title=\"{$GLOBALS["SYSTEM_ROOT"]}/cms-special/gallery\" class=\"menulink-desktop\">" . $lang["viewer"]["gallery"] . "</a>");$count = $count + 1;} + } + if ($count >= 4) { + echo("<a onclick=\"pushbar.open('panel-navigation')\" title=\"" . $lang["viewer"]["menutitle"] . "\" class=\"menulink-desktop\">" . $lang["viewer"]["menudesktop"] . "</a>"); + } + } + + ?> + <?php + +$widgets = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); +if (!empty($widgets->list)) { + echo("<span class=\"menubar-link\" id=\"menubar-link-tools\" onclick=\"pushbar.open('panel-sidebar')\"><img src=\"/resources/image/tools.svg\" class=\"menubar-img\"><span class=\"menubar-link-text\">" . $lang["viewer"]["widgets"] . "</span></span>"); +} + +?></div><script src="/resources/js/sticky.js"></script> + <div data-pushbar-id="panel-navigation" data-pushbar-direction="left"> + <div id="banner-menu" style='background-image: url("<?= $banner ?>");'> + <img id="banner-menu-logo" src="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/upload/siteicon.png"><span id="banner-menu-name" <?php if ($blackBannerText) {echo("class=\"banner-black\"");} ?>><?php + rlgps("Printing banner"); + $sitename = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename"); + + if (strlen($sitename) < 15) { + echo($sitename); + } else { + echo(substr($sitename, 0, 14) . "..."); + } + + ?></span> + </div> + <img src="/resources/image/close.svg" id="menubar-close" onclick="pushbar.close()"> + <br> + <a href="<?= $GLOBALS["SYSTEM_ROOT"] ?>/" title="<?= $GLOBALS["SYSTEM_ROOT"] ?>/" class="menu-link"><?= $lang["viewer"]["home"] ?></a> + <?php + rlgps("Navigation pane"); + $pages = scandir($_SERVER['DOCUMENT_ROOT']); + uasort($pages, 'asciiComp'); + foreach ($pages as $page) { + if ($page != ".." && $page != ".") { + if (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $page)) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")) { + if (!in_array($page, $customSettings->hiddenPages)) { + echo("<a href=\"/{$GLOBALS["SYSTEM_ROOT"]}{$page}\" title=\"/{$GLOBALS["SYSTEM_ROOT"]}{$page}\" class=\"menu-link\">" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename") . "</a>"); + } + } + } + } + } + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) {echo("<a href=\"{$GLOBALS["SYSTEM_ROOT"]}/cms-special/gallery\" title=\"{$GLOBALS["SYSTEM_ROOT"]}/cms-special/gallery\" class=\"menu-link\">" . $lang["viewer"]["gallery"] . "</a>");} + + ?> + </div> + <div data-pushbar-id="panel-sidebar" id="sidebar" data-pushbar-direction="right"> + <img src="<?= $GLOBALS["SYSTEM_ROOT"] ?>/resources/image/close.svg" id="sidebar-close" data-pushbar-close> + <span id="sidebar-title"><?= $lang["viewer"]["widgetspane"] ?></span> + <span id="sidebar-separator"></span> + <span id="sidebar-widgets"> + <?php + rlgps("Loading widgets"); + $config = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); + foreach ($config->list as $widget): ?> + <?php $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/feature.json")); ?> + <?php + + if (isset($data->class) && is_string($data->class)) { + $class = $data->class; + new $class(); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/source.php"; + } + + ?> + <?php endforeach ?> + </span> + </div> + <div id="page-placeholder"> + <div id="page-content"> + <?php + rlgps("Printing page content"); + $html_string = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/index"); + preg_match_all('#<h[1-6]*[^>]*>.*?<\/h[1-6]>#',$html_string,$results); + + $toc = implode("\n",$results[0]); + $toc = preg_replace('#<h2>#','<li class="toc$1" style="margin-left: 0px;">',$toc); + $toc = preg_replace('#<\/h2>#','</li>',$toc); + $toc = preg_replace('#<h3>#','<li class="toc$1" style="margin-left: 20px;">',$toc); + $toc = preg_replace('#<\/h3>#','</li>',$toc); + $toc = preg_replace('#<h4>#','<li class="toc$1" style="margin-left: 40px;">',$toc); + $toc = preg_replace('#<\/h4>#','</li>',$toc); + $toc = preg_replace('#<h5>#','<li class="toc$1" style="margin-left: 60px;">',$toc); + $toc = preg_replace('#<\/h5>#','</li>',$toc); + $toc = preg_replace('#<h6>#','<li class="toc$1" style="margin-left: 80px;">',$toc); + $toc = preg_replace('#<\/h6>#','</li>',$toc); + + $toc = '<div id="toc"> + <h3>' . $lang["viewer"]["toc"] . '</h3> + <ul> + '.$toc.' + </ul> + </div><hr>'; + + if (false) { + echo($toc); + } + + ?> + <?php echo($html_string); ?> + </div> + <div id="page-footer"> + <?php echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/footer")); ?> + </div> + </div> +</body> +</html> diff --git a/Neutron-trunk/api/engine-jaw/init.php b/Neutron-trunk/api/engine-jaw/init.php new file mode 100644 index 0000000..a9da042 --- /dev/null +++ b/Neutron-trunk/api/engine-jaw/init.php @@ -0,0 +1,306 @@ +<?php + +if ((!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd"), "<a") === false)) || (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-full.mtd"), "|") === false)) || (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd") || (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd") && strpos(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist.mtd"), "|") === false))) { + rlgps("Regenerating pages cache"); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/admin/cache_pages_update.php"; +} + +?> +<?php + +if (isset($MPCMSRendererPageMarkup)) { + $pagename = $MPCMSRendererPageMarkupDN; +} else { + $pagename = $MPCMSRendererPageNameValue; +} +$ready = true; + +if ($ready) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagesInMenuBar")) { + $pimb = (integer)file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagesInMenuBar"); + } else { + $pimb = 4; + } +} + +function getAvgLuminance($filename, $num_samples=30) { + rlgps("Gathering average luminance from image"); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/banner.mtd")) { + rlgps("Already in cache"); + return file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/banner.mtd"); + } else { + $img = imagecreatefromjpeg($filename); + $width = imagesx($img); + $height = imagesy($img); + $x_step = intval($width/$num_samples); + $y_step = intval($height/$num_samples); + $total_lum = 0; + $sample_no = 1; + for ($x=0; $x<$width; $x+=$x_step) { + for ($y=0; $y<$height; $y+=$y_step) { + $rgb = imagecolorat($img, $x, $y); + $r = ($rgb >> 16) & 0xFF; + $g = ($rgb >> 8) & 0xFF; + $b = $rgb & 0xFF; + $lum = ($r+$r+$b+$g+$g+$g)/6; + $total_lum += $lum; + $sample_no++; + } + } + $avg_lum = $total_lum / $sample_no; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/banner.mtd", ($avg_lum / 255) * 100); + return ($avg_lum / 255) * 100; + } +} + +function asciiComp($a, $b) { + $at = iconv('UTF-8', 'ASCII//TRANSLIT', $a); + $bt = iconv('UTF-8', 'ASCII//TRANSLIT', $b); + return strcmp($at, $bt); +} + +?> +<?php +rlgps("Loading widgets"); +$json = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); +$widgets = $json->list; +foreach ($widgets as $widget): ?> +<?php $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/feature.json")); ?> +<?php + +if (isset($data->class) && is_string($data->class)) { + require $_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/source.php"; +} + +?> +<?php endforeach ?> +<?php ob_start();echo("<!--\n\n" . str_replace('%year%', date('Y'), file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/private/license")) . "\n\n-->") ?> +<?php + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("<script>location.href = '/';</script>"); +} + +?> + +<!DOCTYPE html> +<html lang="fr"> +<head> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <meta http-equiv="X-UA-Compatible" content="ie=edge"> + <?php + + if ($ready) { + echo('<link rel="stylesheet" href="/resources/css/main.css">'); + echo('<link rel="stylesheet" href="/resources/lib/pushbar.js/library.css">'); + echo('<script src="/resources/lib/pushbar.js/library.js"></script>'); + echo('<link rel="shortcut icon" href="/resources/upload/siteicon-uncomp.png" type="image/png">'); + } else { + echo('<link rel="stylesheet" href="/resources/css/ready.css">'); + } + + ?> + <link rel="stylesheet" href="/resources/css/fonts-import.css"> + <link rel="stylesheet" href="/resources/css/ui.css"> + <title><?php + + if (isset($MPCMSRendererPageMarkup)) { + echo($MPCMSRendererPageMarkupDN . " - " . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename")); + } else { + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $pagename . "/pagename") . " - " . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename")); + } + + ?></title> + <?php require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/header.php" ?> +</head> +<body> + <?php + + echo("<script type=\"text/javascript\">\nvar pushbar = new Pushbar({\nblur:true,\noverlay:true,\n});\n</script>"); + + + rlgps("Banner generation"); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/banner.jpg")) { + $banner = "/resources/upload/banner.jpg"; + if (getAvgLuminance($_SERVER['DOCUMENT_ROOT'] . "/resources/upload/banner.jpg") > 50) { + $blackBannerText = true; + } else { + $blackBannerText = false; + } + } else { + $banner = "/resources/image/default.jpg"; + if (getAvgLuminance($_SERVER['DOCUMENT_ROOT'] . "/resources/image/default.jpg") > 50) { + $blackBannerText = true; + } else { + $blackBannerText = false; + } + } + rlgps("Branding"); + ?> + <div id="always-on-top"> + <div id="siteadmin"><a class="sab" href="/cms-special/version"><span class="branding-desktop"><?= $lang["viewer"]["powered"] ?> Neutron <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version") ?></span><span class="branding-mobile">Neutron <?= file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/version") ?></span></a><a href="/cms-special/admin" id="siteadmin-button"><img id="siteadmin-img" src="/resources/image/admin.svg"><?= $lang["viewer"]["manage"] ?></a></div> + </div> + <div id="banner" style='background-image: url("<?= $banner ?>");'> + <img id="banner-logo" src="/resources/upload/siteicon.png"><span id="banner-name" <?php if ($blackBannerText) {echo("class=\"banner-black\"");} ?>><?php + + if (isset($MPCMSRendererPageMarkup)) { + echo($MPCMSRendererPageMarkupDN); + } else { + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $pagename . "/pagename")); + } + + ?></span> + </div> + <div id="menubar"><span class="menubar-link menubar-mobile" id="menubar-link-navigation" onclick="pushbar.open('panel-navigation')"><img src="/resources/image/menu.svg" class="menubar-img"><span class="menubar-link-text"><?= $lang["viewer"]["menu"] ?></span></span> + <?php + rlgps("Menubar"); + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/alwaysmenu")) { + echo('<span class="menubar-link menubar-desktop" id="menubar-link-navigation" onclick="pushbar.open(\'panel-navigation\')"><img src="/resources/image/menu.svg" class="menubar-img"><span class="menubar-link-text">' . $lang["viewer"]["menu"] . '</span></span>'); + } else { + $count = 0; + echo('<a href="/" title="/" class="menulink-desktop">' . $lang["viewer"]["home"] . '</a>'); + $count = $count + 1; + + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd")) { + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/pagelist-old.mtd")); + } else { + $pages = scandir($_SERVER['DOCUMENT_ROOT']); + uasort($pages, 'asciiComp'); + foreach ($pages as $page) { + if ($page != ".." && $page != ".") { + if (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $page)) { + if ($count < $pimb) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")) { + if (!in_array($page, $customSettings->hiddenPages)) { + echo("<a href=\"/{$page}\" title=\"/{$page}\" class=\"menulink-desktop\">" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename") . "</a>"); + $count = $count + 1; + } + } + } + } + } + } + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures") && count(scandir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/pictures")) > 2) {echo("<a href=\"/cms-special/gallery\" title=\"/cms-special/gallery\" class=\"menulink-desktop\">" . $lang["viewer"]["gallery"] . "</a>");$count = $count + 1;} + } + if ($count >= 4) { + echo("<a onclick=\"pushbar.open('panel-navigation')\" title=\"" . $lang["viewer"]["menutitle"] . "\" class=\"menulink-desktop\">" . $lang["viewer"]["menudesktop"] . "</a>"); + } + } + + ?> + <?php + +$widgets = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); +if (!empty($widgets->list)) { + echo("<span class=\"menubar-link\" id=\"menubar-link-tools\" onclick=\"pushbar.open('panel-sidebar')\"><img src=\"/resources/image/tools.svg\" class=\"menubar-img\"><span class=\"menubar-link-text\">" . $lang["viewer"]["widgets"] . "</span></span>"); +} + +?></div><script src="/resources/js/sticky.js"></script> + <div data-pushbar-id="panel-navigation" data-pushbar-direction="left"> + <div id="banner-menu" style='background-image: url("<?= $banner ?>");'> + <img id="banner-menu-logo" src="/resources/upload/siteicon.png"><span id="banner-menu-name" <?php if ($blackBannerText) {echo("class=\"banner-black\"");} ?>><?php + rlgps("Printing banner"); + $sitename = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename"); + + if (strlen($sitename) < 15) { + echo($sitename); + } else { + echo(substr($sitename, 0, 14) . "..."); + } + + ?></span> + </div> + <img src="/resources/image/close.svg" id="menubar-close" class="noeffects" onclick="pushbar.close()"> + <br> + <a href="/" title="/" class="menu-link"><?= $lang["viewer"]["home"] ?></a> + <?php + rlgps("Navigation pane"); + $pages = scandir($_SERVER['DOCUMENT_ROOT']); + uasort($pages, 'asciiComp'); + foreach ($pages as $page) { + if ($page != ".." && $page != ".") { + if (is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $page)) { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename")) { + if (!in_array($page, $customSettings->hiddenPages)) { + echo("<a href=\"/{$page}\" title=\"/{$page}\" class=\"menu-link\">" . file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/" . $page . "/pagename") . "</a>"); + } + } + } + } + } + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/galery/enabled")) {echo("<a href=\"/cms-special/gallery\" title=\"/cms-special/gallery\" class=\"menu-link\">" . $lang["viewer"]["gallery"] . "</a>");} + + ?> + </div> + <div data-pushbar-id="panel-sidebar" id="sidebar" data-pushbar-direction="right"> + <img src="/resources/image/close.svg" id="sidebar-close" onclick="pushbar.close()"> + <span id="sidebar-title"><?= $lang["viewer"]["widgetspane"] ?></span> + <span id="sidebar-separator"></span> + <span id="sidebar-widgets"> + <?php + rlgps("Loading widgets"); + $config = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json")); + foreach ($config->list as $widget): ?> + <?php $data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/feature.json")); ?> + <?php + + if (isset($data->class) && is_string($data->class)) { + $class = $data->class; + new $class(); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/widgets/" . $widget . "/source.php"; + } + + ?> + <?php endforeach ?> + </span> + </div> + <div id="page-placeholder"> + <div id="page-content"> + <?php + if (!isset($MPCMSRendererPageMarkup)) { + $html_string = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $pagename); + preg_match_all('#<h[1-6]*[^>]*>.*?<\/h[1-6]>#',$html_string,$results); + + $toc = implode("\n",$results[0]); + $toc = preg_replace('#<h2>#','<li class="toc$1" style="margin-left: 0px;">',$toc); + $toc = preg_replace('#<\/h2>#','</li>',$toc); + $toc = preg_replace('#<h3>#','<li class="toc$1" style="margin-left: 20px;">',$toc); + $toc = preg_replace('#<\/h3>#','</li>',$toc); + $toc = preg_replace('#<h4>#','<li class="toc$1" style="margin-left: 40px;">',$toc); + $toc = preg_replace('#<\/h4>#','</li>',$toc); + $toc = preg_replace('#<h5>#','<li class="toc$1" style="margin-left: 60px;">',$toc); + $toc = preg_replace('#<\/h5>#','</li>',$toc); + $toc = preg_replace('#<h6>#','<li class="toc$1" style="margin-left: 80px;">',$toc); + $toc = preg_replace('#<\/h6>#','</li>',$toc); + + $toc = '<div id="toc"> + <h3>' . $lang["viewer"]["toc"] . '</h3> + <ul> + '.$toc.' + </ul> + </div><hr>'; + + if (false) { + echo($toc); + } + } + + ?> + <?php + + if (isset($MPCMSRendererPageMarkup)) { + echo($MPCMSRendererPageMarkup); + } else { + echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/" . $pagename)); + } + + ?> + </div> + <div id="page-footer"> + <?php echo(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/footer")); ?> + </div> + </div> +</body> +</html> diff --git a/Neutron-trunk/api/engine-jaw/render.php b/Neutron-trunk/api/engine-jaw/render.php new file mode 100644 index 0000000..9a9efd3 --- /dev/null +++ b/Neutron-trunk/api/engine-jaw/render.php @@ -0,0 +1,29 @@ +<?php + +function render(string $name) { + if (!cacheCheck($name)) { + if ($name == "index") { + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-jaw/homepage.php"; + + $content = ob_get_contents(); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/page-index", $content); + require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/debug.php";debugDump(); + } else { + $MPCMSRendererPageNameValue = $name; + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-jaw/init.php"; + + $content = ob_get_contents(); + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/cache/page-" . $name, $content); + require_once $_SERVER['DOCUMENT_ROOT'] . "/resources/private/debug.php";debugDump(); + } + } else { + rlgps("Received page from cache"); + } +} + +function renderSpecial(string $markup, string $displayName = "Page") { + $MPCMSRendererPageMarkup = $markup; + $MPCMSRendererPageMarkupDN = $displayName; + rlgps("Special page"); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-jaw/init.php"; +}
\ No newline at end of file diff --git a/Neutron-trunk/api/experimental b/Neutron-trunk/api/experimental new file mode 100644 index 0000000..c227083 --- /dev/null +++ b/Neutron-trunk/api/experimental @@ -0,0 +1 @@ +0
\ No newline at end of file diff --git a/Neutron-trunk/api/jaw_version b/Neutron-trunk/api/jaw_version new file mode 100644 index 0000000..7c483e8 --- /dev/null +++ b/Neutron-trunk/api/jaw_version @@ -0,0 +1 @@ +1.7
\ No newline at end of file diff --git a/Neutron-trunk/api/lang/processor.php b/Neutron-trunk/api/lang/processor.php new file mode 100644 index 0000000..8ab2e99 --- /dev/null +++ b/Neutron-trunk/api/lang/processor.php @@ -0,0 +1,57 @@ +<?php + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang", "fr"); +} + +$langsel = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang"); +$lang = []; + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel)) { + $langprops = scandir($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel . "/"); + foreach ($langprops as $langprop) { + if ($langprop != "." && $langprop != "..") { + $langpieces = explode("/", implode("/", explode("\\", $langprop))); + $langitemsel = explode(".", $langpieces[count($langpieces) - 1]); + $langitem = $langitemsel[count($langitemsel) - 1]; + if ($langitemsel[count($langitemsel) - 1] != "json") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " is not in a valid format. Language files must be JSON."); + } else { + json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel . "/" . $langprop), true); + if (json_last_error() == JSON_ERROR_NONE) { + $lang[$langitemsel[count($langitemsel) - 2]] = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel . "/" . $langprop), true); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " isn't a valid JSON file. Please check for syntax errors and retry."); + } + } + } + } +} else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr")) { + echo("Unable to load language files: unable to find selected language files, loading fallback files"); + $langprops = scandir($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr/"); + foreach ($langprops as $langprop) { + if ($langprop != "." && $langprop != "..") { + $langpieces = explode("/", implode("/", explode("\\", $langprop))); + $langitemsel = explode(".", $langpieces[count($langpieces) - 1]); + $langitem = $langitemsel[count($langitemsel) - 1]; + if ($langitemsel[count($langitemsel) - 1] != "json") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " is not in a valid format. Language files must be JSON."); + } else { + json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr/" . $langprop), true); + if (json_last_error() == JSON_ERROR_NONE) { + $lang[$langitemsel[count($langitemsel) - 2]] = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr/" . $langprop), true); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " isn't a valid JSON file. Please check for syntax errors and retry."); + } + } + } + } + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language files: unable to find selected language files, and unable to find fallback language files"); + } +} + +if (isset($_GET['verboseLang'])) { + var_dump($lang); +}
\ No newline at end of file diff --git a/Neutron-trunk/api/lang/setup.php b/Neutron-trunk/api/lang/setup.php new file mode 100644 index 0000000..88792e2 --- /dev/null +++ b/Neutron-trunk/api/lang/setup.php @@ -0,0 +1,56 @@ +<?php + +if (!isset($_GET['lang'])) { + $nolang = true; +} else { + $nolang = false; + + $langsel = $_GET['lang']; + echo("<script>const lang = '" . $langsel . "';</script>"); + $lang = []; + + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel)) { + $langprops = scandir($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel); + foreach ($langprops as $langprop) { + if ($langprop != "." && $langprop != "..") { + $langpieces = explode("/", implode("/", explode("\\", $langprop))); + $langitemsel = explode(".", $langpieces[count($langpieces) - 1]); + $langitem = $langitemsel[count($langitemsel) - 1]; + if ($langitemsel[count($langitemsel) - 1] != "json") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " is not in a valid format. Language files must be JSON."); + } else { + json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel . "/" . $langprop)); + if (json_last_error() == JSON_ERROR_NONE) { + $lang[$langitemsel[count($langitemsel) - 2]] = (array)json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $langsel . "/" . $langprop)); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " isn't a valid JSON file. Please check for syntax errors and retry."); + } + } + } + } + } else { + if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr")) { + echo("Unable to load language files: unable to find selected language files, loading fallback files"); + $langprops = scandir($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr"); + foreach ($langprops as $langprop) { + if ($langprop != "." && $langprop != "..") { + $langpieces = explode("/", implode("/", explode("\\", $langprop))); + $langitemsel = explode(".", $langpieces[count($langpieces) - 1]); + $langitem = $langitemsel[count($langitemsel) - 1]; + if ($langitemsel[count($langitemsel) - 1] != "json") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " is not in a valid format. Language files must be JSON."); + } else { + json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr/" . $langprop)); + if (json_last_error() == JSON_ERROR_NONE) { + $lang[$langitemsel[count($langitemsel) - 2]] = (array)json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/fr/" . $langprop)); + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language file: " . implode(".", $langitemsel) . " isn't a valid JSON file. Please check for syntax errors and retry."); + } + } + } + } + } else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unable to load language files: unable to find selected language files, and unable to find fallback language files"); + } + } +}
\ No newline at end of file diff --git a/Neutron-trunk/api/prettyver b/Neutron-trunk/api/prettyver new file mode 100644 index 0000000..0f941f3 --- /dev/null +++ b/Neutron-trunk/api/prettyver @@ -0,0 +1 @@ +21H2
\ No newline at end of file diff --git a/Neutron-trunk/api/public b/Neutron-trunk/api/public new file mode 100644 index 0000000..b502f32 --- /dev/null +++ b/Neutron-trunk/api/public @@ -0,0 +1 @@ +https://minteck.ro.lt/creations/dev/neutron
\ No newline at end of file diff --git a/Neutron-trunk/api/renderer/main.php b/Neutron-trunk/api/renderer/main.php new file mode 100644 index 0000000..c873f60 --- /dev/null +++ b/Neutron-trunk/api/renderer/main.php @@ -0,0 +1,24 @@ +<?php + +global $_VERSION; + +global $_FNSN_DUMP_STARTDATE; +$_FNSN_DUMP_STARTDATE = new DateTime("now"); +require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/includes/cache.php"; +ob_start(); + +function rlgps(string $message) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/engine-cyclic.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/engine-cyclic.log") . "\n" . "... " . $message); +} + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/oldRenderer")) { + $_VERSION = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/cyclic_version")); + $_RENDERER = "Neutron Copper"; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/engine-cyclic.log", "Using CyclicCMS version " . $_VERSION); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-cyclic/wrapper.php"; +} else { + $_VERSION = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/jaw_version")); + $_RENDERER = "Neutron Titanium"; + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/engine-cyclic.log", "Using JustAWebsite version " . $_VERSION); + require_once $_SERVER['DOCUMENT_ROOT'] . "/api/engine-jaw/render.php"; +}
\ No newline at end of file diff --git a/Neutron-trunk/api/renderer/render.php b/Neutron-trunk/api/renderer/render.php new file mode 100644 index 0000000..30f32c1 --- /dev/null +++ b/Neutron-trunk/api/renderer/render.php @@ -0,0 +1,2 @@ +<?php +require_once "main.php";
\ No newline at end of file diff --git a/Neutron-trunk/api/setup/check.php b/Neutron-trunk/api/setup/check.php new file mode 100644 index 0000000..d3eb831 --- /dev/null +++ b/Neutron-trunk/api/setup/check.php @@ -0,0 +1,30 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +// require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("It works!"); + +if (substr($_SERVER['SERVER_PROTOCOL'], 0, 4) != "HTTP") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unsupported protocol"); +} + +if ($_SERVER['REQUEST_METHOD'] != "GET") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unsupported request method"); +} + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload")) { + mkdir($_SERVER['DOCUMENT_ROOT'] . "/resources/upload"); +} + +ob_start(); +phpinfo(); +$data = ob_get_contents(); +ob_clean(); +if (strpos($data, '<tr><td class="e">GD Support </td><td class="v">enabled </td></tr>') !== false || strpos($data, 'GD Support => enabled') !== false) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("The GD2 library is not installed or enabled"); +} + +if (strpos($_SERVER['HTTP_USER_AGENT'], 'Chrome') !== false || strpos($_SERVER['HTTP_USER_AGENT'], 'Firefox') !== false) {} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Unsupported browser, please use Chrome, Chrome-based or Firefox"); +} + +require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok"); diff --git a/Neutron-trunk/api/setup/defaultHomepage.html b/Neutron-trunk/api/setup/defaultHomepage.html new file mode 100644 index 0000000..88da957 --- /dev/null +++ b/Neutron-trunk/api/setup/defaultHomepage.html @@ -0,0 +1 @@ +<div class="image image_resized" style="text-align:center;"><img style="width:64px;" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAIACAYAAAD0eNT6AAAABmJLR0QAGwAAAJAefI6oAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wseCjszFefZyQAAIABJREFUeNrsvduSHkdyNBjejRkeQIIcjjQHiSOz1aX2vXafafdBRk+yutSaSfPb6kQShwFn0Gi070VXZbpHRH6Nf0TsWpMZMklEA/0dqrIyIzw83CN27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt27NixY8eOHTt2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" alt="Neutron"></div><p style="text-align:center;"><i>Edit the homepage to start your website...</i><br><i>Modifiez la page d'accueil pour commencer votre site...</i><br><i>Edite la página de inicio para iniciar su sitio web...</i><br><i>Modifica la home page per avviare il tuo sito Web...</i><br><i>Bearbeiten Sie die Homepage, um Ihre Website zu starten...</i><br><i>Bewerk de startpagina om uw website te starten...</i><br><i>Отредактируйте домашнюю страницу, чтобы начать свой сайт ...</i><br><i>编辑首页以启动您的网站...</i><br><i>ホームページを編集してウェブサイトを開始...</i></p>
\ No newline at end of file diff --git a/Neutron-trunk/api/setup/push.php b/Neutron-trunk/api/setup/push.php new file mode 100644 index 0000000..20d8898 --- /dev/null +++ b/Neutron-trunk/api/setup/push.php @@ -0,0 +1,105 @@ +<?php require_once "../../resources/private/relative.php"; getRelativeDetails("api"); ?> +<?php + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/upload")) { + mkdir($_SERVER['DOCUMENT_ROOT'] . "/resources/upload"); +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("La configuration du site Web à déjà été effectuée, vous devez le réinitialiser pour relancer la configurer"); +} + +if (isset($_POST['sitename'])) { + if (trim($_POST['sitename']) == "") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Le nom du site ne peut pas être vide"); + } + if (strpos($_POST['sitename'], '<') !== false || strpos($_POST['sitename'], '>') !== false || strpos($_POST['sitename'], '{') !== false || strpos($_POST['sitename'], '}') !== false || strpos($_POST['sitename'], '@') !== false || strpos($_POST['sitename'], '#') !== false || strpos($_POST['sitename'], '|') !== false) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Le nom du site contient des caractères invalides"); + } + if (strlen($_POST['sitename']) > 75) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Le nom du site est trop long"); + } +} else { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Aucun nom n'a été spécifié pour le site"); +} + +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/resources/i18n/" . $_POST['language'])) { + $lang = $_POST['language']; +} else { + $lang = "fr"; +} + +if (isset($_FILES['file'])) { + if ($_FILES['file']['error'] == 1) { + $maxsize = ini_get('upload_max_filesize'); + if ($maxsize > 1000) { + if ($maxsize > 1000000) { + $maxsizestr = round($maxsize / 1000000, 2) . " Mio"; + } else { + $maxsizestr = round($maxsize / 1000, 2) . " Kio"; + } + } else { + $maxsizestr = $maxsize . " octets"; + } + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("La taille du fichier d'icône dépasse la taille maximale imposée par le serveur ({$maxsizestr})"); + } + if ($_FILES['file']['error'] == 2) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("La taille maximale du fichier de formulaire à été dépassée"); + } + if ($_FILES['file']['error'] == 3) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Le fichier d'icône est incomplet (n'a pas été transmis entièrement)"); + } + if ($_FILES['file']['error'] == 4) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Le fichier est renseigné au serveur, mais il n'a pas été transmis"); + } + if ($_FILES['file']['error'] == 6) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Aucun dossier temporaire présent sur le serveur"); + } + if ($_FILES['file']['error'] == 7) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Impossible d'écrire sur le disque"); + } + if ($_FILES['file']['error'] == 8) { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Un autre programme à interrompu la transmission du fichier"); + } + if ($_FILES['file']['type'] != "image/png" && $_FILES['file']['type'] != "image/jpeg" && $_FILES['file']['type'] != "image/gif") { + require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("Ce type de fichier n'est pas supporté"); + } + if ($_FILES['file']['error'] == 0) { + imagepng(imagecreatefromstring(file_get_contents($_FILES['file']['tmp_name'])), $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon.png"); + unlink($_FILES['file']['tmp_name']); + } +} else { + copy($_SERVER['DOCUMENT_ROOT'] . "/resources/image/siteicon.png", $_SERVER['DOCUMENT_ROOT'] . "/resources/upload/siteicon.png"); +} + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent")) { + mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent"); +} + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages")) { + mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages"); +} + +if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes")) { + mkdir($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes"); +} + +$password = password_hash("MPCMS-usr-motdepasse", PASSWORD_BCRYPT, ['cost' => 12,]); + +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pages/index", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/api/setup/defaultHomepage.html")); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/pagetypes/index", "0"); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/lang", $lang); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/footer", "Copyright © Votre nom ici<br>Tous droits réservés"); +$sitename = str_replace('>', '>', $_POST['sitename']); +$sitename = str_replace('<', '<', $sitename); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/sitename", $sitename); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/widgets.json", "{\"list\": [\"test\"]}"); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/caldb.json", "{\"events\":[{}]}"); +file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/password", $password); +if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log")) { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log") . date("d/m/Y H:i:s") . " - SETUP/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} else { + file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/data/webcontent/system.log", date("d/m/Y H:i:s") . " - SETUP/" . $_SERVER['REQUEST_METHOD'] . " - " . $_SERVER['REQUEST_URI'] . " - " . $_SERVER['HTTP_USER_AGENT'] . "\n\n"); +} + +require $_SERVER['DOCUMENT_ROOT'] . "/api/electrode/quit.php";quit("ok");
\ No newline at end of file diff --git a/Neutron-trunk/api/snow-bold.png b/Neutron-trunk/api/snow-bold.png Binary files differnew file mode 100644 index 0000000..0d7b2e6 --- /dev/null +++ b/Neutron-trunk/api/snow-bold.png diff --git a/Neutron-trunk/api/snow-light.png b/Neutron-trunk/api/snow-light.png Binary files differnew file mode 100644 index 0000000..20ea123 --- /dev/null +++ b/Neutron-trunk/api/snow-light.png diff --git a/Neutron-trunk/api/snow-medium.png b/Neutron-trunk/api/snow-medium.png Binary files differnew file mode 100644 index 0000000..ac11309 --- /dev/null +++ b/Neutron-trunk/api/snow-medium.png diff --git a/Neutron-trunk/api/version b/Neutron-trunk/api/version new file mode 100644 index 0000000..ed21ed3 --- /dev/null +++ b/Neutron-trunk/api/version @@ -0,0 +1 @@ +10.0.236.53 |