From 14a122de545fca1815592d0eed00cfc9245333b0 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Mon, 29 Sep 2008 22:38:31 +0200
Subject: [PATCH] keep undisplayed messages over redirects

When act_redirect is executed (post data was received and mode show is called)
all undisplayed messages (from calls to msg()) are saved in the session now.
These messages are then revived in inc/init.php. This makes sure no errors
that occured before the redirect are lost.

darcs-hash:20080929203831-7ad00-d0869fd3093f57c1ea64ccbaf05d7fd98f68c5e1.gz
---
 inc/actions.php | 15 +++++++++++++++
 inc/init.php    |  6 ++++++
 2 files changed, 21 insertions(+)

diff --git a/inc/actions.php b/inc/actions.php
index 2faf8bfca..41e81e267 100644
--- a/inc/actions.php
+++ b/inc/actions.php
@@ -312,9 +312,24 @@ function act_save($act){
   return 'show';
 }
 
+/**
+ * Do a redirect after receiving post data
+ *
+ * Tries to add the section id as hash mark after section editing
+ */
 function act_redirect($id,$preact){
   global $PRE;
   global $TEXT;
+  global $MSG;
+
+  //are there any undisplayed messages? keep them in session for display
+  //on the next page
+  if(isset($MSG) && count($MSG)){
+    //reopen session, store data and close session again
+    @session_start();
+    $_SESSION[DOKU_COOKIE]['msg'] = $MSG;
+    session_write_close();
+  }
 
   //get section name when coming from section edit
   if($PRE && preg_match('/^\s*==+([^=\n]+)/',$TEXT,$match)){
diff --git a/inc/init.php b/inc/init.php
index def5d7997..6c3f54e16 100644
--- a/inc/init.php
+++ b/inc/init.php
@@ -118,6 +118,12 @@
       session_set_cookie_params(0,DOKU_REL,'',($conf['securecookie'] && is_ssl()));
     }
     session_start();
+
+    // load left over messages
+    if(isset($_SESSION[DOKU_COOKIE]['msg'])){
+      $MSG = $_SESSION[DOKU_COOKIE]['msg'];
+      unset($_SESSION[DOKU_COOKIE]['msg']);
+    }
   }
 
   // kill magic quotes
-- 
GitLab