aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/class/Controller.php1
-rw-r--r--app/class/Controllerhome.php9
-rw-r--r--app/class/Controllermedia.php2
-rw-r--r--app/class/Model.php34
-rw-r--r--app/class/Modelmedia.php36
-rw-r--r--app/view/templates/layout.php14
-rw-r--r--assets/css/home.css22
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 @@
+<?php
+if (!empty($flashmessages) && is_array($flashmessages)) { ?>
+ <div class="flashmessage">
+ <ul>
+ <?php foreach ($flashmessages as $flashmessage ) { ?>
+ <li class="alert alert-<?= $flashmessage['type'] ?>">
+ <?= $flashmessage['content'] ?>
+ </li>
+ <?php } ?>
+ </ul>
+ </div>
+<?php } ?>
+
+
<?= $this->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 {
+