From cbe26ad6152c998c9a3290b0d321030c61dc7f1b Mon Sep 17 00:00:00 2001 From: Kate Arzamastseva Date: Sat, 4 Jun 2011 19:12:06 +0300 Subject: media version saving fix --- data/media_attic/_dummy | 0 data/media_meta/_dummy | 0 inc/media.php | 20 +++++++++++++------- inc/pageutils.php | 10 +++++----- 4 files changed, 18 insertions(+), 12 deletions(-) create mode 100644 data/media_attic/_dummy create mode 100644 data/media_meta/_dummy diff --git a/data/media_attic/_dummy b/data/media_attic/_dummy new file mode 100644 index 000000000..e69de29bb diff --git a/data/media_meta/_dummy b/data/media_meta/_dummy new file mode 100644 index 000000000..e69de29bb diff --git a/inc/media.php b/inc/media.php index ac65603f1..be55f8044 100644 --- a/inc/media.php +++ b/inc/media.php @@ -341,16 +341,18 @@ function _media_upload_action($data) { * * @author Andreas Gohr * @author Michael Klier + * @author Kate Arzamastseva */ function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'move_uploaded_file') { global $conf; global $lang; $old = @filemtime($fn); - // - if(!@file_exists(mediaFN($id, $old)) && @file_exists($fn)) { + $oldRev = getRevisions($id, -1, 1, 1024, true); // from changelog + $oldRev = (int)(empty($oldRev)?0:$oldRev[0]); + if(!@file_exists(mediaFN($id, $old)) && @file_exists($fn) && $old>=$oldRev) { // add old revision to the attic if missing - saveOldMediaRevision($id); + media_saveOldRevision($id); } // prepare directory @@ -376,17 +378,21 @@ function media_upload_finish($fn_tmp, $fn, $id, $imime, $overwrite, $move = 'mov } /** - * moves the current version to the media_attic and returns its - * revision date + * Moves the current version of media file to the media_attic + * directory + * + * @author Kate Arzamastseva + * @param string $id + * @return int - revision date */ -function saveOldMediaRevision($id, $move = 'copy'){ +function media_saveOldRevision($id){ global $conf; $oldf = mediaFN($id); if(!@file_exists($oldf)) return ''; $date = filemtime($oldf); $newf = mediaFN($id,$date); io_makeFileDir($newf); - if($move($oldf, $newf)) { + if(copy($oldf, $newf)) { // Set the correct permission here. // Always chmod media because they may be saved with different permissions than expected from the php umask. // (Should normally chmod to $conf['fperm'] only if $conf['fperm'] is set.) diff --git a/inc/pageutils.php b/inc/pageutils.php index 51567191e..37b15a498 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -295,8 +295,6 @@ function wikiLockFN($id) { /** * returns the full path to the meta file specified by ID and extension * - * The filename is URL encoded to protect Unicode chars - * * @author Steven Danz */ function metaFN($id,$ext){ @@ -310,7 +308,7 @@ function metaFN($id,$ext){ /** * returns the full path to the media's meta file specified by ID and extension * - * The filename is URL encoded to protect Unicode chars + * @author Kate Arzamastseva */ function mediaMetaFN($id,$ext){ global $conf; @@ -339,6 +337,7 @@ function metaFiles($id){ * The filename is URL encoded to protect Unicode chars * * @author Andreas Gohr + * @author Kate Arzamastseva */ function mediaFN($id, $rev=''){ global $conf; @@ -347,8 +346,9 @@ function mediaFN($id, $rev=''){ if(empty($rev)){ $fn = $conf['mediadir'].'/'.utf8_encodeFN($id); }else{ - list($name, $ext) = explode(".", $id); - $fn = $conf['mediaolddir'].'/'.utf8_encodeFN($name).'.'.$rev.'.'.utf8_encodeFN($ext); + $ext = mimetype($id); + $name = substr($id, 0, strrpos($id, '.')); + $fn = $conf['mediaolddir'].'/'.utf8_encodeFN($name).'.'.(int)$rev.'.'.utf8_encodeFN($ext[0]); } return $fn; } -- cgit v1.2.3