diff --git a/action.php b/action.php index 77e9602..650fafe 100644 --- a/action.php +++ b/action.php @@ -31,6 +31,44 @@ function returnToSender($msg, $arg = "") { } switch ($VARS['action']) { + case "newpage": + if (is_empty($VARS['siteid']) || !$database->has("sites", ["siteid" => $VARS['siteid']])) { + returnToSender("invalid_parameters"); + } + if (is_empty($VARS['title'])) { + returnToSender("invalid_parameters", $VARS['siteid']); + } + if (!is_empty($VARS['slug'])) { + $slug = strtolower($VARS['slug']); + $slug = preg_replace("/[^[:alnum:][:space:]]/u", '', $slug); + $slug = preg_replace("/[[:space:]]/u", '-', $slug); + if ($database->has("pages", ["AND" => ["siteid" => $VARS['siteid'], "slug" => $VARS['slug']]])) { + returnToSender("slug_taken", $VARS['siteid']); + } + } else { + // Auto-generate a slug + $slug = strtolower($VARS['title']); + $slug = preg_replace("/[^[:alnum:][:space:]]/u", '', $slug); + $slug = preg_replace("/[[:space:]]/u", '-', $slug); + if ($database->has("pages", ["AND" => ["siteid" => $VARS['siteid'], "slug" => $slug]])) { + $num = 2; + while ($database->has("pages", ["AND" => ["siteid" => $VARS['siteid'], "slug" => $slug . $num]])) { + $num++; + } + $slug = $slug . $num; + } + } + $template = "default"; + if (!is_empty($VARS['template'])) { + $template = preg_replace("/[^A-Za-z0-9]/", '', $VARS['template']); + } + $theme = $database->get("sites", "theme", ["siteid" => $VARS['siteid']]); + if (!file_exists(__DIR__ . "/public/themes/$theme/$template.php")) { + returnToSender("template_missing", $VARS['siteid']); + } + $database->insert("pages", ["slug" => $slug, "siteid" => $VARS['siteid'], "title" => $VARS['title'], "template" => $VARS['template']]); + returnToSender("page_added", $VARS['siteid']); + break; case "sitesettings": if (!is_empty($VARS['siteid'])) { if (!$database->has("sites", ["siteid" => $VARS['siteid']])) { @@ -62,7 +100,7 @@ switch ($VARS['action']) { $database->insert('sites', ["sitename" => $VARS['name'], "url" => $url, "theme" => $theme, "color" => $color]); $siteid = $database->id(); $template = (file_exists(__DIR__ . "/public/themes/$theme/home.php") ? "home" : "default"); - $database->insert('pages', ["slug" => "index", "siteid" => $siteid, "title" => "Home", "nav" => "Home", "navorder" => 1, "template" => "template"]); + $database->insert('pages', ["slug" => "index", "siteid" => $siteid, "title" => "Home", "nav" => "Home", "navorder" => 1, "template" => $template]); } else { $database->update('sites', ["sitename" => $VARS['name'], "url" => $url, "theme" => $theme, "color" => $color], ["siteid" => $VARS['siteid']]); } diff --git a/lang/en_us.php b/lang/en_us.php index bc26886..cec4a21 100644 --- a/lang/en_us.php +++ b/lang/en_us.php @@ -43,6 +43,7 @@ define("STRINGS", [ "single page" => "Single page", "multiple page" => "Multiple page", "templates" => "Templates", + "template" => "Template", "color styles" => "Color styles", "save" => "Save", "edit" => "Edit", @@ -56,5 +57,12 @@ define("STRINGS", [ "text" => "Text", "select page or enter url" => "Select a page or enter URL", "edit component" => "Edit component", - "default" => "Default" + "default" => "Default", + "page added" => "Page added.", + "chosen page id slug already taken" => "Chosen page ID (slug) already taken. Choose another.", + "template missing" => "Template missing from theme.", + "new page" => "New Page", + "title" => "Title", + "page id" => "Page ID (slug)", + "add page" => "Add page", ]); \ No newline at end of file diff --git a/lang/messages.php b/lang/messages.php index 0744629..a03be41 100644 --- a/lang/messages.php +++ b/lang/messages.php @@ -16,5 +16,17 @@ define("MESSAGES", [ "404_error" => [ "string" => "page not found", "type" => "info" - ] + ], + "page_added" => [ + "string" => "page added", + "type" => "success" + ], + "slug_taken" => [ + "string" => "chosen page id slug already taken", + "type" => "danger" + ], + "template_missing" => [ + "string" => "template missing", + "type" => "danger" + ], ]); diff --git a/pages/editor.php b/pages/editor.php index 6f7c58d..98cdba8 100644 --- a/pages/editor.php +++ b/pages/editor.php @@ -7,6 +7,11 @@ require_once __DIR__ . '/../required.php'; redirectifnotloggedin(); +if (!is_empty($VARS['arg'])) { + // Allow action.php to do a better redirect + $VARS['siteid'] = $VARS['arg']; +} + if (!is_empty($VARS['siteid'])) { if ($database->has('sites', ['siteid' => $VARS['siteid']])) { $sitedata = $database->get( @@ -41,6 +46,48 @@ if (!is_empty($VARS['siteid'])) { } ?> + +