diff options
| author | 2020-10-05 19:03:33 +0200 | |
|---|---|---|
| committer | 2020-10-05 19:03:33 +0200 | |
| commit | 76523693592a58c7b15c2860ad95133f551d86a5 (patch) | |
| tree | a0fc3605396921dbbb225b2ec04559a014d6f156 /lib | |
| parent | 2f88b267805c71e9859c41bb50c348b1566cfc06 (diff) | |
Minz: Attach a notification to a request (#3208)
* Minz: Attach a notification to a request
Notifications should be attached to a request, not to a global session.
Fix
https://github.com/FreshRSS/FreshRSS/pull/3096#issuecomment-654891906
Prepare https://github.com/FreshRSS/FreshRSS/pull/3096
* Rename array
* Avoid string constants
Implement
https://github.com/FreshRSS/FreshRSS/pull/3208#issuecomment-703243863
* Improved logic
* Simplify storage
https://github.com/FreshRSS/FreshRSS/pull/3208#discussion_r499511213
* Fix notification bug in configuration/system
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Minz/Request.php | 56 |
1 files changed, 46 insertions, 10 deletions
diff --git a/lib/Minz/Request.php b/lib/Minz/Request.php index 39d172c7e..fc333244f 100644 --- a/lib/Minz/Request.php +++ b/lib/Minz/Request.php @@ -261,6 +261,49 @@ class Minz_Request { return (bool)$is_public; } + private static function requestId() { + if (empty($_GET['rid']) || !ctype_xdigit($_GET['rid'])) { + $_GET['rid'] = uniqid(); + } + return $_GET['rid']; + } + + private static function setNotification($type, $content) { + //TODO: Will need to ensure non-concurrency when landing https://github.com/FreshRSS/FreshRSS/pull/3096 + $requests = Minz_Session::param('requests', []); + $requests[self::requestId()] = [ + 'time' => time(), + 'notification' => [ 'type' => $type, 'content' => $content ], + ]; + Minz_Session::_param('requests', $requests); + } + + public static function setGoodNotification($content) { + self::setNotification('good', $content); + } + + public static function setBadNotification($content) { + self::setNotification('bad', $content); + } + + public static function getNotification() { + $notif = null; + //TODO: Will need to ensure non-concurrency when landing https://github.com/FreshRSS/FreshRSS/pull/3096 + $requests = Minz_Session::param('requests'); + if ($requests) { + //Delete abandonned notifications + $requests = array_filter($requests, function ($r) { return isset($r['time']) && $r['time'] > time() - 3600; }); + + $requestId = self::requestId(); + if (!empty($requests[$requestId]['notification'])) { + $notif = $requests[$requestId]['notification']; + unset($requests[$requestId]); + } + Minz_Session::_param('requests', $requests); + } + return $notif; + } + /** * Relance une requête * @param $url l'url vers laquelle est relancée la requête @@ -274,6 +317,7 @@ class Minz_Request { } $url = Minz_Url::checkUrl($url); + $url['params']['rid'] = self::requestId(); if ($redirect) { header('Location: ' . Minz_Url::display($url, 'php')); @@ -296,20 +340,12 @@ class Minz_Request { * @param $url url array to where we should be forwarded */ public static function good($msg, $url = array()) { - Minz_Session::_param('notification', array( - 'type' => 'good', - 'content' => $msg - )); - + Minz_Request::setGoodNotification($msg); Minz_Request::forward($url, true); } public static function bad($msg, $url = array()) { - Minz_Session::_param('notification', array( - 'type' => 'bad', - 'content' => $msg - )); - + Minz_Request::setBadNotification($msg); Minz_Request::forward($url, true); } |
