From 666cdec516655603e1a83ff884faa9c6e58b7ace Mon Sep 17 00:00:00 2001 From: Michael Klier Date: Fri, 16 Jan 2009 23:54:28 +0100 Subject: fix for FS#1534 darcs-hash:20090116225428-23886-2ce4d48a20f66265764c95b19ee505c6519446e2.gz --- inc/media.php | 88 ++++++++++++++++++++++++++---------------------- lib/exe/mediamanager.php | 14 +++++++- 2 files changed, 61 insertions(+), 41 deletions(-) diff --git a/inc/media.php b/inc/media.php index b9e7c6c08..1cff2494c 100644 --- a/inc/media.php +++ b/inc/media.php @@ -138,6 +138,26 @@ function media_metaform($id,$auth){ echo ''.NL; } +/** + * Conveinience function to check if a media file is still in use + * + * @author Michael Klier + */ +function media_inuse($id) { + global $conf; + $mediareferences = array(); + if($conf['refcheck']){ + require_once(DOKU_INC.'inc/fulltext.php'); + $mediareferences = ft_mediause($id,$conf['refshow']); + if(!count($mediareferences)) { + return true; + } else { + return $mediareferences; + } + } else { + return false; + } +} /** * Handles media file deletions @@ -153,46 +173,34 @@ function media_delete($id,$auth){ global $conf; global $lang; - // check for references if needed - $mediareferences = array(); - if($conf['refcheck']){ - require_once(DOKU_INC.'inc/fulltext.php'); - $mediareferences = ft_mediause($id,$conf['refshow']); - } - - if(!count($mediareferences)){ - $file = mediaFN($id); - - // trigger an event - MEDIA_DELETE_FILE - $data['name'] = basename($file); - $data['path'] = $file; - $data['size'] = (@file_exists($file)) ? filesize($file) : 0; - $evt = new Doku_Event('MEDIA_DELETE_FILE',$data); - if ($evt->advise_before()) { - if(@unlink($file)){ - msg(str_replace('%s',noNS($id),$lang['deletesucc']),1); - $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; - } - } - $evt->advise_after(); - unset($evt); - - //something went wrong - msg(str_replace('%s',$file,$lang['deletefail']),-1); - return false; - }elseif(!$conf['refshow']){ - msg(str_replace('%s',noNS($id),$lang['mediainuse']),0); - return false; - } - - return $mediareferences; + $file = mediaFN($id); + + // trigger an event - MEDIA_DELETE_FILE + $data['id'] = $id; + $data['name'] = basename($file); + $data['path'] = $file; + $data['size'] = (@file_exists($file)) ? filesize($file) : 0; + + $data['unl'] = false; + $data['del'] = false; + $evt = new Doku_Event('MEDIA_DELETE_FILE',$data); + if ($evt->advise_before()) { + $data['unl'] = @unlink($file); + if($data['unl']){ + $data['del'] = io_sweepNS($id,'mediadir'); + } + } + $evt->advise_after(); + unset($evt); + + if($data['unl'] && $data['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 $data['unl']; } /** diff --git a/lib/exe/mediamanager.php b/lib/exe/mediamanager.php index 97afae9b7..091e52050 100644 --- a/lib/exe/mediamanager.php +++ b/lib/exe/mediamanager.php @@ -77,7 +77,19 @@ // handle deletion if($DEL) { - $INUSE = media_delete($DEL,$AUTH); + $INUSE = media_inuse($DEL); + if(!$INUSE) { + if(media_delete($DEL,$AUTH)) { + msg(str_replace('%s',noNS($id),$lang['deletesucc']),1); + } else { + msg(str_replace('%s',noNS($DEL),$lang['deletefail']),-1); + } + } else { + if(!$conf['refshow']) { + unset($INUSE); + msg(str_replace('%s',noNS($DEL),$lang['mediainuse']),0); + } + } } // finished - start output -- cgit v1.2.3