From d186898bc9d253d2f0227785ece22080e2005280 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Fri, 15 Feb 2008 11:52:51 +0100
Subject: [PATCH] redirect to root namespace in mediamanager when namespace was
 deleted FS#1286

darcs-hash:20080215105251-7ad00-b7ac1bfc0e2d1eccf079f4ff2f0db8876896b79d.gz
---
 inc/io.php               | 9 ++++++++-
 inc/media.php            | 8 +++++++-
 lib/exe/mediamanager.php | 3 +++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/inc/io.php b/inc/io.php
index aaf71091f..405786cc2 100644
--- a/inc/io.php
+++ b/inc/io.php
@@ -21,6 +21,9 @@
  * $data[1]    ns_type: 'pages' or 'media' namespace tree.
  *
  * @todo use safemode hack
+ * @param string $id      - a pageid, the namespace of that id will be tried to deleted
+ * @param string $basadir - the config name of the type to delete (datadir or mediadir usally)
+ * @returns bool - true if at least one namespace was deleted
  * @author  Andreas Gohr <andi@splitbrain.org>
  * @author Ben Coburn <btcoburn@silicodon.net>
  */
@@ -29,6 +32,8 @@ function io_sweepNS($id,$basedir='datadir'){
   $types = array ('datadir'=>'pages', 'mediadir'=>'media');
   $ns_type = (isset($types[$basedir])?$types[$basedir]:false);
 
+  $delone = false;
+
   //scan all namespaces
   while(($id = getNS($id)) !== false){
     $dir = $conf[$basedir].'/'.utf8_encodeFN(str_replace(':','/',$id));
@@ -37,10 +42,12 @@ function io_sweepNS($id,$basedir='datadir'){
     if(@rmdir($dir)) {
       if ($ns_type!==false) {
         $data = array($id, $ns_type);
+        $delone = true; // we deleted at least one dir
         trigger_event('IO_NAMESPACE_DELETED', $data);
       }
-    } else { return; }
+    } else { return $delone; }
   }
+  return $delone;
 }
 
 /**
diff --git a/inc/media.php b/inc/media.php
index fc8e96d76..3622ea54e 100644
--- a/inc/media.php
+++ b/inc/media.php
@@ -165,7 +165,13 @@ function media_delete($id,$auth){
         $file = mediaFN($id);
         if(@unlink($file)){
             msg(str_replace('%s',noNS($id),$lang['deletesucc']),1);
-            io_sweepNS($id,'mediadir');
+            $del = io_sweepNS($id,'mediadir');
+            if($del){
+                // current namespace was removed. redirecting to root ns passing msg along
+                header('Location: '.DOKU_URL.'lib/exe/mediamanager.php?msg1='.
+                        rawurlencode(str_replace('%s',noNS($id),$lang['deletesucc'])));
+                exit;
+            }
             return true;
         }
         //something went wrong
diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php
index 9b0adcb14..7e71f800e 100644
--- a/lib/exe/mediamanager.php
+++ b/lib/exe/mediamanager.php
@@ -11,6 +11,9 @@
     require_once(DOKU_INC.'inc/auth.php');
     session_write_close();  //close session
 
+    // handle passed message
+    if($_REQUEST['msg1']) msg(hsc($_REQUEST['msg1']),1);
+
 
     // get namespace to display (either direct or from deletion order)
     if($_REQUEST['delete']){
-- 
GitLab