From b60ba3e1daebefb60625cb24c7406e295cf17017 Mon Sep 17 00:00:00 2001 From: Andy Dixon Date: Tue, 1 Oct 2024 20:35:16 +0100 Subject: [PATCH] Initial code for New Page templating system --- cms/controller/index.php | 29 ++++++++++++++++++ cms/index.php | 17 ++++++++++- cms/js/cms.js | 66 +++++++++++++++++++++++++++++++++++++++- 3 files changed, 110 insertions(+), 2 deletions(-) diff --git a/cms/controller/index.php b/cms/controller/index.php index 8bee8ac..7001960 100644 --- a/cms/controller/index.php +++ b/cms/controller/index.php @@ -11,4 +11,33 @@ switch ($_REQUEST["action"]) { die('Unable to save page'); } break; + + /** + * getTemplates AJAX call to get list of files + */ + 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)); + } + return 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']); + + 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)); + break; } \ No newline at end of file diff --git a/cms/index.php b/cms/index.php index 94357b3..9c71951 100644 --- a/cms/index.php +++ b/cms/index.php @@ -3,7 +3,7 @@ require_once "neoCMSCore.php"; require_once "init.php"; ?> - + NeoCMS @@ -58,6 +58,21 @@ require_once "init.php"; + +
+ +
+ diff --git a/cms/js/cms.js b/cms/js/cms.js index 151aa1c..855b1f6 100644 --- a/cms/js/cms.js +++ b/cms/js/cms.js @@ -51,6 +51,7 @@ $(document).ready(function () { }); }); + // Save changes made to a div, but not save to the file on the server $('#saveBtn').click(function () { // Get the data from TinyMCE var data = tinymce.get('editor').getContent(); @@ -69,13 +70,76 @@ $(document).ready(function () { } }); + // Handle Saving changes to the page $('#savePage').click(() => { $.post("./controller/", { action: "save", uri: $('#frameContainer').contents().get(0).location.pathname, content: new XMLSerializer().serializeToString($('#frameContainer').contents().get(0)) }, function (data) { - alert(data) + // alert(data) }); }); + + // Show dialog for page templates + $("#newPage").click(function() { + loadItems(); // Call the function to load items when the modal is opened + $("#newPageDialog").dialog({ + modal: true, + width: 500, + buttons: { + Close: function() { + $(this).dialog("close"); + } + } + }); + }); + + // Handle form submission + $("#newPageForm").submit(function(event) { + event.preventDefault(); // Prevent the default form submission + + let selectedItemId = $('input[name="item"]:checked').val(); + let filename = $("#filename").val(); + + $.ajax({ + url: "/controller/?action=newPage", + method: "POST", + data: { + template: selectedItemId, + filename: filename + }, + success: function(response) { + alert('Page created successfully, I think. TODO: Check JSON response'); + $("#newPageForm").dialog("close"); // Close the modal on success + }, + error: function() { + alert('Failed to create the new page.'); + } + }); + }); + + // Function to load the items via an AJAX GET request and populate the radio buttons for page templates + function loadItems() { + $.ajax({ + url: "/controller/?action=getTemplates", + method: "GET", + success: function(data) { + let radioList = $('#radioList'); + radioList.empty(); // Clear previous content + data.forEach(function(item, index) { + radioList.append(` + + `); + }); + }, + error: function() { + alert('Failed to load templates.'); + } + }); + } + }); \ No newline at end of file