diff --git a/README.md b/README.md index 4bc7011..9984523 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ # NeoCMS + ## Version 2.0 Version 2.0 is a complete rewrite to ensure we support the latest jQuery and TinyMCE GPL version. @@ -16,6 +17,7 @@ To install: * PHP 8 on Linux. None of that Windows Server crap ## Known Bugs + * Templating (New Page) not yet implemented * File (not images) uploads need to be implemented * Not completely tested diff --git a/cms/controller/index.php b/cms/controller/index.php index 7001960..6fdbc01 100644 --- a/cms/controller/index.php +++ b/cms/controller/index.php @@ -6,9 +6,9 @@ switch ($_REQUEST["action"]) { case "save": if (!empty($_POST['uri']) && !empty($_POST['content'])) { $_SESSION['core']->saveContent($_POST['uri'], $_POST['content']); - die("Page Updated."); + echo 'Page Updated.'; } else { - die('Unable to save page'); + echo 'Unable to save page'; } break; @@ -17,27 +17,50 @@ switch ($_REQUEST["action"]) { */ case "getTemplates": header('Content-type: application/json'); - $files=array_diff(scandir("../templates/"),array('..', '.')); - $returnArray = array(); - foreach($files as $file) { - $returnArray[]=array("id" => $file, "name" => str_replace(array(".htm",".html"), "", $file)); + $files = array_diff(scandir("../templates/"), array('..', '.')); + $returnArray = []; + foreach ($files as $file) { + $returnArray[] = array("id" => $file, "name" => str_replace(array(".html", ".htm"), "", $file)); } - return json_encode($returnArray); + echo json_encode($returnArray); break; /** * newPage AJAX call to take a template file and create a new page */ case "newPage": - $filename = str_replace("..","",$_POST['filename']); - $template = str_replace("..","",$_POST['template']); + header('Content-type: application/json'); - if(!str_ends_with($filename, ".htm") && !str_ends_with($filename, ".html")) { + $filename = str_replace("..", "", $_POST['filename']); + $template = str_replace("..", "", $_POST['template']); + if (!str_ends_with($filename, ".htm") && !str_ends_with($filename, ".html")) { $filename .= ".html"; } - if(!file_exists("../templates/".$template)) return json_encode(array("error" => "Template not found")); - if(!copy("../templates/".$template,"../../".$filename)) return json_encode(array("error" => "Template copy failed")); - return json_encode(array("ok" => "DONE_THE_NEEDFUL","url"=>$filename)); + // Some vhosts can supply a trailing slash on DOCUMENT_ROOT so tidy it up + $destination = str_replace("//", "/", $_SERVER['DOCUMENT_ROOT'] . "/" . $filename); + + + if (!file_exists("../templates/" . $template)) die(json_encode(array("error" => "Template not found"))); + if (file_exists($destination)) die(json_encode(array("error" => "Page or file already exists"))); + + file_put_contents($destination, file_get_contents("../templates/" . $template)); + if (!file_exists($destination)) die(json_encode(array("error" => "Template copy failed"))); + echo json_encode(array("ok" => "DONE_THE_NEEDFUL", "url" => str_replace("//", "/", "/" . $filename))); break; + + case "getPages": + header('Content-type: application/json'); + $it = new RecursiveDirectoryIterator("../../"); + $returnArray = []; + foreach (new RecursiveIteratorIterator($it) as $file) { + // Strip document root from URI, so relative + $file = str_replace($_SERVER["DOCUMENT_ROOT"], "", $file->getRealPath()); + + if (!str_starts_with($file, "/cms/") && (str_ends_with($file, ".html") || str_ends_with($file, ".htm"))) + $returnArray[] = array("name" => $file, "url" => $file); + } + echo json_encode($returnArray); + break; + } \ No newline at end of file diff --git a/cms/css/editor.css b/cms/css/editor.css index d2a479c..c5f1922 100644 --- a/cms/css/editor.css +++ b/cms/css/editor.css @@ -100,3 +100,72 @@ body { position: relative; top: 1px; } + + +/** +New Page Modal + */ + +#newPageDialog { + display: none; +} + +.newpage-content { + padding: 20px; + background-color: #fefefe; + border: 1px solid #888; + width: 400px; + margin: auto; +} + +.newpage-content form { + display: flex; + flex-direction: column; +} + +.newpage-content label { + margin-bottom: 10px; +} + +.newpage-content input[type="text"] { + margin-bottom: 20px; + padding: 5px; +} + +#newPageForm label { + display: block; +} + +/** +File List Modal + */ + +#fileListDialog { + display: none; +} + +.filelist-content { + padding: 20px; + background-color: #fefefe; + border: 1px solid #888; + width: 400px; + margin: auto; +} + +#fileList { + list-style-type: none; + padding: 0; +} + +#fileList li { + padding: 10px; + cursor: pointer; + background-color: #f0f0f0; + margin-bottom: 5px; +} + +#fileList li:hover { + background-color: #e0e0e0; +} + + diff --git a/cms/index.php b/cms/index.php index 9c71951..e37fc7c 100644 --- a/cms/index.php +++ b/cms/index.php @@ -8,11 +8,15 @@ require_once "init.php";