aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2020-10-05 19:03:33 +0200
committerGravatar GitHub <noreply@github.com> 2020-10-05 19:03:33 +0200
commit76523693592a58c7b15c2860ad95133f551d86a5 (patch)
treea0fc3605396921dbbb225b2ec04559a014d6f156 /lib
parent2f88b267805c71e9859c41bb50c348b1566cfc06 (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.php56
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);
}