From: Michael Gapczynski Date: Sat, 19 May 2012 02:01:47 +0000 (-0400) Subject: Fix versioning of shared files X-Git-Tag: v4.0.0~7 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=89f5701d1a007d12e7962f3d1a8d1e2a50c02029;p=nextcloud-server.git Fix versioning of shared files --- diff --git a/apps/files_versions/versions.php b/apps/files_versions/versions.php index 6c2e1042474..eda139b622f 100644 --- a/apps/files_versions/versions.php +++ b/apps/files_versions/versions.php @@ -69,8 +69,15 @@ class Storage { */ public static function store($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); - $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/files'; + if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + $pos = strpos($source, '/files', 1); + $uid = substr($source, 1, $pos - 1); + $filename = substr($source, $pos + 6); + } else { + $uid = \OCP\User::getUser(); + } + $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); + $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/files'; Storage::init(); // check if filename is a directory @@ -94,20 +101,21 @@ class Storage { } - // check mininterval - $matches=glob($versionsfoldername.$filename.'.v*'); - sort($matches); - $parts=explode('.v',end($matches)); - if((end($parts)+Storage::DEFAULTMININTERVAL)>time()){ - return false; + // check mininterval if this isn't a shared file (all shared files should be versioned despite mininterval) + if (!isset($source)) { + $matches=glob($versionsfoldername.$filename.'.v*'); + sort($matches); + $parts=explode('.v',end($matches)); + if((end($parts)+Storage::DEFAULTMININTERVAL)>time()){ + return false; + } } - + // create all parent folders $info=pathinfo($filename); @mkdir($versionsfoldername.$info['dirname'],0700,true); - // store a new version of a file copy($filesfoldername.$filename,$versionsfoldername.$filename.'.v'.time()); @@ -123,10 +131,16 @@ class Storage { public static function rollback($filename,$revision) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - - $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); + if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + $pos = strpos($source, '/files', 1); + $uid = substr($source, 1, $pos - 1); + $filename = substr($source, $pos + 6); + } else { + $uid = \OCP\User::getUser(); + } + $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'.$uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); - $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/files'; + $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/files'; // rollback if ( @copy($versionsfoldername.$filename.'.v'.$revision,$filesfoldername.$filename) ) { @@ -148,7 +162,14 @@ class Storage { */ public static function isversioned($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); + if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + $pos = strpos($source, '/files', 1); + $uid = substr($source, 1, $pos - 1); + $filename = substr($source, $pos + 6); + } else { + $uid = \OCP\User::getUser(); + } + $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); // check for old versions $matches=glob($versionsfoldername.$filename.'.v*'); @@ -169,7 +190,14 @@ class Storage { */ public static function getversions($filename,$count=0) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); + if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + $pos = strpos($source, '/files', 1); + $uid = substr($source, 1, $pos - 1); + $filename = substr($source, $pos + 6); + } else { + $uid = \OCP\User::getUser(); + } + $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); $versions=array(); // fetch for old versions @@ -200,8 +228,14 @@ class Storage { */ public static function expire($filename) { if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') { - - $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); + if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) { + $pos = strpos($source, '/files', 1); + $uid = substr($source, 1, $pos - 1); + $filename = substr($source, $pos + 6); + } else { + $uid = \OCP\User::getUser(); + } + $versionsfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER); // check for old versions $matches=glob($versionsfoldername.$filename.'.v*');