Passed
Push — master ( 621a4b...948bbe )
by Lukas
19:22 queued 26s
created
lib/private/App/AppStore/Version/Version.php 1 patch
Indentation   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -22,31 +22,31 @@
 block discarded – undo
22 22
 namespace OC\App\AppStore\Version;
23 23
 
24 24
 class Version {
25
-	/** @var string */
26
-	private $minVersion;
27
-	/** @var string */
28
-	private $maxVersion;
25
+    /** @var string */
26
+    private $minVersion;
27
+    /** @var string */
28
+    private $maxVersion;
29 29
 
30
-	/**
31
-	 * @param string $minVersion
32
-	 * @param string $maxVersion
33
-	 */
34
-	public function __construct($minVersion, $maxVersion) {
35
-		$this->minVersion = $minVersion;
36
-		$this->maxVersion = $maxVersion;
37
-	}
30
+    /**
31
+     * @param string $minVersion
32
+     * @param string $maxVersion
33
+     */
34
+    public function __construct($minVersion, $maxVersion) {
35
+        $this->minVersion = $minVersion;
36
+        $this->maxVersion = $maxVersion;
37
+    }
38 38
 
39
-	/**
40
-	 * @return string
41
-	 */
42
-	public function getMinimumVersion() {
43
-		return $this->minVersion;
44
-	}
39
+    /**
40
+     * @return string
41
+     */
42
+    public function getMinimumVersion() {
43
+        return $this->minVersion;
44
+    }
45 45
 
46
-	/**
47
-	 * @return string
48
-	 */
49
-	public function getMaximumVersion() {
50
-		return $this->maxVersion;
51
-	}
46
+    /**
47
+     * @return string
48
+     */
49
+    public function getMaximumVersion() {
50
+        return $this->maxVersion;
51
+    }
52 52
 }
Please login to merge, or discard this patch.
lib/private/App/PlatformRepository.php 2 patches
Spacing   +12 added lines, -12 removed lines patch added patch discarded remove patch
@@ -90,8 +90,8 @@  discard block
 block discarded – undo
90 90
 					break;
91 91
 
92 92
 				case 'openssl':
93
-					$prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]?).*}', function ($match) {
94
-						return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96));
93
+					$prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]?).*}', function($match) {
94
+						return $match[1].(empty($match[2]) ? '' : '.'.(ord($match[2]) - 96));
95 95
 					}, OPENSSL_VERSION_TEXT);
96 96
 					break;
97 97
 
@@ -166,19 +166,19 @@  discard block
 block discarded – undo
166 166
 			return '9999999-dev';
167 167
 		}
168 168
 		if ('dev-' === strtolower(substr($version, 0, 4))) {
169
-			return 'dev-' . substr($version, 4);
169
+			return 'dev-'.substr($version, 4);
170 170
 		}
171 171
 		// match classical versioning
172
-		if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
172
+		if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?'.self::$modifierRegex.'$}i', $version, $matches)) {
173 173
 			$version = $matches[1]
174 174
 				. (!empty($matches[2]) ? $matches[2] : '.0')
175 175
 				. (!empty($matches[3]) ? $matches[3] : '.0')
176 176
 				. (!empty($matches[4]) ? $matches[4] : '.0');
177 177
 			$index = 5;
178
-		} elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) { // match date-based versioning
178
+		} elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)'.self::$modifierRegex.'$}i', $version, $matches)) { // match date-based versioning
179 179
 			$version = preg_replace('{\D}', '-', $matches[1]);
180 180
 			$index = 2;
181
-		} elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
181
+		} elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?'.self::$modifierRegex.'$}i', $version, $matches)) {
182 182
 			$version = $matches[1]
183 183
 				. (!empty($matches[2]) ? $matches[2] : '.0')
184 184
 				. (!empty($matches[3]) ? $matches[3] : '.0')
@@ -191,7 +191,7 @@  discard block
 block discarded – undo
191 191
 				if ('stable' === $matches[$index]) {
192 192
 					return $version;
193 193
 				}
194
-				$version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? $matches[$index + 1] : '');
194
+				$version .= '-'.$this->expandStability($matches[$index]).(!empty($matches[$index + 1]) ? $matches[$index + 1] : '');
195 195
 			}
196 196
 			if (!empty($matches[$index + 2])) {
197 197
 				$version .= '-dev';
@@ -199,12 +199,12 @@  discard block
 block discarded – undo
199 199
 			return $version;
200 200
 		}
201 201
 		$extraMessage = '';
202
-		if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
203
-			$extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
204
-		} elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
205
-			$extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
202
+		if (preg_match('{ +as +'.preg_quote($version).'$}', $fullVersion)) {
203
+			$extraMessage = ' in "'.$fullVersion.'", the alias must be an exact version';
204
+		} elseif (preg_match('{^'.preg_quote($version).' +as +}', $fullVersion)) {
205
+			$extraMessage = ' in "'.$fullVersion.'", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
206 206
 		}
207
-		throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
207
+		throw new \UnexpectedValueException('Invalid version string "'.$version.'"'.$extraMessage);
208 208
 	}
209 209
 
210 210
 	/**
Please login to merge, or discard this patch.
Indentation   +196 added lines, -196 removed lines patch added patch discarded remove patch
@@ -30,200 +30,200 @@
 block discarded – undo
30 30
  * @package OC\App
31 31
  */
32 32
 class PlatformRepository {
33
-	public function __construct() {
34
-		$this->packages = $this->initialize();
35
-	}
36
-
37
-	protected function initialize() {
38
-		$loadedExtensions = get_loaded_extensions();
39
-		$packages = [];
40
-
41
-		// Extensions scanning
42
-		foreach ($loadedExtensions as $name) {
43
-			if (in_array($name, ['standard', 'Core'])) {
44
-				continue;
45
-			}
46
-
47
-			$ext = new \ReflectionExtension($name);
48
-			try {
49
-				$prettyVersion = $ext->getVersion();
50
-				$prettyVersion = $this->normalizeVersion($prettyVersion);
51
-			} catch (\UnexpectedValueException $e) {
52
-				$prettyVersion = '0';
53
-				$prettyVersion = $this->normalizeVersion($prettyVersion);
54
-			}
55
-
56
-			$packages[$this->buildPackageName($name)] = $prettyVersion;
57
-		}
58
-
59
-		foreach ($loadedExtensions as $name) {
60
-			$prettyVersion = null;
61
-			switch ($name) {
62
-				case 'curl':
63
-					$curlVersion = curl_version();
64
-					$prettyVersion = $curlVersion['version'];
65
-					break;
66
-
67
-				case 'iconv':
68
-					$prettyVersion = ICONV_VERSION;
69
-					break;
70
-
71
-				case 'intl':
72
-					$name = 'ICU';
73
-					if (defined('INTL_ICU_VERSION')) {
74
-						$prettyVersion = INTL_ICU_VERSION;
75
-					} else {
76
-						$reflector = new \ReflectionExtension('intl');
77
-
78
-						ob_start();
79
-						$reflector->info();
80
-						$output = ob_get_clean();
81
-
82
-						preg_match('/^ICU version => (.*)$/m', $output, $matches);
83
-						$prettyVersion = $matches[1];
84
-					}
85
-
86
-					break;
87
-
88
-				case 'libxml':
89
-					$prettyVersion = LIBXML_DOTTED_VERSION;
90
-					break;
91
-
92
-				case 'openssl':
93
-					$prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]?).*}', function ($match) {
94
-						return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96));
95
-					}, OPENSSL_VERSION_TEXT);
96
-					break;
97
-
98
-				case 'pcre':
99
-					$prettyVersion = preg_replace('{^(\S+).*}', '$1', PCRE_VERSION);
100
-					break;
101
-
102
-				case 'uuid':
103
-					$prettyVersion = phpversion('uuid');
104
-					break;
105
-
106
-				case 'xsl':
107
-					$prettyVersion = LIBXSLT_DOTTED_VERSION;
108
-					break;
109
-
110
-				default:
111
-					// None handled extensions have no special cases, skip
112
-					continue 2;
113
-			}
114
-
115
-			try {
116
-				$prettyVersion = $this->normalizeVersion($prettyVersion);
117
-			} catch (\UnexpectedValueException $e) {
118
-				continue;
119
-			}
120
-
121
-			$packages[$this->buildPackageName($name)] = $prettyVersion;
122
-		}
123
-
124
-		return $packages;
125
-	}
126
-
127
-	private function buildPackageName($name) {
128
-		return str_replace(' ', '-', $name);
129
-	}
130
-
131
-	/**
132
-	 * @param $name
133
-	 * @return string
134
-	 */
135
-	public function findLibrary($name) {
136
-		$extName = $this->buildPackageName($name);
137
-		if (isset($this->packages[$extName])) {
138
-			return $this->packages[$extName];
139
-		}
140
-		return null;
141
-	}
142
-
143
-	private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
144
-
145
-	/**
146
-	 * Normalizes a version string to be able to perform comparisons on it
147
-	 *
148
-	 * https://github.com/composer/composer/blob/master/src/Composer/Package/Version/VersionParser.php#L94
149
-	 *
150
-	 * @param string $version
151
-	 * @param string $fullVersion optional complete version string to give more context
152
-	 * @throws \UnexpectedValueException
153
-	 * @return string
154
-	 */
155
-	public function normalizeVersion($version, $fullVersion = null) {
156
-		$version = trim($version);
157
-		if (null === $fullVersion) {
158
-			$fullVersion = $version;
159
-		}
160
-		// ignore aliases and just assume the alias is required instead of the source
161
-		if (preg_match('{^([^,\s]+) +as +([^,\s]+)$}', $version, $match)) {
162
-			$version = $match[1];
163
-		}
164
-		// match master-like branches
165
-		if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) {
166
-			return '9999999-dev';
167
-		}
168
-		if ('dev-' === strtolower(substr($version, 0, 4))) {
169
-			return 'dev-' . substr($version, 4);
170
-		}
171
-		// match classical versioning
172
-		if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
173
-			$version = $matches[1]
174
-				. (!empty($matches[2]) ? $matches[2] : '.0')
175
-				. (!empty($matches[3]) ? $matches[3] : '.0')
176
-				. (!empty($matches[4]) ? $matches[4] : '.0');
177
-			$index = 5;
178
-		} elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) { // match date-based versioning
179
-			$version = preg_replace('{\D}', '-', $matches[1]);
180
-			$index = 2;
181
-		} elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
182
-			$version = $matches[1]
183
-				. (!empty($matches[2]) ? $matches[2] : '.0')
184
-				. (!empty($matches[3]) ? $matches[3] : '.0')
185
-				. (!empty($matches[4]) ? $matches[4] : '.0');
186
-			$index = 5;
187
-		}
188
-		// add version modifiers if a version was matched
189
-		if (isset($index)) {
190
-			if (!empty($matches[$index])) {
191
-				if ('stable' === $matches[$index]) {
192
-					return $version;
193
-				}
194
-				$version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? $matches[$index + 1] : '');
195
-			}
196
-			if (!empty($matches[$index + 2])) {
197
-				$version .= '-dev';
198
-			}
199
-			return $version;
200
-		}
201
-		$extraMessage = '';
202
-		if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
203
-			$extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
204
-		} elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
205
-			$extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
206
-		}
207
-		throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
208
-	}
209
-
210
-	/**
211
-	 * @param string $stability
212
-	 */
213
-	private function expandStability($stability) {
214
-		$stability = strtolower($stability);
215
-		switch ($stability) {
216
-			case 'a':
217
-				return 'alpha';
218
-			case 'b':
219
-				return 'beta';
220
-			case 'p':
221
-			case 'pl':
222
-				return 'patch';
223
-			case 'rc':
224
-				return 'RC';
225
-			default:
226
-				return $stability;
227
-		}
228
-	}
33
+    public function __construct() {
34
+        $this->packages = $this->initialize();
35
+    }
36
+
37
+    protected function initialize() {
38
+        $loadedExtensions = get_loaded_extensions();
39
+        $packages = [];
40
+
41
+        // Extensions scanning
42
+        foreach ($loadedExtensions as $name) {
43
+            if (in_array($name, ['standard', 'Core'])) {
44
+                continue;
45
+            }
46
+
47
+            $ext = new \ReflectionExtension($name);
48
+            try {
49
+                $prettyVersion = $ext->getVersion();
50
+                $prettyVersion = $this->normalizeVersion($prettyVersion);
51
+            } catch (\UnexpectedValueException $e) {
52
+                $prettyVersion = '0';
53
+                $prettyVersion = $this->normalizeVersion($prettyVersion);
54
+            }
55
+
56
+            $packages[$this->buildPackageName($name)] = $prettyVersion;
57
+        }
58
+
59
+        foreach ($loadedExtensions as $name) {
60
+            $prettyVersion = null;
61
+            switch ($name) {
62
+                case 'curl':
63
+                    $curlVersion = curl_version();
64
+                    $prettyVersion = $curlVersion['version'];
65
+                    break;
66
+
67
+                case 'iconv':
68
+                    $prettyVersion = ICONV_VERSION;
69
+                    break;
70
+
71
+                case 'intl':
72
+                    $name = 'ICU';
73
+                    if (defined('INTL_ICU_VERSION')) {
74
+                        $prettyVersion = INTL_ICU_VERSION;
75
+                    } else {
76
+                        $reflector = new \ReflectionExtension('intl');
77
+
78
+                        ob_start();
79
+                        $reflector->info();
80
+                        $output = ob_get_clean();
81
+
82
+                        preg_match('/^ICU version => (.*)$/m', $output, $matches);
83
+                        $prettyVersion = $matches[1];
84
+                    }
85
+
86
+                    break;
87
+
88
+                case 'libxml':
89
+                    $prettyVersion = LIBXML_DOTTED_VERSION;
90
+                    break;
91
+
92
+                case 'openssl':
93
+                    $prettyVersion = preg_replace_callback('{^(?:OpenSSL\s*)?([0-9.]+)([a-z]?).*}', function ($match) {
94
+                        return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96));
95
+                    }, OPENSSL_VERSION_TEXT);
96
+                    break;
97
+
98
+                case 'pcre':
99
+                    $prettyVersion = preg_replace('{^(\S+).*}', '$1', PCRE_VERSION);
100
+                    break;
101
+
102
+                case 'uuid':
103
+                    $prettyVersion = phpversion('uuid');
104
+                    break;
105
+
106
+                case 'xsl':
107
+                    $prettyVersion = LIBXSLT_DOTTED_VERSION;
108
+                    break;
109
+
110
+                default:
111
+                    // None handled extensions have no special cases, skip
112
+                    continue 2;
113
+            }
114
+
115
+            try {
116
+                $prettyVersion = $this->normalizeVersion($prettyVersion);
117
+            } catch (\UnexpectedValueException $e) {
118
+                continue;
119
+            }
120
+
121
+            $packages[$this->buildPackageName($name)] = $prettyVersion;
122
+        }
123
+
124
+        return $packages;
125
+    }
126
+
127
+    private function buildPackageName($name) {
128
+        return str_replace(' ', '-', $name);
129
+    }
130
+
131
+    /**
132
+     * @param $name
133
+     * @return string
134
+     */
135
+    public function findLibrary($name) {
136
+        $extName = $this->buildPackageName($name);
137
+        if (isset($this->packages[$extName])) {
138
+            return $this->packages[$extName];
139
+        }
140
+        return null;
141
+    }
142
+
143
+    private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)(?:[.-]?(\d+))?)?([.-]?dev)?';
144
+
145
+    /**
146
+     * Normalizes a version string to be able to perform comparisons on it
147
+     *
148
+     * https://github.com/composer/composer/blob/master/src/Composer/Package/Version/VersionParser.php#L94
149
+     *
150
+     * @param string $version
151
+     * @param string $fullVersion optional complete version string to give more context
152
+     * @throws \UnexpectedValueException
153
+     * @return string
154
+     */
155
+    public function normalizeVersion($version, $fullVersion = null) {
156
+        $version = trim($version);
157
+        if (null === $fullVersion) {
158
+            $fullVersion = $version;
159
+        }
160
+        // ignore aliases and just assume the alias is required instead of the source
161
+        if (preg_match('{^([^,\s]+) +as +([^,\s]+)$}', $version, $match)) {
162
+            $version = $match[1];
163
+        }
164
+        // match master-like branches
165
+        if (preg_match('{^(?:dev-)?(?:master|trunk|default)$}i', $version)) {
166
+            return '9999999-dev';
167
+        }
168
+        if ('dev-' === strtolower(substr($version, 0, 4))) {
169
+            return 'dev-' . substr($version, 4);
170
+        }
171
+        // match classical versioning
172
+        if (preg_match('{^v?(\d{1,3})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
173
+            $version = $matches[1]
174
+                . (!empty($matches[2]) ? $matches[2] : '.0')
175
+                . (!empty($matches[3]) ? $matches[3] : '.0')
176
+                . (!empty($matches[4]) ? $matches[4] : '.0');
177
+            $index = 5;
178
+        } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3})?)' . self::$modifierRegex . '$}i', $version, $matches)) { // match date-based versioning
179
+            $version = preg_replace('{\D}', '-', $matches[1]);
180
+            $index = 2;
181
+        } elseif (preg_match('{^v?(\d{4,})(\.\d+)?(\.\d+)?(\.\d+)?' . self::$modifierRegex . '$}i', $version, $matches)) {
182
+            $version = $matches[1]
183
+                . (!empty($matches[2]) ? $matches[2] : '.0')
184
+                . (!empty($matches[3]) ? $matches[3] : '.0')
185
+                . (!empty($matches[4]) ? $matches[4] : '.0');
186
+            $index = 5;
187
+        }
188
+        // add version modifiers if a version was matched
189
+        if (isset($index)) {
190
+            if (!empty($matches[$index])) {
191
+                if ('stable' === $matches[$index]) {
192
+                    return $version;
193
+                }
194
+                $version .= '-' . $this->expandStability($matches[$index]) . (!empty($matches[$index + 1]) ? $matches[$index + 1] : '');
195
+            }
196
+            if (!empty($matches[$index + 2])) {
197
+                $version .= '-dev';
198
+            }
199
+            return $version;
200
+        }
201
+        $extraMessage = '';
202
+        if (preg_match('{ +as +' . preg_quote($version) . '$}', $fullVersion)) {
203
+            $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version';
204
+        } elseif (preg_match('{^' . preg_quote($version) . ' +as +}', $fullVersion)) {
205
+            $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-';
206
+        }
207
+        throw new \UnexpectedValueException('Invalid version string "' . $version . '"' . $extraMessage);
208
+    }
209
+
210
+    /**
211
+     * @param string $stability
212
+     */
213
+    private function expandStability($stability) {
214
+        $stability = strtolower($stability);
215
+        switch ($stability) {
216
+            case 'a':
217
+                return 'alpha';
218
+            case 'b':
219
+                return 'beta';
220
+            case 'p':
221
+            case 'pl':
222
+                return 'patch';
223
+            case 'rc':
224
+                return 'RC';
225
+            default:
226
+                return $stability;
227
+        }
228
+    }
229 229
 }
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
@@ -26,294 +26,294 @@
 block discarded – undo
26 26
 namespace OC;
27 27
 
28 28
 class DateTimeFormatter implements \OCP\IDateTimeFormatter {
29
-	/** @var \DateTimeZone */
30
-	protected $defaultTimeZone;
29
+    /** @var \DateTimeZone */
30
+    protected $defaultTimeZone;
31 31
 
32
-	/** @var \OCP\IL10N */
33
-	protected $defaultL10N;
32
+    /** @var \OCP\IL10N */
33
+    protected $defaultL10N;
34 34
 
35
-	/**
36
-	 * Constructor
37
-	 *
38
-	 * @param \DateTimeZone $defaultTimeZone Set the timezone for the format
39
-	 * @param \OCP\IL10N $defaultL10N Set the language for the format
40
-	 */
41
-	public function __construct(\DateTimeZone $defaultTimeZone, \OCP\IL10N $defaultL10N) {
42
-		$this->defaultTimeZone = $defaultTimeZone;
43
-		$this->defaultL10N = $defaultL10N;
44
-	}
35
+    /**
36
+     * Constructor
37
+     *
38
+     * @param \DateTimeZone $defaultTimeZone Set the timezone for the format
39
+     * @param \OCP\IL10N $defaultL10N Set the language for the format
40
+     */
41
+    public function __construct(\DateTimeZone $defaultTimeZone, \OCP\IL10N $defaultL10N) {
42
+        $this->defaultTimeZone = $defaultTimeZone;
43
+        $this->defaultL10N = $defaultL10N;
44
+    }
45 45
 
46
-	/**
47
-	 * Get TimeZone to use
48
-	 *
49
-	 * @param \DateTimeZone $timeZone	The timezone to use
50
-	 * @return \DateTimeZone		The timezone to use, falling back to the current user's timezone
51
-	 */
52
-	protected function getTimeZone($timeZone = null) {
53
-		if ($timeZone === null) {
54
-			$timeZone = $this->defaultTimeZone;
55
-		}
46
+    /**
47
+     * Get TimeZone to use
48
+     *
49
+     * @param \DateTimeZone $timeZone	The timezone to use
50
+     * @return \DateTimeZone		The timezone to use, falling back to the current user's timezone
51
+     */
52
+    protected function getTimeZone($timeZone = null) {
53
+        if ($timeZone === null) {
54
+            $timeZone = $this->defaultTimeZone;
55
+        }
56 56
 
57
-		return $timeZone;
58
-	}
57
+        return $timeZone;
58
+    }
59 59
 
60
-	/**
61
-	 * Get \OCP\IL10N to use
62
-	 *
63
-	 * @param \OCP\IL10N $l	The locale to use
64
-	 * @return \OCP\IL10N		The locale to use, falling back to the current user's locale
65
-	 */
66
-	protected function getLocale($l = null) {
67
-		if ($l === null) {
68
-			$l = $this->defaultL10N;
69
-		}
60
+    /**
61
+     * Get \OCP\IL10N to use
62
+     *
63
+     * @param \OCP\IL10N $l	The locale to use
64
+     * @return \OCP\IL10N		The locale to use, falling back to the current user's locale
65
+     */
66
+    protected function getLocale($l = null) {
67
+        if ($l === null) {
68
+            $l = $this->defaultL10N;
69
+        }
70 70
 
71
-		return $l;
72
-	}
71
+        return $l;
72
+    }
73 73
 
74
-	/**
75
-	 * Generates a DateTime object with the given timestamp and TimeZone
76
-	 *
77
-	 * @param mixed $timestamp
78
-	 * @param \DateTimeZone $timeZone	The timezone to use
79
-	 * @return \DateTime
80
-	 */
81
-	protected function getDateTime($timestamp, \DateTimeZone $timeZone = null) {
82
-		if ($timestamp === null) {
83
-			return new \DateTime('now', $timeZone);
84
-		} elseif (!$timestamp instanceof \DateTime) {
85
-			$dateTime = new \DateTime('now', $timeZone);
86
-			$dateTime->setTimestamp($timestamp);
87
-			return $dateTime;
88
-		}
89
-		if ($timeZone) {
90
-			$timestamp->setTimezone($timeZone);
91
-		}
92
-		return $timestamp;
93
-	}
74
+    /**
75
+     * Generates a DateTime object with the given timestamp and TimeZone
76
+     *
77
+     * @param mixed $timestamp
78
+     * @param \DateTimeZone $timeZone	The timezone to use
79
+     * @return \DateTime
80
+     */
81
+    protected function getDateTime($timestamp, \DateTimeZone $timeZone = null) {
82
+        if ($timestamp === null) {
83
+            return new \DateTime('now', $timeZone);
84
+        } elseif (!$timestamp instanceof \DateTime) {
85
+            $dateTime = new \DateTime('now', $timeZone);
86
+            $dateTime->setTimestamp($timestamp);
87
+            return $dateTime;
88
+        }
89
+        if ($timeZone) {
90
+            $timestamp->setTimezone($timeZone);
91
+        }
92
+        return $timestamp;
93
+    }
94 94
 
95
-	/**
96
-	 * Formats the date of the given timestamp
97
-	 *
98
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
99
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
100
-	 * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
101
-	 * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
102
-	 * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
103
-	 * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
104
-	 * 				The exact format is dependent on the language
105
-	 * @param \DateTimeZone	$timeZone	The timezone to use
106
-	 * @param \OCP\IL10N	$l			The locale to use
107
-	 * @return string Formatted date string
108
-	 */
109
-	public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
110
-		return $this->format($timestamp, 'date', $format, $timeZone, $l);
111
-	}
95
+    /**
96
+     * Formats the date of the given timestamp
97
+     *
98
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
99
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
100
+     * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
101
+     * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
102
+     * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
103
+     * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
104
+     * 				The exact format is dependent on the language
105
+     * @param \DateTimeZone	$timeZone	The timezone to use
106
+     * @param \OCP\IL10N	$l			The locale to use
107
+     * @return string Formatted date string
108
+     */
109
+    public function formatDate($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
110
+        return $this->format($timestamp, 'date', $format, $timeZone, $l);
111
+    }
112 112
 
113
-	/**
114
-	 * Formats the date of the given timestamp
115
-	 *
116
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
117
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
118
-	 * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
119
-	 * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
120
-	 * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
121
-	 * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
122
-	 * 				The exact format is dependent on the language
123
-	 * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
124
-	 * @param \DateTimeZone	$timeZone	The timezone to use
125
-	 * @param \OCP\IL10N	$l			The locale to use
126
-	 * @return string Formatted relative date string
127
-	 */
128
-	public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
129
-		if (substr($format, -1) !== '*' && substr($format, -1) !== '*') {
130
-			$format .= '^';
131
-		}
113
+    /**
114
+     * Formats the date of the given timestamp
115
+     *
116
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
117
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
118
+     * 				full:	e.g. 'EEEE, MMMM d, y'	=> 'Wednesday, August 20, 2014'
119
+     * 				long:	e.g. 'MMMM d, y'		=> 'August 20, 2014'
120
+     * 				medium:	e.g. 'MMM d, y'			=> 'Aug 20, 2014'
121
+     * 				short:	e.g. 'M/d/yy'			=> '8/20/14'
122
+     * 				The exact format is dependent on the language
123
+     * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
124
+     * @param \DateTimeZone	$timeZone	The timezone to use
125
+     * @param \OCP\IL10N	$l			The locale to use
126
+     * @return string Formatted relative date string
127
+     */
128
+    public function formatDateRelativeDay($timestamp, $format = 'long', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
129
+        if (substr($format, -1) !== '*' && substr($format, -1) !== '*') {
130
+            $format .= '^';
131
+        }
132 132
 
133
-		return $this->format($timestamp, 'date', $format, $timeZone, $l);
134
-	}
133
+        return $this->format($timestamp, 'date', $format, $timeZone, $l);
134
+    }
135 135
 
136
-	/**
137
-	 * Gives the relative date of the timestamp
138
-	 * Only works for past dates
139
-	 *
140
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
141
-	 * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
142
-	 * @return string	Dates returned are:
143
-	 * 				<  1 month	=> Today, Yesterday, n days ago
144
-	 * 				< 13 month	=> last month, n months ago
145
-	 * 				>= 13 month	=> last year, n years ago
146
-	 * @param \OCP\IL10N	$l			The locale to use
147
-	 * @return string Formatted date span
148
-	 */
149
-	public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
150
-		$l = $this->getLocale($l);
151
-		$timestamp = $this->getDateTime($timestamp);
152
-		$timestamp->setTime(0, 0, 0);
136
+    /**
137
+     * Gives the relative date of the timestamp
138
+     * Only works for past dates
139
+     *
140
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
141
+     * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
142
+     * @return string	Dates returned are:
143
+     * 				<  1 month	=> Today, Yesterday, n days ago
144
+     * 				< 13 month	=> last month, n months ago
145
+     * 				>= 13 month	=> last year, n years ago
146
+     * @param \OCP\IL10N	$l			The locale to use
147
+     * @return string Formatted date span
148
+     */
149
+    public function formatDateSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
150
+        $l = $this->getLocale($l);
151
+        $timestamp = $this->getDateTime($timestamp);
152
+        $timestamp->setTime(0, 0, 0);
153 153
 
154
-		if ($baseTimestamp === null) {
155
-			$baseTimestamp = time();
156
-		}
157
-		$baseTimestamp = $this->getDateTime($baseTimestamp);
158
-		$baseTimestamp->setTime(0, 0, 0);
159
-		$dateInterval = $timestamp->diff($baseTimestamp);
154
+        if ($baseTimestamp === null) {
155
+            $baseTimestamp = time();
156
+        }
157
+        $baseTimestamp = $this->getDateTime($baseTimestamp);
158
+        $baseTimestamp->setTime(0, 0, 0);
159
+        $dateInterval = $timestamp->diff($baseTimestamp);
160 160
 
161
-		if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) {
162
-			return $l->t('today');
163
-		} elseif ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) {
164
-			if ($timestamp > $baseTimestamp) {
165
-				return $l->t('tomorrow');
166
-			} else {
167
-				return $l->t('yesterday');
168
-			}
169
-		} elseif ($dateInterval->y == 0 && $dateInterval->m == 0) {
170
-			if ($timestamp > $baseTimestamp) {
171
-				return $l->n('in %n day', 'in %n days', $dateInterval->d);
172
-			} else {
173
-				return $l->n('%n day ago', '%n days ago', $dateInterval->d);
174
-			}
175
-		} elseif ($dateInterval->y == 0 && $dateInterval->m == 1) {
176
-			if ($timestamp > $baseTimestamp) {
177
-				return $l->t('next month');
178
-			} else {
179
-				return $l->t('last month');
180
-			}
181
-		} elseif ($dateInterval->y == 0) {
182
-			if ($timestamp > $baseTimestamp) {
183
-				return $l->n('in %n month', 'in %n months', $dateInterval->m);
184
-			} else {
185
-				return $l->n('%n month ago', '%n months ago', $dateInterval->m);
186
-			}
187
-		} elseif ($dateInterval->y == 1) {
188
-			if ($timestamp > $baseTimestamp) {
189
-				return $l->t('next year');
190
-			} else {
191
-				return $l->t('last year');
192
-			}
193
-		}
194
-		if ($timestamp > $baseTimestamp) {
195
-			return $l->n('in %n year', 'in %n years', $dateInterval->y);
196
-		} else {
197
-			return $l->n('%n year ago', '%n years ago', $dateInterval->y);
198
-		}
199
-	}
161
+        if ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 0) {
162
+            return $l->t('today');
163
+        } elseif ($dateInterval->y == 0 && $dateInterval->m == 0 && $dateInterval->d == 1) {
164
+            if ($timestamp > $baseTimestamp) {
165
+                return $l->t('tomorrow');
166
+            } else {
167
+                return $l->t('yesterday');
168
+            }
169
+        } elseif ($dateInterval->y == 0 && $dateInterval->m == 0) {
170
+            if ($timestamp > $baseTimestamp) {
171
+                return $l->n('in %n day', 'in %n days', $dateInterval->d);
172
+            } else {
173
+                return $l->n('%n day ago', '%n days ago', $dateInterval->d);
174
+            }
175
+        } elseif ($dateInterval->y == 0 && $dateInterval->m == 1) {
176
+            if ($timestamp > $baseTimestamp) {
177
+                return $l->t('next month');
178
+            } else {
179
+                return $l->t('last month');
180
+            }
181
+        } elseif ($dateInterval->y == 0) {
182
+            if ($timestamp > $baseTimestamp) {
183
+                return $l->n('in %n month', 'in %n months', $dateInterval->m);
184
+            } else {
185
+                return $l->n('%n month ago', '%n months ago', $dateInterval->m);
186
+            }
187
+        } elseif ($dateInterval->y == 1) {
188
+            if ($timestamp > $baseTimestamp) {
189
+                return $l->t('next year');
190
+            } else {
191
+                return $l->t('last year');
192
+            }
193
+        }
194
+        if ($timestamp > $baseTimestamp) {
195
+            return $l->n('in %n year', 'in %n years', $dateInterval->y);
196
+        } else {
197
+            return $l->n('%n year ago', '%n years ago', $dateInterval->y);
198
+        }
199
+    }
200 200
 
201
-	/**
202
-	 * Formats the time of the given timestamp
203
-	 *
204
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
205
-	 * @param string	$format			Either 'full', 'long', 'medium' or 'short'
206
-	 * 				full:	e.g. 'h:mm:ss a zzzz'	=> '11:42:13 AM GMT+0:00'
207
-	 * 				long:	e.g. 'h:mm:ss a z'		=> '11:42:13 AM GMT'
208
-	 * 				medium:	e.g. 'h:mm:ss a'		=> '11:42:13 AM'
209
-	 * 				short:	e.g. 'h:mm a'			=> '11:42 AM'
210
-	 * 				The exact format is dependent on the language
211
-	 * @param \DateTimeZone	$timeZone	The timezone to use
212
-	 * @param \OCP\IL10N	$l			The locale to use
213
-	 * @return string Formatted time string
214
-	 */
215
-	public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
216
-		return $this->format($timestamp, 'time', $format, $timeZone, $l);
217
-	}
201
+    /**
202
+     * Formats the time of the given timestamp
203
+     *
204
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
205
+     * @param string	$format			Either 'full', 'long', 'medium' or 'short'
206
+     * 				full:	e.g. 'h:mm:ss a zzzz'	=> '11:42:13 AM GMT+0:00'
207
+     * 				long:	e.g. 'h:mm:ss a z'		=> '11:42:13 AM GMT'
208
+     * 				medium:	e.g. 'h:mm:ss a'		=> '11:42:13 AM'
209
+     * 				short:	e.g. 'h:mm a'			=> '11:42 AM'
210
+     * 				The exact format is dependent on the language
211
+     * @param \DateTimeZone	$timeZone	The timezone to use
212
+     * @param \OCP\IL10N	$l			The locale to use
213
+     * @return string Formatted time string
214
+     */
215
+    public function formatTime($timestamp, $format = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
216
+        return $this->format($timestamp, 'time', $format, $timeZone, $l);
217
+    }
218 218
 
219
-	/**
220
-	 * Gives the relative past time of the timestamp
221
-	 *
222
-	 * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
223
-	 * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
224
-	 * @return string	Dates returned are:
225
-	 * 				< 60 sec	=> seconds ago
226
-	 * 				<  1 hour	=> n minutes ago
227
-	 * 				<  1 day	=> n hours ago
228
-	 * 				<  1 month	=> Yesterday, n days ago
229
-	 * 				< 13 month	=> last month, n months ago
230
-	 * 				>= 13 month	=> last year, n years ago
231
-	 * @param \OCP\IL10N	$l			The locale to use
232
-	 * @return string Formatted time span
233
-	 */
234
-	public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
235
-		$l = $this->getLocale($l);
236
-		$timestamp = $this->getDateTime($timestamp);
237
-		if ($baseTimestamp === null) {
238
-			$baseTimestamp = time();
239
-		}
240
-		$baseTimestamp = $this->getDateTime($baseTimestamp);
219
+    /**
220
+     * Gives the relative past time of the timestamp
221
+     *
222
+     * @param int|\DateTime	$timestamp	Either a Unix timestamp or DateTime object
223
+     * @param int|\DateTime	$baseTimestamp	Timestamp to compare $timestamp against, defaults to current time
224
+     * @return string	Dates returned are:
225
+     * 				< 60 sec	=> seconds ago
226
+     * 				<  1 hour	=> n minutes ago
227
+     * 				<  1 day	=> n hours ago
228
+     * 				<  1 month	=> Yesterday, n days ago
229
+     * 				< 13 month	=> last month, n months ago
230
+     * 				>= 13 month	=> last year, n years ago
231
+     * @param \OCP\IL10N	$l			The locale to use
232
+     * @return string Formatted time span
233
+     */
234
+    public function formatTimeSpan($timestamp, $baseTimestamp = null, \OCP\IL10N $l = null) {
235
+        $l = $this->getLocale($l);
236
+        $timestamp = $this->getDateTime($timestamp);
237
+        if ($baseTimestamp === null) {
238
+            $baseTimestamp = time();
239
+        }
240
+        $baseTimestamp = $this->getDateTime($baseTimestamp);
241 241
 
242
-		$diff = $timestamp->diff($baseTimestamp);
243
-		if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0) {
244
-			return $this->formatDateSpan($timestamp, $baseTimestamp, $l);
245
-		}
242
+        $diff = $timestamp->diff($baseTimestamp);
243
+        if ($diff->y > 0 || $diff->m > 0 || $diff->d > 0) {
244
+            return $this->formatDateSpan($timestamp, $baseTimestamp, $l);
245
+        }
246 246
 
247
-		if ($diff->h > 0) {
248
-			if ($timestamp > $baseTimestamp) {
249
-				return $l->n('in %n hour', 'in %n hours', $diff->h);
250
-			} else {
251
-				return $l->n('%n hour ago', '%n hours ago', $diff->h);
252
-			}
253
-		} elseif ($diff->i > 0) {
254
-			if ($timestamp > $baseTimestamp) {
255
-				return $l->n('in %n minute', 'in %n minutes', $diff->i);
256
-			} else {
257
-				return $l->n('%n minute ago', '%n minutes ago', $diff->i);
258
-			}
259
-		}
260
-		if ($timestamp > $baseTimestamp) {
261
-			return $l->t('in a few seconds');
262
-		} else {
263
-			return $l->t('seconds ago');
264
-		}
265
-	}
247
+        if ($diff->h > 0) {
248
+            if ($timestamp > $baseTimestamp) {
249
+                return $l->n('in %n hour', 'in %n hours', $diff->h);
250
+            } else {
251
+                return $l->n('%n hour ago', '%n hours ago', $diff->h);
252
+            }
253
+        } elseif ($diff->i > 0) {
254
+            if ($timestamp > $baseTimestamp) {
255
+                return $l->n('in %n minute', 'in %n minutes', $diff->i);
256
+            } else {
257
+                return $l->n('%n minute ago', '%n minutes ago', $diff->i);
258
+            }
259
+        }
260
+        if ($timestamp > $baseTimestamp) {
261
+            return $l->t('in a few seconds');
262
+        } else {
263
+            return $l->t('seconds ago');
264
+        }
265
+    }
266 266
 
267
-	/**
268
-	 * Formats the date and time of the given timestamp
269
-	 *
270
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
271
-	 * @param string		$formatDate		See formatDate() for description
272
-	 * @param string		$formatTime		See formatTime() for description
273
-	 * @param \DateTimeZone	$timeZone	The timezone to use
274
-	 * @param \OCP\IL10N	$l			The locale to use
275
-	 * @return string Formatted date and time string
276
-	 */
277
-	public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
278
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
279
-	}
267
+    /**
268
+     * Formats the date and time of the given timestamp
269
+     *
270
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
271
+     * @param string		$formatDate		See formatDate() for description
272
+     * @param string		$formatTime		See formatTime() for description
273
+     * @param \DateTimeZone	$timeZone	The timezone to use
274
+     * @param \OCP\IL10N	$l			The locale to use
275
+     * @return string Formatted date and time string
276
+     */
277
+    public function formatDateTime($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
278
+        return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
279
+    }
280 280
 
281
-	/**
282
-	 * Formats the date and time of the given timestamp
283
-	 *
284
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
285
-	 * @param string	$formatDate		See formatDate() for description
286
-	 * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
287
-	 * @param string	$formatTime		See formatTime() for description
288
-	 * @param \DateTimeZone	$timeZone	The timezone to use
289
-	 * @param \OCP\IL10N	$l			The locale to use
290
-	 * @return string Formatted relative date and time string
291
-	 */
292
-	public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
293
-		if (substr($formatDate, -1) !== '^' && substr($formatDate, -1) !== '*') {
294
-			$formatDate .= '^';
295
-		}
281
+    /**
282
+     * Formats the date and time of the given timestamp
283
+     *
284
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
285
+     * @param string	$formatDate		See formatDate() for description
286
+     * 					Uses 'Today', 'Yesterday' and 'Tomorrow' when applicable
287
+     * @param string	$formatTime		See formatTime() for description
288
+     * @param \DateTimeZone	$timeZone	The timezone to use
289
+     * @param \OCP\IL10N	$l			The locale to use
290
+     * @return string Formatted relative date and time string
291
+     */
292
+    public function formatDateTimeRelativeDay($timestamp, $formatDate = 'long', $formatTime = 'medium', \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
293
+        if (substr($formatDate, -1) !== '^' && substr($formatDate, -1) !== '*') {
294
+            $formatDate .= '^';
295
+        }
296 296
 
297
-		return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
298
-	}
297
+        return $this->format($timestamp, 'datetime', $formatDate . '|' . $formatTime, $timeZone, $l);
298
+    }
299 299
 
300
-	/**
301
-	 * Formats the date and time of the given timestamp
302
-	 *
303
-	 * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
304
-	 * @param string		$type		One of 'date', 'datetime' or 'time'
305
-	 * @param string		$format		Format string
306
-	 * @param \DateTimeZone	$timeZone	The timezone to use
307
-	 * @param \OCP\IL10N	$l			The locale to use
308
-	 * @return string Formatted date and time string
309
-	 */
310
-	protected function format($timestamp, $type, $format, \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
311
-		$l = $this->getLocale($l);
312
-		$timeZone = $this->getTimeZone($timeZone);
313
-		$timestamp = $this->getDateTime($timestamp, $timeZone);
300
+    /**
301
+     * Formats the date and time of the given timestamp
302
+     *
303
+     * @param int|\DateTime $timestamp	Either a Unix timestamp or DateTime object
304
+     * @param string		$type		One of 'date', 'datetime' or 'time'
305
+     * @param string		$format		Format string
306
+     * @param \DateTimeZone	$timeZone	The timezone to use
307
+     * @param \OCP\IL10N	$l			The locale to use
308
+     * @return string Formatted date and time string
309
+     */
310
+    protected function format($timestamp, $type, $format, \DateTimeZone $timeZone = null, \OCP\IL10N $l = null) {
311
+        $l = $this->getLocale($l);
312
+        $timeZone = $this->getTimeZone($timeZone);
313
+        $timestamp = $this->getDateTime($timestamp, $timeZone);
314 314
 
315
-		return $l->l($type, $timestamp, [
316
-			'width' => $format,
317
-		]);
318
-	}
315
+        return $l->l($type, $timestamp, [
316
+            'width' => $format,
317
+        ]);
318
+    }
319 319
 }
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
@@ -33,73 +33,73 @@
 block discarded – undo
33 33
 use OCP\IImage;
34 34
 
35 35
 class Movie extends ProviderV2 {
36
-	public static $avconvBinary;
37
-	public static $ffmpegBinary;
36
+    public static $avconvBinary;
37
+    public static $ffmpegBinary;
38 38
 
39
-	/**
40
-	 * {@inheritDoc}
41
-	 */
42
-	public function getMimeType(): string {
43
-		return '/video\/.*/';
44
-	}
39
+    /**
40
+     * {@inheritDoc}
41
+     */
42
+    public function getMimeType(): string {
43
+        return '/video\/.*/';
44
+    }
45 45
 
46
-	/**
47
-	 * {@inheritDoc}
48
-	 */
49
-	public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage {
50
-		// TODO: use proc_open() and stream the source file ?
46
+    /**
47
+     * {@inheritDoc}
48
+     */
49
+    public function getThumbnail(File $file, int $maxX, int $maxY): ?IImage {
50
+        // TODO: use proc_open() and stream the source file ?
51 51
 
52
-		$absPath = $this->getLocalFile($file, 5242880); // only use the first 5MB
52
+        $absPath = $this->getLocalFile($file, 5242880); // only use the first 5MB
53 53
 
54
-		$result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
55
-		if ($result === null) {
56
-			$result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
57
-			if ($result === null) {
58
-				$result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
59
-			}
60
-		}
54
+        $result = $this->generateThumbNail($maxX, $maxY, $absPath, 5);
55
+        if ($result === null) {
56
+            $result = $this->generateThumbNail($maxX, $maxY, $absPath, 1);
57
+            if ($result === null) {
58
+                $result = $this->generateThumbNail($maxX, $maxY, $absPath, 0);
59
+            }
60
+        }
61 61
 
62
-		$this->cleanTmpFiles();
62
+        $this->cleanTmpFiles();
63 63
 
64
-		return $result;
65
-	}
64
+        return $result;
65
+    }
66 66
 
67
-	/**
68
-	 * @param int $maxX
69
-	 * @param int $maxY
70
-	 * @param string $absPath
71
-	 * @param int $second
72
-	 * @return null|\OCP\IImage
73
-	 */
74
-	private function generateThumbNail($maxX, $maxY, $absPath, $second): ?IImage {
75
-		$tmpPath = \OC::$server->getTempManager()->getTemporaryFile();
67
+    /**
68
+     * @param int $maxX
69
+     * @param int $maxY
70
+     * @param string $absPath
71
+     * @param int $second
72
+     * @return null|\OCP\IImage
73
+     */
74
+    private function generateThumbNail($maxX, $maxY, $absPath, $second): ?IImage {
75
+        $tmpPath = \OC::$server->getTempManager()->getTemporaryFile();
76 76
 
77
-		if (self::$avconvBinary) {
78
-			$cmd = self::$avconvBinary . ' -y -ss ' . escapeshellarg($second) .
79
-				' -i ' . escapeshellarg($absPath) .
80
-				' -an -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
81
-				' > /dev/null 2>&1';
82
-		} else {
83
-			$cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
84
-				' -i ' . escapeshellarg($absPath) .
85
-				' -f mjpeg -vframes 1' .
86
-				' ' . escapeshellarg($tmpPath) .
87
-				' > /dev/null 2>&1';
88
-		}
77
+        if (self::$avconvBinary) {
78
+            $cmd = self::$avconvBinary . ' -y -ss ' . escapeshellarg($second) .
79
+                ' -i ' . escapeshellarg($absPath) .
80
+                ' -an -f mjpeg -vframes 1 -vsync 1 ' . escapeshellarg($tmpPath) .
81
+                ' > /dev/null 2>&1';
82
+        } else {
83
+            $cmd = self::$ffmpegBinary . ' -y -ss ' . escapeshellarg($second) .
84
+                ' -i ' . escapeshellarg($absPath) .
85
+                ' -f mjpeg -vframes 1' .
86
+                ' ' . escapeshellarg($tmpPath) .
87
+                ' > /dev/null 2>&1';
88
+        }
89 89
 
90
-		exec($cmd, $output, $returnCode);
90
+        exec($cmd, $output, $returnCode);
91 91
 
92
-		if ($returnCode === 0) {
93
-			$image = new \OC_Image();
94
-			$image->loadFromFile($tmpPath);
95
-			if ($image->valid()) {
96
-				unlink($tmpPath);
97
-				$image->scaleDownToFit($maxX, $maxY);
92
+        if ($returnCode === 0) {
93
+            $image = new \OC_Image();
94
+            $image->loadFromFile($tmpPath);
95
+            if ($image->valid()) {
96
+                unlink($tmpPath);
97
+                $image->scaleDownToFit($maxX, $maxY);
98 98
 
99
-				return $image;
100
-			}
101
-		}
102
-		unlink($tmpPath);
103
-		return null;
104
-	}
99
+                return $image;
100
+            }
101
+        }
102
+        unlink($tmpPath);
103
+        return null;
104
+    }
105 105
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/ModuleAlreadyExistsException.php 2 patches
Indentation   +7 added lines, -7 removed lines patch added patch discarded remove patch
@@ -27,12 +27,12 @@
 block discarded – undo
27 27
 
28 28
 class ModuleAlreadyExistsException extends GenericEncryptionException {
29 29
 
30
-	/**
31
-	 * @param string $id
32
-	 * @param string $name
33
-	 */
34
-	public function __construct($id, $name) {
35
-		parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
36
-	}
30
+    /**
31
+     * @param string $id
32
+     * @param string $name
33
+     */
34
+    public function __construct($id, $name) {
35
+        parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
36
+    }
37 37
 
38 38
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -32,7 +32,7 @@
 block discarded – undo
32 32
 	 * @param string $name
33 33
 	 */
34 34
 	public function __construct($id, $name) {
35
-		parent::__construct('Id "' . $id . '" already used by encryption module "' . $name . '"');
35
+		parent::__construct('Id "'.$id.'" already used by encryption module "'.$name.'"');
36 36
 	}
37 37
 
38 38
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Exceptions/EncryptionHeaderKeyExistsException.php 2 patches
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -27,10 +27,10 @@
 block discarded – undo
27 27
 
28 28
 class EncryptionHeaderKeyExistsException extends GenericEncryptionException {
29 29
 
30
-	/**
31
-	 * @param string $key
32
-	 */
33
-	public function __construct($key) {
34
-		parent::__construct('header key "'. $key . '" already reserved by ownCloud');
35
-	}
30
+    /**
31
+     * @param string $key
32
+     */
33
+    public function __construct($key) {
34
+        parent::__construct('header key "'. $key . '" already reserved by ownCloud');
35
+    }
36 36
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -31,6 +31,6 @@
 block discarded – undo
31 31
 	 * @param string $key
32 32
 	 */
33 33
 	public function __construct($key) {
34
-		parent::__construct('header key "'. $key . '" already reserved by ownCloud');
34
+		parent::__construct('header key "'.$key.'" already reserved by ownCloud');
35 35
 	}
36 36
 }
Please login to merge, or discard this patch.
lib/private/Encryption/Manager.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -274,7 +274,7 @@
 block discarded – undo
274 274
 		}
275 275
 
276 276
 		// check if key storage is mounted correctly
277
-		if ($this->rootView->file_exists($rootDir . '/' . Storage::KEY_STORAGE_MARKER)) {
277
+		if ($this->rootView->file_exists($rootDir.'/'.Storage::KEY_STORAGE_MARKER)) {
278 278
 			return true;
279 279
 		}
280 280
 
Please login to merge, or discard this patch.
Indentation   +231 added lines, -231 removed lines patch added patch discarded remove patch
@@ -39,235 +39,235 @@
 block discarded – undo
39 39
 
40 40
 class Manager implements IManager {
41 41
 
42
-	/** @var array */
43
-	protected $encryptionModules;
44
-
45
-	/** @var IConfig */
46
-	protected $config;
47
-
48
-	/** @var ILogger */
49
-	protected $logger;
50
-
51
-	/** @var Il10n */
52
-	protected $l;
53
-
54
-	/** @var View  */
55
-	protected $rootView;
56
-
57
-	/** @var Util  */
58
-	protected $util;
59
-
60
-	/** @var ArrayCache  */
61
-	protected $arrayCache;
62
-
63
-	/**
64
-	 * @param IConfig $config
65
-	 * @param ILogger $logger
66
-	 * @param IL10N $l10n
67
-	 * @param View $rootView
68
-	 * @param Util $util
69
-	 * @param ArrayCache $arrayCache
70
-	 */
71
-	public function __construct(IConfig $config, ILogger $logger, IL10N $l10n, View $rootView, Util $util, ArrayCache $arrayCache) {
72
-		$this->encryptionModules = [];
73
-		$this->config = $config;
74
-		$this->logger = $logger;
75
-		$this->l = $l10n;
76
-		$this->rootView = $rootView;
77
-		$this->util = $util;
78
-		$this->arrayCache = $arrayCache;
79
-	}
80
-
81
-	/**
82
-	 * Check if encryption is enabled
83
-	 *
84
-	 * @return bool true if enabled, false if not
85
-	 */
86
-	public function isEnabled() {
87
-		$installed = $this->config->getSystemValue('installed', false);
88
-		if (!$installed) {
89
-			return false;
90
-		}
91
-
92
-		$enabled = $this->config->getAppValue('core', 'encryption_enabled', 'no');
93
-		return $enabled === 'yes';
94
-	}
95
-
96
-	/**
97
-	 * check if new encryption is ready
98
-	 *
99
-	 * @return bool
100
-	 * @throws ServiceUnavailableException
101
-	 */
102
-	public function isReady() {
103
-		if ($this->isKeyStorageReady() === false) {
104
-			throw new ServiceUnavailableException('Key Storage is not ready');
105
-		}
106
-
107
-		return true;
108
-	}
109
-
110
-	/**
111
-	 * @param string $user
112
-	 */
113
-	public function isReadyForUser($user) {
114
-		if (!$this->isReady()) {
115
-			return false;
116
-		}
117
-
118
-		foreach ($this->getEncryptionModules() as $module) {
119
-			/** @var IEncryptionModule $m */
120
-			$m = call_user_func($module['callback']);
121
-			if (!$m->isReadyForUser($user)) {
122
-				return false;
123
-			}
124
-		}
125
-
126
-		return true;
127
-	}
128
-
129
-	/**
130
-	 * Registers an callback function which must return an encryption module instance
131
-	 *
132
-	 * @param string $id
133
-	 * @param string $displayName
134
-	 * @param callable $callback
135
-	 * @throws Exceptions\ModuleAlreadyExistsException
136
-	 */
137
-	public function registerEncryptionModule($id, $displayName, callable $callback) {
138
-		if (isset($this->encryptionModules[$id])) {
139
-			throw new Exceptions\ModuleAlreadyExistsException($id, $displayName);
140
-		}
141
-
142
-		$this->encryptionModules[$id] = [
143
-			'id' => $id,
144
-			'displayName' => $displayName,
145
-			'callback' => $callback,
146
-		];
147
-
148
-		$defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId();
149
-
150
-		if (empty($defaultEncryptionModuleId)) {
151
-			$this->setDefaultEncryptionModule($id);
152
-		}
153
-	}
154
-
155
-	/**
156
-	 * Unregisters an encryption module
157
-	 *
158
-	 * @param string $moduleId
159
-	 */
160
-	public function unregisterEncryptionModule($moduleId) {
161
-		unset($this->encryptionModules[$moduleId]);
162
-	}
163
-
164
-	/**
165
-	 * get a list of all encryption modules
166
-	 *
167
-	 * @return array [id => ['id' => $id, 'displayName' => $displayName, 'callback' => callback]]
168
-	 */
169
-	public function getEncryptionModules() {
170
-		return $this->encryptionModules;
171
-	}
172
-
173
-	/**
174
-	 * get a specific encryption module
175
-	 *
176
-	 * @param string $moduleId
177
-	 * @return IEncryptionModule
178
-	 * @throws Exceptions\ModuleDoesNotExistsException
179
-	 */
180
-	public function getEncryptionModule($moduleId = '') {
181
-		if (!empty($moduleId)) {
182
-			if (isset($this->encryptionModules[$moduleId])) {
183
-				return call_user_func($this->encryptionModules[$moduleId]['callback']);
184
-			} else {
185
-				$message = "Module with ID: $moduleId does not exist.";
186
-				$hint = $this->l->t('Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator.', [$moduleId]);
187
-				throw new Exceptions\ModuleDoesNotExistsException($message, $hint);
188
-			}
189
-		} else {
190
-			return $this->getDefaultEncryptionModule();
191
-		}
192
-	}
193
-
194
-	/**
195
-	 * get default encryption module
196
-	 *
197
-	 * @return \OCP\Encryption\IEncryptionModule
198
-	 * @throws Exceptions\ModuleDoesNotExistsException
199
-	 */
200
-	protected function getDefaultEncryptionModule() {
201
-		$defaultModuleId = $this->getDefaultEncryptionModuleId();
202
-		if (!empty($defaultModuleId)) {
203
-			if (isset($this->encryptionModules[$defaultModuleId])) {
204
-				return call_user_func($this->encryptionModules[$defaultModuleId]['callback']);
205
-			} else {
206
-				$message = 'Default encryption module not loaded';
207
-				throw new Exceptions\ModuleDoesNotExistsException($message);
208
-			}
209
-		} else {
210
-			$message = 'No default encryption module defined';
211
-			throw new Exceptions\ModuleDoesNotExistsException($message);
212
-		}
213
-	}
214
-
215
-	/**
216
-	 * set default encryption module Id
217
-	 *
218
-	 * @param string $moduleId
219
-	 * @return bool
220
-	 */
221
-	public function setDefaultEncryptionModule($moduleId) {
222
-		try {
223
-			$this->getEncryptionModule($moduleId);
224
-		} catch (\Exception $e) {
225
-			return false;
226
-		}
227
-
228
-		$this->config->setAppValue('core', 'default_encryption_module', $moduleId);
229
-		return true;
230
-	}
231
-
232
-	/**
233
-	 * get default encryption module Id
234
-	 *
235
-	 * @return string
236
-	 */
237
-	public function getDefaultEncryptionModuleId() {
238
-		return $this->config->getAppValue('core', 'default_encryption_module');
239
-	}
240
-
241
-	/**
242
-	 * Add storage wrapper
243
-	 */
244
-	public function setupStorage() {
245
-		// If encryption is disabled and there are no loaded modules it makes no sense to load the wrapper
246
-		if (!empty($this->encryptionModules) || $this->isEnabled()) {
247
-			$encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
248
-			Filesystem::addStorageWrapper('oc_encryption', [$encryptionWrapper, 'wrapStorage'], 2);
249
-		}
250
-	}
251
-
252
-
253
-	/**
254
-	 * check if key storage is ready
255
-	 *
256
-	 * @return bool
257
-	 */
258
-	protected function isKeyStorageReady() {
259
-		$rootDir = $this->util->getKeyStorageRoot();
260
-
261
-		// the default root is always valid
262
-		if ($rootDir === '') {
263
-			return true;
264
-		}
265
-
266
-		// check if key storage is mounted correctly
267
-		if ($this->rootView->file_exists($rootDir . '/' . Storage::KEY_STORAGE_MARKER)) {
268
-			return true;
269
-		}
270
-
271
-		return false;
272
-	}
42
+    /** @var array */
43
+    protected $encryptionModules;
44
+
45
+    /** @var IConfig */
46
+    protected $config;
47
+
48
+    /** @var ILogger */
49
+    protected $logger;
50
+
51
+    /** @var Il10n */
52
+    protected $l;
53
+
54
+    /** @var View  */
55
+    protected $rootView;
56
+
57
+    /** @var Util  */
58
+    protected $util;
59
+
60
+    /** @var ArrayCache  */
61
+    protected $arrayCache;
62
+
63
+    /**
64
+     * @param IConfig $config
65
+     * @param ILogger $logger
66
+     * @param IL10N $l10n
67
+     * @param View $rootView
68
+     * @param Util $util
69
+     * @param ArrayCache $arrayCache
70
+     */
71
+    public function __construct(IConfig $config, ILogger $logger, IL10N $l10n, View $rootView, Util $util, ArrayCache $arrayCache) {
72
+        $this->encryptionModules = [];
73
+        $this->config = $config;
74
+        $this->logger = $logger;
75
+        $this->l = $l10n;
76
+        $this->rootView = $rootView;
77
+        $this->util = $util;
78
+        $this->arrayCache = $arrayCache;
79
+    }
80
+
81
+    /**
82
+     * Check if encryption is enabled
83
+     *
84
+     * @return bool true if enabled, false if not
85
+     */
86
+    public function isEnabled() {
87
+        $installed = $this->config->getSystemValue('installed', false);
88
+        if (!$installed) {
89
+            return false;
90
+        }
91
+
92
+        $enabled = $this->config->getAppValue('core', 'encryption_enabled', 'no');
93
+        return $enabled === 'yes';
94
+    }
95
+
96
+    /**
97
+     * check if new encryption is ready
98
+     *
99
+     * @return bool
100
+     * @throws ServiceUnavailableException
101
+     */
102
+    public function isReady() {
103
+        if ($this->isKeyStorageReady() === false) {
104
+            throw new ServiceUnavailableException('Key Storage is not ready');
105
+        }
106
+
107
+        return true;
108
+    }
109
+
110
+    /**
111
+     * @param string $user
112
+     */
113
+    public function isReadyForUser($user) {
114
+        if (!$this->isReady()) {
115
+            return false;
116
+        }
117
+
118
+        foreach ($this->getEncryptionModules() as $module) {
119
+            /** @var IEncryptionModule $m */
120
+            $m = call_user_func($module['callback']);
121
+            if (!$m->isReadyForUser($user)) {
122
+                return false;
123
+            }
124
+        }
125
+
126
+        return true;
127
+    }
128
+
129
+    /**
130
+     * Registers an callback function which must return an encryption module instance
131
+     *
132
+     * @param string $id
133
+     * @param string $displayName
134
+     * @param callable $callback
135
+     * @throws Exceptions\ModuleAlreadyExistsException
136
+     */
137
+    public function registerEncryptionModule($id, $displayName, callable $callback) {
138
+        if (isset($this->encryptionModules[$id])) {
139
+            throw new Exceptions\ModuleAlreadyExistsException($id, $displayName);
140
+        }
141
+
142
+        $this->encryptionModules[$id] = [
143
+            'id' => $id,
144
+            'displayName' => $displayName,
145
+            'callback' => $callback,
146
+        ];
147
+
148
+        $defaultEncryptionModuleId = $this->getDefaultEncryptionModuleId();
149
+
150
+        if (empty($defaultEncryptionModuleId)) {
151
+            $this->setDefaultEncryptionModule($id);
152
+        }
153
+    }
154
+
155
+    /**
156
+     * Unregisters an encryption module
157
+     *
158
+     * @param string $moduleId
159
+     */
160
+    public function unregisterEncryptionModule($moduleId) {
161
+        unset($this->encryptionModules[$moduleId]);
162
+    }
163
+
164
+    /**
165
+     * get a list of all encryption modules
166
+     *
167
+     * @return array [id => ['id' => $id, 'displayName' => $displayName, 'callback' => callback]]
168
+     */
169
+    public function getEncryptionModules() {
170
+        return $this->encryptionModules;
171
+    }
172
+
173
+    /**
174
+     * get a specific encryption module
175
+     *
176
+     * @param string $moduleId
177
+     * @return IEncryptionModule
178
+     * @throws Exceptions\ModuleDoesNotExistsException
179
+     */
180
+    public function getEncryptionModule($moduleId = '') {
181
+        if (!empty($moduleId)) {
182
+            if (isset($this->encryptionModules[$moduleId])) {
183
+                return call_user_func($this->encryptionModules[$moduleId]['callback']);
184
+            } else {
185
+                $message = "Module with ID: $moduleId does not exist.";
186
+                $hint = $this->l->t('Module with ID: %s does not exist. Please enable it in your apps settings or contact your administrator.', [$moduleId]);
187
+                throw new Exceptions\ModuleDoesNotExistsException($message, $hint);
188
+            }
189
+        } else {
190
+            return $this->getDefaultEncryptionModule();
191
+        }
192
+    }
193
+
194
+    /**
195
+     * get default encryption module
196
+     *
197
+     * @return \OCP\Encryption\IEncryptionModule
198
+     * @throws Exceptions\ModuleDoesNotExistsException
199
+     */
200
+    protected function getDefaultEncryptionModule() {
201
+        $defaultModuleId = $this->getDefaultEncryptionModuleId();
202
+        if (!empty($defaultModuleId)) {
203
+            if (isset($this->encryptionModules[$defaultModuleId])) {
204
+                return call_user_func($this->encryptionModules[$defaultModuleId]['callback']);
205
+            } else {
206
+                $message = 'Default encryption module not loaded';
207
+                throw new Exceptions\ModuleDoesNotExistsException($message);
208
+            }
209
+        } else {
210
+            $message = 'No default encryption module defined';
211
+            throw new Exceptions\ModuleDoesNotExistsException($message);
212
+        }
213
+    }
214
+
215
+    /**
216
+     * set default encryption module Id
217
+     *
218
+     * @param string $moduleId
219
+     * @return bool
220
+     */
221
+    public function setDefaultEncryptionModule($moduleId) {
222
+        try {
223
+            $this->getEncryptionModule($moduleId);
224
+        } catch (\Exception $e) {
225
+            return false;
226
+        }
227
+
228
+        $this->config->setAppValue('core', 'default_encryption_module', $moduleId);
229
+        return true;
230
+    }
231
+
232
+    /**
233
+     * get default encryption module Id
234
+     *
235
+     * @return string
236
+     */
237
+    public function getDefaultEncryptionModuleId() {
238
+        return $this->config->getAppValue('core', 'default_encryption_module');
239
+    }
240
+
241
+    /**
242
+     * Add storage wrapper
243
+     */
244
+    public function setupStorage() {
245
+        // If encryption is disabled and there are no loaded modules it makes no sense to load the wrapper
246
+        if (!empty($this->encryptionModules) || $this->isEnabled()) {
247
+            $encryptionWrapper = new EncryptionWrapper($this->arrayCache, $this, $this->logger);
248
+            Filesystem::addStorageWrapper('oc_encryption', [$encryptionWrapper, 'wrapStorage'], 2);
249
+        }
250
+    }
251
+
252
+
253
+    /**
254
+     * check if key storage is ready
255
+     *
256
+     * @return bool
257
+     */
258
+    protected function isKeyStorageReady() {
259
+        $rootDir = $this->util->getKeyStorageRoot();
260
+
261
+        // the default root is always valid
262
+        if ($rootDir === '') {
263
+            return true;
264
+        }
265
+
266
+        // check if key storage is mounted correctly
267
+        if ($this->rootView->file_exists($rootDir . '/' . Storage::KEY_STORAGE_MARKER)) {
268
+            return true;
269
+        }
270
+
271
+        return false;
272
+    }
273 273
 }
Please login to merge, or discard this patch.
lib/private/NaturalSort.php 2 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.
Indentation   +101 added lines, -101 removed lines patch added patch discarded remove patch
@@ -31,112 +31,112 @@
 block discarded – undo
31 31
 use OCP\ILogger;
32 32
 
33 33
 class NaturalSort {
34
-	private static $instance;
35
-	private $collator;
36
-	private $cache = [];
34
+    private static $instance;
35
+    private $collator;
36
+    private $cache = [];
37 37
 
38
-	/**
39
-	 * Instantiate a new \OC\NaturalSort instance.
40
-	 * @param object $injectedCollator
41
-	 */
42
-	public function __construct($injectedCollator = null) {
43
-		// inject an instance of \Collator('en_US') to force using the php5-intl Collator
44
-		// or inject an instance of \OC\NaturalSort_DefaultCollator to force using Owncloud's default collator
45
-		if (isset($injectedCollator)) {
46
-			$this->collator = $injectedCollator;
47
-			\OCP\Util::writeLog('core', 'forced use of '.get_class($injectedCollator), ILogger::DEBUG);
48
-		}
49
-	}
38
+    /**
39
+     * Instantiate a new \OC\NaturalSort instance.
40
+     * @param object $injectedCollator
41
+     */
42
+    public function __construct($injectedCollator = null) {
43
+        // inject an instance of \Collator('en_US') to force using the php5-intl Collator
44
+        // or inject an instance of \OC\NaturalSort_DefaultCollator to force using Owncloud's default collator
45
+        if (isset($injectedCollator)) {
46
+            $this->collator = $injectedCollator;
47
+            \OCP\Util::writeLog('core', 'forced use of '.get_class($injectedCollator), ILogger::DEBUG);
48
+        }
49
+    }
50 50
 
51
-	/**
52
-	 * Split the given string in chunks of numbers and strings
53
-	 * @param string $t string
54
-	 * @return array of strings and number chunks
55
-	 */
56
-	private function naturalSortChunkify($t) {
57
-		// Adapted and ported to PHP from
58
-		// http://my.opera.com/GreyWyvern/blog/show.dml/1671288
59
-		if (isset($this->cache[$t])) {
60
-			return $this->cache[$t];
61
-		}
62
-		$tz = [];
63
-		$x = 0;
64
-		$y = -1;
65
-		$n = null;
51
+    /**
52
+     * Split the given string in chunks of numbers and strings
53
+     * @param string $t string
54
+     * @return array of strings and number chunks
55
+     */
56
+    private function naturalSortChunkify($t) {
57
+        // Adapted and ported to PHP from
58
+        // http://my.opera.com/GreyWyvern/blog/show.dml/1671288
59
+        if (isset($this->cache[$t])) {
60
+            return $this->cache[$t];
61
+        }
62
+        $tz = [];
63
+        $x = 0;
64
+        $y = -1;
65
+        $n = null;
66 66
 
67
-		while (isset($t[$x])) {
68
-			$c = $t[$x];
69
-			// only include the dot in strings
70
-			$m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9'));
71
-			if ($m !== $n) {
72
-				// next chunk
73
-				$y++;
74
-				$tz[$y] = '';
75
-				$n = $m;
76
-			}
77
-			$tz[$y] .= $c;
78
-			$x++;
79
-		}
80
-		$this->cache[$t] = $tz;
81
-		return $tz;
82
-	}
67
+        while (isset($t[$x])) {
68
+            $c = $t[$x];
69
+            // only include the dot in strings
70
+            $m = ((!$n && $c === '.') || ($c >= '0' && $c <= '9'));
71
+            if ($m !== $n) {
72
+                // next chunk
73
+                $y++;
74
+                $tz[$y] = '';
75
+                $n = $m;
76
+            }
77
+            $tz[$y] .= $c;
78
+            $x++;
79
+        }
80
+        $this->cache[$t] = $tz;
81
+        return $tz;
82
+    }
83 83
 
84
-	/**
85
-	 * Returns the string collator
86
-	 * @return \Collator string collator
87
-	 */
88
-	private function getCollator() {
89
-		if (!isset($this->collator)) {
90
-			// looks like the default is en_US_POSIX which yields wrong sorting with
91
-			// German umlauts, so using en_US instead
92
-			if (class_exists('Collator')) {
93
-				$this->collator = new \Collator('en_US');
94
-			} else {
95
-				$this->collator = new \OC\NaturalSort_DefaultCollator();
96
-			}
97
-		}
98
-		return $this->collator;
99
-	}
84
+    /**
85
+     * Returns the string collator
86
+     * @return \Collator string collator
87
+     */
88
+    private function getCollator() {
89
+        if (!isset($this->collator)) {
90
+            // looks like the default is en_US_POSIX which yields wrong sorting with
91
+            // German umlauts, so using en_US instead
92
+            if (class_exists('Collator')) {
93
+                $this->collator = new \Collator('en_US');
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.