aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_versions/lib
diff options
context:
space:
mode:
authorThomas Mueller <thomas.mueller@tmit.eu>2013-02-22 22:59:09 +0100
committerThomas Mueller <thomas.mueller@tmit.eu>2013-02-22 22:59:09 +0100
commit9898ba4daf1acdead2ed5fa6024e779caafb353e (patch)
tree3fc02fea4997344c73e0bc5ac7bdfc5616d7a7df /apps/files_versions/lib
parent5062ae250b767867609f64c29ab4cde65f022b75 (diff)
parent78fce834058a38a7dbcc5310e16095c743434bc6 (diff)
downloadnextcloud-server-9898ba4daf1acdead2ed5fa6024e779caafb353e.tar.gz
nextcloud-server-9898ba4daf1acdead2ed5fa6024e779caafb353e.zip
Merge branch 'master' into master-sqlserver
Conflicts: core/templates/installation.php
Diffstat (limited to 'apps/files_versions/lib')
-rw-r--r--apps/files_versions/lib/hooks.php25
-rw-r--r--apps/files_versions/lib/versions.php102
2 files changed, 57 insertions, 70 deletions
diff --git a/apps/files_versions/lib/hooks.php b/apps/files_versions/lib/hooks.php
index dc02c605c44..6c87eba423d 100644
--- a/apps/files_versions/lib/hooks.php
+++ b/apps/files_versions/lib/hooks.php
@@ -20,13 +20,10 @@ class Hooks {
public static function write_hook( $params ) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
- $versions = new Storage( new \OC\Files\View('') );
-
$path = $params[\OC\Files\Filesystem::signal_param_path];
-
- if($path<>'') $versions->store( $path );
-
+ if($path<>'') {
+ Storage::store($path);
+ }
}
}
@@ -40,12 +37,10 @@ class Hooks {
*/
public static function remove_hook($params) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
- $versions = new Storage( new \OC_FilesystemView('') );
-
$path = $params[\OC\Files\Filesystem::signal_param_path];
-
- if($path<>'') $versions->delete( $path );
+ if($path<>'') {
+ Storage::delete($path);
+ }
}
}
@@ -59,13 +54,11 @@ class Hooks {
*/
public static function rename_hook($params) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
-
- $versions = new Storage( new \OC_FilesystemView('') );
-
$oldpath = $params['oldpath'];
$newpath = $params['newpath'];
-
- if($oldpath<>'' && $newpath<>'') $versions->rename( $oldpath, $newpath );
+ if($oldpath<>'' && $newpath<>'') {
+ Storage::rename( $oldpath, $newpath );
+ }
}
}
diff --git a/apps/files_versions/lib/versions.php b/apps/files_versions/lib/versions.php
index f23381cb156..8a67de04d83 100644
--- a/apps/files_versions/lib/versions.php
+++ b/apps/files_versions/lib/versions.php
@@ -21,51 +21,40 @@ class Storage {
const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota
private static $max_versions_per_interval = array(
- 1 => array('intervalEndsAfter' => 10, //first 10sec, one version every 2sec
- 'step' => 2),
- 2 => array('intervalEndsAfter' => 60, //next minute, one version every 10sec
- 'step' => 10),
- 3 => array('intervalEndsAfter' => 3600, //next hour, one version every minute
- 'step' => 60),
- 4 => array('intervalEndsAfter' => 86400, //next 24h, one version every hour
- 'step' => 3600),
- 5 => array('intervalEndsAfter' => 2592000, //next 30days, one version per day
- 'step' => 86400),
- 6 => array('intervalEndsAfter' => -1, //until the end one version per week
- 'step' => 604800),
- );
-
- private static function getUidAndFilename($filename)
- {
- if (\OCP\App::isEnabled('files_sharing')
- && substr($filename, 0, 7) == '/Shared'
- && $source = \OCP\Share::getItemSharedWith('file',
- substr($filename, 7),
- \OC_Share_Backend_File::FORMAT_SHARED_STORAGE)) {
- $filename = $source['path'];
- $pos = strpos($filename, '/files', 1);
- $uid = substr($filename, 1, $pos - 1);
- $filename = substr($filename, $pos + 6);
- } else {
- $uid = \OCP\User::getUser();
+ //first 10sec, one version every 2sec
+ 1 => array('intervalEndsAfter' => 10, 'step' => 2),
+ //next minute, one version every 10sec
+ 2 => array('intervalEndsAfter' => 60, 'step' => 10),
+ //next hour, one version every minute
+ 3 => array('intervalEndsAfter' => 3600, 'step' => 60),
+ //next 24h, one version every hour
+ 4 => array('intervalEndsAfter' => 86400, 'step' => 3600),
+ //next 30days, one version per day
+ 5 => array('intervalEndsAfter' => 2592000, 'step' => 86400),
+ //until the end one version per week
+ 6 => array('intervalEndsAfter' => -1, 'step' => 604800),
+ );
+
+ private static function getUidAndFilename($filename) {
+ $uid = \OC\Files\Filesystem::getOwner($filename);
+ \OC\Files\Filesystem::initMountPoints($uid);
+ if ( $uid != \OCP\User::getUser() ) {
+ $info = \OC\Files\Filesystem::getFileInfo($filename);
+ $ownerView = new \OC\Files\View('/'.$uid.'/files');
+ $filename = $ownerView->getPath($info['fileid']);
}
return array($uid, $filename);
}
-
+
/**
* store a new version of a file.
*/
- public function store($filename) {
+ public static function store($filename) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
- $files_view = new \OC\Files\View('/'.\OCP\User::getUser() .'/files');
- $users_view = new \OC\Files\View('/'.\OCP\User::getUser());
-
- //check if source file already exist as version to avoid recursions.
- // todo does this check work?
- if ($users_view->file_exists($filename)) {
- return false;
- }
+
+ $files_view = new \OC\Files\View('/'.$uid .'/files');
+ $users_view = new \OC\Files\View('/'.$uid);
// check if filename is a directory
if($files_view->is_dir($filename)) {
@@ -106,10 +95,10 @@ class Storage {
*/
public static function delete($filename) {
list($uid, $filename) = self::getUidAndFilename($filename);
- $versions_fileview = new \OC_FilesystemView('/'.$uid .'/files_versions');
+ $versions_fileview = new \OC\Files\View('/'.$uid .'/files_versions');
$abs_path = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('').$filename.'.v';
- if( ($versions = self::getVersions($filename)) ) {
+ if( ($versions = self::getVersions($uid, $filename)) ) {
if ( ($versionsSize = \OCP\Config::getAppValue('files_versions', 'size')) === null ) {
$versionsSize = self::calculateSize($uid);
}
@@ -127,16 +116,15 @@ class Storage {
public static function rename($oldpath, $newpath) {
list($uid, $oldpath) = self::getUidAndFilename($oldpath);
list($uidn, $newpath) = self::getUidAndFilename($newpath);
- $versions_view = new \OC_FilesystemView('/'.$uid .'/files_versions');
- $files_view = new \OC_FilesystemView('/'.$uid .'/files');
+ $versions_view = new \OC\Files\View('/'.$uid .'/files_versions');
+ $files_view = new \OC\Files\View('/'.$uid .'/files');
$abs_newpath = \OCP\Config::getSystemValue('datadirectory').$versions_view->getAbsolutePath('').$newpath;
if ( $files_view->is_dir($oldpath) && $versions_view->is_dir($oldpath) ) {
$versions_view->rename($oldpath, $newpath);
- } else if ( ($versions = Storage::getVersions($oldpath)) ) {
+ } else if ( ($versions = Storage::getVersions($uid, $oldpath)) ) {
$info=pathinfo($abs_newpath);
if(!file_exists($info['dirname'])) mkdir($info['dirname'], 0750, true);
- $versions = Storage::getVersions($oldpath);
foreach ($versions as $v) {
$versions_view->rename($oldpath.'.v'.$v['version'], $newpath.'.v'.$v['version']);
}
@@ -177,14 +165,14 @@ class Storage {
/**
* @brief get a list of all available versions of a file in descending chronological order
+ * @param $uid user id from the owner of the file
* @param $filename file to find versions of, relative to the user files dir
* @param $count number of versions to return
* @returns array
*/
- public static function getVersions( $filename, $count = 0 ) {
+ public static function getVersions($uid, $filename, $count = 0 ) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
- list($uid, $filename) = self::getUidAndFilename($filename);
- $versions_fileview = new \OC\Files\View('/' . \OCP\User::getUser() . '/files_versions');
+ $versions_fileview = new \OC\Files\View('/' . $uid . '/files_versions');
$versionsName = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath($filename);
$versions = array();
@@ -197,7 +185,7 @@ class Storage {
sort( $matches );
- $files_view = new \OC_FilesystemView('/'.$uid.'/files');
+ $files_view = new \OC\Files\View('/'.$uid.'/files');
$local_file = $files_view->getLocalFile($filename);
$local_file_md5 = \md5_file( $local_file );
@@ -248,10 +236,13 @@ class Storage {
*/
private static function calculateSize($uid) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+ $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions');
$versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
- $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
+ $iterator = new \RecursiveIteratorIterator(
+ new \RecursiveDirectoryIterator($versionsRoot),
+ \RecursiveIteratorIterator::CHILD_FIRST
+ );
$size = 0;
@@ -273,10 +264,13 @@ class Storage {
*/
private static function getAllVersions($uid) {
if( \OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true' ) {
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+ $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions');
$versionsRoot = \OCP\Config::getSystemValue('datadirectory').$versions_fileview->getAbsolutePath('');
- $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($versionsRoot), \RecursiveIteratorIterator::CHILD_FIRST);
+ $iterator = new \RecursiveIteratorIterator(
+ new \RecursiveDirectoryIterator($versionsRoot),
+ \RecursiveIteratorIterator::CHILD_FIRST
+ );
$versions = array();
@@ -319,7 +313,7 @@ class Storage {
private static function expire($filename, $versionsSize = null) {
if(\OCP\Config::getSystemValue('files_versions', Storage::DEFAULTENABLED)=='true') {
list($uid, $filename) = self::getUidAndFilename($filename);
- $versions_fileview = new \OC_FilesystemView('/'.$uid.'/files_versions');
+ $versions_fileview = new \OC\Files\View('/'.$uid.'/files_versions');
// get available disk space for user
$quota = \OCP\Util::computerFileSize(\OC_Preferences::getValue($uid, 'files', 'quota'));
@@ -338,7 +332,7 @@ class Storage {
}
// calculate available space for version history
- $files_view = new \OC_FilesystemView('/'.$uid.'/files');
+ $files_view = new \OC\Files\View('/'.$uid.'/files');
$rootInfo = $files_view->getFileInfo('/');
$free = $quota-$rootInfo['size']; // remaining free space for user
if ( $free > 0 ) {
@@ -354,7 +348,7 @@ class Storage {
$versions_by_file = $result['by_file'];
$all_versions = $result['all'];
} else {
- $all_versions = Storage::getVersions($filename);
+ $all_versions = Storage::getVersions($uid, $filename);
$versions_by_file[$filename] = $all_versions;
}