]> source.dussan.org Git - nextcloud-server.git/commitdiff
use getStorage() to get versions location
authorBjoern Schiessle <schiessle@owncloud.com>
Mon, 9 Jul 2012 14:07:26 +0000 (16:07 +0200)
committerBjoern Schiessle <schiessle@owncloud.com>
Wed, 11 Jul 2012 09:06:29 +0000 (11:06 +0200)
update routine implemented
version number of files_versions increased

Conflicts:

apps/files_versions/lib/hooks.php

apps/files_versions/ajax/expireAll.php
apps/files_versions/appinfo/update.php [new file with mode: 0644]
apps/files_versions/appinfo/version
apps/files_versions/history.php
apps/files_versions/lib/hooks.php
apps/files_versions/lib/versions.php

index 238e3bdad4ddb31532a7f35ff1d487dfe20cf227..4f165be0ae966686811c76ce8ac6e8246d4706b3 100644 (file)
@@ -28,7 +28,7 @@
 OCP\JSON::checkLoggedIn();
 OCP\App::checkAppEnabled('files_versions');
 
-$versions = new OCA_Versions\Storage( new OC_FilesystemView('') );
+$versions = new OCA_Versions\Storage();
 
 if( $versions->expireAll() ){
        
diff --git a/apps/files_versions/appinfo/update.php b/apps/files_versions/appinfo/update.php
new file mode 100644 (file)
index 0000000..9569ca1
--- /dev/null
@@ -0,0 +1,16 @@
+<?php
+
+$installedVersion=OCP\Config::getAppValue('files_versions', 'installed_version');
+// move versions to new directory
+if (version_compare($installedVersion, '1.0.2', '<')) {
+       $users = \OCP\User::getUsers();
+       $datadir =  \OCP\Config::getSystemValue('datadirectory').'/';
+    foreach ($users as $user) {
+       $oldPath = $datadir.$user.'/versions';\r
+       $newPath = $datadir.$user.'/files_versions';
+       if(is_dir($oldPath)) {
+               rename($oldPath, $newPath);
+       }
+    }
+       
+}
index 7f207341d5d9bda5ae8acfa7a6e02cdf7cd9d983..e6d5cb833c634c4e2972335825d1100492e7c96b 100644 (file)
@@ -1 +1 @@
-1.0.1
\ No newline at end of file
+1.0.2
\ No newline at end of file
index b2ae8d232e4ca0533d56e09031ca9cf11d43edb0..a34c92ee42207566bd270a2ceae5a6c35384f5c2 100644 (file)
@@ -30,7 +30,7 @@ if ( isset( $_GET['path'] ) ) {
        $path = $_GET['path'];
        $path = strip_tags( $path );
        $tmpl->assign( 'path', $path );
-       $versions = new OCA_Versions\Storage( new OC_FilesystemView('') );
+       $versions = new OCA_Versions\Storage();
 
        // roll back to old version if button clicked
         if( isset( $_GET['revert'] ) ) {
index f93d4dabe2298809f88c385d49256f6cfacf01f8..bfc8fd3a378b6289c421edcfd372f027b871afc7 100644 (file)
@@ -30,41 +30,46 @@ class Hooks {
                }
        }
        
-       /**
-        * @brief Erase versions of deleted file
-        * @param array
-        *
-        * This function is connected to the delete signal of OC_Filesystem
-        * cleanup the versions directory if the actual file gets deleted
-        */
+
+       /**\r
+        * @brief Erase versions of deleted file\r
+        * @param array\r
+        *\r
+        * This function is connected to the delete signal of OC_Filesystem\r
+        * cleanup the versions directory if the actual file gets deleted\r
+        */\r
        public static function remove_hook($params) {
-               $rel_path =  $params['path'];
-               $abs_path = \OCP\Config::getSystemValue('datadirectory').'/'.\OCP\User::getUser()."/versions".$rel_path.'.v';
-               if(Storage::isversioned($rel_path)) {
-                       $versions = Storage::getVersions($rel_path);
-                       foreach ($versions as $v){
-                               unlink($abs_path . $v['version']);
-                       }
-               }
-       }
-       
-       /**
-        * @brief rename/move versions of renamed/moved files
-        * @param array with oldpath and newpath
-        *
-        * This function is connected to the rename signal of OC_Filesystem and adjust the name and location
-        * of the stored versions along the actual file
-        */
+               $versions_fileview = \OCP\Files::getStorage('files_versions');\r
+               $rel_path =  $params['path'];\r
+               $abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_path.'.v';\r
+               if(Storage::isversioned($rel_path)) {\r
+                       $versions = Storage::getVersions($rel_path);\r
+                       foreach ($versions as $v){\r
+                               unlink($abs_path . $v['version']);\r
+                       }\r
+               }\r
+       }\r
+       \r
+       /**\r
+        * @brief rename/move versions of renamed/moved files\r
+        * @param array with oldpath and newpath\r
+        *\r
+        * This function is connected to the rename signal of OC_Filesystem and adjust the name and location\r
+        * of the stored versions along the actual file\r
+        */\r
        public static function rename_hook($params) {
-               $rel_oldpath =  $params['oldpath'];
-               $abs_oldpath = \OCP\Config::getSystemValue('datadirectory').'/'.\OCP\User::getUser()."/versions".$rel_oldpath.'.v';
-               $abs_newpath = \OCP\Config::getSystemValue('datadirectory').'/'.\OCP\User::getUser()."/versions".$params['newpath'].'.v';
+               $versions_fileview = \OCP\Files::getStorage('files_versions');\r
+               $rel_oldpath =  $params['oldpath'];\r
+               $abs_oldpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$rel_oldpath.'.v';\r
+               $abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$params['newpath'].'.v';\r
                if(Storage::isversioned($rel_oldpath)) {
-                       $versions = Storage::getVersions($rel_oldpath);
-                       foreach ($versions as $v){
-                               rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']);
-                       }
-               }
+                       $info=pathinfo($abs_newpath);\r
+                       if(!file_exists($info['dirname'])) mkdir($info['dirname'],0700,true);\r
+                       $versions = Storage::getVersions($rel_oldpath);\r
+                       foreach ($versions as $v){\r
+                               rename($abs_oldpath.$v['version'], $abs_newpath.$v['version']);\r
+                       }\r
+               }\r
        }
        
 }
index 723c27577a7132a856e50511be393d68a85395e7..0ce884c3ea041e9f444ff992eaf7456949be19e3 100644 (file)
@@ -22,41 +22,26 @@ class Storage {
        //   - files_versionsfolder\r
        //   - files_versionsblacklist\r
        //   - files_versionsmaxfilesize\r
-       //   - files_versionsinterval \r
-       //   - files_versionmaxversions \r
+       //   - files_versionsinterval\r
+       //   - files_versionmaxversions\r
        //\r
        // todo:\r
        //   - finish porting to OC_FilesystemView to enable network transparency\r
        //   - add transparent compression. first test if it´s worth it.\r
 \r
-       const DEFAULTENABLED=true; \r
-       const DEFAULTFOLDER='versions'; \r
-       const DEFAULTBLACKLIST='avi mp3 mpg mp4 ctmp'; \r
-       const DEFAULTMAXFILESIZE=1048576; // 10MB \r
+       const DEFAULTENABLED=true;\r
+       const DEFAULTBLACKLIST='avi mp3 mpg mp4 ctmp';\r
+       const DEFAULTMAXFILESIZE=1048576; // 10MB\r
        const DEFAULTMININTERVAL=60; // 1 min\r
        const DEFAULTMAXVERSIONS=50;\r
-       \r
+\r
        private $view;\r
-       \r
-       function __construct( $view ) {\r
-       \r
-               $this->view = $view;\r
-               \r
-       }\r
 \r
-       /**\r
-        * init the versioning and create the versions folder.\r
-        */\r
-       public static function init() {\r
-               if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {\r
-                       // create versions folder\r
-                       $foldername=\OCP\Config::getSystemValue('datadirectory').'/'. \OCP\USER::getUser() .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);\r
-                       if(!is_dir($foldername)){\r
-                               mkdir($foldername);\r
-                       }\r
-               }\r
-       }\r
+       function __construct() {\r
+\r
+               $this->view = \OCP\Files::getStorage('files_versions');\r
 \r
+       }\r
 \r
        /**\r
         * listen to write event.\r
@@ -75,11 +60,11 @@ class Storage {
         */\r
        public function store($filename) {\r
                if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {\r
-               \r
+\r
                        $files_view = \OCP\Files::getStorage("files");\r
                        $users_view = \OCP\Files::getStorage("files_versions");\r
                        $users_view->chroot(\OCP\User::getUser().'/');\r
-                       \r
+                               \r
                        if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {\r
                                $pos = strpos($source, '/files', 1);\r
                                $uid = substr($source, 1, $pos - 1);\r
@@ -87,15 +72,14 @@ class Storage {
                        } else {\r
                                $uid = \OCP\User::getUser();\r
                        }\r
-                       $versionsFolderName=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);\r
-                       $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/files';\r
-                       Storage::init();\r
-\r
+                               \r
+                       $versionsFolderName=\OCP\Config::getSystemValue('datadirectory') .  $this->view->getAbsolutePath('');\r
+                               \r
                        //check if source file already exist as version to avoid recursions.\r
                        if ($users_view->file_exists($filename)) {\r
                                return false;\r
                        }\r
-                       \r
+                               \r
                        // check if filename is a directory\r
                        if($files_view->is_dir($filename)){\r
                                return false;\r
@@ -110,7 +94,7 @@ class Storage {
                                        return false;\r
                                }\r
                        }\r
-                       \r
+                               \r
                        // check filesize\r
                        if($files_view->filesize($filename)>\OCP\Config::getSystemValue('files_versionsmaxfilesize', Storage::DEFAULTMAXFILESIZE)){\r
                                return false;\r
@@ -129,12 +113,12 @@ class Storage {
 \r
 \r
                        // create all parent folders\r
-                       $info=pathinfo($filename);      \r
-                       if(!file_exists($versionsFolderName.'/'.$info['dirname'])) mkdir($versionsFolderName.'/'.$info['dirname'],0700,true);   \r
+                       $info=pathinfo($filename);\r
+                       if(!file_exists($versionsFolderName.'/'.$info['dirname'])) mkdir($versionsFolderName.'/'.$info['dirname'],0700,true);\r
 \r
                        // store a new version of a file\r
-                       @$users_view->copy('files'.$filename, 'versions'.$filename.'.v'.time());\r
-        \r
+                       @$users_view->copy('files'.$filename, 'files_versions'.$filename.'.v'.time());\r
+\r
                        // expire old revisions if necessary\r
                        Storage::expire($filename);\r
                }\r
@@ -145,11 +129,11 @@ class Storage {
         * rollback to an old version of a file.\r
         */\r
        public static function rollback($filename,$revision) {\r
-       \r
+\r
                if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {\r
                        $users_view = \OCP\Files::getStorage("files_versions");\r
                        $users_view->chroot(\OCP\User::getUser().'/');\r
-                       \r
+                               \r
                        if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {\r
                                $pos = strpos($source, '/files', 1);\r
                                $uid = substr($source, 1, $pos - 1);\r
@@ -157,23 +141,20 @@ class Storage {
                        } else {\r
                                $uid = \OCP\User::getUser();\r
                        }\r
-                       $versionsFolderName=\OCP\Config::getSystemValue('datadirectory').'/'.$uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);\r
-                       \r
-                       $filesfoldername=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/files';\r
-                       \r
+                               \r
                        // rollback\r
-                       if( @$users_view->copy('versions'.$filename.'.v'.$revision, 'files'.$filename) ) {\r
-                       \r
+                       if( @$users_view->copy('files_versions'.$filename.'.v'.$revision, 'files'.$filename) ) {\r
+                                       \r
                                return true;\r
-                               \r
+\r
                        }else{\r
-                       \r
+                                       \r
                                return false;\r
-                               \r
+\r
                        }\r
-                       \r
+                               \r
                }\r
-               \r
+\r
        }\r
 \r
        /**\r
@@ -181,18 +162,17 @@ class Storage {
         */\r
        public static function isversioned($filename) {\r
                if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {\r
+                       $versions_fileview = \OCP\Files::getStorage("files_versions");\r
                        if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {\r
                                $pos = strpos($source, '/files', 1);\r
-                               $uid = substr($source, 1, $pos - 1);\r
                                $filename = substr($source, $pos + 6);\r
-                       } else {\r
-                               $uid = \OCP\User::getUser();\r
                        }\r
-                       $versionsFolderName=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);\r
 \r
+                       $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');\r
+                       \r
                        // check for old versions\r
-                       $matches=glob($versionsFolderName.'/'.$filename.'.v*');\r
-                       if(count($matches)>1){\r
+                       $matches=glob($versionsFolderName.$filename.'.v*');\r
+                       if(count($matches)>0){\r
                                return true;\r
                        }else{\r
                                return false;\r
@@ -203,17 +183,17 @@ class Storage {
        }\r
 \r
 \r
-        \r
-        /**\r
-         * @brief get a list of all available versions of a file in descending chronological order\r
-         * @param $filename file to find versions of, relative to the user files dir\r
-         * @param $count number of versions to return\r
-         * @returns array\r
-         */\r
-        public static function getVersions( $filename, $count = 0 ) {\r
-        \r
-                if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {\r
-                \r
+\r
+       /**\r
+        * @brief get a list of all available versions of a file in descending chronological order\r
+        * @param $filename file to find versions of, relative to the user files dir\r
+        * @param $count number of versions to return\r
+        * @returns array\r
+        */\r
+       public static function getVersions( $filename, $count = 0 ) {\r
+\r
+               if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {\r
+\r
                        if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {\r
                                $pos = strpos($source, '/files', 1);\r
                                $uid = substr($source, 1, $pos - 1);\r
@@ -221,70 +201,71 @@ class Storage {
                        } else {\r
                                $uid = \OCP\User::getUser();\r
                        }\r
-                       $versionsFolderName = \OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);\r
-                       $versions = array();         \r
-                       \r
+                       $versions_fileview = \OCP\Files::getStorage('files_versions');\r
+                       $versionsFolderName = \OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');\r
+                       $versions = array();\r
+                               \r
                        // fetch for old versions\r
                        $matches = glob( $versionsFolderName.'/'.$filename.'.v*' );\r
-                       \r
+                               \r
                        sort( $matches );\r
-                       \r
+                               \r
                        $i = 0;\r
-                       \r
-                       foreach( $matches as $ma ) {\r
                                \r
+                       $files_view = \OCP\Files::getStorage('files');\r
+                       $local_file = $files_view->getLocalFile($filename);\r
+                       foreach( $matches as $ma ) {\r
+\r
                                $i++;\r
                                $versions[$i]['cur'] = 0;\r
                                $parts = explode( '.v', $ma );\r
                                $versions[$i]['version'] = ( end( $parts ) );\r
-                               \r
+\r
                                // if file with modified date exists, flag it in array as currently enabled version\r
-                               $files_view = \OCP\Files::getStorage('files');\r
-                               $local_file = $files_view->getLocalFile($filename);\r
                                ( \md5_file( $ma ) == \md5_file( $local_file ) ? $versions[$i]['fileMatch'] = 1 : $versions[$i]['fileMatch'] = 0 );\r
-                               \r
+\r
                        }\r
-                       \r
+                               \r
                        $versions = array_reverse( $versions );\r
-                       \r
-                       foreach( $versions as $key => $value ) {\r
                                \r
+                       foreach( $versions as $key => $value ) {\r
+\r
                                // flag the first matched file in array (which will have latest modification date) as current version\r
                                if ( $versions[$key]['fileMatch'] ) {\r
-                               \r
+\r
                                        $versions[$key]['cur'] = 1;\r
                                        break;\r
-                                       \r
+                                               \r
                                }\r
-                       \r
+                                       \r
                        }\r
-                       \r
+                               \r
                        $versions = array_reverse( $versions );\r
-                       \r
+                               \r
                        // only show the newest commits\r
                        if( $count != 0 and ( count( $versions )>$count ) ) {\r
-                       \r
+                                       \r
                                $versions = array_slice( $versions, count( $versions ) - $count );\r
-                               \r
+\r
                        }\r
-       \r
+\r
                        return( $versions );\r
 \r
 \r
-                } else {\r
-                \r
+               } else {\r
+\r
                        // if versioning isn't enabled then return an empty array\r
-                        return( array() );\r
-                        \r
-                }\r
-                \r
-        }\r
-\r
-        /**\r
-         * @brief Erase a file's versions which exceed the set quota\r
-         */\r
-        public static function expire($filename) {\r
-                if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {\r
+                       return( array() );\r
+\r
+               }\r
+\r
+       }\r
+\r
+       /**\r
+        * @brief Erase a file's versions which exceed the set quota\r
+        */\r
+       public static function expire($filename) {\r
+               if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {\r
 \r
                        if (\OCP\App::isEnabled('files_sharing') && $source = \OC_Share::getSource('/'.\OCP\User::getUser().'/files'.$filename)) {\r
                                $pos = strpos($source, '/files', 1);\r
@@ -293,36 +274,33 @@ class Storage {
                        } else {\r
                                $uid = \OCP\User::getUser();\r
                        }\r
-                       $versionsFolderName=\OCP\Config::getSystemValue('datadirectory').'/'. $uid .'/'.\OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);\r
+                       $versions_fileview = \OCP\Files::getStorage("files_versions");\r
+                       $versionsFolderName=\OCP\Config::getSystemValue('datadirectory'). $versions_fileview->getAbsolutePath('');\r
 \r
                        // check for old versions\r
                        $matches = glob( $versionsFolderName.'/'.$filename.'.v*' );\r
-                       \r
+                               \r
                        if( count( $matches ) > \OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) ) {\r
-                       \r
+                                       \r
                                $numberToDelete = count( $matches-\OCP\Config::getSystemValue( 'files_versionmaxversions', Storage::DEFAULTMAXVERSIONS ) );\r
 \r
                                // delete old versions of a file\r
                                $deleteItems = array_slice( $matches, 0, $numberToDelete );\r
-                               \r
+\r
                                foreach( $deleteItems as $de ) {\r
-                               \r
+\r
                                        unlink( $versionsFolderName.'/'.$filename.'.v'.$de );\r
-                                       \r
+                                               \r
                                }\r
                        }\r
-                }\r
-        }\r
-\r
-        /**\r
-         * @brief Erase all old versions of all user files\r
-         * @return true/false\r
-         */\r
-        public function expireAll() {\r
-               \r
-               $dir = \OCP\Config::getSystemValue('files_versionsfolder', Storage::DEFAULTFOLDER);\r
-               \r
-               return $this->view->deleteAll( $dir, true );\r
-       \r
-        }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * @brief Erase all old versions of all user files\r
+        * @return true/false\r
+        */\r
+       public function expireAll() {\r
+               return $this->view->deleteAll('', true);\r
+       }\r
 }\r