]> source.dussan.org Git - nextcloud-server.git/commitdiff
Fix versioning of shared files
authorMichael Gapczynski <GapczynskiM@gmail.com>
Sat, 19 May 2012 02:01:47 +0000 (22:01 -0400)
committerMichael Gapczynski <GapczynskiM@gmail.com>
Sat, 19 May 2012 02:07:48 +0000 (22:07 -0400)
apps/files_versions/versions.php

index 6c2e104247455de9f3263aa0de344e9fbed079bc..eda139b622f8a28b1c9cd34bc9cc8e4a91fad742 100644 (file)
@@ -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*');