Completed
Pull Request — master (#6518)
by Björn
14:39
created
apps/files_versions/lib/Storage.php 1 patch
Spacing   +67 added lines, -67 removed lines patch added patch discarded remove patch
@@ -54,8 +54,8 @@  discard block
 block discarded – undo
54 54
 
55 55
 class Storage {
56 56
 
57
-	const DEFAULTENABLED=true;
58
-	const DEFAULTMAXSIZE=50; // unit: percentage; 50% of available disk space/quota
57
+	const DEFAULTENABLED = true;
58
+	const DEFAULTMAXSIZE = 50; // unit: percentage; 50% of available disk space/quota
59 59
 	const VERSIONS_ROOT = 'files_versions/';
60 60
 
61 61
 	const DELETE_TRIGGER_MASTER_REMOVED = 0;
@@ -69,17 +69,17 @@  discard block
 block discarded – undo
69 69
 
70 70
 	private static $max_versions_per_interval = array(
71 71
 		//first 10sec, one version every 2sec
72
-		1 => array('intervalEndsAfter' => 10,      'step' => 2),
72
+		1 => array('intervalEndsAfter' => 10, 'step' => 2),
73 73
 		//next minute, one version every 10sec
74
-		2 => array('intervalEndsAfter' => 60,      'step' => 10),
74
+		2 => array('intervalEndsAfter' => 60, 'step' => 10),
75 75
 		//next hour, one version every minute
76
-		3 => array('intervalEndsAfter' => 3600,    'step' => 60),
76
+		3 => array('intervalEndsAfter' => 3600, 'step' => 60),
77 77
 		//next 24h, one version every hour
78
-		4 => array('intervalEndsAfter' => 86400,   'step' => 3600),
78
+		4 => array('intervalEndsAfter' => 86400, 'step' => 3600),
79 79
 		//next 30days, one version per day
80 80
 		5 => array('intervalEndsAfter' => 2592000, 'step' => 86400),
81 81
 		//until the end one version per week
82
-		6 => array('intervalEndsAfter' => -1,      'step' => 604800),
82
+		6 => array('intervalEndsAfter' => -1, 'step' => 604800),
83 83
 	);
84 84
 
85 85
 	/** @var \OCA\Files_Versions\AppInfo\Application */
@@ -103,7 +103,7 @@  discard block
 block discarded – undo
103 103
 			$uid = User::getUser();
104 104
 		}
105 105
 		Filesystem::initMountPoints($uid);
106
-		if ( $uid !== User::getUser() ) {
106
+		if ($uid !== User::getUser()) {
107 107
 			$info = Filesystem::getFileInfo($filename);
108 108
 			$ownerView = new View('/'.$uid.'/files');
109 109
 			try {
@@ -153,7 +153,7 @@  discard block
 block discarded – undo
153 153
 	 * @return int versions size
154 154
 	 */
155 155
 	private static function getVersionsSize($user) {
156
-		$view = new View('/' . $user);
156
+		$view = new View('/'.$user);
157 157
 		$fileInfo = $view->getFileInfo('/files_versions');
158 158
 		return isset($fileInfo['size']) ? $fileInfo['size'] : 0;
159 159
 	}
@@ -171,13 +171,13 @@  discard block
 block discarded – undo
171 171
 		}
172 172
 
173 173
 		// we only handle existing files
174
-		if (! Filesystem::file_exists($filename) || Filesystem::is_dir($filename)) {
174
+		if (!Filesystem::file_exists($filename) || Filesystem::is_dir($filename)) {
175 175
 			return false;
176 176
 		}
177 177
 
178 178
 		list($uid, $filename) = self::getUidAndFilename($filename);
179 179
 
180
-		$files_view = new View('/'.$uid .'/files');
180
+		$files_view = new View('/'.$uid.'/files');
181 181
 		$users_view = new View('/'.$uid);
182 182
 
183 183
 		$eventDispatcher = \OC::$server->getEventDispatcher();
@@ -202,10 +202,10 @@  discard block
 block discarded – undo
202 202
 		self::scheduleExpire($uid, $filename);
203 203
 
204 204
 		// store a new version of a file
205
-		$mtime = $users_view->filemtime('files/' . $filename);
206
-		$users_view->copy('files/' . $filename, 'files_versions/' . $filename . '.v' . $mtime);
205
+		$mtime = $users_view->filemtime('files/'.$filename);
206
+		$users_view->copy('files/'.$filename, 'files_versions/'.$filename.'.v'.$mtime);
207 207
 		// call getFileInfo to enforce a file cache entry for the new version
208
-		$users_view->getFileInfo('files_versions/' . $filename . '.v' . $mtime);
208
+		$users_view->getFileInfo('files_versions/'.$filename.'.v'.$mtime);
209 209
 	}
210 210
 
211 211
 
@@ -248,14 +248,14 @@  discard block
 block discarded – undo
248 248
 
249 249
 		if (!Filesystem::file_exists($path)) {
250 250
 
251
-			$view = new View('/' . $uid . '/files_versions');
251
+			$view = new View('/'.$uid.'/files_versions');
252 252
 
253 253
 			$versions = self::getVersions($uid, $filename);
254 254
 			if (!empty($versions)) {
255 255
 				foreach ($versions as $v) {
256
-					\OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $path . $v['version'], 'trigger' => self::DELETE_TRIGGER_MASTER_REMOVED));
257
-					self::deleteVersion($view, $filename . '.v' . $v['version']);
258
-					\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $path . $v['version'], 'trigger' => self::DELETE_TRIGGER_MASTER_REMOVED));
256
+					\OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $path.$v['version'], 'trigger' => self::DELETE_TRIGGER_MASTER_REMOVED));
257
+					self::deleteVersion($view, $filename.'.v'.$v['version']);
258
+					\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $path.$v['version'], 'trigger' => self::DELETE_TRIGGER_MASTER_REMOVED));
259 259
 				}
260 260
 			}
261 261
 		}
@@ -289,33 +289,33 @@  discard block
 block discarded – undo
289 289
 		$rootView = new View('');
290 290
 
291 291
 		// did we move a directory ?
292
-		if ($rootView->is_dir('/' . $targetOwner . '/files/' . $targetPath)) {
292
+		if ($rootView->is_dir('/'.$targetOwner.'/files/'.$targetPath)) {
293 293
 			// does the directory exists for versions too ?
294
-			if ($rootView->is_dir('/' . $sourceOwner . '/files_versions/' . $sourcePath)) {
294
+			if ($rootView->is_dir('/'.$sourceOwner.'/files_versions/'.$sourcePath)) {
295 295
 				// create missing dirs if necessary
296
-				self::createMissingDirectories($targetPath, new View('/'. $targetOwner));
296
+				self::createMissingDirectories($targetPath, new View('/'.$targetOwner));
297 297
 
298 298
 				// move the directory containing the versions
299 299
 				$rootView->$operation(
300
-					'/' . $sourceOwner . '/files_versions/' . $sourcePath,
301
-					'/' . $targetOwner . '/files_versions/' . $targetPath
300
+					'/'.$sourceOwner.'/files_versions/'.$sourcePath,
301
+					'/'.$targetOwner.'/files_versions/'.$targetPath
302 302
 				);
303 303
 			}
304
-		} else if ($versions = Storage::getVersions($sourceOwner, '/' . $sourcePath)) {
304
+		} else if ($versions = Storage::getVersions($sourceOwner, '/'.$sourcePath)) {
305 305
 			// create missing dirs if necessary
306
-			self::createMissingDirectories($targetPath, new View('/'. $targetOwner));
306
+			self::createMissingDirectories($targetPath, new View('/'.$targetOwner));
307 307
 
308 308
 			foreach ($versions as $v) {
309 309
 				// move each version one by one to the target directory
310 310
 				$rootView->$operation(
311
-					'/' . $sourceOwner . '/files_versions/' . $sourcePath.'.v' . $v['version'],
312
-					'/' . $targetOwner . '/files_versions/' . $targetPath.'.v'.$v['version']
311
+					'/'.$sourceOwner.'/files_versions/'.$sourcePath.'.v'.$v['version'],
312
+					'/'.$targetOwner.'/files_versions/'.$targetPath.'.v'.$v['version']
313 313
 				);
314 314
 			}
315 315
 		}
316 316
 
317 317
 		// if we moved versions directly for a file, schedule expiration check for that file
318
-		if (!$rootView->is_dir('/' . $targetOwner . '/files/' . $targetPath)) {
318
+		if (!$rootView->is_dir('/'.$targetOwner.'/files/'.$targetPath)) {
319 319
 			self::scheduleExpire($targetOwner, $targetPath);
320 320
 		}
321 321
 
@@ -331,14 +331,14 @@  discard block
 block discarded – undo
331 331
 	public static function rollback($file, $revision) {
332 332
 
333 333
 		// add expected leading slash
334
-		$file = '/' . ltrim($file, '/');
334
+		$file = '/'.ltrim($file, '/');
335 335
 		list($uid, $filename) = self::getUidAndFilename($file);
336 336
 		if ($uid === null || trim($filename, '/') === '') {
337 337
 			return false;
338 338
 		}
339 339
 
340 340
 		$users_view = new View('/'.$uid);
341
-		$files_view = new View('/'. User::getUser().'/files');
341
+		$files_view = new View('/'.User::getUser().'/files');
342 342
 
343 343
 		$versionCreated = false;
344 344
 
@@ -356,7 +356,7 @@  discard block
 block discarded – undo
356 356
 			$versionCreated = true;
357 357
 		}
358 358
 
359
-		$fileToRestore =  'files_versions' . $filename . '.v' . $revision;
359
+		$fileToRestore = 'files_versions'.$filename.'.v'.$revision;
360 360
 
361 361
 		// Restore encrypted version of the old file for the newly restored file
362 362
 		// This has to happen manually here since the file is manually copied below
@@ -372,7 +372,7 @@  discard block
 block discarded – undo
372 372
 		);
373 373
 
374 374
 		// rollback
375
-		if (self::copyFileContents($users_view, $fileToRestore, 'files' . $filename)) {
375
+		if (self::copyFileContents($users_view, $fileToRestore, 'files'.$filename)) {
376 376
 			$files_view->touch($file, $revision);
377 377
 			Storage::scheduleExpire($uid, $file);
378 378
 			\OC_Hook::emit('\OCP\Versions', 'rollback', array(
@@ -440,12 +440,12 @@  discard block
 block discarded – undo
440 440
 			return $versions;
441 441
 		}
442 442
 		// fetch for old versions
443
-		$view = new View('/' . $uid . '/');
443
+		$view = new View('/'.$uid.'/');
444 444
 
445 445
 		$pathinfo = pathinfo($filename);
446 446
 		$versionedFile = $pathinfo['basename'];
447 447
 
448
-		$dir = Filesystem::normalizePath(self::VERSIONS_ROOT . '/' . $pathinfo['dirname']);
448
+		$dir = Filesystem::normalizePath(self::VERSIONS_ROOT.'/'.$pathinfo['dirname']);
449 449
 
450 450
 		$dirContent = false;
451 451
 		if ($view->is_dir($dir)) {
@@ -465,7 +465,7 @@  discard block
 block discarded – undo
465 465
 						$pathparts = pathinfo($entryName);
466 466
 						$timestamp = substr($pathparts['extension'], 1);
467 467
 						$filename = $pathparts['filename'];
468
-						$key = $timestamp . '#' . $filename;
468
+						$key = $timestamp.'#'.$filename;
469 469
 						$versions[$key]['version'] = $timestamp;
470 470
 						$versions[$key]['humanReadableTimestamp'] = self::getHumanReadableTimestamp($timestamp);
471 471
 						if (empty($userFullPath)) {
@@ -473,9 +473,9 @@  discard block
 block discarded – undo
473 473
 						} else {
474 474
 							$versions[$key]['preview'] = \OC::$server->getURLGenerator('files_version.Preview.getPreview', ['file' => $userFullPath, 'version' => $timestamp]);
475 475
 						}
476
-						$versions[$key]['path'] = Filesystem::normalizePath($pathinfo['dirname'] . '/' . $filename);
476
+						$versions[$key]['path'] = Filesystem::normalizePath($pathinfo['dirname'].'/'.$filename);
477 477
 						$versions[$key]['name'] = $versionedFile;
478
-						$versions[$key]['size'] = $view->filesize($dir . '/' . $entryName);
478
+						$versions[$key]['size'] = $view->filesize($dir.'/'.$entryName);
479 479
 						$versions[$key]['mimetype'] = \OC::$server->getMimeTypeDetector()->detectPath($versionedFile);
480 480
 					}
481 481
 				}
@@ -493,7 +493,7 @@  discard block
 block discarded – undo
493 493
 	 * Expire versions that older than max version retention time
494 494
 	 * @param string $uid
495 495
 	 */
496
-	public static function expireOlderThanMaxForUser($uid){
496
+	public static function expireOlderThanMaxForUser($uid) {
497 497
 		$expiration = self::getExpiration();
498 498
 		$threshold = $expiration->getMaxAgeAsTimestamp();
499 499
 		$versions = self::getAllVersions($uid);
@@ -503,7 +503,7 @@  discard block
 block discarded – undo
503 503
 
504 504
 		$toDelete = [];
505 505
 		foreach (array_reverse($versions['all']) as $key => $version) {
506
-			if (intval($version['version'])<$threshold) {
506
+			if (intval($version['version']) < $threshold) {
507 507
 				$toDelete[$key] = $version;
508 508
 			} else {
509 509
 				//Versions are sorted by time - nothing mo to iterate.
@@ -511,11 +511,11 @@  discard block
 block discarded – undo
511 511
 			}
512 512
 		}
513 513
 
514
-		$view = new View('/' . $uid . '/files_versions');
514
+		$view = new View('/'.$uid.'/files_versions');
515 515
 		if (!empty($toDelete)) {
516 516
 			foreach ($toDelete as $version) {
517 517
 				\OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $version['path'].'.v'.$version['version'], 'trigger' => self::DELETE_TRIGGER_RETENTION_CONSTRAINT));
518
-				self::deleteVersion($view, $version['path'] . '.v' . $version['version']);
518
+				self::deleteVersion($view, $version['path'].'.v'.$version['version']);
519 519
 				\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'].'.v'.$version['version'], 'trigger' => self::DELETE_TRIGGER_RETENTION_CONSTRAINT));
520 520
 			}
521 521
 		}
@@ -531,19 +531,19 @@  discard block
 block discarded – undo
531 531
 		$diff = time() - $timestamp;
532 532
 
533 533
 		if ($diff < 60) { // first minute
534
-			return  $diff . " seconds ago";
534
+			return  $diff." seconds ago";
535 535
 		} elseif ($diff < 3600) { //first hour
536
-			return round($diff / 60) . " minutes ago";
536
+			return round($diff / 60)." minutes ago";
537 537
 		} elseif ($diff < 86400) { // first day
538
-			return round($diff / 3600) . " hours ago";
538
+			return round($diff / 3600)." hours ago";
539 539
 		} elseif ($diff < 604800) { //first week
540
-			return round($diff / 86400) . " days ago";
540
+			return round($diff / 86400)." days ago";
541 541
 		} elseif ($diff < 2419200) { //first month
542
-			return round($diff / 604800) . " weeks ago";
542
+			return round($diff / 604800)." weeks ago";
543 543
 		} elseif ($diff < 29030400) { // first year
544
-			return round($diff / 2419200) . " months ago";
544
+			return round($diff / 2419200)." months ago";
545 545
 		} else {
546
-			return round($diff / 29030400) . " years ago";
546
+			return round($diff / 29030400)." years ago";
547 547
 		}
548 548
 
549 549
 	}
@@ -554,7 +554,7 @@  discard block
 block discarded – undo
554 554
 	 * @return array with contains two arrays 'all' which contains all versions sorted by age and 'by_file' which contains all versions sorted by filename
555 555
 	 */
556 556
 	private static function getAllVersions($uid) {
557
-		$view = new View('/' . $uid . '/');
557
+		$view = new View('/'.$uid.'/');
558 558
 		$dirs = array(self::VERSIONS_ROOT);
559 559
 		$versions = array();
560 560
 
@@ -564,7 +564,7 @@  discard block
 block discarded – undo
564 564
 
565 565
 			foreach ($files as $file) {
566 566
 				$fileData = $file->getData();
567
-				$filePath = $dir . '/' . $fileData['name'];
567
+				$filePath = $dir.'/'.$fileData['name'];
568 568
 				if ($file['type'] === 'dir') {
569 569
 					array_push($dirs, $filePath);
570 570
 				} else {
@@ -572,7 +572,7 @@  discard block
 block discarded – undo
572 572
 					$relPathStart = strlen(self::VERSIONS_ROOT);
573 573
 					$version = substr($filePath, $versionsBegin + 2);
574 574
 					$relpath = substr($filePath, $relPathStart, $versionsBegin - $relPathStart);
575
-					$key = $version . '#' . $relpath;
575
+					$key = $version.'#'.$relpath;
576 576
 					$versions[$key] = array('path' => $relpath, 'timestamp' => $version);
577 577
 				}
578 578
 			}
@@ -613,13 +613,13 @@  discard block
 block discarded – undo
613 613
 			list($toDelete, $size) = self::getAutoExpireList($time, $versions);
614 614
 		} else {
615 615
 			$size = 0;
616
-			$toDelete = [];  // versions we want to delete
616
+			$toDelete = []; // versions we want to delete
617 617
 		}
618 618
 
619 619
 		foreach ($versions as $key => $version) {
620 620
 			if ($expiration->isExpired($version['version'], $quotaExceeded) && !isset($toDelete[$key])) {
621 621
 				$size += $version['size'];
622
-				$toDelete[$key] = $version['path'] . '.v' . $version['version'];
622
+				$toDelete[$key] = $version['path'].'.v'.$version['version'];
623 623
 			}
624 624
 		}
625 625
 
@@ -634,7 +634,7 @@  discard block
 block discarded – undo
634 634
 	 */
635 635
 	protected static function getAutoExpireList($time, $versions) {
636 636
 		$size = 0;
637
-		$toDelete = array();  // versions we want to delete
637
+		$toDelete = array(); // versions we want to delete
638 638
 
639 639
 		$interval = 1;
640 640
 		$step = Storage::$max_versions_per_interval[$interval]['step'];
@@ -656,9 +656,9 @@  discard block
 block discarded – undo
656 656
 				if ($nextInterval === -1 || $prevTimestamp > $nextInterval) {
657 657
 					if ($version['version'] > $nextVersion) {
658 658
 						//distance between two version too small, mark to delete
659
-						$toDelete[$key] = $version['path'] . '.v' . $version['version'];
659
+						$toDelete[$key] = $version['path'].'.v'.$version['version'];
660 660
 						$size += $version['size'];
661
-						\OCP\Util::writeLog('files_versions', 'Mark to expire '. $version['path'] .' next version should be ' . $nextVersion . " or smaller. (prevTimestamp: " . $prevTimestamp . "; step: " . $step, \OCP\Util::INFO);
661
+						\OCP\Util::writeLog('files_versions', 'Mark to expire '.$version['path'].' next version should be '.$nextVersion." or smaller. (prevTimestamp: ".$prevTimestamp."; step: ".$step, \OCP\Util::INFO);
662 662
 					} else {
663 663
 						$nextVersion = $version['version'] - $step;
664 664
 						$prevTimestamp = $version['version'];
@@ -713,8 +713,8 @@  discard block
 block discarded – undo
713 713
 			// get available disk space for user
714 714
 			$user = \OC::$server->getUserManager()->get($uid);
715 715
 			if (is_null($user)) {
716
-				\OCP\Util::writeLog('files_versions', 'Backends provided no user object for ' . $uid, \OCP\Util::ERROR);
717
-				throw new \OC\User\NoUserException('Backends provided no user object for ' . $uid);
716
+				\OCP\Util::writeLog('files_versions', 'Backends provided no user object for '.$uid, \OCP\Util::ERROR);
717
+				throw new \OC\User\NoUserException('Backends provided no user object for '.$uid);
718 718
 			}
719 719
 
720 720
 			\OC_Util::setupFS($uid);
@@ -731,7 +731,7 @@  discard block
 block discarded – undo
731 731
 
732 732
 			$softQuota = true;
733 733
 			$quota = $user->getQuota();
734
-			if ( $quota === null || $quota === 'none' ) {
734
+			if ($quota === null || $quota === 'none') {
735 735
 				$quota = Filesystem::free_space('/');
736 736
 				$softQuota = false;
737 737
 			} else {
@@ -745,7 +745,7 @@  discard block
 block discarded – undo
745 745
 			// subtract size of files and current versions size from quota
746 746
 			if ($quota >= 0) {
747 747
 				if ($softQuota) {
748
-					$files_view = new View('/' . $uid . '/files');
748
+					$files_view = new View('/'.$uid.'/files');
749 749
 					$rootInfo = $files_view->getFileInfo('/', false);
750 750
 					$free = $quota - $rootInfo['size']; // remaining free space for user
751 751
 					if ($free > 0) {
@@ -782,18 +782,18 @@  discard block
 block discarded – undo
782 782
 				$versionsSize = $versionsSize - $sizeOfDeletedVersions;
783 783
 			}
784 784
 
785
-			foreach($toDelete as $key => $path) {
785
+			foreach ($toDelete as $key => $path) {
786 786
 				\OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $path, 'trigger' => self::DELETE_TRIGGER_QUOTA_EXCEEDED));
787 787
 				self::deleteVersion($versionsFileview, $path);
788 788
 				\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $path, 'trigger' => self::DELETE_TRIGGER_QUOTA_EXCEEDED));
789 789
 				unset($allVersions[$key]); // update array with the versions we keep
790
-				\OCP\Util::writeLog('files_versions', "Expire: " . $path, \OCP\Util::INFO);
790
+				\OCP\Util::writeLog('files_versions', "Expire: ".$path, \OCP\Util::INFO);
791 791
 			}
792 792
 
793 793
 			// Check if enough space is available after versions are rearranged.
794 794
 			// If not we delete the oldest versions until we meet the size limit for versions,
795 795
 			// but always keep the two latest versions
796
-			$numOfVersions = count($allVersions) -2 ;
796
+			$numOfVersions = count($allVersions) - 2;
797 797
 			$i = 0;
798 798
 			// sort oldest first and make sure that we start at the first element
799 799
 			ksort($allVersions);
@@ -801,9 +801,9 @@  discard block
 block discarded – undo
801 801
 			while ($availableSpace < 0 && $i < $numOfVersions) {
802 802
 				$version = current($allVersions);
803 803
 				\OC_Hook::emit('\OCP\Versions', 'preDelete', array('path' => $version['path'].'.v'.$version['version'], 'trigger' => self::DELETE_TRIGGER_QUOTA_EXCEEDED));
804
-				self::deleteVersion($versionsFileview, $version['path'] . '.v' . $version['version']);
804
+				self::deleteVersion($versionsFileview, $version['path'].'.v'.$version['version']);
805 805
 				\OC_Hook::emit('\OCP\Versions', 'delete', array('path' => $version['path'].'.v'.$version['version'], 'trigger' => self::DELETE_TRIGGER_QUOTA_EXCEEDED));
806
-				\OCP\Util::writeLog('files_versions', 'running out of space! Delete oldest version: ' . $version['path'].'.v'.$version['version'] , \OCP\Util::INFO);
806
+				\OCP\Util::writeLog('files_versions', 'running out of space! Delete oldest version: '.$version['path'].'.v'.$version['version'], \OCP\Util::INFO);
807 807
 				$versionsSize -= $version['size'];
808 808
 				$availableSpace += $version['size'];
809 809
 				next($allVersions);
@@ -829,7 +829,7 @@  discard block
 block discarded – undo
829 829
 		$dirParts = explode('/', $dirname);
830 830
 		$dir = "/files_versions";
831 831
 		foreach ($dirParts as $part) {
832
-			$dir = $dir . '/' . $part;
832
+			$dir = $dir.'/'.$part;
833 833
 			if (!$view->file_exists($dir)) {
834 834
 				$view->mkdir($dir);
835 835
 			}
@@ -840,7 +840,7 @@  discard block
 block discarded – undo
840 840
 	 * Static workaround
841 841
 	 * @return Expiration
842 842
 	 */
843
-	protected static function getExpiration(){
843
+	protected static function getExpiration() {
844 844
 		if (is_null(self::$application)) {
845 845
 			self::$application = new Application();
846 846
 		}
Please login to merge, or discard this patch.