Passed
Push — master ( 0e0801...810e5f )
by Jan-Christoph
45:30 queued 23:10
created
lib/private/App/CodeChecker/CodeChecker.php 2 patches
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -42,10 +42,10 @@  discard block
 block discarded – undo
42 42
 	const CLASS_IMPLEMENTS_NOT_ALLOWED = 1001;
43 43
 	const STATIC_CALL_NOT_ALLOWED = 1002;
44 44
 	const CLASS_CONST_FETCH_NOT_ALLOWED = 1003;
45
-	const CLASS_NEW_NOT_ALLOWED =  1004;
46
-	const OP_OPERATOR_USAGE_DISCOURAGED =  1005;
47
-	const CLASS_USE_NOT_ALLOWED =  1006;
48
-	const CLASS_METHOD_CALL_NOT_ALLOWED =  1007;
45
+	const CLASS_NEW_NOT_ALLOWED = 1004;
46
+	const OP_OPERATOR_USAGE_DISCOURAGED = 1005;
47
+	const CLASS_USE_NOT_ALLOWED = 1006;
48
+	const CLASS_METHOD_CALL_NOT_ALLOWED = 1007;
49 49
 
50 50
 	/** @var Parser */
51 51
 	private $parser;
@@ -85,13 +85,13 @@  discard block
 block discarded – undo
85 85
 		}
86 86
 
87 87
 		$excludes = array_map(function($item) use ($folder) {
88
-			return $folder . '/' . $item;
88
+			return $folder.'/'.$item;
89 89
 		}, $excludedDirectories);
90 90
 
91 91
 		$iterator = new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS);
92 92
 		$iterator = new RecursiveCallbackFilterIterator($iterator, function($item) use ($folder, $excludes){
93 93
 			/** @var SplFileInfo $item */
94
-			foreach($excludes as $exclude) {
94
+			foreach ($excludes as $exclude) {
95 95
 				if (substr($item->getPath(), 0, strlen($exclude)) === $exclude) {
96 96
 					return false;
97 97
 				}
Please login to merge, or discard this patch.
Indentation   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -36,105 +36,105 @@
 block discarded – undo
36 36
 
37 37
 class CodeChecker extends BasicEmitter {
38 38
 
39
-	const CLASS_EXTENDS_NOT_ALLOWED = 1000;
40
-	const CLASS_IMPLEMENTS_NOT_ALLOWED = 1001;
41
-	const STATIC_CALL_NOT_ALLOWED = 1002;
42
-	const CLASS_CONST_FETCH_NOT_ALLOWED = 1003;
43
-	const CLASS_NEW_NOT_ALLOWED =  1004;
44
-	const OP_OPERATOR_USAGE_DISCOURAGED =  1005;
45
-	const CLASS_USE_NOT_ALLOWED =  1006;
46
-	const CLASS_METHOD_CALL_NOT_ALLOWED =  1007;
47
-
48
-	/** @var Parser */
49
-	private $parser;
50
-
51
-	/** @var ICheck */
52
-	protected $checkList;
53
-
54
-	/** @var bool */
55
-	protected $checkMigrationSchema;
56
-
57
-	public function __construct(ICheck $checkList, $checkMigrationSchema) {
58
-		$this->checkList = $checkList;
59
-		$this->checkMigrationSchema = $checkMigrationSchema;
60
-		$this->parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
61
-	}
62
-
63
-	/**
64
-	 * @param string $appId
65
-	 * @return array
66
-	 * @throws \RuntimeException if app with $appId is unknown
67
-	 */
68
-	public function analyse(string $appId): array {
69
-		$appPath = \OC_App::getAppPath($appId);
70
-		if ($appPath === false) {
71
-			throw new \RuntimeException("No app with given id <$appId> known.");
72
-		}
73
-
74
-		return $this->analyseFolder($appId, $appPath);
75
-	}
76
-
77
-	/**
78
-	 * @param string $appId
79
-	 * @param string $folder
80
-	 * @return array
81
-	 */
82
-	public function analyseFolder(string $appId, string $folder): array {
83
-		$errors = [];
84
-
85
-		$excludedDirectories = ['vendor', '3rdparty', '.git', 'l10n', 'tests', 'test', 'build'];
86
-		if ($appId === 'password_policy') {
87
-			$excludedDirectories[] = 'lists';
88
-		}
89
-
90
-		$excludes = array_map(function($item) use ($folder) {
91
-			return $folder . '/' . $item;
92
-		}, $excludedDirectories);
93
-
94
-		$iterator = new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS);
95
-		$iterator = new RecursiveCallbackFilterIterator($iterator, function($item) use ($folder, $excludes){
96
-			/** @var SplFileInfo $item */
97
-			foreach($excludes as $exclude) {
98
-				if (substr($item->getPath(), 0, strlen($exclude)) === $exclude) {
99
-					return false;
100
-				}
101
-			}
102
-			return true;
103
-		});
104
-		$iterator = new RecursiveIteratorIterator($iterator);
105
-		$iterator = new RegexIterator($iterator, '/^.+\.php$/i');
106
-
107
-		foreach ($iterator as $file) {
108
-			/** @var SplFileInfo $file */
109
-			$this->emit('CodeChecker', 'analyseFileBegin', [$file->getPathname()]);
110
-			$fileErrors = $this->analyseFile($file->__toString());
111
-			$this->emit('CodeChecker', 'analyseFileFinished', [$file->getPathname(), $fileErrors]);
112
-			$errors = array_merge($fileErrors, $errors);
113
-		}
114
-
115
-		return $errors;
116
-	}
117
-
118
-
119
-	/**
120
-	 * @param string $file
121
-	 * @return array
122
-	 */
123
-	public function analyseFile(string $file): array {
124
-		$code = file_get_contents($file);
125
-		$statements = $this->parser->parse($code);
126
-
127
-		$visitor = new NodeVisitor($this->checkList);
128
-		$migrationVisitor = new MigrationSchemaChecker();
129
-		$traverser = new NodeTraverser;
130
-		$traverser->addVisitor($visitor);
131
-
132
-		if ($this->checkMigrationSchema && preg_match('#^.+\\/Migration\\/Version[^\\/]{1,255}\\.php$#i', $file)) {
133
-			$traverser->addVisitor($migrationVisitor);
134
-		}
135
-
136
-		$traverser->traverse($statements);
137
-
138
-		return array_merge($visitor->errors, $migrationVisitor->errors);
139
-	}
39
+    const CLASS_EXTENDS_NOT_ALLOWED = 1000;
40
+    const CLASS_IMPLEMENTS_NOT_ALLOWED = 1001;
41
+    const STATIC_CALL_NOT_ALLOWED = 1002;
42
+    const CLASS_CONST_FETCH_NOT_ALLOWED = 1003;
43
+    const CLASS_NEW_NOT_ALLOWED =  1004;
44
+    const OP_OPERATOR_USAGE_DISCOURAGED =  1005;
45
+    const CLASS_USE_NOT_ALLOWED =  1006;
46
+    const CLASS_METHOD_CALL_NOT_ALLOWED =  1007;
47
+
48
+    /** @var Parser */
49
+    private $parser;
50
+
51
+    /** @var ICheck */
52
+    protected $checkList;
53
+
54
+    /** @var bool */
55
+    protected $checkMigrationSchema;
56
+
57
+    public function __construct(ICheck $checkList, $checkMigrationSchema) {
58
+        $this->checkList = $checkList;
59
+        $this->checkMigrationSchema = $checkMigrationSchema;
60
+        $this->parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
61
+    }
62
+
63
+    /**
64
+     * @param string $appId
65
+     * @return array
66
+     * @throws \RuntimeException if app with $appId is unknown
67
+     */
68
+    public function analyse(string $appId): array {
69
+        $appPath = \OC_App::getAppPath($appId);
70
+        if ($appPath === false) {
71
+            throw new \RuntimeException("No app with given id <$appId> known.");
72
+        }
73
+
74
+        return $this->analyseFolder($appId, $appPath);
75
+    }
76
+
77
+    /**
78
+     * @param string $appId
79
+     * @param string $folder
80
+     * @return array
81
+     */
82
+    public function analyseFolder(string $appId, string $folder): array {
83
+        $errors = [];
84
+
85
+        $excludedDirectories = ['vendor', '3rdparty', '.git', 'l10n', 'tests', 'test', 'build'];
86
+        if ($appId === 'password_policy') {
87
+            $excludedDirectories[] = 'lists';
88
+        }
89
+
90
+        $excludes = array_map(function($item) use ($folder) {
91
+            return $folder . '/' . $item;
92
+        }, $excludedDirectories);
93
+
94
+        $iterator = new RecursiveDirectoryIterator($folder, RecursiveDirectoryIterator::SKIP_DOTS);
95
+        $iterator = new RecursiveCallbackFilterIterator($iterator, function($item) use ($folder, $excludes){
96
+            /** @var SplFileInfo $item */
97
+            foreach($excludes as $exclude) {
98
+                if (substr($item->getPath(), 0, strlen($exclude)) === $exclude) {
99
+                    return false;
100
+                }
101
+            }
102
+            return true;
103
+        });
104
+        $iterator = new RecursiveIteratorIterator($iterator);
105
+        $iterator = new RegexIterator($iterator, '/^.+\.php$/i');
106
+
107
+        foreach ($iterator as $file) {
108
+            /** @var SplFileInfo $file */
109
+            $this->emit('CodeChecker', 'analyseFileBegin', [$file->getPathname()]);
110
+            $fileErrors = $this->analyseFile($file->__toString());
111
+            $this->emit('CodeChecker', 'analyseFileFinished', [$file->getPathname(), $fileErrors]);
112
+            $errors = array_merge($fileErrors, $errors);
113
+        }
114
+
115
+        return $errors;
116
+    }
117
+
118
+
119
+    /**
120
+     * @param string $file
121
+     * @return array
122
+     */
123
+    public function analyseFile(string $file): array {
124
+        $code = file_get_contents($file);
125
+        $statements = $this->parser->parse($code);
126
+
127
+        $visitor = new NodeVisitor($this->checkList);
128
+        $migrationVisitor = new MigrationSchemaChecker();
129
+        $traverser = new NodeTraverser;
130
+        $traverser->addVisitor($visitor);
131
+
132
+        if ($this->checkMigrationSchema && preg_match('#^.+\\/Migration\\/Version[^\\/]{1,255}\\.php$#i', $file)) {
133
+            $traverser->addVisitor($migrationVisitor);
134
+        }
135
+
136
+        $traverser->traverse($statements);
137
+
138
+        return array_merge($visitor->errors, $migrationVisitor->errors);
139
+    }
140 140
 }
Please login to merge, or discard this patch.
lib/private/App/CodeChecker/ICheck.php 1 patch
Indentation   +26 added lines, -26 removed lines patch added patch discarded remove patch
@@ -22,35 +22,35 @@
 block discarded – undo
22 22
 namespace OC\App\CodeChecker;
23 23
 
24 24
 interface ICheck {
25
-	/**
26
-	 * @param int $errorCode
27
-	 * @param string $errorObject
28
-	 * @return string
29
-	 */
30
-	public function getDescription($errorCode, $errorObject);
25
+    /**
26
+     * @param int $errorCode
27
+     * @param string $errorObject
28
+     * @return string
29
+     */
30
+    public function getDescription($errorCode, $errorObject);
31 31
 
32
-	/**
33
-	 * @return array E.g.: `'ClassName' => 'oc version',`
34
-	 */
35
-	public function getClasses();
32
+    /**
33
+     * @return array E.g.: `'ClassName' => 'oc version',`
34
+     */
35
+    public function getClasses();
36 36
 
37
-	/**
38
-	 * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
39
-	 */
40
-	public function getConstants();
37
+    /**
38
+     * @return array E.g.: `'ClassName::CONSTANT_NAME' => 'oc version',`
39
+     */
40
+    public function getConstants();
41 41
 
42
-	/**
43
-	 * @return array E.g.: `'functionName' => 'oc version',`
44
-	 */
45
-	public function getFunctions();
42
+    /**
43
+     * @return array E.g.: `'functionName' => 'oc version',`
44
+     */
45
+    public function getFunctions();
46 46
 
47
-	/**
48
-	 * @return array E.g.: `'ClassName::methodName' => 'oc version',`
49
-	 */
50
-	public function getMethods();
47
+    /**
48
+     * @return array E.g.: `'ClassName::methodName' => 'oc version',`
49
+     */
50
+    public function getMethods();
51 51
 
52
-	/**
53
-	 * @return bool
54
-	 */
55
-	public function checkStrongComparisons();
52
+    /**
53
+     * @return bool
54
+     */
55
+    public function checkStrongComparisons();
56 56
 }
Please login to merge, or discard this patch.
lib/private/DateTimeFormatter.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -237,7 +237,7 @@  discard block
 block discarded – undo
237 237
 	 * @return string Formatted date and time string
238 238
 	 */
239 239
 	public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
240
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
240
+		return $this->format($timestamp, 'datetime', $formatDate.'|'.$formatTime, $timeZone, $l);
241 241
 	}
242 242
 
243 243
 	/**
@@ -256,7 +256,7 @@  discard block
 block discarded – undo
256 256
 			$formatDate .= '^';
257 257
 		}
258 258
 
259
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
259
+		return $this->format($timestamp, 'datetime', $formatDate.'|'.$formatTime, $timeZone, $l);
260 260
 	}
261 261
 
262 262
 	/**
Please login to merge, or discard this patch.
Indentation   +268 added lines, -268 removed lines patch added patch discarded remove patch
@@ -25,294 +25,294 @@
 block discarded – undo
25 25
 namespace OC;
26 26
 
27 27
 class DateTimeFormatter implements \OCP\IDateTimeFormatter {
28
-	/** @var \DateTimeZone */
29
-	protected $defaultTimeZone;
28
+    /** @var \DateTimeZone */
29
+    protected $defaultTimeZone;
30 30
 
31
-	/** @var \OCP\IL10N */
32
-	protected $defaultL10N;
31
+    /** @var \OCP\IL10N */
32
+    protected $defaultL10N;
33 33
 
34
-	/**
35
-	 * Constructor
36
-	 *
37
-	 * @param \DateTimeZone $defaultTimeZone Set the timezone for the format
38
-	 * @param \OCP\IL10N $defaultL10N Set the language for the format
39
-	 */
40
-	public function __construct(\DateTimeZone $defaultTimeZone, \OCP\IL10N $defaultL10N) {
41
-		$this->defaultTimeZone = $defaultTimeZone;
42
-		$this->defaultL10N = $defaultL10N;
43
-	}
34
+    /**
35
+     * Constructor
36
+     *
37
+     * @param \DateTimeZone $defaultTimeZone Set the timezone for the format
38
+     * @param \OCP\IL10N $defaultL10N Set the language for the format
39
+     */
40
+    public function __construct(\DateTimeZone $defaultTimeZone, \OCP\IL10N $defaultL10N) {
41
+        $this->defaultTimeZone = $defaultTimeZone;
42
+        $this->defaultL10N = $defaultL10N;
43
+    }
44 44
 
45
-	/**
46
-	 * Get TimeZone to use
47
-	 *
48
-	 * @param \DateTimeZone $timeZone	The timezone to use
49
-	 * @return \DateTimeZone		The timezone to use, falling back to the current user's timezone
50
-	 */
51
-	protected function getTimeZone($timeZone = null) {
52
-		if ($timeZone === null) {
53
-			$timeZone = $this->defaultTimeZone;
54
-		}
45
+    /**
46
+     * Get TimeZone to use
47
+     *
48
+     * @param \DateTimeZone $timeZone	The timezone to use
49
+     * @return \DateTimeZone		The timezone to use, falling back to the current user's timezone
50
+     */
51
+    protected function getTimeZone($timeZone = null) {
52
+        if ($timeZone === null) {
53
+            $timeZone = $this->defaultTimeZone;
54
+        }
55 55
 
56
-		return $timeZone;
57
-	}
56
+        return $timeZone;
57
+    }
58 58
 
59
-	/**
60
-	 * Get \OCP\IL10N to use
61
-	 *
62
-	 * @param \OCP\IL10N $l	The locale to use
63
-	 * @return \OCP\IL10N		The locale to use, falling back to the current user's locale
64
-	 */
65
-	protected function getLocale($l = null) {
66
-		if ($l === null) {
67
-			$l = $this->defaultL10N;
68
-		}
59
+    /**
60
+     * Get \OCP\IL10N to use
61
+     *
62
+     * @param \OCP\IL10N $l	The locale to use
63
+     * @return \OCP\IL10N		The locale to use, falling back to the current user's locale
64
+     */
65
+    protected function getLocale($l = null) {
66
+        if ($l === null) {
67
+            $l = $this->defaultL10N;
68
+        }
69 69
 
70
-		return $l;
71
-	}
70
+        return $l;
71
+    }
72 72
 
73
-	/**
74
-	 * Generates a DateTime object with the given timestamp and TimeZone
75
-	 *
76
-	 * @param mixed $timestamp
77
-	 * @param \DateTimeZone $timeZone	The timezone to use
78
-	 * @return \DateTime
79
-	 */
80
-	protected function getDateTime($timestamp, \DateTimeZone $timeZone = null) {
81
-		if ($timestamp === null) {
82
-			return new \DateTime('now', $timeZone);
83
-		} else if (!$timestamp instanceof \DateTime) {
84
-			$dateTime = new \DateTime('now', $timeZone);
85
-			$dateTime->setTimestamp($timestamp);
86
-			return $dateTime;
87
-		}
88
-		if ($timeZone) {
89
-			$timestamp->setTimezone($timeZone);
90
-		}
91
-		return $timestamp;
92
-	}
73
+    /**
74
+     * Generates a DateTime object with the given timestamp and TimeZone
75
+     *
76
+     * @param mixed $timestamp
77
+     * @param \DateTimeZone $timeZone	The timezone to use
78
+     * @return \DateTime
79
+     */
80
+    protected function getDateTime($timestamp, \DateTimeZone $timeZone = null) {
81
+        if ($timestamp === null) {
82
+            return new \DateTime('now', $timeZone);
83
+        } else if (!$timestamp instanceof \DateTime) {
84
+            $dateTime = new \DateTime('now', $timeZone);
85
+            $dateTime->setTimestamp($timestamp);
86
+            return $dateTime;
87
+        }
88
+        if ($timeZone) {
89
+            $timestamp->setTimezone($timeZone);
90
+        }
91
+        return $timestamp;
92
+    }
93 93
 
94
-	/**
95
-	 * Formats the date of the given timestamp
96
-	 *
97
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
98
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
99
-	 * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
100
-	 * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
101
-	 * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
102
-	 * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
103
-	 * 				The exact format is dependent on the language
104
-	 * @param \DateTimeZone	$timeZone	The timezone to use
105
-	 * @param \OCP\IL10N	$l			The locale to use
106
-	 * @return string Formatted date string
107
-	 */
108
-	public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
109
-		return $this->format($timestamp, 'date', $format, $timeZone, $l);
110
-	}
94
+    /**
95
+     * Formats the date of the given timestamp
96
+     *
97
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
98
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
99
+     * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
100
+     * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
101
+     * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
102
+     * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
103
+     * 				The exact format is dependent on the language
104
+     * @param \DateTimeZone	$timeZone	The timezone to use
105
+     * @param \OCP\IL10N	$l			The locale to use
106
+     * @return string Formatted date string
107
+     */
108
+    public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
109
+        return $this->format($timestamp, 'date', $format, $timeZone, $l);
110
+    }
111 111
 
112
-	/**
113
-	 * Formats the date of the given timestamp
114
-	 *
115
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
116
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
117
-	 * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
118
-	 * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
119
-	 * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
120
-	 * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
121
-	 * 				The exact format is dependent on the language
122
-	 * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
123
-	 * @param \DateTimeZone	$timeZone	The timezone to use
124
-	 * @param \OCP\IL10N	$l			The locale to use
125
-	 * @return string Formatted relative date string
126
-	 */
127
-	public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
128
-		if (substr($format, -1) !== '*' && substr($format, -1) !== '*') {
129
-			$format .= '^';
130
-		}
112
+    /**
113
+     * Formats the date of the given timestamp
114
+     *
115
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
116
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
117
+     * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
118
+     * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
119
+     * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
120
+     * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
121
+     * 				The exact format is dependent on the language
122
+     * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
123
+     * @param \DateTimeZone	$timeZone	The timezone to use
124
+     * @param \OCP\IL10N	$l			The locale to use
125
+     * @return string Formatted relative date string
126
+     */
127
+    public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
128
+        if (substr($format, -1) !== '*' && substr($format, -1) !== '*') {
129
+            $format .= '^';
130
+        }
131 131
 
132
-		return $this->format($timestamp, 'date', $format, $timeZone, $l);
133
-	}
132
+        return $this->format($timestamp, 'date', $format, $timeZone, $l);
133
+    }
134 134
 
135
-	/**
136
-	 * Gives the relative date of the timestamp
137
-	 * Only works for past dates
138
-	 *
139
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
140
-	 * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
141
-	 * @return string	Dates returned are:
142
-	 * 				<  1 month	=> Today, Yesterday, n days ago
143
-	 * 				< 13 month	=> last month, n months ago
144
-	 * 				>= 13 month	=> last year, n years ago
145
-	 * @param \OCP\IL10N	$l			The locale to use
146
-	 * @return string Formatted date span
147
-	 */
148
-	public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
149
-		$l = $this->getLocale($l);
150
-		$timestamp = $this->getDateTime($timestamp);
151
-		$timestamp->setTime(0, 0, 0);
135
+    /**
136
+     * Gives the relative date of the timestamp
137
+     * Only works for past dates
138
+     *
139
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
140
+     * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
141
+     * @return string	Dates returned are:
142
+     * 				<  1 month	=> Today, Yesterday, n days ago
143
+     * 				< 13 month	=> last month, n months ago
144
+     * 				>= 13 month	=> last year, n years ago
145
+     * @param \OCP\IL10N	$l			The locale to use
146
+     * @return string Formatted date span
147
+     */
148
+    public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
149
+        $l = $this->getLocale($l);
150
+        $timestamp = $this->getDateTime($timestamp);
151
+        $timestamp->setTime(0, 0, 0);
152 152
 
153
-		if ($baseTimestamp === null) {
154
-			$baseTimestamp = time();
155
-		}
156
-		$baseTimestamp = $this->getDateTime($baseTimestamp);
157
-		$baseTimestamp->setTime(0, 0, 0);
158
-		$dateInterval = $timestamp->diff($baseTimestamp);
153
+        if ($baseTimestamp === null) {
154
+            $baseTimestamp = time();
155
+        }
156
+        $baseTimestamp = $this->getDateTime($baseTimestamp);
157
+        $baseTimestamp->setTime(0, 0, 0);
158
+        $dateInterval = $timestamp->diff($baseTimestamp);
159 159
 
160
-		if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) {
161
-			return $l->t('today');
162
-		} else if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) {
163
-			if ($timestamp > $baseTimestamp) {
164
-				return $l->t('tomorrow');
165
-			} else {
166
-				return $l->t('yesterday');
167
-			}
168
-		} else if ($dateInterval->y == 0 && $dateInterval->m == 0) {
169
-			if ($timestamp > $baseTimestamp) {
170
-				return $l->n('in %n day', 'in %n days', $dateInterval->d);
171
-			} else {
172
-				return $l->n('%n day ago', '%n days ago', $dateInterval->d);
173
-			}
174
-		} else if ($dateInterval->y == 0 && $dateInterval->m == 1) {
175
-			if ($timestamp > $baseTimestamp) {
176
-				return $l->t('next month');
177
-			} else {
178
-				return $l->t('last month');
179
-			}
180
-		} else if ($dateInterval->y == 0) {
181
-			if ($timestamp > $baseTimestamp) {
182
-				return $l->n('in %n month', 'in %n months', $dateInterval->m);
183
-			} else {
184
-				return $l->n('%n month ago', '%n months ago', $dateInterval->m);
185
-			}
186
-		} else if ($dateInterval->y == 1) {
187
-			if ($timestamp > $baseTimestamp) {
188
-				return $l->t('next year');
189
-			} else {
190
-				return $l->t('last year');
191
-			}
192
-		}
193
-		if ($timestamp > $baseTimestamp) {
194
-			return $l->n('in %n year', 'in %n years', $dateInterval->y);
195
-		} else {
196
-			return $l->n('%n year ago', '%n years ago', $dateInterval->y);
197
-		}
198
-	}
160
+        if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) {
161
+            return $l->t('today');
162
+        } else if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) {
163
+            if ($timestamp > $baseTimestamp) {
164
+                return $l->t('tomorrow');
165
+            } else {
166
+                return $l->t('yesterday');
167
+            }
168
+        } else if ($dateInterval->y == 0 && $dateInterval->m == 0) {
169
+            if ($timestamp > $baseTimestamp) {
170
+                return $l->n('in %n day', 'in %n days', $dateInterval->d);
171
+            } else {
172
+                return $l->n('%n day ago', '%n days ago', $dateInterval->d);
173
+            }
174
+        } else if ($dateInterval->y == 0 && $dateInterval->m == 1) {
175
+            if ($timestamp > $baseTimestamp) {
176
+                return $l->t('next month');
177
+            } else {
178
+                return $l->t('last month');
179
+            }
180
+        } else if ($dateInterval->y == 0) {
181
+            if ($timestamp > $baseTimestamp) {
182
+                return $l->n('in %n month', 'in %n months', $dateInterval->m);
183
+            } else {
184
+                return $l->n('%n month ago', '%n months ago', $dateInterval->m);
185
+            }
186
+        } else if ($dateInterval->y == 1) {
187
+            if ($timestamp > $baseTimestamp) {
188
+                return $l->t('next year');
189
+            } else {
190
+                return $l->t('last year');
191
+            }
192
+        }
193
+        if ($timestamp > $baseTimestamp) {
194
+            return $l->n('in %n year', 'in %n years', $dateInterval->y);
195
+        } else {
196
+            return $l->n('%n year ago', '%n years ago', $dateInterval->y);
197
+        }
198
+    }
199 199
 
200
-	/**
201
-	 * Formats the time of the given timestamp
202
-	 *
203
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
204
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
205
-	 * 				full:	e.g. 'h:mm:ss a zzzz'	=> '11:42:13 AM GMT+0:00'
206
-	 * 				long:	e.g. 'h:mm:ss a z'		=> '11:42:13 AM GMT'
207
-	 * 				medium:	e.g. 'h:mm:ss a'		=> '11:42:13 AM'
208
-	 * 				short:	e.g. 'h:mm a'			=> '11:42 AM'
209
-	 * 				The exact format is dependent on the language
210
-	 * @param \DateTimeZone	$timeZone	The timezone to use
211
-	 * @param \OCP\IL10N	$l			The locale to use
212
-	 * @return string Formatted time string
213
-	 */
214
-	public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
215
-		return $this->format($timestamp, 'time', $format, $timeZone, $l);
216
-	}
200
+    /**
201
+     * Formats the time of the given timestamp
202
+     *
203
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
204
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
205
+     * 				full:	e.g. 'h:mm:ss a zzzz'	=> '11:42:13 AM GMT+0:00'
206
+     * 				long:	e.g. 'h:mm:ss a z'		=> '11:42:13 AM GMT'
207
+     * 				medium:	e.g. 'h:mm:ss a'		=> '11:42:13 AM'
208
+     * 				short:	e.g. 'h:mm a'			=> '11:42 AM'
209
+     * 				The exact format is dependent on the language
210
+     * @param \DateTimeZone	$timeZone	The timezone to use
211
+     * @param \OCP\IL10N	$l			The locale to use
212
+     * @return string Formatted time string
213
+     */
214
+    public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
215
+        return $this->format($timestamp, 'time', $format, $timeZone, $l);
216
+    }
217 217
 
218
-	/**
219
-	 * Gives the relative past time of the timestamp
220
-	 *
221
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
222
-	 * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
223
-	 * @return string	Dates returned are:
224
-	 * 				< 60 sec	=> seconds ago
225
-	 * 				<  1 hour	=> n minutes ago
226
-	 * 				<  1 day	=> n hours ago
227
-	 * 				<  1 month	=> Yesterday, n days ago
228
-	 * 				< 13 month	=> last month, n months ago
229
-	 * 				>= 13 month	=> last year, n years ago
230
-	 * @param \OCP\IL10N	$l			The locale to use
231
-	 * @return string Formatted time span
232
-	 */
233
-	public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
234
-		$l = $this->getLocale($l);
235
-		$timestamp = $this->getDateTime($timestamp);
236
-		if ($baseTimestamp === null) {
237
-			$baseTimestamp = time();
238
-		}
239
-		$baseTimestamp = $this->getDateTime($baseTimestamp);
218
+    /**
219
+     * Gives the relative past time of the timestamp
220
+     *
221
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
222
+     * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
223
+     * @return string	Dates returned are:
224
+     * 				< 60 sec	=> seconds ago
225
+     * 				<  1 hour	=> n minutes ago
226
+     * 				<  1 day	=> n hours ago
227
+     * 				<  1 month	=> Yesterday, n days ago
228
+     * 				< 13 month	=> last month, n months ago
229
+     * 				>= 13 month	=> last year, n years ago
230
+     * @param \OCP\IL10N	$l			The locale to use
231
+     * @return string Formatted time span
232
+     */
233
+    public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
234
+        $l = $this->getLocale($l);
235
+        $timestamp = $this->getDateTime($timestamp);
236
+        if ($baseTimestamp === null) {
237
+            $baseTimestamp = time();
238
+        }
239
+        $baseTimestamp = $this->getDateTime($baseTimestamp);
240 240
 
241
-		$diff = $timestamp->diff($baseTimestamp);
242
-		if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0) {
243
-			return $this->formatDateSpan($timestamp, $baseTimestamp, $l);
244
-		}
241
+        $diff = $timestamp->diff($baseTimestamp);
242
+        if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0) {
243
+            return $this->formatDateSpan($timestamp, $baseTimestamp, $l);
244
+        }
245 245
 
246
-		if ($diff->h > 0) {
247
-			if ($timestamp > $baseTimestamp) {
248
-				return $l->n('in %n hour', 'in %n hours', $diff->h);
249
-			} else {
250
-				return $l->n('%n hour ago', '%n hours ago', $diff->h);
251
-			}
252
-		} else if ($diff->i > 0) {
253
-			if ($timestamp > $baseTimestamp) {
254
-				return $l->n('in %n minute', 'in %n minutes', $diff->i);
255
-			} else {
256
-				return $l->n('%n minute ago', '%n minutes ago', $diff->i);
257
-			}
258
-		}
259
-		if ($timestamp > $baseTimestamp) {
260
-			return $l->t('in a few seconds');
261
-		} else {
262
-			return $l->t('seconds ago');
263
-		}
264
-	}
246
+        if ($diff->h > 0) {
247
+            if ($timestamp > $baseTimestamp) {
248
+                return $l->n('in %n hour', 'in %n hours', $diff->h);
249
+            } else {
250
+                return $l->n('%n hour ago', '%n hours ago', $diff->h);
251
+            }
252
+        } else if ($diff->i > 0) {
253
+            if ($timestamp > $baseTimestamp) {
254
+                return $l->n('in %n minute', 'in %n minutes', $diff->i);
255
+            } else {
256
+                return $l->n('%n minute ago', '%n minutes ago', $diff->i);
257
+            }
258
+        }
259
+        if ($timestamp > $baseTimestamp) {
260
+            return $l->t('in a few seconds');
261
+        } else {
262
+            return $l->t('seconds ago');
263
+        }
264
+    }
265 265
 
266
-	/**
267
-	 * Formats the date and time of the given timestamp
268
-	 *
269
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
270
-	 * @param string		$formatDate		See formatDate() for description
271
-	 * @param string		$formatTime		See formatTime() for description
272
-	 * @param \DateTimeZone	$timeZone	The timezone to use
273
-	 * @param \OCP\IL10N	$l			The locale to use
274
-	 * @return string Formatted date and time string
275
-	 */
276
-	public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
277
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
278
-	}
266
+    /**
267
+     * Formats the date and time of the given timestamp
268
+     *
269
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
270
+     * @param string		$formatDate		See formatDate() for description
271
+     * @param string		$formatTime		See formatTime() for description
272
+     * @param \DateTimeZone	$timeZone	The timezone to use
273
+     * @param \OCP\IL10N	$l			The locale to use
274
+     * @return string Formatted date and time string
275
+     */
276
+    public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
277
+        return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
278
+    }
279 279
 
280
-	/**
281
-	 * Formats the date and time of the given timestamp
282
-	 *
283
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
284
-	 * @param string	$formatDate		See formatDate() for description
285
-	 * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
286
-	 * @param string	$formatTime		See formatTime() for description
287
-	 * @param \DateTimeZone	$timeZone	The timezone to use
288
-	 * @param \OCP\IL10N	$l			The locale to use
289
-	 * @return string Formatted relative date and time string
290
-	 */
291
-	public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
292
-		if (substr($formatDate, -1) !== '^' && substr($formatDate, -1) !== '*') {
293
-			$formatDate .= '^';
294
-		}
280
+    /**
281
+     * Formats the date and time of the given timestamp
282
+     *
283
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
284
+     * @param string	$formatDate		See formatDate() for description
285
+     * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
286
+     * @param string	$formatTime		See formatTime() for description
287
+     * @param \DateTimeZone	$timeZone	The timezone to use
288
+     * @param \OCP\IL10N	$l			The locale to use
289
+     * @return string Formatted relative date and time string
290
+     */
291
+    public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
292
+        if (substr($formatDate, -1) !== '^' && substr($formatDate, -1) !== '*') {
293
+            $formatDate .= '^';
294
+        }
295 295
 
296
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
297
-	}
296
+        return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
297
+    }
298 298
 
299
-	/**
300
-	 * Formats the date and time of the given timestamp
301
-	 *
302
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
303
-	 * @param string		$type		One of 'date', 'datetime' or 'time'
304
-	 * @param string		$format		Format string
305
-	 * @param \DateTimeZone	$timeZone	The timezone to use
306
-	 * @param \OCP\IL10N	$l			The locale to use
307
-	 * @return string Formatted date and time string
308
-	 */
309
-	protected function format($timestamp, $type, $format, \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
310
-		$l = $this->getLocale($l);
311
-		$timeZone = $this->getTimeZone($timeZone);
312
-		$timestamp = $this->getDateTime($timestamp, $timeZone);
299
+    /**
300
+     * Formats the date and time of the given timestamp
301
+     *
302
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
303
+     * @param string		$type		One of 'date', 'datetime' or 'time'
304
+     * @param string		$format		Format string
305
+     * @param \DateTimeZone	$timeZone	The timezone to use
306
+     * @param \OCP\IL10N	$l			The locale to use
307
+     * @return string Formatted date and time string
308
+     */
309
+    protected function format($timestamp, $type, $format, \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
310
+        $l = $this->getLocale($l);
311
+        $timeZone = $this->getTimeZone($timeZone);
312
+        $timestamp = $this->getDateTime($timestamp, $timeZone);
313 313
 
314
-		return $l->l($type, $timestamp, array(
315
-			'width' => $format,
316
-		));
317
-	}
314
+        return $l->l($type, $timestamp, array(
315
+            'width' => $format,
316
+        ));
317
+    }
318 318
 }
Please login to merge, or discard this patch.
lib/private/Preview/Provider.php 1 patch
Indentation   +33 added lines, -33 removed lines patch added patch discarded remove patch
@@ -28,41 +28,41 @@
 block discarded – undo
28 28
 use OCP\Preview\IProvider;
29 29
 
30 30
 abstract class Provider implements IProvider {
31
-	private $options;
31
+    private $options;
32 32
 
33
-	/**
34
-	 * Constructor
35
-	 *
36
-	 * @param array $options
37
-	 */
38
-	public function __construct(array $options = []) {
39
-		$this->options = $options;
40
-	}
33
+    /**
34
+     * Constructor
35
+     *
36
+     * @param array $options
37
+     */
38
+    public function __construct(array $options = []) {
39
+        $this->options = $options;
40
+    }
41 41
 
42
-	/**
43
-	 * @return string Regex with the mimetypes that are supported by this provider
44
-	 */
45
-	abstract public function getMimeType();
42
+    /**
43
+     * @return string Regex with the mimetypes that are supported by this provider
44
+     */
45
+    abstract public function getMimeType();
46 46
 
47
-	/**
48
-	 * Check if a preview can be generated for $path
49
-	 *
50
-	 * @param \OCP\Files\FileInfo $file
51
-	 * @return bool
52
-	 */
53
-	public function isAvailable(\OCP\Files\FileInfo $file) {
54
-		return true;
55
-	}
47
+    /**
48
+     * Check if a preview can be generated for $path
49
+     *
50
+     * @param \OCP\Files\FileInfo $file
51
+     * @return bool
52
+     */
53
+    public function isAvailable(\OCP\Files\FileInfo $file) {
54
+        return true;
55
+    }
56 56
 
57
-	/**
58
-	 * Generates thumbnail which fits in $maxX and $maxY and keeps the aspect ratio, for file at path $path
59
-	 *
60
-	 * @param string $path Path of file
61
-	 * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
62
-	 * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
63
-	 * @param bool $scalingup Disable/Enable upscaling of previews
64
-	 * @param \OC\Files\View $fileview fileview object of user folder
65
-	 * @return bool|\OCP\IImage false if no preview was generated
66
-	 */
67
-	abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
57
+    /**
58
+     * Generates thumbnail which fits in $maxX and $maxY and keeps the aspect ratio, for file at path $path
59
+     *
60
+     * @param string $path Path of file
61
+     * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
62
+     * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
63
+     * @param bool $scalingup Disable/Enable upscaling of previews
64
+     * @param \OC\Files\View $fileview fileview object of user folder
65
+     * @return bool|\OCP\IImage false if no preview was generated
66
+     */
67
+    abstract public function getThumbnail($path, $maxX, $maxY, $scalingup, $fileview);
68 68
 }
Please login to merge, or discard this patch.
lib/private/Preview/Movie.php 2 patches
Spacing   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -84,15 +84,15 @@
 block discarded – undo
84 84
 		$tmpPath = \OC::$server->getTempManager()->getTemporaryFile();
85 85
 
86 86
 		if (self::$avconvBinary) {
87
-			$cmd = self::$avconvBinary . ' -y -ss ' . escapeshellarg($second) .
88
-				' -i ' . escapeshellarg($absPath) .
89
-				' -an -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
87
+			$cmd = self::$avconvBinary.' -y -ss '.escapeshellarg($second).
88
+				' -i '.escapeshellarg($absPath).
89
+				' -an -f mjpeg -vframes 1 -vsync 1 '.escapeshellarg($tmpPath).
90 90
 				' > /dev/null 2>&1';
91 91
 		} else {
92
-			$cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
93
-				' -i ' . escapeshellarg($absPath) .
94
-				' -f mjpeg -vframes 1' .
95
-				' ' . escapeshellarg($tmpPath) .
92
+			$cmd = self::$ffmpegBinary.' -y -ss '.escapeshellarg($second).
93
+				' -i '.escapeshellarg($absPath).
94
+				' -f mjpeg -vframes 1'.
95
+				' '.escapeshellarg($tmpPath).
96 96
 				' > /dev/null 2>&1';
97 97
 		}
98 98
 
Please login to merge, or discard this patch.
Indentation   +58 added lines, -58 removed lines patch added patch discarded remove patch
@@ -29,73 +29,73 @@
 block discarded – undo
29 29
 use OCP\IImage;
30 30
 
31 31
 class Movie extends ProviderV2 {
32
-	public static $avconvBinary;
33
-	public static $ffmpegBinary;
32
+    public static $avconvBinary;
33
+    public static $ffmpegBinary;
34 34
 
35
-	/**
36
-	 * {@inheritDoc}
37
-	 */
38
-	public function getMimeType(): string {
39
-		return '/video\/.*/';
40
-	}
35
+    /**
36
+     * {@inheritDoc}
37
+     */
38
+    public function getMimeType(): string {
39
+        return '/video\/.*/';
40
+    }
41 41
 
42
-	/**
43
-	 * {@inheritDoc}
44
-	 */
45
-	public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage {
46
-		// TODO: use proc_open() and stream the source file ?
42
+    /**
43
+     * {@inheritDoc}
44
+     */
45
+    public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage {
46
+        // TODO: use proc_open() and stream the source file ?
47 47
 
48
-		$absPath = $this->getLocalFile($file, 5242880); // only use the first 5MB
48
+        $absPath = $this->getLocalFile($file, 5242880); // only use the first 5MB
49 49
 
50
-		$result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
51
-		if ($result === false) {
52
-			$result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
53
-			if ($result === false) {
54
-				$result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
55
-			}
56
-		}
50
+        $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
51
+        if ($result === false) {
52
+            $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
53
+            if ($result === false) {
54
+                $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
55
+            }
56
+        }
57 57
 
58
-		$this->cleanTmpFiles();
58
+        $this->cleanTmpFiles();
59 59
 
60
-		return $result;
61
-	}
60
+        return $result;
61
+    }
62 62
 
63
-	/**
64
-	 * @param int $maxX
65
-	 * @param int $maxY
66
-	 * @param string $absPath
67
-	 * @param int $second
68
-	 * @return null|\OCP\IImage
69
-	 */
70
-	private function generateThumbNail($maxX, $maxY, $absPath, $second): ?IImage {
71
-		$tmpPath = \OC::$server->getTempManager()->getTemporaryFile();
63
+    /**
64
+     * @param int $maxX
65
+     * @param int $maxY
66
+     * @param string $absPath
67
+     * @param int $second
68
+     * @return null|\OCP\IImage
69
+     */
70
+    private function generateThumbNail($maxX, $maxY, $absPath, $second): ?IImage {
71
+        $tmpPath = \OC::$server->getTempManager()->getTemporaryFile();
72 72
 
73
-		if (self::$avconvBinary) {
74
-			$cmd = self::$avconvBinary . ' -y -ss ' . escapeshellarg($second) .
75
-				' -i ' . escapeshellarg($absPath) .
76
-				' -an -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
77
-				' > /dev/null 2>&1';
78
-		} else {
79
-			$cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
80
-				' -i ' . escapeshellarg($absPath) .
81
-				' -f mjpeg -vframes 1' .
82
-				' ' . escapeshellarg($tmpPath) .
83
-				' > /dev/null 2>&1';
84
-		}
73
+        if (self::$avconvBinary) {
74
+            $cmd = self::$avconvBinary . ' -y -ss ' . escapeshellarg($second) .
75
+                ' -i ' . escapeshellarg($absPath) .
76
+                ' -an -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
77
+                ' > /dev/null 2>&1';
78
+        } else {
79
+            $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
80
+                ' -i ' . escapeshellarg($absPath) .
81
+                ' -f mjpeg -vframes 1' .
82
+                ' ' . escapeshellarg($tmpPath) .
83
+                ' > /dev/null 2>&1';
84
+        }
85 85
 
86
-		exec($cmd, $output, $returnCode);
86
+        exec($cmd, $output, $returnCode);
87 87
 
88
-		if ($returnCode === 0) {
89
-			$image = new \OC_Image();
90
-			$image->loadFromFile($tmpPath);
91
-			unlink($tmpPath);
92
-			if ($image->valid()) {
93
-				$image->scaleDownToFit($maxX, $maxY);
88
+        if ($returnCode === 0) {
89
+            $image = new \OC_Image();
90
+            $image->loadFromFile($tmpPath);
91
+            unlink($tmpPath);
92
+            if ($image->valid()) {
93
+                $image->scaleDownToFit($maxX, $maxY);
94 94
 
95
-				return $image;
96
-			}
97
-		}
98
-		unlink($tmpPath);
99
-		return null;
100
-	}
95
+                return $image;
96
+            }
97
+        }
98
+        unlink($tmpPath);
99
+        return null;
100
+    }
101 101
 }
Please login to merge, or discard this patch.
lib/private/Share20/Hooks.php 1 patch
Indentation   +9 added lines, -9 removed lines patch added patch discarded remove patch
@@ -22,15 +22,15 @@
 block discarded – undo
22 22
 namespace OC\Share20;
23 23
 
24 24
 class Hooks {
25
-	public static function post_deleteUser($arguments) {
26
-		\OC::$server->getShareManager()->userDeleted($arguments['uid']);
27
-	}
25
+    public static function post_deleteUser($arguments) {
26
+        \OC::$server->getShareManager()->userDeleted($arguments['uid']);
27
+    }
28 28
 
29
-	public static function post_deleteGroup($arguments) {
30
-		\OC::$server->getShareManager()->groupDeleted($arguments['gid']);
31
-	}
29
+    public static function post_deleteGroup($arguments) {
30
+        \OC::$server->getShareManager()->groupDeleted($arguments['gid']);
31
+    }
32 32
 
33
-	public static function post_removeFromGroup($arguments) {
34
-		\OC::$server->getShareManager()->userDeletedFromGroup($arguments['uid'], $arguments['gid']);
35
-	}
33
+    public static function post_removeFromGroup($arguments) {
34
+        \OC::$server->getShareManager()->userDeletedFromGroup($arguments['uid'], $arguments['gid']);
35
+    }
36 36
 }
Please login to merge, or discard this patch.
lib/private/Share20/Share.php 2 patches
Spacing   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -86,10 +86,10 @@  discard block
 block discarded – undo
86 86
 	 */
87 87
 	public function setId($id) {
88 88
 		if (is_int($id)) {
89
-			$id = (string)$id;
89
+			$id = (string) $id;
90 90
 		}
91 91
 
92
-		if(!is_string($id)) {
92
+		if (!is_string($id)) {
93 93
 			throw new \InvalidArgumentException('String expected.');
94 94
 		}
95 95
 
@@ -115,14 +115,14 @@  discard block
 block discarded – undo
115 115
 		if ($this->providerId === null || $this->id === null) {
116 116
 			throw new \UnexpectedValueException;
117 117
 		}
118
-		return $this->providerId . ':' . $this->id;
118
+		return $this->providerId.':'.$this->id;
119 119
 	}
120 120
 
121 121
 	/**
122 122
 	 * @inheritdoc
123 123
 	 */
124 124
 	public function setProviderId($id) {
125
-		if(!is_string($id)) {
125
+		if (!is_string($id)) {
126 126
 			throw new \InvalidArgumentException('String expected.');
127 127
 		}
128 128
 
@@ -156,7 +156,7 @@  discard block
 block discarded – undo
156 156
 
157 157
 			// for federated shares the owner can be a remote user, in this
158 158
 			// case we use the initiator
159
-			if($this->userManager->userExists($this->shareOwner)) {
159
+			if ($this->userManager->userExists($this->shareOwner)) {
160 160
 				$userFolder = $this->rootFolder->getUserFolder($this->shareOwner);
161 161
 			} else {
162 162
 				$userFolder = $this->rootFolder->getUserFolder($this->sharedBy);
@@ -164,7 +164,7 @@  discard block
 block discarded – undo
164 164
 
165 165
 			$nodes = $userFolder->getById($this->fileId);
166 166
 			if (empty($nodes)) {
167
-				throw new NotFoundException('Node for share not found, fileid: ' . $this->fileId);
167
+				throw new NotFoundException('Node for share not found, fileid: '.$this->fileId);
168 168
 			}
169 169
 
170 170
 			$this->node = $nodes[0];
Please login to merge, or discard this patch.
Indentation   +510 added lines, -510 removed lines patch added patch discarded remove patch
@@ -34,514 +34,514 @@
 block discarded – undo
34 34
 
35 35
 class Share implements \OCP\Share\IShare {
36 36
 
37
-	/** @var string */
38
-	private $id;
39
-	/** @var string */
40
-	private $providerId;
41
-	/** @var Node */
42
-	private $node;
43
-	/** @var int */
44
-	private $fileId;
45
-	/** @var string */
46
-	private $nodeType;
47
-	/** @var int */
48
-	private $shareType;
49
-	/** @var string */
50
-	private $sharedWith;
51
-	/** @var string */
52
-	private $sharedWithDisplayName;
53
-	/** @var string */
54
-	private $sharedWithAvatar;
55
-	/** @var string */
56
-	private $sharedBy;
57
-	/** @var string */
58
-	private $shareOwner;
59
-	/** @var int */
60
-	private $permissions;
61
-	/** @var string */
62
-	private $note = '';
63
-	/** @var \DateTime */
64
-	private $expireDate;
65
-	/** @var string */
66
-	private $password;
67
-	/** @var bool */
68
-	private $sendPasswordByTalk = false;
69
-	/** @var string */
70
-	private $token;
71
-	/** @var int */
72
-	private $parent;
73
-	/** @var string */
74
-	private $target;
75
-	/** @var \DateTime */
76
-	private $shareTime;
77
-	/** @var bool */
78
-	private $mailSend;
79
-	/** @var string */
80
-	private $label = '';
81
-
82
-	/** @var IRootFolder */
83
-	private $rootFolder;
84
-
85
-	/** @var IUserManager */
86
-	private $userManager;
87
-
88
-	/** @var ICacheEntry|null */
89
-	private $nodeCacheEntry;
90
-
91
-	/** @var bool */
92
-	private $hideDownload = false;
93
-
94
-	public function __construct(IRootFolder $rootFolder, IUserManager $userManager) {
95
-		$this->rootFolder = $rootFolder;
96
-		$this->userManager = $userManager;
97
-	}
98
-
99
-	/**
100
-	 * @inheritdoc
101
-	 */
102
-	public function setId($id) {
103
-		if (is_int($id)) {
104
-			$id = (string)$id;
105
-		}
106
-
107
-		if(!is_string($id)) {
108
-			throw new \InvalidArgumentException('String expected.');
109
-		}
110
-
111
-		if ($this->id !== null) {
112
-			throw new IllegalIDChangeException('Not allowed to assign a new internal id to a share');
113
-		}
114
-
115
-		$this->id = trim($id);
116
-		return $this;
117
-	}
118
-
119
-	/**
120
-	 * @inheritdoc
121
-	 */
122
-	public function getId() {
123
-		return $this->id;
124
-	}
125
-
126
-	/**
127
-	 * @inheritdoc
128
-	 */
129
-	public function getFullId() {
130
-		if ($this->providerId === null || $this->id === null) {
131
-			throw new \UnexpectedValueException;
132
-		}
133
-		return $this->providerId . ':' . $this->id;
134
-	}
135
-
136
-	/**
137
-	 * @inheritdoc
138
-	 */
139
-	public function setProviderId($id) {
140
-		if(!is_string($id)) {
141
-			throw new \InvalidArgumentException('String expected.');
142
-		}
143
-
144
-		if ($this->providerId !== null) {
145
-			throw new IllegalIDChangeException('Not allowed to assign a new provider id to a share');
146
-		}
147
-
148
-		$this->providerId = trim($id);
149
-		return $this;
150
-	}
151
-
152
-	/**
153
-	 * @inheritdoc
154
-	 */
155
-	public function setNode(Node $node) {
156
-		$this->fileId = null;
157
-		$this->nodeType = null;
158
-		$this->node = $node;
159
-		return $this;
160
-	}
161
-
162
-	/**
163
-	 * @inheritdoc
164
-	 */
165
-	public function getNode() {
166
-		if ($this->node === null) {
167
-
168
-			if ($this->shareOwner === null || $this->fileId === null) {
169
-				throw new NotFoundException();
170
-			}
171
-
172
-			// for federated shares the owner can be a remote user, in this
173
-			// case we use the initiator
174
-			if($this->userManager->userExists($this->shareOwner)) {
175
-				$userFolder = $this->rootFolder->getUserFolder($this->shareOwner);
176
-			} else {
177
-				$userFolder = $this->rootFolder->getUserFolder($this->sharedBy);
178
-			}
179
-
180
-			$nodes = $userFolder->getById($this->fileId);
181
-			if (empty($nodes)) {
182
-				throw new NotFoundException('Node for share not found, fileid: ' . $this->fileId);
183
-			}
184
-
185
-			$this->node = $nodes[0];
186
-		}
187
-
188
-		return $this->node;
189
-	}
190
-
191
-	/**
192
-	 * @inheritdoc
193
-	 */
194
-	public function setNodeId($fileId) {
195
-		$this->node = null;
196
-		$this->fileId = $fileId;
197
-		return $this;
198
-	}
199
-
200
-	/**
201
-	 * @inheritdoc
202
-	 */
203
-	public function getNodeId() {
204
-		if ($this->fileId === null) {
205
-			$this->fileId = $this->getNode()->getId();
206
-		}
207
-
208
-		return $this->fileId;
209
-	}
210
-
211
-	/**
212
-	 * @inheritdoc
213
-	 */
214
-	public function setNodeType($type) {
215
-		if ($type !== 'file' && $type !== 'folder') {
216
-			throw new \InvalidArgumentException();
217
-		}
218
-
219
-		$this->nodeType = $type;
220
-		return $this;
221
-	}
222
-
223
-	/**
224
-	 * @inheritdoc
225
-	 */
226
-	public function getNodeType() {
227
-		if ($this->nodeType === null) {
228
-			$node = $this->getNode();
229
-			$this->nodeType = $node instanceof File ? 'file' : 'folder';
230
-		}
231
-
232
-		return $this->nodeType;
233
-	}
234
-
235
-	/**
236
-	 * @inheritdoc
237
-	 */
238
-	public function setShareType($shareType) {
239
-		$this->shareType = $shareType;
240
-		return $this;
241
-	}
242
-
243
-	/**
244
-	 * @inheritdoc
245
-	 */
246
-	public function getShareType() {
247
-		return $this->shareType;
248
-	}
249
-
250
-	/**
251
-	 * @inheritdoc
252
-	 */
253
-	public function setSharedWith($sharedWith) {
254
-		if (!is_string($sharedWith)) {
255
-			throw new \InvalidArgumentException();
256
-		}
257
-		$this->sharedWith = $sharedWith;
258
-		return $this;
259
-	}
260
-
261
-	/**
262
-	 * @inheritdoc
263
-	 */
264
-	public function getSharedWith() {
265
-		return $this->sharedWith;
266
-	}
267
-
268
-	/**
269
-	 * @inheritdoc
270
-	 */
271
-	public function setSharedWithDisplayName($displayName) {
272
-		if (!is_string($displayName)) {
273
-			throw new \InvalidArgumentException();
274
-		}
275
-		$this->sharedWithDisplayName = $displayName;
276
-		return $this;
277
-	}
278
-
279
-	/**
280
-	 * @inheritdoc
281
-	 */
282
-	public function getSharedWithDisplayName() {
283
-		return $this->sharedWithDisplayName;
284
-	}
285
-
286
-	/**
287
-	 * @inheritdoc
288
-	 */
289
-	public function setSharedWithAvatar($src) {
290
-		if (!is_string($src)) {
291
-			throw new \InvalidArgumentException();
292
-		}
293
-		$this->sharedWithAvatar = $src;
294
-		return $this;
295
-	}
296
-
297
-	/**
298
-	 * @inheritdoc
299
-	 */
300
-	public function getSharedWithAvatar() {
301
-		return $this->sharedWithAvatar;
302
-	}
303
-
304
-	/**
305
-	 * @inheritdoc
306
-	 */
307
-	public function setPermissions($permissions) {
308
-		//TODO checkes
309
-
310
-		$this->permissions = $permissions;
311
-		return $this;
312
-	}
313
-
314
-	/**
315
-	 * @inheritdoc
316
-	 */
317
-	public function getPermissions() {
318
-		return $this->permissions;
319
-	}
320
-
321
-	/**
322
-	 * @inheritdoc
323
-	 */
324
-	public function setNote($note) {
325
-		$this->note = $note;
326
-		return $this;
327
-	}
328
-
329
-	/**
330
-	 * @inheritdoc
331
-	 */
332
-	public function getNote() {
333
-		if (is_string($this->note)) {
334
-			return $this->note;
335
-		}
336
-		return '';
337
-	}
338
-
339
-	/**
340
-	 * @inheritdoc
341
-	 */
342
-	public function setLabel($label) {
343
-		$this->label = $label;
344
-		return $this;
345
-	}
346
-
347
-	/**
348
-	 * @inheritdoc
349
-	 */
350
-	public function getLabel() {
351
-		return $this->label;
352
-	}
353
-
354
-	/**
355
-	 * @inheritdoc
356
-	 */
357
-	public function setExpirationDate($expireDate) {
358
-		//TODO checks
359
-
360
-		$this->expireDate = $expireDate;
361
-		return $this;
362
-	}
363
-
364
-	/**
365
-	 * @inheritdoc
366
-	 */
367
-	public function getExpirationDate() {
368
-		return $this->expireDate;
369
-	}
370
-
371
-	/**
372
-	 * @inheritdoc
373
-	 */
374
-	public function setSharedBy($sharedBy) {
375
-		if (!is_string($sharedBy)) {
376
-			throw new \InvalidArgumentException();
377
-		}
378
-		//TODO checks
379
-		$this->sharedBy = $sharedBy;
380
-
381
-		return $this;
382
-	}
383
-
384
-	/**
385
-	 * @inheritdoc
386
-	 */
387
-	public function getSharedBy() {
388
-		//TODO check if set
389
-		return $this->sharedBy;
390
-	}
391
-
392
-	/**
393
-	 * @inheritdoc
394
-	 */
395
-	public function setShareOwner($shareOwner) {
396
-		if (!is_string($shareOwner)) {
397
-			throw new \InvalidArgumentException();
398
-		}
399
-		//TODO checks
400
-
401
-		$this->shareOwner = $shareOwner;
402
-		return $this;
403
-	}
404
-
405
-	/**
406
-	 * @inheritdoc
407
-	 */
408
-	public function getShareOwner() {
409
-		//TODO check if set
410
-		return $this->shareOwner;
411
-	}
412
-
413
-	/**
414
-	 * @inheritdoc
415
-	 */
416
-	public function setPassword($password) {
417
-		$this->password = $password;
418
-		return $this;
419
-	}
420
-
421
-	/**
422
-	 * @inheritdoc
423
-	 */
424
-	public function getPassword() {
425
-		return $this->password;
426
-	}
427
-
428
-	/**
429
-	 * @inheritdoc
430
-	 */
431
-	public function setSendPasswordByTalk(bool $sendPasswordByTalk) {
432
-		$this->sendPasswordByTalk = $sendPasswordByTalk;
433
-		return $this;
434
-	}
435
-
436
-	/**
437
-	 * @inheritdoc
438
-	 */
439
-	public function getSendPasswordByTalk(): bool {
440
-		return $this->sendPasswordByTalk;
441
-	}
442
-
443
-	/**
444
-	 * @inheritdoc
445
-	 */
446
-	public function setToken($token) {
447
-		$this->token = $token;
448
-		return $this;
449
-	}
450
-
451
-	/**
452
-	 * @inheritdoc
453
-	 */
454
-	public function getToken() {
455
-		return $this->token;
456
-	}
457
-
458
-	/**
459
-	 * Set the parent of this share
460
-	 *
461
-	 * @param int parent
462
-	 * @return \OCP\Share\IShare
463
-	 * @deprecated The new shares do not have parents. This is just here for legacy reasons.
464
-	 */
465
-	public function setParent($parent) {
466
-		$this->parent = $parent;
467
-		return $this;
468
-	}
469
-
470
-	/**
471
-	 * Get the parent of this share.
472
-	 *
473
-	 * @return int
474
-	 * @deprecated The new shares do not have parents. This is just here for legacy reasons.
475
-	 */
476
-	public function getParent() {
477
-		return $this->parent;
478
-	}
479
-
480
-	/**
481
-	 * @inheritdoc
482
-	 */
483
-	public function setTarget($target) {
484
-		$this->target = $target;
485
-		return $this;
486
-	}
487
-
488
-	/**
489
-	 * @inheritdoc
490
-	 */
491
-	public function getTarget() {
492
-		return $this->target;
493
-	}
494
-
495
-	/**
496
-	 * @inheritdoc
497
-	 */
498
-	public function setShareTime(\DateTime $shareTime) {
499
-		$this->shareTime = $shareTime;
500
-		return $this;
501
-	}
502
-
503
-	/**
504
-	 * @inheritdoc
505
-	 */
506
-	public function getShareTime() {
507
-		return $this->shareTime;
508
-	}
509
-
510
-	/**
511
-	 * @inheritdoc
512
-	 */
513
-	public function setMailSend($mailSend) {
514
-		$this->mailSend = $mailSend;
515
-		return $this;
516
-	}
517
-
518
-	/**
519
-	 * @inheritdoc
520
-	 */
521
-	public function getMailSend() {
522
-		return $this->mailSend;
523
-	}
524
-
525
-	/**
526
-	 * @inheritdoc
527
-	 */
528
-	public function setNodeCacheEntry(ICacheEntry $entry) {
529
-		$this->nodeCacheEntry = $entry;
530
-	}
531
-
532
-	/**
533
-	 * @inheritdoc
534
-	 */
535
-	public function getNodeCacheEntry() {
536
-		return $this->nodeCacheEntry;
537
-	}
538
-
539
-	public function setHideDownload(bool $hide): IShare {
540
-		$this->hideDownload = $hide;
541
-		return $this;
542
-	}
543
-
544
-	public function getHideDownload(): bool {
545
-		return $this->hideDownload;
546
-	}
37
+    /** @var string */
38
+    private $id;
39
+    /** @var string */
40
+    private $providerId;
41
+    /** @var Node */
42
+    private $node;
43
+    /** @var int */
44
+    private $fileId;
45
+    /** @var string */
46
+    private $nodeType;
47
+    /** @var int */
48
+    private $shareType;
49
+    /** @var string */
50
+    private $sharedWith;
51
+    /** @var string */
52
+    private $sharedWithDisplayName;
53
+    /** @var string */
54
+    private $sharedWithAvatar;
55
+    /** @var string */
56
+    private $sharedBy;
57
+    /** @var string */
58
+    private $shareOwner;
59
+    /** @var int */
60
+    private $permissions;
61
+    /** @var string */
62
+    private $note = '';
63
+    /** @var \DateTime */
64
+    private $expireDate;
65
+    /** @var string */
66
+    private $password;
67
+    /** @var bool */
68
+    private $sendPasswordByTalk = false;
69
+    /** @var string */
70
+    private $token;
71
+    /** @var int */
72
+    private $parent;
73
+    /** @var string */
74
+    private $target;
75
+    /** @var \DateTime */
76
+    private $shareTime;
77
+    /** @var bool */
78
+    private $mailSend;
79
+    /** @var string */
80
+    private $label = '';
81
+
82
+    /** @var IRootFolder */
83
+    private $rootFolder;
84
+
85
+    /** @var IUserManager */
86
+    private $userManager;
87
+
88
+    /** @var ICacheEntry|null */
89
+    private $nodeCacheEntry;
90
+
91
+    /** @var bool */
92
+    private $hideDownload = false;
93
+
94
+    public function __construct(IRootFolder $rootFolder, IUserManager $userManager) {
95
+        $this->rootFolder = $rootFolder;
96
+        $this->userManager = $userManager;
97
+    }
98
+
99
+    /**
100
+     * @inheritdoc
101
+     */
102
+    public function setId($id) {
103
+        if (is_int($id)) {
104
+            $id = (string)$id;
105
+        }
106
+
107
+        if(!is_string($id)) {
108
+            throw new \InvalidArgumentException('String expected.');
109
+        }
110
+
111
+        if ($this->id !== null) {
112
+            throw new IllegalIDChangeException('Not allowed to assign a new internal id to a share');
113
+        }
114
+
115
+        $this->id = trim($id);
116
+        return $this;
117
+    }
118
+
119
+    /**
120
+     * @inheritdoc
121
+     */
122
+    public function getId() {
123
+        return $this->id;
124
+    }
125
+
126
+    /**
127
+     * @inheritdoc
128
+     */
129
+    public function getFullId() {
130
+        if ($this->providerId === null || $this->id === null) {
131
+            throw new \UnexpectedValueException;
132
+        }
133
+        return $this->providerId . ':' . $this->id;
134
+    }
135
+
136
+    /**
137
+     * @inheritdoc
138
+     */
139
+    public function setProviderId($id) {
140
+        if(!is_string($id)) {
141
+            throw new \InvalidArgumentException('String expected.');
142
+        }
143
+
144
+        if ($this->providerId !== null) {
145
+            throw new IllegalIDChangeException('Not allowed to assign a new provider id to a share');
146
+        }
147
+
148
+        $this->providerId = trim($id);
149
+        return $this;
150
+    }
151
+
152
+    /**
153
+     * @inheritdoc
154
+     */
155
+    public function setNode(Node $node) {
156
+        $this->fileId = null;
157
+        $this->nodeType = null;
158
+        $this->node = $node;
159
+        return $this;
160
+    }
161
+
162
+    /**
163
+     * @inheritdoc
164
+     */
165
+    public function getNode() {
166
+        if ($this->node === null) {
167
+
168
+            if ($this->shareOwner === null || $this->fileId === null) {
169
+                throw new NotFoundException();
170
+            }
171
+
172
+            // for federated shares the owner can be a remote user, in this
173
+            // case we use the initiator
174
+            if($this->userManager->userExists($this->shareOwner)) {
175
+                $userFolder = $this->rootFolder->getUserFolder($this->shareOwner);
176
+            } else {
177
+                $userFolder = $this->rootFolder->getUserFolder($this->sharedBy);
178
+            }
179
+
180
+            $nodes = $userFolder->getById($this->fileId);
181
+            if (empty($nodes)) {
182
+                throw new NotFoundException('Node for share not found, fileid: ' . $this->fileId);
183
+            }
184
+
185
+            $this->node = $nodes[0];
186
+        }
187
+
188
+        return $this->node;
189
+    }
190
+
191
+    /**
192
+     * @inheritdoc
193
+     */
194
+    public function setNodeId($fileId) {
195
+        $this->node = null;
196
+        $this->fileId = $fileId;
197
+        return $this;
198
+    }
199
+
200
+    /**
201
+     * @inheritdoc
202
+     */
203
+    public function getNodeId() {
204
+        if ($this->fileId === null) {
205
+            $this->fileId = $this->getNode()->getId();
206
+        }
207
+
208
+        return $this->fileId;
209
+    }
210
+
211
+    /**
212
+     * @inheritdoc
213
+     */
214
+    public function setNodeType($type) {
215
+        if ($type !== 'file' && $type !== 'folder') {
216
+            throw new \InvalidArgumentException();
217
+        }
218
+
219
+        $this->nodeType = $type;
220
+        return $this;
221
+    }
222
+
223
+    /**
224
+     * @inheritdoc
225
+     */
226
+    public function getNodeType() {
227
+        if ($this->nodeType === null) {
228
+            $node = $this->getNode();
229
+            $this->nodeType = $node instanceof File ? 'file' : 'folder';
230
+        }
231
+
232
+        return $this->nodeType;
233
+    }
234
+
235
+    /**
236
+     * @inheritdoc
237
+     */
238
+    public function setShareType($shareType) {
239
+        $this->shareType = $shareType;
240
+        return $this;
241
+    }
242
+
243
+    /**
244
+     * @inheritdoc
245
+     */
246
+    public function getShareType() {
247
+        return $this->shareType;
248
+    }
249
+
250
+    /**
251
+     * @inheritdoc
252
+     */
253
+    public function setSharedWith($sharedWith) {
254
+        if (!is_string($sharedWith)) {
255
+            throw new \InvalidArgumentException();
256
+        }
257
+        $this->sharedWith = $sharedWith;
258
+        return $this;
259
+    }
260
+
261
+    /**
262
+     * @inheritdoc
263
+     */
264
+    public function getSharedWith() {
265
+        return $this->sharedWith;
266
+    }
267
+
268
+    /**
269
+     * @inheritdoc
270
+     */
271
+    public function setSharedWithDisplayName($displayName) {
272
+        if (!is_string($displayName)) {
273
+            throw new \InvalidArgumentException();
274
+        }
275
+        $this->sharedWithDisplayName = $displayName;
276
+        return $this;
277
+    }
278
+
279
+    /**
280
+     * @inheritdoc
281
+     */
282
+    public function getSharedWithDisplayName() {
283
+        return $this->sharedWithDisplayName;
284
+    }
285
+
286
+    /**
287
+     * @inheritdoc
288
+     */
289
+    public function setSharedWithAvatar($src) {
290
+        if (!is_string($src)) {
291
+            throw new \InvalidArgumentException();
292
+        }
293
+        $this->sharedWithAvatar = $src;
294
+        return $this;
295
+    }
296
+
297
+    /**
298
+     * @inheritdoc
299
+     */
300
+    public function getSharedWithAvatar() {
301
+        return $this->sharedWithAvatar;
302
+    }
303
+
304
+    /**
305
+     * @inheritdoc
306
+     */
307
+    public function setPermissions($permissions) {
308
+        //TODO checkes
309
+
310
+        $this->permissions = $permissions;
311
+        return $this;
312
+    }
313
+
314
+    /**
315
+     * @inheritdoc
316
+     */
317
+    public function getPermissions() {
318
+        return $this->permissions;
319
+    }
320
+
321
+    /**
322
+     * @inheritdoc
323
+     */
324
+    public function setNote($note) {
325
+        $this->note = $note;
326
+        return $this;
327
+    }
328
+
329
+    /**
330
+     * @inheritdoc
331
+     */
332
+    public function getNote() {
333
+        if (is_string($this->note)) {
334
+            return $this->note;
335
+        }
336
+        return '';
337
+    }
338
+
339
+    /**
340
+     * @inheritdoc
341
+     */
342
+    public function setLabel($label) {
343
+        $this->label = $label;
344
+        return $this;
345
+    }
346
+
347
+    /**
348
+     * @inheritdoc
349
+     */
350
+    public function getLabel() {
351
+        return $this->label;
352
+    }
353
+
354
+    /**
355
+     * @inheritdoc
356
+     */
357
+    public function setExpirationDate($expireDate) {
358
+        //TODO checks
359
+
360
+        $this->expireDate = $expireDate;
361
+        return $this;
362
+    }
363
+
364
+    /**
365
+     * @inheritdoc
366
+     */
367
+    public function getExpirationDate() {
368
+        return $this->expireDate;
369
+    }
370
+
371
+    /**
372
+     * @inheritdoc
373
+     */
374
+    public function setSharedBy($sharedBy) {
375
+        if (!is_string($sharedBy)) {
376
+            throw new \InvalidArgumentException();
377
+        }
378
+        //TODO checks
379
+        $this->sharedBy = $sharedBy;
380
+
381
+        return $this;
382
+    }
383
+
384
+    /**
385
+     * @inheritdoc
386
+     */
387
+    public function getSharedBy() {
388
+        //TODO check if set
389
+        return $this->sharedBy;
390
+    }
391
+
392
+    /**
393
+     * @inheritdoc
394
+     */
395
+    public function setShareOwner($shareOwner) {
396
+        if (!is_string($shareOwner)) {
397
+            throw new \InvalidArgumentException();
398
+        }
399
+        //TODO checks
400
+
401
+        $this->shareOwner = $shareOwner;
402
+        return $this;
403
+    }
404
+
405
+    /**
406
+     * @inheritdoc
407
+     */
408
+    public function getShareOwner() {
409
+        //TODO check if set
410
+        return $this->shareOwner;
411
+    }
412
+
413
+    /**
414
+     * @inheritdoc
415
+     */
416
+    public function setPassword($password) {
417
+        $this->password = $password;
418
+        return $this;
419
+    }
420
+
421
+    /**
422
+     * @inheritdoc
423
+     */
424
+    public function getPassword() {
425
+        return $this->password;
426
+    }
427
+
428
+    /**
429
+     * @inheritdoc
430
+     */
431
+    public function setSendPasswordByTalk(bool $sendPasswordByTalk) {
432
+        $this->sendPasswordByTalk = $sendPasswordByTalk;
433
+        return $this;
434
+    }
435
+
436
+    /**
437
+     * @inheritdoc
438
+     */
439
+    public function getSendPasswordByTalk(): bool {
440
+        return $this->sendPasswordByTalk;
441
+    }
442
+
443
+    /**
444
+     * @inheritdoc
445
+     */
446
+    public function setToken($token) {
447
+        $this->token = $token;
448
+        return $this;
449
+    }
450
+
451
+    /**
452
+     * @inheritdoc
453
+     */
454
+    public function getToken() {
455
+        return $this->token;
456
+    }
457
+
458
+    /**
459
+     * Set the parent of this share
460
+     *
461
+     * @param int parent
462
+     * @return \OCP\Share\IShare
463
+     * @deprecated The new shares do not have parents. This is just here for legacy reasons.
464
+     */
465
+    public function setParent($parent) {
466
+        $this->parent = $parent;
467
+        return $this;
468
+    }
469
+
470
+    /**
471
+     * Get the parent of this share.
472
+     *
473
+     * @return int
474
+     * @deprecated The new shares do not have parents. This is just here for legacy reasons.
475
+     */
476
+    public function getParent() {
477
+        return $this->parent;
478
+    }
479
+
480
+    /**
481
+     * @inheritdoc
482
+     */
483
+    public function setTarget($target) {
484
+        $this->target = $target;
485
+        return $this;
486
+    }
487
+
488
+    /**
489
+     * @inheritdoc
490
+     */
491
+    public function getTarget() {
492
+        return $this->target;
493
+    }
494
+
495
+    /**
496
+     * @inheritdoc
497
+     */
498
+    public function setShareTime(\DateTime $shareTime) {
499
+        $this->shareTime = $shareTime;
500
+        return $this;
501
+    }
502
+
503
+    /**
504
+     * @inheritdoc
505
+     */
506
+    public function getShareTime() {
507
+        return $this->shareTime;
508
+    }
509
+
510
+    /**
511
+     * @inheritdoc
512
+     */
513
+    public function setMailSend($mailSend) {
514
+        $this->mailSend = $mailSend;
515
+        return $this;
516
+    }
517
+
518
+    /**
519
+     * @inheritdoc
520
+     */
521
+    public function getMailSend() {
522
+        return $this->mailSend;
523
+    }
524
+
525
+    /**
526
+     * @inheritdoc
527
+     */
528
+    public function setNodeCacheEntry(ICacheEntry $entry) {
529
+        $this->nodeCacheEntry = $entry;
530
+    }
531
+
532
+    /**
533
+     * @inheritdoc
534
+     */
535
+    public function getNodeCacheEntry() {
536
+        return $this->nodeCacheEntry;
537
+    }
538
+
539
+    public function setHideDownload(bool $hide): IShare {
540
+        $this->hideDownload = $hide;
541
+        return $this;
542
+    }
543
+
544
+    public function getHideDownload(): bool {
545
+        return $this->hideDownload;
546
+    }
547 547
 }
Please login to merge, or discard this patch.
lib/private/PreviewManager.php 2 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -244,7 +244,7 @@  discard block
 block discarded – undo
244 244
 		}
245 245
 
246 246
 		$mount = $file->getMountPoint();
247
-		if ($mount and !$mount->getOption('previews', true)){
247
+		if ($mount and !$mount->getOption('previews', true)) {
248 248
 			return false;
249 249
 		}
250 250
 
@@ -330,7 +330,7 @@  discard block
 block discarded – undo
330 330
 	 */
331 331
 	protected function registerCoreProvider($class, $mimeType, $options = []) {
332 332
 		if (in_array(trim($class, '\\'), $this->getEnabledDefaultProvider())) {
333
-			$this->registerProvider($mimeType, function () use ($class, $options) {
333
+			$this->registerProvider($mimeType, function() use ($class, $options) {
334 334
 				return new $class($options);
335 335
 			});
336 336
 		}
Please login to merge, or discard this patch.
Indentation   +387 added lines, -387 removed lines patch added patch discarded remove patch
@@ -39,391 +39,391 @@
 block discarded – undo
39 39
 use Symfony\Component\EventDispatcher\EventDispatcherInterface;
40 40
 
41 41
 class PreviewManager implements IPreview {
42
-	/** @var IConfig */
43
-	protected $config;
44
-
45
-	/** @var IRootFolder */
46
-	protected $rootFolder;
47
-
48
-	/** @var IAppData */
49
-	protected $appData;
50
-
51
-	/** @var EventDispatcherInterface */
52
-	protected $eventDispatcher;
53
-
54
-	/** @var Generator */
55
-	private $generator;
56
-
57
-	/** @var bool */
58
-	protected $providerListDirty = false;
59
-
60
-	/** @var bool */
61
-	protected $registeredCoreProviders = false;
62
-
63
-	/** @var array */
64
-	protected $providers = [];
65
-
66
-	/** @var array mime type => support status */
67
-	protected $mimeTypeSupportMap = [];
68
-
69
-	/** @var array */
70
-	protected $defaultProviders;
71
-
72
-	/** @var string */
73
-	protected $userId;
74
-
75
-	/**
76
-	 * PreviewManager constructor.
77
-	 *
78
-	 * @param IConfig $config
79
-	 * @param IRootFolder $rootFolder
80
-	 * @param IAppData $appData
81
-	 * @param EventDispatcherInterface $eventDispatcher
82
-	 * @param string $userId
83
-	 */
84
-	public function __construct(IConfig $config,
85
-								IRootFolder $rootFolder,
86
-								IAppData $appData,
87
-								EventDispatcherInterface $eventDispatcher,
88
-								$userId) {
89
-		$this->config = $config;
90
-		$this->rootFolder = $rootFolder;
91
-		$this->appData = $appData;
92
-		$this->eventDispatcher = $eventDispatcher;
93
-		$this->userId = $userId;
94
-	}
95
-
96
-	/**
97
-	 * In order to improve lazy loading a closure can be registered which will be
98
-	 * called in case preview providers are actually requested
99
-	 *
100
-	 * $callable has to return an instance of \OCP\Preview\IProvider or \OCP\Preview\IProviderV2
101
-	 *
102
-	 * @param string $mimeTypeRegex Regex with the mime types that are supported by this provider
103
-	 * @param \Closure $callable
104
-	 * @return void
105
-	 */
106
-	public function registerProvider($mimeTypeRegex, \Closure $callable) {
107
-		if (!$this->config->getSystemValue('enable_previews', true)) {
108
-			return;
109
-		}
110
-
111
-		if (!isset($this->providers[$mimeTypeRegex])) {
112
-			$this->providers[$mimeTypeRegex] = [];
113
-		}
114
-		$this->providers[$mimeTypeRegex][] = $callable;
115
-		$this->providerListDirty = true;
116
-	}
117
-
118
-	/**
119
-	 * Get all providers
120
-	 * @return array
121
-	 */
122
-	public function getProviders() {
123
-		if (!$this->config->getSystemValue('enable_previews', true)) {
124
-			return [];
125
-		}
126
-
127
-		$this->registerCoreProviders();
128
-		if ($this->providerListDirty) {
129
-			$keys = array_map('strlen', array_keys($this->providers));
130
-			array_multisort($keys, SORT_DESC, $this->providers);
131
-			$this->providerListDirty = false;
132
-		}
133
-
134
-		return $this->providers;
135
-	}
136
-
137
-	/**
138
-	 * Does the manager have any providers
139
-	 * @return bool
140
-	 */
141
-	public function hasProviders() {
142
-		$this->registerCoreProviders();
143
-		return !empty($this->providers);
144
-	}
145
-
146
-	/**
147
-	 * return a preview of a file
148
-	 *
149
-	 * @param string $file The path to the file where you want a thumbnail from
150
-	 * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
151
-	 * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
152
-	 * @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
153
-	 * @return \OCP\IImage
154
-	 * @deprecated 11 Use getPreview
155
-	 */
156
-	public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false) {
157
-		try {
158
-			$userRoot = $this->rootFolder->getUserFolder($this->userId)->getParent();
159
-			$node = $userRoot->get($file);
160
-			if (!($file instanceof File)) {
161
-				throw new NotFoundException();
162
-			}
163
-
164
-			$preview = $this->getPreview($node, $maxX, $maxY);
165
-		} catch (\Exception $e) {
166
-			return new \OC_Image();
167
-		}
168
-
169
-		$previewImage = new \OC_Image();
170
-		$previewImage->loadFromData($preview->getContent());
171
-		return $previewImage;
172
-	}
173
-
174
-	/**
175
-	 * Returns a preview of a file
176
-	 *
177
-	 * The cache is searched first and if nothing usable was found then a preview is
178
-	 * generated by one of the providers
179
-	 *
180
-	 * @param File $file
181
-	 * @param int $width
182
-	 * @param int $height
183
-	 * @param bool $crop
184
-	 * @param string $mode
185
-	 * @param string $mimeType
186
-	 * @return ISimpleFile
187
-	 * @throws NotFoundException
188
-	 * @throws \InvalidArgumentException if the preview would be invalid (in case the original image is invalid)
189
-	 * @since 11.0.0 - \InvalidArgumentException was added in 12.0.0
190
-	 */
191
-	public function getPreview(File $file, $width = -1, $height = -1, $crop = false, $mode = IPreview::MODE_FILL, $mimeType = null) {
192
-		if ($this->generator === null) {
193
-			$this->generator = new Generator(
194
-				$this->config,
195
-				$this,
196
-				$this->appData,
197
-				new GeneratorHelper(
198
-					$this->rootFolder,
199
-					$this->config
200
-				),
201
-				$this->eventDispatcher
202
-			);
203
-		}
204
-
205
-		return $this->generator->getPreview($file, $width, $height, $crop, $mode, $mimeType);
206
-	}
207
-
208
-	/**
209
-	 * returns true if the passed mime type is supported
210
-	 *
211
-	 * @param string $mimeType
212
-	 * @return boolean
213
-	 */
214
-	public function isMimeSupported($mimeType = '*') {
215
-		if (!$this->config->getSystemValue('enable_previews', true)) {
216
-			return false;
217
-		}
218
-
219
-		if (isset($this->mimeTypeSupportMap[$mimeType])) {
220
-			return $this->mimeTypeSupportMap[$mimeType];
221
-		}
222
-
223
-		$this->registerCoreProviders();
224
-		$providerMimeTypes = array_keys($this->providers);
225
-		foreach ($providerMimeTypes as $supportedMimeType) {
226
-			if (preg_match($supportedMimeType, $mimeType)) {
227
-				$this->mimeTypeSupportMap[$mimeType] = true;
228
-				return true;
229
-			}
230
-		}
231
-		$this->mimeTypeSupportMap[$mimeType] = false;
232
-		return false;
233
-	}
234
-
235
-	/**
236
-	 * Check if a preview can be generated for a file
237
-	 *
238
-	 * @param \OCP\Files\FileInfo $file
239
-	 * @return bool
240
-	 */
241
-	public function isAvailable(\OCP\Files\FileInfo $file) {
242
-		if (!$this->config->getSystemValue('enable_previews', true)) {
243
-			return false;
244
-		}
245
-
246
-		$this->registerCoreProviders();
247
-		if (!$this->isMimeSupported($file->getMimetype())) {
248
-			return false;
249
-		}
250
-
251
-		$mount = $file->getMountPoint();
252
-		if ($mount and !$mount->getOption('previews', true)){
253
-			return false;
254
-		}
255
-
256
-		foreach ($this->providers as $supportedMimeType => $providers) {
257
-			if (preg_match($supportedMimeType, $file->getMimetype())) {
258
-				foreach ($providers as $closure) {
259
-					$provider = $closure();
260
-					if (!($provider instanceof IProvider)) {
261
-						continue;
262
-					}
263
-
264
-					/** @var $provider IProvider */
265
-					if ($provider->isAvailable($file)) {
266
-						return true;
267
-					}
268
-				}
269
-			}
270
-		}
271
-		return false;
272
-	}
273
-
274
-	/**
275
-	 * List of enabled default providers
276
-	 *
277
-	 * The following providers are enabled by default:
278
-	 *  - OC\Preview\PNG
279
-	 *  - OC\Preview\JPEG
280
-	 *  - OC\Preview\GIF
281
-	 *  - OC\Preview\BMP
282
-	 *  - OC\Preview\HEIC
283
-	 *  - OC\Preview\XBitmap
284
-	 *  - OC\Preview\MarkDown
285
-	 *  - OC\Preview\MP3
286
-	 *  - OC\Preview\TXT
287
-	 *
288
-	 * The following providers are disabled by default due to performance or privacy concerns:
289
-	 *  - OC\Preview\Font
290
-	 *  - OC\Preview\Illustrator
291
-	 *  - OC\Preview\Movie
292
-	 *  - OC\Preview\MSOfficeDoc
293
-	 *  - OC\Preview\MSOffice2003
294
-	 *  - OC\Preview\MSOffice2007
295
-	 *  - OC\Preview\OpenDocument
296
-	 *  - OC\Preview\PDF
297
-	 *  - OC\Preview\Photoshop
298
-	 *  - OC\Preview\Postscript
299
-	 *  - OC\Preview\StarOffice
300
-	 *  - OC\Preview\SVG
301
-	 *  - OC\Preview\TIFF
302
-	 *
303
-	 * @return array
304
-	 */
305
-	protected function getEnabledDefaultProvider() {
306
-		if ($this->defaultProviders !== null) {
307
-			return $this->defaultProviders;
308
-		}
309
-
310
-		$imageProviders = [
311
-			Preview\PNG::class,
312
-			Preview\JPEG::class,
313
-			Preview\GIF::class,
314
-			Preview\BMP::class,
315
-			Preview\HEIC::class,
316
-			Preview\XBitmap::class
317
-		];
318
-
319
-		$this->defaultProviders = $this->config->getSystemValue('enabledPreviewProviders', array_merge([
320
-			Preview\MarkDown::class,
321
-			Preview\MP3::class,
322
-			Preview\TXT::class,
323
-		], $imageProviders));
324
-
325
-		if (in_array(Preview\Image::class, $this->defaultProviders)) {
326
-			$this->defaultProviders = array_merge($this->defaultProviders, $imageProviders);
327
-		}
328
-		$this->defaultProviders = array_unique($this->defaultProviders);
329
-		return $this->defaultProviders;
330
-	}
331
-
332
-	/**
333
-	 * Register the default providers (if enabled)
334
-	 *
335
-	 * @param string $class
336
-	 * @param string $mimeType
337
-	 */
338
-	protected function registerCoreProvider($class, $mimeType, $options = []) {
339
-		if (in_array(trim($class, '\\'), $this->getEnabledDefaultProvider())) {
340
-			$this->registerProvider($mimeType, function () use ($class, $options) {
341
-				return new $class($options);
342
-			});
343
-		}
344
-	}
345
-
346
-	/**
347
-	 * Register the default providers (if enabled)
348
-	 */
349
-	protected function registerCoreProviders() {
350
-		if ($this->registeredCoreProviders) {
351
-			return;
352
-		}
353
-		$this->registeredCoreProviders = true;
354
-
355
-		$this->registerCoreProvider(Preview\TXT::class, '/text\/plain/');
356
-		$this->registerCoreProvider(Preview\MarkDown::class, '/text\/(x-)?markdown/');
357
-		$this->registerCoreProvider(Preview\PNG::class, '/image\/png/');
358
-		$this->registerCoreProvider(Preview\JPEG::class, '/image\/jpeg/');
359
-		$this->registerCoreProvider(Preview\GIF::class, '/image\/gif/');
360
-		$this->registerCoreProvider(Preview\BMP::class, '/image\/bmp/');
361
-		$this->registerCoreProvider(Preview\XBitmap::class, '/image\/x-xbitmap/');
362
-		$this->registerCoreProvider(Preview\MP3::class, '/audio\/mpeg/');
363
-
364
-		// SVG, Office and Bitmap require imagick
365
-		if (extension_loaded('imagick')) {
366
-			$checkImagick = new \Imagick();
367
-
368
-			$imagickProviders = [
369
-				'SVG'	=> ['mimetype' => '/image\/svg\+xml/', 'class' => Preview\SVG::class],
370
-				'TIFF'	=> ['mimetype' => '/image\/tiff/', 'class' => Preview\TIFF::class],
371
-				'PDF'	=> ['mimetype' => '/application\/pdf/', 'class' => Preview\PDF::class],
372
-				'AI'	=> ['mimetype' => '/application\/illustrator/', 'class' => Preview\Illustrator::class],
373
-				'PSD'	=> ['mimetype' => '/application\/x-photoshop/', 'class' => Preview\Photoshop::class],
374
-				'EPS'	=> ['mimetype' => '/application\/postscript/', 'class' => Preview\Postscript::class],
375
-				'TTF'	=> ['mimetype' => '/application\/(?:font-sfnt|x-font$)/', 'class' => Preview\Font::class],
376
-				'HEIC'  => ['mimetype' => '/image\/hei(f|c)/', 'class' => Preview\HEIC::class],
377
-			];
378
-
379
-			foreach ($imagickProviders as $queryFormat => $provider) {
380
-				$class = $provider['class'];
381
-				if (!in_array(trim($class, '\\'), $this->getEnabledDefaultProvider())) {
382
-					continue;
383
-				}
384
-
385
-				if (count($checkImagick->queryFormats($queryFormat)) === 1) {
386
-					$this->registerCoreProvider($class, $provider['mimetype']);
387
-				}
388
-			}
389
-
390
-			if (count($checkImagick->queryFormats('PDF')) === 1) {
391
-				if (\OC_Helper::is_function_enabled('shell_exec')) {
392
-					$officeFound = is_string($this->config->getSystemValue('preview_libreoffice_path', null));
393
-
394
-					if (!$officeFound) {
395
-						//let's see if there is libreoffice or openoffice on this machine
396
-						$whichLibreOffice = shell_exec('command -v libreoffice');
397
-						$officeFound = !empty($whichLibreOffice);
398
-						if (!$officeFound) {
399
-							$whichOpenOffice = shell_exec('command -v openoffice');
400
-							$officeFound = !empty($whichOpenOffice);
401
-						}
402
-					}
403
-
404
-					if ($officeFound) {
405
-						$this->registerCoreProvider(Preview\MSOfficeDoc::class, '/application\/msword/');
406
-						$this->registerCoreProvider(Preview\MSOffice2003::class, '/application\/vnd.ms-.*/');
407
-						$this->registerCoreProvider(Preview\MSOffice2007::class, '/application\/vnd.openxmlformats-officedocument.*/');
408
-						$this->registerCoreProvider(Preview\OpenDocument::class, '/application\/vnd.oasis.opendocument.*/');
409
-						$this->registerCoreProvider(Preview\StarOffice::class, '/application\/vnd.sun.xml.*/');
410
-					}
411
-				}
412
-			}
413
-		}
414
-
415
-		// Video requires avconv or ffmpeg
416
-		if (in_array(Preview\Movie::class, $this->getEnabledDefaultProvider())) {
417
-			$avconvBinary = \OC_Helper::findBinaryPath('avconv');
418
-			$ffmpegBinary = $avconvBinary ? null : \OC_Helper::findBinaryPath('ffmpeg');
419
-
420
-			if ($avconvBinary || $ffmpegBinary) {
421
-				// FIXME // a bit hacky but didn't want to use subclasses
422
-				\OC\Preview\Movie::$avconvBinary = $avconvBinary;
423
-				\OC\Preview\Movie::$ffmpegBinary = $ffmpegBinary;
424
-
425
-				$this->registerCoreProvider(Preview\Movie::class, '/video\/.*/');
426
-			}
427
-		}
428
-	}
42
+    /** @var IConfig */
43
+    protected $config;
44
+
45
+    /** @var IRootFolder */
46
+    protected $rootFolder;
47
+
48
+    /** @var IAppData */
49
+    protected $appData;
50
+
51
+    /** @var EventDispatcherInterface */
52
+    protected $eventDispatcher;
53
+
54
+    /** @var Generator */
55
+    private $generator;
56
+
57
+    /** @var bool */
58
+    protected $providerListDirty = false;
59
+
60
+    /** @var bool */
61
+    protected $registeredCoreProviders = false;
62
+
63
+    /** @var array */
64
+    protected $providers = [];
65
+
66
+    /** @var array mime type => support status */
67
+    protected $mimeTypeSupportMap = [];
68
+
69
+    /** @var array */
70
+    protected $defaultProviders;
71
+
72
+    /** @var string */
73
+    protected $userId;
74
+
75
+    /**
76
+     * PreviewManager constructor.
77
+     *
78
+     * @param IConfig $config
79
+     * @param IRootFolder $rootFolder
80
+     * @param IAppData $appData
81
+     * @param EventDispatcherInterface $eventDispatcher
82
+     * @param string $userId
83
+     */
84
+    public function __construct(IConfig $config,
85
+                                IRootFolder $rootFolder,
86
+                                IAppData $appData,
87
+                                EventDispatcherInterface $eventDispatcher,
88
+                                $userId) {
89
+        $this->config = $config;
90
+        $this->rootFolder = $rootFolder;
91
+        $this->appData = $appData;
92
+        $this->eventDispatcher = $eventDispatcher;
93
+        $this->userId = $userId;
94
+    }
95
+
96
+    /**
97
+     * In order to improve lazy loading a closure can be registered which will be
98
+     * called in case preview providers are actually requested
99
+     *
100
+     * $callable has to return an instance of \OCP\Preview\IProvider or \OCP\Preview\IProviderV2
101
+     *
102
+     * @param string $mimeTypeRegex Regex with the mime types that are supported by this provider
103
+     * @param \Closure $callable
104
+     * @return void
105
+     */
106
+    public function registerProvider($mimeTypeRegex, \Closure $callable) {
107
+        if (!$this->config->getSystemValue('enable_previews', true)) {
108
+            return;
109
+        }
110
+
111
+        if (!isset($this->providers[$mimeTypeRegex])) {
112
+            $this->providers[$mimeTypeRegex] = [];
113
+        }
114
+        $this->providers[$mimeTypeRegex][] = $callable;
115
+        $this->providerListDirty = true;
116
+    }
117
+
118
+    /**
119
+     * Get all providers
120
+     * @return array
121
+     */
122
+    public function getProviders() {
123
+        if (!$this->config->getSystemValue('enable_previews', true)) {
124
+            return [];
125
+        }
126
+
127
+        $this->registerCoreProviders();
128
+        if ($this->providerListDirty) {
129
+            $keys = array_map('strlen', array_keys($this->providers));
130
+            array_multisort($keys, SORT_DESC, $this->providers);
131
+            $this->providerListDirty = false;
132
+        }
133
+
134
+        return $this->providers;
135
+    }
136
+
137
+    /**
138
+     * Does the manager have any providers
139
+     * @return bool
140
+     */
141
+    public function hasProviders() {
142
+        $this->registerCoreProviders();
143
+        return !empty($this->providers);
144
+    }
145
+
146
+    /**
147
+     * return a preview of a file
148
+     *
149
+     * @param string $file The path to the file where you want a thumbnail from
150
+     * @param int $maxX The maximum X size of the thumbnail. It can be smaller depending on the shape of the image
151
+     * @param int $maxY The maximum Y size of the thumbnail. It can be smaller depending on the shape of the image
152
+     * @param boolean $scaleUp Scale smaller images up to the thumbnail size or not. Might look ugly
153
+     * @return \OCP\IImage
154
+     * @deprecated 11 Use getPreview
155
+     */
156
+    public function createPreview($file, $maxX = 100, $maxY = 75, $scaleUp = false) {
157
+        try {
158
+            $userRoot = $this->rootFolder->getUserFolder($this->userId)->getParent();
159
+            $node = $userRoot->get($file);
160
+            if (!($file instanceof File)) {
161
+                throw new NotFoundException();
162
+            }
163
+
164
+            $preview = $this->getPreview($node, $maxX, $maxY);
165
+        } catch (\Exception $e) {
166
+            return new \OC_Image();
167
+        }
168
+
169
+        $previewImage = new \OC_Image();
170
+        $previewImage->loadFromData($preview->getContent());
171
+        return $previewImage;
172
+    }
173
+
174
+    /**
175
+     * Returns a preview of a file
176
+     *
177
+     * The cache is searched first and if nothing usable was found then a preview is
178
+     * generated by one of the providers
179
+     *
180
+     * @param File $file
181
+     * @param int $width
182
+     * @param int $height
183
+     * @param bool $crop
184
+     * @param string $mode
185
+     * @param string $mimeType
186
+     * @return ISimpleFile
187
+     * @throws NotFoundException
188
+     * @throws \InvalidArgumentException if the preview would be invalid (in case the original image is invalid)
189
+     * @since 11.0.0 - \InvalidArgumentException was added in 12.0.0
190
+     */
191
+    public function getPreview(File $file, $width = -1, $height = -1, $crop = false, $mode = IPreview::MODE_FILL, $mimeType = null) {
192
+        if ($this->generator === null) {
193
+            $this->generator = new Generator(
194
+                $this->config,
195
+                $this,
196
+                $this->appData,
197
+                new GeneratorHelper(
198
+                    $this->rootFolder,
199
+                    $this->config
200
+                ),
201
+                $this->eventDispatcher
202
+            );
203
+        }
204
+
205
+        return $this->generator->getPreview($file, $width, $height, $crop, $mode, $mimeType);
206
+    }
207
+
208
+    /**
209
+     * returns true if the passed mime type is supported
210
+     *
211
+     * @param string $mimeType
212
+     * @return boolean
213
+     */
214
+    public function isMimeSupported($mimeType = '*') {
215
+        if (!$this->config->getSystemValue('enable_previews', true)) {
216
+            return false;
217
+        }
218
+
219
+        if (isset($this->mimeTypeSupportMap[$mimeType])) {
220
+            return $this->mimeTypeSupportMap[$mimeType];
221
+        }
222
+
223
+        $this->registerCoreProviders();
224
+        $providerMimeTypes = array_keys($this->providers);
225
+        foreach ($providerMimeTypes as $supportedMimeType) {
226
+            if (preg_match($supportedMimeType, $mimeType)) {
227
+                $this->mimeTypeSupportMap[$mimeType] = true;
228
+                return true;
229
+            }
230
+        }
231
+        $this->mimeTypeSupportMap[$mimeType] = false;
232
+        return false;
233
+    }
234
+
235
+    /**
236
+     * Check if a preview can be generated for a file
237
+     *
238
+     * @param \OCP\Files\FileInfo $file
239
+     * @return bool
240
+     */
241
+    public function isAvailable(\OCP\Files\FileInfo $file) {
242
+        if (!$this->config->getSystemValue('enable_previews', true)) {
243
+            return false;
244
+        }
245
+
246
+        $this->registerCoreProviders();
247
+        if (!$this->isMimeSupported($file->getMimetype())) {
248
+            return false;
249
+        }
250
+
251
+        $mount = $file->getMountPoint();
252
+        if ($mount and !$mount->getOption('previews', true)){
253
+            return false;
254
+        }
255
+
256
+        foreach ($this->providers as $supportedMimeType => $providers) {
257
+            if (preg_match($supportedMimeType, $file->getMimetype())) {
258
+                foreach ($providers as $closure) {
259
+                    $provider = $closure();
260
+                    if (!($provider instanceof IProvider)) {
261
+                        continue;
262
+                    }
263
+
264
+                    /** @var $provider IProvider */
265
+                    if ($provider->isAvailable($file)) {
266
+                        return true;
267
+                    }
268
+                }
269
+            }
270
+        }
271
+        return false;
272
+    }
273
+
274
+    /**
275
+     * List of enabled default providers
276
+     *
277
+     * The following providers are enabled by default:
278
+     *  - OC\Preview\PNG
279
+     *  - OC\Preview\JPEG
280
+     *  - OC\Preview\GIF
281
+     *  - OC\Preview\BMP
282
+     *  - OC\Preview\HEIC
283
+     *  - OC\Preview\XBitmap
284
+     *  - OC\Preview\MarkDown
285
+     *  - OC\Preview\MP3
286
+     *  - OC\Preview\TXT
287
+     *
288
+     * The following providers are disabled by default due to performance or privacy concerns:
289
+     *  - OC\Preview\Font
290
+     *  - OC\Preview\Illustrator
291
+     *  - OC\Preview\Movie
292
+     *  - OC\Preview\MSOfficeDoc
293
+     *  - OC\Preview\MSOffice2003
294
+     *  - OC\Preview\MSOffice2007
295
+     *  - OC\Preview\OpenDocument
296
+     *  - OC\Preview\PDF
297
+     *  - OC\Preview\Photoshop
298
+     *  - OC\Preview\Postscript
299
+     *  - OC\Preview\StarOffice
300
+     *  - OC\Preview\SVG
301
+     *  - OC\Preview\TIFF
302
+     *
303
+     * @return array
304
+     */
305
+    protected function getEnabledDefaultProvider() {
306
+        if ($this->defaultProviders !== null) {
307
+            return $this->defaultProviders;
308
+        }
309
+
310
+        $imageProviders = [
311
+            Preview\PNG::class,
312
+            Preview\JPEG::class,
313
+            Preview\GIF::class,
314
+            Preview\BMP::class,
315
+            Preview\HEIC::class,
316
+            Preview\XBitmap::class
317
+        ];
318
+
319
+        $this->defaultProviders = $this->config->getSystemValue('enabledPreviewProviders', array_merge([
320
+            Preview\MarkDown::class,
321
+            Preview\MP3::class,
322
+            Preview\TXT::class,
323
+        ], $imageProviders));
324
+
325
+        if (in_array(Preview\Image::class, $this->defaultProviders)) {
326
+            $this->defaultProviders = array_merge($this->defaultProviders, $imageProviders);
327
+        }
328
+        $this->defaultProviders = array_unique($this->defaultProviders);
329
+        return $this->defaultProviders;
330
+    }
331
+
332
+    /**
333
+     * Register the default providers (if enabled)
334
+     *
335
+     * @param string $class
336
+     * @param string $mimeType
337
+     */
338
+    protected function registerCoreProvider($class, $mimeType, $options = []) {
339
+        if (in_array(trim($class, '\\'), $this->getEnabledDefaultProvider())) {
340
+            $this->registerProvider($mimeType, function () use ($class, $options) {
341
+                return new $class($options);
342
+            });
343
+        }
344
+    }
345
+
346
+    /**
347
+     * Register the default providers (if enabled)
348
+     */
349
+    protected function registerCoreProviders() {
350
+        if ($this->registeredCoreProviders) {
351
+            return;
352
+        }
353
+        $this->registeredCoreProviders = true;
354
+
355
+        $this->registerCoreProvider(Preview\TXT::class, '/text\/plain/');
356
+        $this->registerCoreProvider(Preview\MarkDown::class, '/text\/(x-)?markdown/');
357
+        $this->registerCoreProvider(Preview\PNG::class, '/image\/png/');
358
+        $this->registerCoreProvider(Preview\JPEG::class, '/image\/jpeg/');
359
+        $this->registerCoreProvider(Preview\GIF::class, '/image\/gif/');
360
+        $this->registerCoreProvider(Preview\BMP::class, '/image\/bmp/');
361
+        $this->registerCoreProvider(Preview\XBitmap::class, '/image\/x-xbitmap/');
362
+        $this->registerCoreProvider(Preview\MP3::class, '/audio\/mpeg/');
363
+
364
+        // SVG, Office and Bitmap require imagick
365
+        if (extension_loaded('imagick')) {
366
+            $checkImagick = new \Imagick();
367
+
368
+            $imagickProviders = [
369
+                'SVG'	=> ['mimetype' => '/image\/svg\+xml/', 'class' => Preview\SVG::class],
370
+                'TIFF'	=> ['mimetype' => '/image\/tiff/', 'class' => Preview\TIFF::class],
371
+                'PDF'	=> ['mimetype' => '/application\/pdf/', 'class' => Preview\PDF::class],
372
+                'AI'	=> ['mimetype' => '/application\/illustrator/', 'class' => Preview\Illustrator::class],
373
+                'PSD'	=> ['mimetype' => '/application\/x-photoshop/', 'class' => Preview\Photoshop::class],
374
+                'EPS'	=> ['mimetype' => '/application\/postscript/', 'class' => Preview\Postscript::class],
375
+                'TTF'	=> ['mimetype' => '/application\/(?:font-sfnt|x-font$)/', 'class' => Preview\Font::class],
376
+                'HEIC'  => ['mimetype' => '/image\/hei(f|c)/', 'class' => Preview\HEIC::class],
377
+            ];
378
+
379
+            foreach ($imagickProviders as $queryFormat => $provider) {
380
+                $class = $provider['class'];
381
+                if (!in_array(trim($class, '\\'), $this->getEnabledDefaultProvider())) {
382
+                    continue;
383
+                }
384
+
385
+                if (count($checkImagick->queryFormats($queryFormat)) === 1) {
386
+                    $this->registerCoreProvider($class, $provider['mimetype']);
387
+                }
388
+            }
389
+
390
+            if (count($checkImagick->queryFormats('PDF')) === 1) {
391
+                if (\OC_Helper::is_function_enabled('shell_exec')) {
392
+                    $officeFound = is_string($this->config->getSystemValue('preview_libreoffice_path', null));
393
+
394
+                    if (!$officeFound) {
395
+                        //let's see if there is libreoffice or openoffice on this machine
396
+                        $whichLibreOffice = shell_exec('command -v libreoffice');
397
+                        $officeFound = !empty($whichLibreOffice);
398
+                        if (!$officeFound) {
399
+                            $whichOpenOffice = shell_exec('command -v openoffice');
400
+                            $officeFound = !empty($whichOpenOffice);
401
+                        }
402
+                    }
403
+
404
+                    if ($officeFound) {
405
+                        $this->registerCoreProvider(Preview\MSOfficeDoc::class, '/application\/msword/');
406
+                        $this->registerCoreProvider(Preview\MSOffice2003::class, '/application\/vnd.ms-.*/');
407
+                        $this->registerCoreProvider(Preview\MSOffice2007::class, '/application\/vnd.openxmlformats-officedocument.*/');
408
+                        $this->registerCoreProvider(Preview\OpenDocument::class, '/application\/vnd.oasis.opendocument.*/');
409
+                        $this->registerCoreProvider(Preview\StarOffice::class, '/application\/vnd.sun.xml.*/');
410
+                    }
411
+                }
412
+            }
413
+        }
414
+
415
+        // Video requires avconv or ffmpeg
416
+        if (in_array(Preview\Movie::class, $this->getEnabledDefaultProvider())) {
417
+            $avconvBinary = \OC_Helper::findBinaryPath('avconv');
418
+            $ffmpegBinary = $avconvBinary ? null : \OC_Helper::findBinaryPath('ffmpeg');
419
+
420
+            if ($avconvBinary || $ffmpegBinary) {
421
+                // FIXME // a bit hacky but didn't want to use subclasses
422
+                \OC\Preview\Movie::$avconvBinary = $avconvBinary;
423
+                \OC\Preview\Movie::$ffmpegBinary = $ffmpegBinary;
424
+
425
+                $this->registerCoreProvider(Preview\Movie::class, '/video\/.*/');
426
+            }
427
+        }
428
+    }
429 429
 }
Please login to merge, or discard this patch.
lib/private/NaturalSort.php 3 patches
Spacing   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -117,8 +117,8 @@
 block discarded – undo
117 117
 			if ($aChunk !== $bChunk) {
118 118
 				// test first character (character comparison, not number comparison)
119 119
 				if ($aChunk[0] >= '0' && $aChunk[0] <= '9' && $bChunk[0] >= '0' && $bChunk[0] <= '9') {
120
-					$aNum = (int)$aChunk;
121
-					$bNum = (int)$bChunk;
120
+					$aNum = (int) $aChunk;
121
+					$bNum = (int) $bChunk;
122 122
 					return $aNum - $bNum;
123 123
 				}
124 124
 				return self::getCollator()->compare($aChunk, $bChunk);
Please login to merge, or discard this patch.
Braces   +1 added lines, -2 removed lines patch added patch discarded remove patch
@@ -88,8 +88,7 @@
 block discarded – undo
88 88
 			// German umlauts, so using en_US instead
89 89
 			if (class_exists('Collator')) {
90 90
 				$this->collator = new \Collator('en_US');
91
-			}
92
-			else {
91
+			} else {
93 92
 				$this->collator = new \OC\NaturalSort_DefaultCollator();
94 93
 			}
95 94
 		}
Please login to merge, or discard this patch.
Indentation   +102 added lines, -102 removed lines patch added patch discarded remove patch
@@ -30,113 +30,113 @@
 block discarded – undo
30 30
 use OCP\ILogger;
31 31
 
32 32
 class NaturalSort {
33
-	private static $instance;
34
-	private $collator;
35
-	private $cache = array();
33
+    private static $instance;
34
+    private $collator;
35
+    private $cache = array();
36 36
 
37
-	/**
38
-	 * Instantiate a new \OC\NaturalSort instance.
39
-	 * @param object $injectedCollator
40
-	 */
41
-	public function __construct($injectedCollator = null) {
42
-		// inject an instance of \Collator('en_US') to force using the php5-intl Collator
43
-		// or inject an instance of \OC\NaturalSort_DefaultCollator to force using Owncloud's default collator
44
-		if (isset($injectedCollator)) {
45
-			$this->collator = $injectedCollator;
46
-			\OCP\Util::writeLog('core', 'forced use of '.get_class($injectedCollator), ILogger::DEBUG);
47
-		}
48
-	}
37
+    /**
38
+     * Instantiate a new \OC\NaturalSort instance.
39
+     * @param object $injectedCollator
40
+     */
41
+    public function __construct($injectedCollator = null) {
42
+        // inject an instance of \Collator('en_US') to force using the php5-intl Collator
43
+        // or inject an instance of \OC\NaturalSort_DefaultCollator to force using Owncloud's default collator
44
+        if (isset($injectedCollator)) {
45
+            $this->collator = $injectedCollator;
46
+            \OCP\Util::writeLog('core', 'forced use of '.get_class($injectedCollator), ILogger::DEBUG);
47
+        }
48
+    }
49 49
 
50
-	/**
51
-	 * Split the given string in chunks of numbers and strings
52
-	 * @param string $t string
53
-	 * @return array of strings and number chunks
54
-	 */
55
-	private function naturalSortChunkify($t) {
56
-		// Adapted and ported to PHP from
57
-		// http://my.opera.com/GreyWyvern/blog/show.dml/1671288
58
-		if (isset($this->cache[$t])) {
59
-			return $this->cache[$t];
60
-		}
61
-		$tz = array();
62
-		$x = 0;
63
-		$y = -1;
64
-		$n = null;
50
+    /**
51
+     * Split the given string in chunks of numbers and strings
52
+     * @param string $t string
53
+     * @return array of strings and number chunks
54
+     */
55
+    private function naturalSortChunkify($t) {
56
+        // Adapted and ported to PHP from
57
+        // http://my.opera.com/GreyWyvern/blog/show.dml/1671288
58
+        if (isset($this->cache[$t])) {
59
+            return $this->cache[$t];
60
+        }
61
+        $tz = array();
62
+        $x = 0;
63
+        $y = -1;
64
+        $n = null;
65 65
 
66
-		while (isset($t[$x])) {
67
-			$c = $t[$x];
68
-			// only include the dot in strings
69
-			$m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9'));
70
-			if ($m !== $n) {
71
-				// next chunk
72
-				$y++;
73
-				$tz[$y] = '';
74
-				$n = $m;
75
-			}
76
-			$tz[$y] .= $c;
77
-			$x++;
78
-		}
79
-		$this->cache[$t] = $tz;
80
-		return $tz;
81
-	}
66
+        while (isset($t[$x])) {
67
+            $c = $t[$x];
68
+            // only include the dot in strings
69
+            $m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9'));
70
+            if ($m !== $n) {
71
+                // next chunk
72
+                $y++;
73
+                $tz[$y] = '';
74
+                $n = $m;
75
+            }
76
+            $tz[$y] .= $c;
77
+            $x++;
78
+        }
79
+        $this->cache[$t] = $tz;
80
+        return $tz;
81
+    }
82 82
 
83
-	/**
84
-	 * Returns the string collator
85
-	 * @return \Collator string collator
86
-	 */
87
-	private function getCollator() {
88
-		if (!isset($this->collator)) {
89
-			// looks like the default is en_US_POSIX which yields wrong sorting with
90
-			// German umlauts, so using en_US instead
91
-			if (class_exists('Collator')) {
92
-				$this->collator = new \Collator('en_US');
93
-			}
94
-			else {
95
-				$this->collator = new \OC\NaturalSort_DefaultCollator();
96
-			}
97
-		}
98
-		return $this->collator;
99
-	}
83
+    /**
84
+     * Returns the string collator
85
+     * @return \Collator string collator
86
+     */
87
+    private function getCollator() {
88
+        if (!isset($this->collator)) {
89
+            // looks like the default is en_US_POSIX which yields wrong sorting with
90
+            // German umlauts, so using en_US instead
91
+            if (class_exists('Collator')) {
92
+                $this->collator = new \Collator('en_US');
93
+            }
94
+            else {
95
+                $this->collator = new \OC\NaturalSort_DefaultCollator();
96
+            }
97
+        }
98
+        return $this->collator;
99
+    }
100 100
 
101
-	/**
102
-	 * Compare two strings to provide a natural sort
103
-	 * @param string $a first string to compare
104
-	 * @param string $b second string to compare
105
-	 * @return int -1 if $b comes before $a, 1 if $a comes before $b
106
-	 * or 0 if the strings are identical
107
-	 */
108
-	public function compare($a, $b) {
109
-		// Needed because PHP doesn't sort correctly when numbers are enclosed in
110
-		// parenthesis, even with NUMERIC_COLLATION enabled.
111
-		// For example it gave ["test (2).txt", "test.txt"]
112
-		// instead of ["test.txt", "test (2).txt"]
113
-		$aa = self::naturalSortChunkify($a);
114
-		$bb = self::naturalSortChunkify($b);
101
+    /**
102
+     * Compare two strings to provide a natural sort
103
+     * @param string $a first string to compare
104
+     * @param string $b second string to compare
105
+     * @return int -1 if $b comes before $a, 1 if $a comes before $b
106
+     * or 0 if the strings are identical
107
+     */
108
+    public function compare($a, $b) {
109
+        // Needed because PHP doesn't sort correctly when numbers are enclosed in
110
+        // parenthesis, even with NUMERIC_COLLATION enabled.
111
+        // For example it gave ["test (2).txt", "test.txt"]
112
+        // instead of ["test.txt", "test (2).txt"]
113
+        $aa = self::naturalSortChunkify($a);
114
+        $bb = self::naturalSortChunkify($b);
115 115
 
116
-		for ($x = 0; isset($aa[$x]) && isset($bb[$x]); $x++) {
117
-			$aChunk = $aa[$x];
118
-			$bChunk = $bb[$x];
119
-			if ($aChunk !== $bChunk) {
120
-				// test first character (character comparison, not number comparison)
121
-				if ($aChunk[0] >= '0' && $aChunk[0] <= '9' && $bChunk[0] >= '0' && $bChunk[0] <= '9') {
122
-					$aNum = (int)$aChunk;
123
-					$bNum = (int)$bChunk;
124
-					return $aNum - $bNum;
125
-				}
126
-				return self::getCollator()->compare($aChunk, $bChunk);
127
-			}
128
-		}
129
-		return count($aa) - count($bb);
130
-	}
116
+        for ($x = 0; isset($aa[$x]) && isset($bb[$x]); $x++) {
117
+            $aChunk = $aa[$x];
118
+            $bChunk = $bb[$x];
119
+            if ($aChunk !== $bChunk) {
120
+                // test first character (character comparison, not number comparison)
121
+                if ($aChunk[0] >= '0' && $aChunk[0] <= '9' && $bChunk[0] >= '0' && $bChunk[0] <= '9') {
122
+                    $aNum = (int)$aChunk;
123
+                    $bNum = (int)$bChunk;
124
+                    return $aNum - $bNum;
125
+                }
126
+                return self::getCollator()->compare($aChunk, $bChunk);
127
+            }
128
+        }
129
+        return count($aa) - count($bb);
130
+    }
131 131
 
132
-	/**
133
-	 * Returns a singleton
134
-	 * @return \OC\NaturalSort instance
135
-	 */
136
-	public static function getInstance() {
137
-		if (!isset(self::$instance)) {
138
-			self::$instance = new \OC\NaturalSort();
139
-		}
140
-		return self::$instance;
141
-	}
132
+    /**
133
+     * Returns a singleton
134
+     * @return \OC\NaturalSort instance
135
+     */
136
+    public static function getInstance() {
137
+        if (!isset(self::$instance)) {
138
+            self::$instance = new \OC\NaturalSort();
139
+        }
140
+        return self::$instance;
141
+    }
142 142
 }
Please login to merge, or discard this patch.