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