aboutsummaryrefslogtreecommitdiff
path: root/app/class
diff options
context:
space:
mode:
authorvincent-peugnet <v.peugnet@free.fr>2020-02-06 18:07:53 +0100
committervincent-peugnet <v.peugnet@free.fr>2020-02-06 18:07:53 +0100
commit08a26d4d6fbd45cdc136b60d0fb30f53ac4fd2f7 (patch)
tree209ac84720836e39c6c96f131b5049e7ad6096b2 /app/class
parentde939de88e1ed166d827616e3d17a22fe549202a (diff)
parent9d3f97870810e739041eccad234d47308747cb1f (diff)
downloadwcms-08a26d4d6fbd45cdc136b60d0fb30f53ac4fd2f7.tar.gz
wcms-08a26d4d6fbd45cdc136b60d0fb30f53ac4fd2f7.zip
Merge branch 'better-admin'
Diffstat (limited to 'app/class')
-rw-r--r--app/class/Config.php13
-rw-r--r--app/class/Controlleradmin.php65
-rw-r--r--app/class/Controllerhome.php9
-rw-r--r--app/class/Controllerpage.php35
-rw-r--r--app/class/Model.php1
-rw-r--r--app/class/Modeladmin.php48
-rw-r--r--app/class/Modeldb.php4
-rw-r--r--app/class/Modelmassedit.php0
-rw-r--r--app/class/Modelmedia.php41
-rw-r--r--app/class/Modelpage.php2
-rw-r--r--app/class/Modelrender.php8
-rw-r--r--app/class/Page.php56
-rw-r--r--app/class/Routes.php3
13 files changed, 180 insertions, 105 deletions
diff --git a/app/class/Config.php b/app/class/Config.php
index 555129b..6ddb3e4 100644
--- a/app/class/Config.php
+++ b/app/class/Config.php
@@ -23,6 +23,7 @@ abstract class Config
protected static $defaultbody = '%HEADER%'. PHP_EOL .PHP_EOL . '%NAV%'. PHP_EOL .PHP_EOL . '%ASIDE%'. PHP_EOL .PHP_EOL . '%MAIN%'. PHP_EOL .PHP_EOL . '%FOOTER%';
protected static $defaultpage = '';
protected static $defaultfavicon = '';
+ protected static $defaultthumbnail = '';
protected static $analytics = '';
protected static $externallinkblank = true;
protected static $internallinkblank = false;
@@ -204,6 +205,11 @@ abstract class Config
return self::$defaultfavicon;
}
+ public static function defaultthumbnail()
+ {
+ return self::$defaultthumbnail;
+ }
+
public static function analytics()
{
return self::$analytics;
@@ -363,6 +369,13 @@ abstract class Config
}
}
+ public static function setdefaultthumbnail($defaultthumbnail)
+ {
+ if(is_string($defaultthumbnail)) {
+ self::$defaultthumbnail = $defaultthumbnail;
+ }
+ }
+
public static function setdefaultpage($defaultpage)
{
if(is_string($defaultpage)) {
diff --git a/app/class/Controlleradmin.php b/app/class/Controlleradmin.php
index 3935bff..835f158 100644
--- a/app/class/Controlleradmin.php
+++ b/app/class/Controlleradmin.php
@@ -7,30 +7,42 @@ class Controlleradmin extends Controller
/** @var Modelmedia $mediamanager */
protected $mediamanager;
+ /** @var Modeladmin */
+ protected $adminmanager;
+
+ public function __construct($router)
+ {
+ parent::__construct($router);
+
+ $this->adminmanager = new Modeladmin();
+ }
public function desktop()
{
if($this->user->isadmin()) {
- $pagelist = $this->pagemanager->list();
+ $datas['pagelist'] = $this->pagemanager->list();
$this->mediamanager = new Modelmedia();
- $faviconlist = $this->mediamanager->listfavicon();
- $interfacecsslist = $this->mediamanager->listinterfacecss();
- if(in_array(Config::defaultpage(), $pagelist)) {
- $defaultpageexist = true;
+ $datas['faviconlist'] = $this->mediamanager->listfavicon();
+ $datas['thumbnaillist'] = $this->mediamanager->listthumbnail();
+ $datas['interfacecsslist'] = $this->mediamanager->listinterfacecss();
+ if(in_array(Config::defaultpage(), $datas['pagelist'])) {
+ $datas['defaultpageexist'] = true;
} else {
- $defaultpageexist = true;
+ $datas['defaultpageexist'] = false;
}
$globalcssfile = Model::GLOBAL_DIR . 'global.css';
if(is_file($globalcssfile)) {
- $globalcss = file_get_contents($globalcssfile);
+ $datas['globalcss'] = file_get_contents($globalcssfile);
} else {
- $globalcss = "";
+ $datas['globalcss'] = "";
}
- $admin = ['pagelist' => $pagelist, 'defaultpageexist' => $defaultpageexist, 'globalcss' => $globalcss, 'faviconlist' => $faviconlist, 'interfacecsslist' => $interfacecsslist];
- $this->showtemplate('admin', $admin);
+ $datas['pagesdblist'] = $this->adminmanager->pagesdblist();
+ $datas['pagesdbtree'] = $this->mediamanager->listdir(Model::PAGES_DIR);
+
+ $this->showtemplate('admin', $datas);
} else {
$this->routedirect('home');
}
@@ -38,8 +50,8 @@ class Controlleradmin extends Controller
public function update()
{
- $this->globaldircheck();
-
+ MODEL::dircheck(MODEL::GLOBAL_DIR);
+
$globalcss = file_put_contents(Model::GLOBAL_DIR . 'global.css', $_POST['globalcss']);
Config::hydrate($_POST);
@@ -50,16 +62,25 @@ class Controlleradmin extends Controller
}
}
-
- public function globaldircheck()
- {
- if(!is_dir(Model::GLOBAL_DIR)) {
- return mkdir(Model::GLOBAL_DIR);
- } else {
- return true;
- }
- }
-
+ public function database()
+ {
+ if(!empty($_POST['action'])) {
+ switch ($_POST['action']) {
+ case 'duplicate':
+ if(!empty($_POST['dbsrc']) && !empty($_POST['dbtarget'])) {
+ $this->adminmanager->copydb($_POST['dbsrc'], $_POST['dbtarget']);
+ }
+ break;
+ case 'select':
+ if(!empty($_POST['pagetable'])) {
+ Config::hydrate($_POST);
+ Config::savejson();
+ }
+ break;
+ }
+ }
+ $this->routedirect('admin');
+ }
}
diff --git a/app/class/Controllerhome.php b/app/class/Controllerhome.php
index d102930..c7d1792 100644
--- a/app/class/Controllerhome.php
+++ b/app/class/Controllerhome.php
@@ -36,7 +36,7 @@ class Controllerhome extends Controllerpage
$columns = $this->modelhome->setcolumns($this->user->columns());
- $vars = ['user' => $this->user, 'table2' => $table2, 'opt' => $this->opt, 'columns' => $columns, 'faviconlist' => $this->mediamanager->listfavicon(), 'editorlist' => $this->usermanager->getlisterbylevel(2, '>='), 'colors' => $colors];
+ $vars = ['user' => $this->user, 'table2' => $table2, 'opt' => $this->opt, 'columns' => $columns, 'faviconlist' => $this->mediamanager->listfavicon(), 'thumbnaillist' => $this->mediamanager->listthumbnail(), 'editorlist' => $this->usermanager->getlisterbylevel(2, '>='), 'colors' => $colors];
$vars['footer'] = ['version' => getversion(), 'total' => count($table), 'database' => Config::pagetable()];
if (isset($_POST['query']) && $this->user->iseditor()) {
@@ -166,6 +166,13 @@ class Controllerhome extends Controllerpage
$datas = array_filter($datas, function ($var) {
return $var !== "";
});
+ $datas = array_map(function ($value) {
+ if($value === "!") {
+ return "";
+ } else {
+ return $value;
+ }
+ }, $datas);
$reset = $_POST['reset'] ?? [];
$addtag = $_POST['addtag'] ?? '';
$addauthor = $_POST['addauthor'] ?? '';
diff --git a/app/class/Controllerpage.php b/app/class/Controllerpage.php
index 75ac6cf..b214eea 100644
--- a/app/class/Controllerpage.php
+++ b/app/class/Controllerpage.php
@@ -174,28 +174,28 @@ class Controllerpage extends Controller
if ($this->importpage() && $this->canedit()) {
- $tablist = ['main' => $this->page->main(), 'css' => $this->page->css(), 'header' => $this->page->header(), 'nav' => $this->page->nav(), 'aside' => $this->page->aside(), 'footer' => $this->page->footer(), 'body' => $this->page->body(), 'javascript' => $this->page->javascript()];
+ $datas['tablist'] = ['main' => $this->page->main(), 'css' => $this->page->css(), 'header' => $this->page->header(), 'nav' => $this->page->nav(), 'aside' => $this->page->aside(), 'footer' => $this->page->footer(), 'body' => $this->page->body(), 'javascript' => $this->page->javascript()];
- $faviconlist = $this->mediamanager->listfavicon();
- $idlist = $this->pagemanager->list();
+ $datas['faviconlist'] = $this->mediamanager->listfavicon();
+ $datas['thumbnaillist'] = $this->mediamanager->listthumbnail();
+ $datas['pagelist'] = $this->pagemanager->list();
$pagelist = $this->pagemanager->getlister();
- $tagpagelist = $this->pagemanager->tagpagelist($this->page->tag('array'), $pagelist);
- $lasteditedpagelist = $this->pagemanager->lasteditedpagelist(5, $pagelist);
+ $datas['tagpagelist'] = $this->pagemanager->tagpagelist($this->page->tag('array'), $pagelist);
+ $datas['lasteditedpagelist'] = $this->pagemanager->lasteditedpagelist(5, $pagelist);
- $editorlist = $this->usermanager->getlisterbylevel(2, '>=');
+ $datas['editorlist'] = $this->usermanager->getlisterbylevel(2, '>=');
if (isset($_SESSION['workspace'])) {
- $showleftpanel = $_SESSION['workspace']['showleftpanel'];
- $showrightpanel = $_SESSION['workspace']['showrightpanel'];
+ $datas['showleftpanel'] = $_SESSION['workspace']['showleftpanel'];
+ $datas['showrightpanel'] = $_SESSION['workspace']['showrightpanel'];
} else {
- $showleftpanel = false;
- $showrightpanel = false;
+ $datas['showleftpanel'] = false;
+ $datas['showrightpanel'] = false;
}
- $fonts = [];
-
- $this->showtemplate('edit', ['page' => $this->page, 'pageexist' => true, 'tablist' => $tablist, 'pagelist' => $idlist, 'showleftpanel' => $showleftpanel, 'showrightpanel' => $showrightpanel, 'fonts' => $fonts, 'tagpagelist' => $tagpagelist, 'lasteditedpagelist' => $lasteditedpagelist, 'faviconlist' => $faviconlist, 'editorlist' => $editorlist, 'user' => $this->user]);
+ $datas = array_merge($datas, ['page' => $this->page, 'pageexist' => true, 'user' => $this->user]);
+ $this->showtemplate('edit', $datas);
} else {
$this->routedirect('pageread/', ['page' => $this->page->id()]);
}
@@ -255,7 +255,7 @@ class Controllerpage extends Controller
{
if($this->user->isadmin()) {
- $file = Model::DATABASE_DIR . Config::pagetable() . DIRECTORY_SEPARATOR . $id . '.json';
+ $file = Model::PAGES_DIR . Config::pagetable() . DIRECTORY_SEPARATOR . $id . '.json';
if (file_exists($file)) {
header('Content-Description: File Transfer');
@@ -337,13 +337,6 @@ class Controllerpage extends Controller
$this->page->addauthor($this->user->id());
$this->page->removeeditby($this->user->id());
- // Add thumbnail image file under 1Mo
- If(isset($_FILES)) {
- $this->mediamanager->dircheck(Model::THUMBNAIL_DIR);
- $this->mediamanager->simpleupload('thumbnail', Model::THUMBNAIL_DIR . $this->page->id(), 1024*1024, ['jpg', 'jpeg', 'JPG', 'JPEG'], true);
- }
-
-
$this->pagemanager->update($this->page);
$this->routedirect('pageedit', ['page' => $this->page->id()]);
diff --git a/app/class/Model.php b/app/class/Model.php
index 9c0d500..67f50c9 100644
--- a/app/class/Model.php
+++ b/app/class/Model.php
@@ -19,6 +19,7 @@ abstract class Model
const HTML_RENDER_DIR = 'render' . DIRECTORY_SEPARATOR;
const GLOBAL_DIR = 'assets'. DIRECTORY_SEPARATOR . 'global' . DIRECTORY_SEPARATOR;
const DATABASE_DIR = '.' . DIRECTORY_SEPARATOR . 'database' . DIRECTORY_SEPARATOR;
+ const PAGES_DIR = self::DATABASE_DIR . 'pages' . DIRECTORY_SEPARATOR;
const MEDIA_EXT = [
'jpg' => 'image',
diff --git a/app/class/Modeladmin.php b/app/class/Modeladmin.php
new file mode 100644
index 0000000..54c4f0c
--- /dev/null
+++ b/app/class/Modeladmin.php
@@ -0,0 +1,48 @@
+<?php
+
+namespace Wcms;
+
+class Modeladmin extends Model
+{
+
+
+ /**
+ * List all availalble pages databases
+ *
+ * @return array
+ */
+ public function pagesdblist() : array
+ {
+ $dblist = glob(self::PAGES_DIR . '*', GLOB_ONLYDIR);
+ $dblist = array_map('basename', $dblist);
+
+ return $dblist;
+ }
+
+ /**
+ * Duplicate actual page database using new name
+ *
+ * @param string $name of the new database
+ */
+ public function duplicate(string $name)
+ {
+ $this->copydb(Config::pagetable(), $name);
+ }
+
+ /**
+ * Copy database folder to a new folder if it doeas not already exsit
+ *
+ * @param string $db name of source page database to copy
+ * @param string $name of the destination database
+ */
+ public function copydb(string $db, string $name)
+ {
+ $dbdir = self::PAGES_DIR . $db;
+ $newdbdir = self::PAGES_DIR . idclean($name);
+ if(is_dir($dbdir) && !is_dir($newdbdir)) {
+ recurse_copy($dbdir, $newdbdir);
+ }
+ }
+}
+
+?> \ No newline at end of file
diff --git a/app/class/Modeldb.php b/app/class/Modeldb.php
index 32e12cb..92f0d22 100644
--- a/app/class/Modeldb.php
+++ b/app/class/Modeldb.php
@@ -20,9 +20,9 @@ class Modeldb extends Model
}
- public function dbinit()
+ public function dbinit($dir = Model::DATABASE_DIR)
{
- $this->database = new Flywheel\Config(Model::DATABASE_DIR, [
+ $this->database = new Flywheel\Config($dir , [
'query_class' => Query::class,
'formatter' => new JSON,
]);
diff --git a/app/class/Modelmassedit.php b/app/class/Modelmassedit.php
deleted file mode 100644
index e69de29..0000000
--- a/app/class/Modelmassedit.php
+++ /dev/null
diff --git a/app/class/Modelmedia.php b/app/class/Modelmedia.php
index 61a2286..567e659 100644
--- a/app/class/Modelmedia.php
+++ b/app/class/Modelmedia.php
@@ -111,30 +111,41 @@ class Modelmedia extends Model
public function listfavicon()
{
- $extensions = ['ico', 'png', 'jpg', 'jpeg'];
- $faviconlist = [];
- foreach ($extensions as $extension ) {
- $glob = Model::FAVICON_DIR . '*.' . $extension;
- $faviconlist = array_merge($faviconlist, glob($glob));
- }
- $faviconlist = array_map(function ($input){
- return basename($input);
- }, $faviconlist);
+ $faviconlist = $this->globlist(self::FAVICON_DIR, ['ico', 'png', 'jpg', 'jpeg', 'gif']);
+ return $faviconlist;
+ }
+
+ public function listthumbnail()
+ {
+ $faviconlist = $this->globlist(self::THUMBNAIL_DIR, ['ico', 'png', 'jpg', 'jpeg', 'gif']);
return $faviconlist;
}
public function listinterfacecss()
{
- $glob = Model::CSS_DIR . '*.css';
- $listinterfacecss = glob($glob);
- $listinterfacecss = array_map(function ($input) {
- return basename($input);
- }, $listinterfacecss);
- $listinterfacecss = array_diff($listinterfacecss, ['edit.css', 'home.css']);
+ $listinterfacecss = $this->globlist(self::CSS_DIR, ['css']);
+ $listinterfacecss = array_diff($listinterfacecss, ['edit.css', 'home.css', 'tagcolors.css']);
return $listinterfacecss;
}
+ public function globlist (string $dir = '', array $extensions = []) : array
+ {
+ $list = [];
+ if(empty($extensions)) {
+ $glob = $dir . '*.';
+ } else {
+ foreach ($extensions as $extension ) {
+ $glob = $dir . '*.' . $extension;
+ $list = array_merge($list, glob($glob));
+ }
+ }
+ $list = array_map(function ($input){
+ return basename($input);
+ }, $list);
+ return $list;
+ }
+
/**
* Generate an reccursive array where each folder is a array and containing a filecount in each folder
diff --git a/app/class/Modelpage.php b/app/class/Modelpage.php
index 1cc6b27..7a0facc 100644
--- a/app/class/Modelpage.php
+++ b/app/class/Modelpage.php
@@ -17,7 +17,7 @@ class Modelpage extends Modeldb
public function __construct()
{
- parent::__construct();
+ $this->dbinit(Model::PAGES_DIR);
$this->storeinit(Config::pagetable());
if(!$this->dircheck(Model::HTML_RENDER_DIR)) {
throw new Exception("Media error : Cant create /render folder");
diff --git a/app/class/Modelrender.php b/app/class/Modelrender.php
index 5a86d0b..b544d21 100644
--- a/app/class/Modelrender.php
+++ b/app/class/Modelrender.php
@@ -8,7 +8,7 @@ use Michelf\MarkdownExtra;
class Modelrender extends Modelpage
{
protected $router;
- /** @var page2 */
+ /** @var Page */
protected $page;
protected $pagelist;
protected $linkfrom = [];
@@ -249,8 +249,10 @@ class Modelrender extends Modelpage
$head .= '<meta property="og:title" content="' . $this->page->title() . '">' . PHP_EOL;
$head .= '<meta property="og:description" content="' . $this->page->description() . '">' . PHP_EOL;
- if($this->page->thumbnailexist()) {
- $head .= '<meta property="og:image" content="' . Config::domain() . self::thumbnailpath() . $this->page->id() . '.jpg">' . PHP_EOL;
+ if(!empty($this->page->thumbnail())) {
+ $head .= '<meta property="og:image" content="' . Config::domain() . self::thumbnailpath() . $this->page->thumbnail() . '">' . PHP_EOL;
+ } elseif(!empty(Config::defaultthumbnail())) {
+ $head .= '<meta property="og:image" content="' . Config::domain() . self::thumbnailpath() . Config::defaultthumbnail() . '">' . PHP_EOL;
}
$head .= '<meta property="og:url" content="' . Config::url() . $this->page->id() . '/">' . PHP_EOL;
diff --git a/app/class/Page.php b/app/class/Page.php
index 4d1a789..e4692e3 100644
--- a/app/class/Page.php
+++ b/app/class/Page.php
@@ -17,7 +17,6 @@ class Page extends Dbitem
protected $datemodif;
protected $daterender;
protected $css;
- protected $quickcss;
protected $javascript;
protected $body;
protected $header;
@@ -36,6 +35,7 @@ class Page extends Dbitem
protected $templatejavascript;
protected $templateoptions;
protected $favicon;
+ protected $thumbnail;
protected $authors;
protected $invites;
protected $readers;
@@ -76,7 +76,6 @@ class Page extends Dbitem
$this->setdatemodif($now);
$this->setdaterender($now);
$this->setcss('');
- $this->setquickcss([]);
$this->setjavascript('');
$this->setbody('');
$this->setheader('');
@@ -93,8 +92,9 @@ class Page extends Dbitem
$this->settemplatebody('');
$this->settemplatecss('');
$this->settemplatejavascript('');
- $this->settemplateoptions(['externalcss', 'externaljavascript', 'favicon', 'reccursivecss', 'quickcss']);
+ $this->settemplateoptions(['externalcss', 'externaljavascript', 'favicon', 'thumbnail', 'reccursivecss']);
$this->setfavicon('');
+ $this->setthumbnail('');
$this->setauthors([]);
$this->setinvites([]);
$this->setreaders([]);
@@ -114,22 +114,6 @@ class Page extends Dbitem
return ['pagevarlist' => $classvarlist];
}
- /**
- * Check if page have a thumbnail
- * @return bool true if the page have a thumbnail otherwise return false.
- */
- public function thumbnailexist() : bool
- {
- $thumbnaillink = Model::THUMBNAIL_DIR . $this->id . '.jpg';
-
- $test = file_exists($thumbnaillink);
-
- $exist = file_exists(Model::THUMBNAIL_DIR . $this->id . '.jpg');
-
- return $exist;
- }
-
-
// _____________________________________________________ G E T ____________________________________________________
public function id($type = 'string')
@@ -192,15 +176,6 @@ class Page extends Dbitem
return $this->css;
}
- public function quickcss($type = 'array')
- {
- if ($type == 'json') {
- return json_encode($this->quickcss);
- } elseif ($type == 'array') {
- return $this->quickcss;
- }
- }
-
public function javascript($type = 'string')
{
return $this->javascript;
@@ -329,9 +304,9 @@ class Page extends Dbitem
$template['javascript'] = $this->templatejavascript;
$template['cssreccursive'] = $this->checkoption('reccursive');
- $template['cssquickcss'] = $this->checkoption('quickcss');
$template['externalcss'] = $this->checkoption('externalcss');
$template['cssfavicon'] = $this->checkoption('favicon');
+ $template['cssthumbnail'] = $this->checkoption('thumbnail');
$template['externaljavascript'] = $this->checkoption('externaljavascript');
@@ -345,7 +320,7 @@ class Page extends Dbitem
function checkoption($option)
{
- if (in_array('reccursive', $this->templateoptions)) {
+ if (in_array($option, $this->templateoptions)) {
return true;
} else {
return false;
@@ -357,6 +332,11 @@ class Page extends Dbitem
return $this->favicon;
}
+ public function thumbnail($type = 'string')
+ {
+ return $this->thumbnail;
+ }
+
public function authors($type = 'array')
{
if($type == 'string') {
@@ -500,15 +480,6 @@ class Page extends Dbitem
}
- public function setquickcss($quickcss)
- {
- if (is_string($quickcss)) {
- $quickcss = json_decode($quickcss, true);
- }
- if (is_array($quickcss)) {
- $this->quickcss = $quickcss;
- }
- }
public function setjavascript($javascript)
{
@@ -665,6 +636,13 @@ class Page extends Dbitem
}
}
+ public function setthumbnail($thumbnail)
+ {
+ if (is_string($thumbnail)) {
+ $this->thumbnail = $thumbnail;
+ }
+ }
+
public function setauthors($authors)
{
if(is_array($authors)) {
diff --git a/app/class/Routes.php b/app/class/Routes.php
index c4571d9..277d478 100644
--- a/app/class/Routes.php
+++ b/app/class/Routes.php
@@ -36,8 +36,9 @@ class Routes
['GET', '/!font', 'Controllerfont#desktop', 'font'],
['GET', '/!font/render', 'Controllerfont#render', 'fontrender'],
['POST', '/!font/add', 'Controllerfont#add', 'fontadd'],
- ['POST', '/!admin', 'Controlleradmin#update', 'adminupdate'],
['GET', '/!admin', 'Controlleradmin#desktop', 'admin'],
+ ['POST', '/!admin', 'Controlleradmin#update', 'adminupdate'],
+ ['POST', '/!admin/database', 'Controlleradmin#database', 'admindatabase'],
['GET', '/!user', 'Controlleruser#desktop', 'user'],
['POST', '/!user/add', 'Controlleruser#add', 'useradd'],
['POST', '/!user/update', 'Controlleruser#update', 'userupdate'],