summaryrefslogtreecommitdiff
path: root/code/admin/render.php
diff options
context:
space:
mode:
Diffstat (limited to 'code/admin/render.php')
-rw-r--r--code/admin/render.php59
1 files changed, 59 insertions, 0 deletions
diff --git a/code/admin/render.php b/code/admin/render.php
new file mode 100644
index 0000000..9d4175e
--- /dev/null
+++ b/code/admin/render.php
@@ -0,0 +1,59 @@
+<?php
+ require_once('utils.php');
+ need_auth();
+
+ // Config loading
+ $site_conf = load_ini_site_conf("content/site_conf.ini");
+ if ( ! is_array($site_conf) ) trigger_error("Error parsing site_conf.ini", E_USER_ERROR);
+
+ // URL params clean-up
+ $action=sanitize($_GET, 'action', '/[^a-z_]+/', 'preview'); /* Could be : preview, edit, publish */
+ $page=sanitize($_GET, 'page', '/[^a-z0-9\/]+/', $site_conf['site_default_page']); // Never put \. in this regex
+
+ // Template vars init ($page, $page_path, $page_props, $page_tpl_url)
+ $page_path = "content/$page";
+ if ( ! is_dir($page_path) ) trigger_error("Error : page does not exists ($page)", E_USER_ERROR);
+ $page_props = load_ini_page_props($page);
+ if ( ! is_array($page_props) ) trigger_error("Error parsing page properties ($page/props.ini)", E_USER_ERROR);
+ $page_tpl_url = str_repeat('../', substr_count($page, '/')) . "admin/templates/" . $page_props['page_template'] . '/';
+
+ if ($action === 'publish') ob_start(); /* Buffering for redirecting to file instead of browser */
+
+ // Basic HTML5 skeleton + page props insertion + template call
+?>
+<!DOCTYPE html>
+<html>
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title><?=$page_props['page_title']?></title>
+<meta name="description" content="<?=$page_props['page_description']?>">
+<meta name="keywords" content="<?=$page_props['page_keywords']?>">
+<link rel="stylesheet" href="<?="$page_tpl_url" /*FIXME*/?>screen.css">
+</head>
+<body>
+<?php
+ require("templates/" . $page_props['page_template'] . '/layout-' . $page_props['page_layout'] . '.php');
+ if ( $action === 'edit') require('editor-bind-code.html');
+?>
+</body>
+</html>
+<?php
+ // If publishing, write resulting HTML page on a .html file
+ if ($action === 'publish') {
+ $out=ob_get_contents();
+ ob_end_clean();
+ $dest="../$page.html";
+ $destfold=dirname($dest);
+ if ( ! is_dir($destfold) ) {
+ if ( ! mkdir($destfold,0777,true) ) {
+ trigger_error("Error : Can't create '$destfold'", E_USER_ERROR);
+ }
+ }
+ $size=file_put_contents($dest, $out);
+ if ( $size === FALSE ) {
+ trigger_error("Error : Can't write " . strlen($out) . " bytes to '$dest'", E_USER_ERROR);
+ } else {
+ echo json_encode(array('result'=>'ok', 'size' => $size));
+ }
+ }
+?>