From ce3fcb72f2d5d154461a14183069bf87db1e5776 Mon Sep 17 00:00:00 2001 From: vincent-peugnet Date: Mon, 13 Apr 2020 19:29:56 +0200 Subject: first arrival of flash messages close #85 --- app/class/Controller.php | 1 + app/class/Controllerhome.php | 9 +++++++-- app/class/Controllermedia.php | 2 +- app/class/Model.php | 34 ++++++++++++++++++++++++++++++++++ app/class/Modelmedia.php | 36 ++++++++++++++++++++++++++++++------ app/view/templates/layout.php | 14 ++++++++++++++ assets/css/home.css | 22 ++++++++++++++++++++++ 7 files changed, 109 insertions(+), 9 deletions(-) diff --git a/app/class/Controller.php b/app/class/Controller.php index ab40a82..ccf31fa 100644 --- a/app/class/Controller.php +++ b/app/class/Controller.php @@ -49,6 +49,7 @@ class Controller $this->plates->registerFunction('upage', function (string $string, string $id) use ($router) { return $router->generate($string, ['page' => $id]); }); + $this->plates->addData(['flashmessages' => Model::getflashmessages()]); } public function showtemplate($template, $params) diff --git a/app/class/Controllerhome.php b/app/class/Controllerhome.php index 52e92c7..dae7030 100644 --- a/app/class/Controllerhome.php +++ b/app/class/Controllerhome.php @@ -150,6 +150,7 @@ class Controllerhome extends Controllerpage $this->renderpage($page); $this->pagemanager->update($page); } + Model::sendflashmessage('All pages have been rendered', 'success'); } $this->routedirect('home'); } @@ -233,11 +234,15 @@ class Controllerhome extends Controllerpage { $pagelist = $_POST['pagesid'] ?? []; $pagelist = $this->pagemanager->pagelistbyid($pagelist); + $count = 0; foreach ($pagelist as $page) { $page = $this->renderpage($page); - $this->pagemanager->update($page); - } + if($this->pagemanager->update($page)) { + $count ++; + } + } + Model::sendflashmessage($count . ' pages have been rendered', 'success'); } public function multidelete() diff --git a/app/class/Controllermedia.php b/app/class/Controllermedia.php index 8423d18..1b7bdaa 100644 --- a/app/class/Controllermedia.php +++ b/app/class/Controllermedia.php @@ -103,7 +103,7 @@ class Controllermedia extends Controller $this->mediamanager->multimovefile($_POST['id'], $_POST['dir']); } } - $this->redirect($this->router->generate('media') . '?path=' . $_POST['path']); + $this->redirect($this->router->generate('media') . '?path=/' . $_POST['path']); } diff --git a/app/class/Model.php b/app/class/Model.php index 1d8d27a..e26a006 100644 --- a/app/class/Model.php +++ b/app/class/Model.php @@ -83,6 +83,13 @@ abstract class Model 'card' => 'card' ]; + const FLASH_MESSAGE_TYPES = [ + 'info' =>'info', + 'warning' => 'warning', + 'success' => 'success', + 'error' => 'error' + ]; + const COLUMNS = ['id', 'favicon', 'title', 'description', 'tag', 'date', 'datemodif', 'datecreation', 'secure', 'authors', 'linkto', 'visitcount', 'affcount', 'editcount']; const TEXT_ELEMENTS = ['header', 'nav', 'main', 'aside', 'footer']; @@ -180,4 +187,31 @@ abstract class Model return array_unique(array_values(self::MEDIA_EXT)); } + public static function getflashmessages() + { + if (!empty($_SESSION['user' . Config::basepath()]['flashmessages'])) { + $flashmessage = $_SESSION['user' . Config::basepath()]['flashmessages']; + $_SESSION['user' . Config::basepath()]['flashmessages'] = []; + if (is_array($flashmessage)) { + return $flashmessage; + } else { + return []; + } + return $flashmessage; + } + } + + /** + * Add a message to flash message list + * + * @param string $content The message content + * @param string $type Message Type, can be `info|warning|success` + */ + public static function sendflashmessage(string $content, string $type = 'info') + { + if (!key_exists($type, self::FLASH_MESSAGE_TYPES)) { + $type = 'info'; + } + $_SESSION['user' . Config::basepath()]['flashmessages'][] = ['content' => $content, 'type' => $type]; + } } diff --git a/app/class/Modelmedia.php b/app/class/Modelmedia.php index 079a5f7..a7ade6c 100644 --- a/app/class/Modelmedia.php +++ b/app/class/Modelmedia.php @@ -224,18 +224,22 @@ class Modelmedia extends Model if ($target[strlen($target) - 1] != DIRECTORY_SEPARATOR) $target .= DIRECTORY_SEPARATOR; $count = 0; + $successcount = 0; foreach ($_FILES[$index]['name'] as $filename) { $fileinfo = pathinfo($filename); $extension = idclean($fileinfo['extension']); $id = idclean($fileinfo['filename']); $tmp = $_FILES['file']['tmp_name'][$count]; - $count = $count + 1; + $count ++; $temp = $target . $id . '.' . $extension; - move_uploaded_file($tmp, $temp); + if(move_uploaded_file($tmp, $temp)) { + $successcount ++; + } $temp = ''; $tmp = ''; } + Model::sendflashmessage($successcount . ' / ' . $count . ' files have been uploaded', 'success'); } public function adddir($dir, $name) @@ -284,7 +288,7 @@ class Modelmedia extends Model */ public function deletefile(string $filedir) { - if(is_file($filedir)) { + if(is_file($filedir) && is_writable(dirname($filedir))) { return unlink($filedir); } else { return false; @@ -293,14 +297,27 @@ class Modelmedia extends Model public function multifiledelete(array $filelist) { + $success = []; foreach ($filelist as $filedir ) { if(is_string($filedir)) { - $this->deletefile($filedir); + $success[] = $this->deletefile($filedir); } } + Model::sendflashmessage(array_count_values($success) . ' / ' . count($filelist) . ' files have been deleted', 'success'); + if(in_array(false, $success)) { + return false; + } else { + return true; + } } - public function movefile(string $filedir, string $dir) + /** + * @param string $filedir current file path + * @param string $dir New directory to move file to + * + * @return bool True in case of success, false if the file does not exist or if `rename()` fail + */ + public function movefile(string $filedir, string $dir) : bool { if(substr($dir, -1) !== '/') { $dir .= '/'; @@ -313,7 +330,13 @@ class Modelmedia extends Model } } - public function multimovefile(array $filedirlist, string $dir) + /** + * @param array $filedirlist Ordered array of file list + * @param string $dir New directory to move file to + * + * @return bool False if any of moves failed, otherwise true + */ + public function multimovefile(array $filedirlist, string $dir) : bool { $success = []; foreach ($filedirlist as $filedir ) { @@ -321,6 +344,7 @@ class Modelmedia extends Model $success[] = $this->movefile($filedir, $dir); } } + Model::sendflashmessage(count($success) . ' / ' . count($filedirlist) . ' files have been moved', 'success'); if(in_array(false, $success)) { return false; } else { diff --git a/app/view/templates/layout.php b/app/view/templates/layout.php index b255738..c96c61f 100644 --- a/app/view/templates/layout.php +++ b/app/view/templates/layout.php @@ -36,6 +36,20 @@ + +
+ +
+ + + section('page') ?> diff --git a/assets/css/home.css b/assets/css/home.css index 2ac00a8..6f6700d 100644 --- a/assets/css/home.css +++ b/assets/css/home.css @@ -11,6 +11,27 @@ } +.flashmessage { + color: white; + border: solid white 1px; +} + +.flashmessage li.alert-info { + background-color: grey; +} + +.flashmessage li.alert-warning { + background-color: orange; +} + +.flashmessage li.alert-success { + background-color: green; +} + +.flashmessage li.alert-error { + background-color: red; +} + div#options, article#main { min-width: 180px; overflow-y: auto; @@ -652,3 +673,4 @@ footer { + -- cgit v1.2.3