Browse Source

Admin plugin : added create page option

Also introduced AntTools::repairFilePath
Belle Aerni 2 years ago
parent
commit
6d3f8a3da1

+ 5 - 5
src/AntCMS/AntCMS.php

@@ -70,7 +70,7 @@ class AntCMS
     {
         $page = strtolower($page);
         $pagePath = AntDir . "/Content/$page";
-        $pagePath = str_replace('//', '/', $pagePath);
+        $pagePath = AntTools::repairFilePath($pagePath);
 
         if (is_dir($pagePath)) {
             $pagePath = $pagePath . '/index.md';
@@ -103,15 +103,15 @@ class AntCMS
             $theme = 'Default';
         }
 
-        $templatePath = antThemePath . '/' . $theme . '/' . 'Templates';
-        $defaultTemplates = antThemePath . '/Default/Templates';
+        $templatePath = AntTools::repairFilePath(antThemePath . '/' . $theme . '/' . 'Templates');
+        $defaultTemplates = AntTools::repairFilePath(antThemePath . '/Default/Templates');
 
         $templates = AntTools::getFileList($templatePath, 'html');
 
         if (in_array($layout . '.html', $templates)) {
-            $template = file_get_contents($templatePath . '/' . $layout . '.html');
+            $template = file_get_contents(AntTools::repairFilePath($templatePath . '/' . $layout . '.html'));
         } else {
-            $template = file_get_contents($defaultTemplates . '/' . $layout . '.html');
+            $template = file_get_contents(AntTools::repairFilePath($defaultTemplates . '/' . $layout . '.html'));
         }
 
         if ($layout == 'default_layout' && !$template) {

+ 1 - 0
src/AntCMS/AntPages.php

@@ -16,6 +16,7 @@ class AntPages
         $pageList = array();
 
         foreach ($pages as $page) {
+            $page = AntTools::repairFilePath($page);
             $pageContent = file_get_contents($page);
             $pageHeader = AntCMS::getPageHeaders($pageContent);
             $pageFunctionalPath = str_replace(antContentPath, "", $page);

+ 1 - 1
src/AntCMS/AntPluginLoader.php

@@ -15,7 +15,7 @@ class AntPluginLoader
 
         foreach ($files as $file) {
             if (substr($file, -10) === "Plugin.php") {
-                include_once $file;
+                include_once AntTools::repairFilePath($file);
                 $className = pathinfo($file, PATHINFO_FILENAME);
                 $plugins[] = new $className();
             }

+ 12 - 1
src/AntCMS/AntTools.php

@@ -8,7 +8,7 @@ class AntTools
     {
         $dir = new \RecursiveDirectoryIterator($dir);
         $iterator = new \RecursiveIteratorIterator($dir);
-        $files=array();
+        $files = array();
         foreach ($iterator as $file) {
             if (pathinfo($file, PATHINFO_EXTENSION) == $extension || $extension == null) {
                 $files[] = ($returnPath) ? $file->getPathname() : $file->getFilename();
@@ -16,4 +16,15 @@ class AntTools
         }
         return $files;
     }
+
+    public static function repairFilePath($path)
+    {
+        $newPath = realpath($path);
+        if (!$newPath) {
+            $newPath = str_replace('//', '/', $path);
+            $newPath = str_replace('/', DIRECTORY_SEPARATOR, $newPath);
+        }
+
+        return $newPath;
+    }
 }

+ 28 - 4
src/Plugins/Admin/AdminPlugin.php

@@ -6,6 +6,7 @@ use AntCMS\AntConfig;
 use AntCMS\AntPages;
 use AntCMS\AntYaml;
 use AntCMS\AntAuth;
+use AntCMS\AntTools;
 
 class AdminPlugin extends AntPlugin
 {
@@ -112,9 +113,20 @@ class AdminPlugin extends AntPlugin
                 exit;
 
             case 'edit':
-                array_shift($route);
-                $pagePath = implode('/', $route);
-                $page = file_get_contents(antContentPath . '/' . $pagePath);
+                if (!isset($_POST['newpage'])) {
+                    array_shift($route);
+                    $pagePath = implode('/', $route);
+                    $page = file_get_contents(antContentPath . '/' . $pagePath);
+                } else {
+                    $pagePath = '/' . $_POST['newpage'];
+                    if (substr($pagePath, -3) !== ".md") {
+                        $pagePath .= '.md';
+                    }
+                    $page = "--AntCMS--\nTitle: New Page Title\nAuthor: Author\nDescription: Description of this page.\nKeywords: Keywords\n--AntCMS--\n";
+                }
+
+                $pagePath = AntTools::repairFilePath($pagePath);
+
                 $HTMLTemplate = str_replace('<!--AntCMS-ActionURL-->', '//' . $currentConfig['baseURL'] . "plugin/admin/pages/save/$pagePath", $HTMLTemplate);
                 $HTMLTemplate = str_replace('<!--AntCMS-TextAreaContent-->', htmlspecialchars($page), $HTMLTemplate);
                 break;
@@ -122,16 +134,28 @@ class AdminPlugin extends AntPlugin
             case 'save':
                 array_shift($route);
                 $pagePath = antContentPath . '/' . implode('/', $route);
-                if (!$_POST['textarea']) {
+                if (!isset($_POST['textarea'])) {
                     header('Location: //' . $currentConfig['baseURL'] . "plugin/admin/pages/");
                 }
                 file_put_contents($pagePath, $_POST['textarea']);
                 header('Location: //' . $currentConfig['baseURL'] . "plugin/admin/pages/");
                 exit;
 
+            case 'create':
+                $HTMLTemplate = "<h1>Page Management</h1>\n";
+                $HTMLTemplate .= "<p>Create new page</p>\n";
+                $HTMLTemplate .= '<form method="post" action="' . '//' . $currentConfig['baseURL'] . 'plugin/admin/pages/edit">';
+                $HTMLTemplate .=
+                    '<div style="display:flex; flex-direction: row; justify-content: center; align-items: center">
+                <label for="input">URL for new page: ' . $currentConfig['baseURL'] . ' </label> <input type="text" name="newpage" id="input">
+                <input type="submit" value="Submit">
+                </div></form>';
+                break;
+
             default:
                 $HTMLTemplate = "<h1>Page Management</h1>\n";
                 $HTMLTemplate .= "<a href='//" . $currentConfig['baseURL'] . "plugin/admin/pages/regenerate'>Click here to regenerate the page list</a><br>\n";
+                $HTMLTemplate .= "<a href='//" . $currentConfig['baseURL'] . "plugin/admin/pages/create'>Click here to create a new page</a><br>\n";
                 $HTMLTemplate .= "<ul>\n";
                 foreach ($pages as $page) {
                     $HTMLTemplate .= "<li>\n";