From bf3faaa05135abde216e65582264b924cce0829e Mon Sep 17 00:00:00 2001 From: Mafoo Date: Sat, 10 Jun 2017 05:15:18 +0100 Subject: [PATCH] Enhance - add message stash/pop (#2660) add new methods to messages class to let it take care of stash and pop of the messages update login.php to use new methods tweak html function to put the $_SESSION['message'] in the stack so there is only one code point to maintain for rendering --- login.php | 19 ++++----------- resources/classes/messages.php | 42 ++++++++++++++++++++++++++-------- 2 files changed, 37 insertions(+), 24 deletions(-) diff --git a/login.php b/login.php index 0858e084a9..2d83923943 100644 --- a/login.php +++ b/login.php @@ -30,17 +30,9 @@ ini_set("session.cookie_httponly", True); if (!isset($_SESSION)) { session_start(); } -//retain message - if (isset($_SESSION["message"])) { - $message_mood = $_SESSION["message_mood"]; - $message = $_SESSION["message"]; - } - else { - $message_mood = null; - $message = null; - $_SESSION["message"] = null; - $_SESSION["message_mood"] = null; - } +//retain messages + $messagse = new messages; + $messages->stash(); //destroy session session_unset(); @@ -69,10 +61,7 @@ require_once "resources/require.php"; //restore message - if ($message != '') { - $_SESSION["message_mood"] = $message_mood; - $_SESSION["message"] = $message; - } + $messages->pop(); //use custom login, if present, otherwise use default login if (file_exists($_SERVER["PROJECT_ROOT"]."/themes/".$_SESSION['domain']['template']['name']."/login.php")){ diff --git a/resources/classes/messages.php b/resources/classes/messages.php index 80c4313f47..a9b3aa4184 100644 --- a/resources/classes/messages.php +++ b/resources/classes/messages.php @@ -27,6 +27,8 @@ if (!class_exists('messages')) { class messages { + + private $messages; static function add($message, $mood = NULL, $delay = NULL) { $_SESSION["messages"][] = array(message => $message, mood => $mood, delay => $delay); @@ -36,15 +38,8 @@ if (!class_exists('messages')) { $html = "${spacer}//render the messages\n"; $spacer .="\t"; if (strlen($_SESSION['message']) > 0) { - $message_text = addslashes($_SESSION['message']); - $message_mood = $_SESSION['message_mood'] ?: 'default'; - $message_delay = $_SESSION['message_delay']; - - $html .= "${spacer}display_message('".str_replace(array("\r\n", "\n", "\r"),'\\n', $message_text)."', '".$message_mood."'"; - if ($message_delay != '') { - $html .= ", '".$message_delay."'"; - } - $html .= ");\n"; + add($_SESSION['message'], $_SESSION['message_mood'], $_SESSION['message_delay']); + unset($_SESSION['message'], $_SESSION['message_mood'], $_SESSION['message_delay']); } if(count($_SESSION['messages']) > 0 ){ foreach ($_SESSION['messages'] as $message) { @@ -65,6 +60,35 @@ if (!class_exists('messages')) { } return $html; } + + public function stash() { + if (strlen($_SESSION['message']) > 0) { + add($_SESSION['message'], $_SESSION['message_mood'], $_SESSION['message_delay']); + unset($_SESSION['message'], $_SESSION['message_mood'], $_SESSION['message_delay']); + } + if (is_array($this->messages)) { + if (is_array($_SESSION["messages"])) { + $this->messages = array_merge($this->messages, $_SESSION["messages"]); + } + } + else { + $this->messages = $_SESSION["messages"]; + } + unset($_SESSION['messages']); + } + + public function pop() { + if (is_array($_SESSION["messages"])) { + if (is_array($this->messages)) { + $_SESSION["messages"] = array_merge($_SESSION["messages"], $this->messages); + } + } + else { + $_SESSION["messages"] = $this->messages; + } + unset($this->messages); + } + } }