Passed
Push — master ( 0fd208...d9b2b3 )
by Morris
14:21 queued 10s
created
lib/private/legacy/hook.php 3 patches
Indentation   +103 added lines, -103 removed lines patch added patch discarded remove patch
@@ -29,118 +29,118 @@
 block discarded – undo
29 29
  *
30 30
  */
31 31
 class OC_Hook{
32
-	public static $thrownExceptions = [];
32
+    public static $thrownExceptions = [];
33 33
 
34
-	static private $registered = array();
34
+    static private $registered = array();
35 35
 
36
-	/**
37
-	 * connects a function to a hook
38
-	 *
39
-	 * @param string $signalClass class name of emitter
40
-	 * @param string $signalName name of signal
41
-	 * @param string|object $slotClass class name of slot
42
-	 * @param string $slotName name of slot
43
-	 * @return bool
44
-	 *
45
-	 * This function makes it very easy to connect to use hooks.
46
-	 *
47
-	 * TODO: write example
48
-	 */
49
-	static public function connect($signalClass, $signalName, $slotClass, $slotName ) {
50
-		// If we're trying to connect to an emitting class that isn't
51
-		// yet registered, register it
52
-		if( !array_key_exists($signalClass, self::$registered )) {
53
-			self::$registered[$signalClass] = array();
54
-		}
55
-		// If we're trying to connect to an emitting method that isn't
56
-		// yet registered, register it with the emitting class
57
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
58
-			self::$registered[$signalClass][$signalName] = array();
59
-		}
36
+    /**
37
+     * connects a function to a hook
38
+     *
39
+     * @param string $signalClass class name of emitter
40
+     * @param string $signalName name of signal
41
+     * @param string|object $slotClass class name of slot
42
+     * @param string $slotName name of slot
43
+     * @return bool
44
+     *
45
+     * This function makes it very easy to connect to use hooks.
46
+     *
47
+     * TODO: write example
48
+     */
49
+    static public function connect($signalClass, $signalName, $slotClass, $slotName ) {
50
+        // If we're trying to connect to an emitting class that isn't
51
+        // yet registered, register it
52
+        if( !array_key_exists($signalClass, self::$registered )) {
53
+            self::$registered[$signalClass] = array();
54
+        }
55
+        // If we're trying to connect to an emitting method that isn't
56
+        // yet registered, register it with the emitting class
57
+        if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
58
+            self::$registered[$signalClass][$signalName] = array();
59
+        }
60 60
 
61
-		// don't connect hooks twice
62
-		foreach (self::$registered[$signalClass][$signalName] as $hook) {
63
-			if ($hook['class'] === $slotClass and $hook['name'] === $slotName) {
64
-				return false;
65
-			}
66
-		}
67
-		// Connect the hook handler to the requested emitter
68
-		self::$registered[$signalClass][$signalName][] = array(
69
-				"class" => $slotClass,
70
-				"name" => $slotName
71
-		);
61
+        // don't connect hooks twice
62
+        foreach (self::$registered[$signalClass][$signalName] as $hook) {
63
+            if ($hook['class'] === $slotClass and $hook['name'] === $slotName) {
64
+                return false;
65
+            }
66
+        }
67
+        // Connect the hook handler to the requested emitter
68
+        self::$registered[$signalClass][$signalName][] = array(
69
+                "class" => $slotClass,
70
+                "name" => $slotName
71
+        );
72 72
 
73
-		// No chance for failure ;-)
74
-		return true;
75
-	}
73
+        // No chance for failure ;-)
74
+        return true;
75
+    }
76 76
 
77
-	/**
78
-	 * emits a signal
79
-	 *
80
-	 * @param string $signalClass class name of emitter
81
-	 * @param string $signalName name of signal
82
-	 * @param mixed $params default: array() array with additional data
83
-	 * @return bool true if slots exists or false if not
84
-	 * @throws \OC\HintException
85
-	 * @throws \OC\ServerNotAvailableException Emits a signal. To get data from the slot use references!
86
-	 *
87
-	 * TODO: write example
88
-	 */
89
-	static public function emit($signalClass, $signalName, $params = []) {
77
+    /**
78
+     * emits a signal
79
+     *
80
+     * @param string $signalClass class name of emitter
81
+     * @param string $signalName name of signal
82
+     * @param mixed $params default: array() array with additional data
83
+     * @return bool true if slots exists or false if not
84
+     * @throws \OC\HintException
85
+     * @throws \OC\ServerNotAvailableException Emits a signal. To get data from the slot use references!
86
+     *
87
+     * TODO: write example
88
+     */
89
+    static public function emit($signalClass, $signalName, $params = []) {
90 90
 
91
-		// Return false if no hook handlers are listening to this
92
-		// emitting class
93
-		if( !array_key_exists($signalClass, self::$registered )) {
94
-			return false;
95
-		}
91
+        // Return false if no hook handlers are listening to this
92
+        // emitting class
93
+        if( !array_key_exists($signalClass, self::$registered )) {
94
+            return false;
95
+        }
96 96
 
97
-		// Return false if no hook handlers are listening to this
98
-		// emitting method
99
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
100
-			return false;
101
-		}
97
+        // Return false if no hook handlers are listening to this
98
+        // emitting method
99
+        if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
100
+            return false;
101
+        }
102 102
 
103
-		// Call all slots
104
-		foreach( self::$registered[$signalClass][$signalName] as $i ) {
105
-			try {
106
-				call_user_func( array( $i["class"], $i["name"] ), $params );
107
-			} catch (Exception $e){
108
-				self::$thrownExceptions[] = $e;
109
-				\OC::$server->getLogger()->logException($e);
110
-				if($e instanceof \OC\HintException) {
111
-					throw $e;
112
-				}
113
-				if($e instanceof \OC\ServerNotAvailableException) {
114
-					throw $e;
115
-				}
116
-			}
117
-		}
103
+        // Call all slots
104
+        foreach( self::$registered[$signalClass][$signalName] as $i ) {
105
+            try {
106
+                call_user_func( array( $i["class"], $i["name"] ), $params );
107
+            } catch (Exception $e){
108
+                self::$thrownExceptions[] = $e;
109
+                \OC::$server->getLogger()->logException($e);
110
+                if($e instanceof \OC\HintException) {
111
+                    throw $e;
112
+                }
113
+                if($e instanceof \OC\ServerNotAvailableException) {
114
+                    throw $e;
115
+                }
116
+            }
117
+        }
118 118
 
119
-		return true;
120
-	}
119
+        return true;
120
+    }
121 121
 
122
-	/**
123
-	 * clear hooks
124
-	 * @param string $signalClass
125
-	 * @param string $signalName
126
-	 */
127
-	static public function clear($signalClass='', $signalName='') {
128
-		if ($signalClass) {
129
-			if ($signalName) {
130
-				self::$registered[$signalClass][$signalName]=array();
131
-			}else{
132
-				self::$registered[$signalClass]=array();
133
-			}
134
-		}else{
135
-			self::$registered=array();
136
-		}
137
-	}
122
+    /**
123
+     * clear hooks
124
+     * @param string $signalClass
125
+     * @param string $signalName
126
+     */
127
+    static public function clear($signalClass='', $signalName='') {
128
+        if ($signalClass) {
129
+            if ($signalName) {
130
+                self::$registered[$signalClass][$signalName]=array();
131
+            }else{
132
+                self::$registered[$signalClass]=array();
133
+            }
134
+        }else{
135
+            self::$registered=array();
136
+        }
137
+    }
138 138
 
139
-	/**
140
-	 * DO NOT USE!
141
-	 * For unit tests ONLY!
142
-	 */
143
-	static public function getHooks() {
144
-		return self::$registered;
145
-	}
139
+    /**
140
+     * DO NOT USE!
141
+     * For unit tests ONLY!
142
+     */
143
+    static public function getHooks() {
144
+        return self::$registered;
145
+    }
146 146
 }
Please login to merge, or discard this patch.
Spacing   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -28,7 +28,7 @@  discard block
 block discarded – undo
28 28
  * along with this program.  If not, see <http://www.gnu.org/licenses/>
29 29
  *
30 30
  */
31
-class OC_Hook{
31
+class OC_Hook {
32 32
 	public static $thrownExceptions = [];
33 33
 
34 34
 	static private $registered = array();
@@ -46,15 +46,15 @@  discard block
 block discarded – undo
46 46
 	 *
47 47
 	 * TODO: write example
48 48
 	 */
49
-	static public function connect($signalClass, $signalName, $slotClass, $slotName ) {
49
+	static public function connect($signalClass, $signalName, $slotClass, $slotName) {
50 50
 		// If we're trying to connect to an emitting class that isn't
51 51
 		// yet registered, register it
52
-		if( !array_key_exists($signalClass, self::$registered )) {
52
+		if (!array_key_exists($signalClass, self::$registered)) {
53 53
 			self::$registered[$signalClass] = array();
54 54
 		}
55 55
 		// If we're trying to connect to an emitting method that isn't
56 56
 		// yet registered, register it with the emitting class
57
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
57
+		if (!array_key_exists($signalName, self::$registered[$signalClass])) {
58 58
 			self::$registered[$signalClass][$signalName] = array();
59 59
 		}
60 60
 
@@ -90,27 +90,27 @@  discard block
 block discarded – undo
90 90
 
91 91
 		// Return false if no hook handlers are listening to this
92 92
 		// emitting class
93
-		if( !array_key_exists($signalClass, self::$registered )) {
93
+		if (!array_key_exists($signalClass, self::$registered)) {
94 94
 			return false;
95 95
 		}
96 96
 
97 97
 		// Return false if no hook handlers are listening to this
98 98
 		// emitting method
99
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
99
+		if (!array_key_exists($signalName, self::$registered[$signalClass])) {
100 100
 			return false;
101 101
 		}
102 102
 
103 103
 		// Call all slots
104
-		foreach( self::$registered[$signalClass][$signalName] as $i ) {
104
+		foreach (self::$registered[$signalClass][$signalName] as $i) {
105 105
 			try {
106
-				call_user_func( array( $i["class"], $i["name"] ), $params );
107
-			} catch (Exception $e){
106
+				call_user_func(array($i["class"], $i["name"]), $params);
107
+			} catch (Exception $e) {
108 108
 				self::$thrownExceptions[] = $e;
109 109
 				\OC::$server->getLogger()->logException($e);
110
-				if($e instanceof \OC\HintException) {
110
+				if ($e instanceof \OC\HintException) {
111 111
 					throw $e;
112 112
 				}
113
-				if($e instanceof \OC\ServerNotAvailableException) {
113
+				if ($e instanceof \OC\ServerNotAvailableException) {
114 114
 					throw $e;
115 115
 				}
116 116
 			}
@@ -124,15 +124,15 @@  discard block
 block discarded – undo
124 124
 	 * @param string $signalClass
125 125
 	 * @param string $signalName
126 126
 	 */
127
-	static public function clear($signalClass='', $signalName='') {
127
+	static public function clear($signalClass = '', $signalName = '') {
128 128
 		if ($signalClass) {
129 129
 			if ($signalName) {
130
-				self::$registered[$signalClass][$signalName]=array();
131
-			}else{
132
-				self::$registered[$signalClass]=array();
130
+				self::$registered[$signalClass][$signalName] = array();
131
+			} else {
132
+				self::$registered[$signalClass] = array();
133 133
 			}
134
-		}else{
135
-			self::$registered=array();
134
+		} else {
135
+			self::$registered = array();
136 136
 		}
137 137
 	}
138 138
 
Please login to merge, or discard this patch.
Braces   +2 added lines, -2 removed lines patch added patch discarded remove patch
@@ -128,10 +128,10 @@
 block discarded – undo
128 128
 		if ($signalClass) {
129 129
 			if ($signalName) {
130 130
 				self::$registered[$signalClass][$signalName]=array();
131
-			}else{
131
+			} else{
132 132
 				self::$registered[$signalClass]=array();
133 133
 			}
134
-		}else{
134
+		} else{
135 135
 			self::$registered=array();
136 136
 		}
137 137
 	}
Please login to merge, or discard this patch.
lib/private/legacy/helper.php 3 patches
Braces   +3 added lines, -2 removed lines patch added patch discarded remove patch
@@ -271,8 +271,9 @@
 block discarded – undo
271 271
 		}
272 272
 		foreach ($dirs as $dir) {
273 273
 			foreach ($exts as $ext) {
274
-				if ($check_fn("$dir/$name" . $ext))
275
-					return true;
274
+				if ($check_fn("$dir/$name" . $ext)) {
275
+									return true;
276
+				}
276 277
 			}
277 278
 		}
278 279
 		return false;
Please login to merge, or discard this patch.
Indentation   +573 added lines, -573 removed lines patch added patch discarded remove patch
@@ -49,577 +49,577 @@
 block discarded – undo
49 49
  * Collection of useful functions
50 50
  */
51 51
 class OC_Helper {
52
-	private static $templateManager;
53
-
54
-	/**
55
-	 * Make a human file size
56
-	 * @param int $bytes file size in bytes
57
-	 * @return string a human readable file size
58
-	 *
59
-	 * Makes 2048 to 2 kB.
60
-	 */
61
-	public static function humanFileSize($bytes) {
62
-		if ($bytes < 0) {
63
-			return "?";
64
-		}
65
-		if ($bytes < 1024) {
66
-			return "$bytes B";
67
-		}
68
-		$bytes = round($bytes / 1024, 0);
69
-		if ($bytes < 1024) {
70
-			return "$bytes KB";
71
-		}
72
-		$bytes = round($bytes / 1024, 1);
73
-		if ($bytes < 1024) {
74
-			return "$bytes MB";
75
-		}
76
-		$bytes = round($bytes / 1024, 1);
77
-		if ($bytes < 1024) {
78
-			return "$bytes GB";
79
-		}
80
-		$bytes = round($bytes / 1024, 1);
81
-		if ($bytes < 1024) {
82
-			return "$bytes TB";
83
-		}
84
-
85
-		$bytes = round($bytes / 1024, 1);
86
-		return "$bytes PB";
87
-	}
88
-
89
-	/**
90
-	 * Make a php file size
91
-	 * @param int $bytes file size in bytes
92
-	 * @return string a php parseable file size
93
-	 *
94
-	 * Makes 2048 to 2k and 2^41 to 2048G
95
-	 */
96
-	public static function phpFileSize($bytes) {
97
-		if ($bytes < 0) {
98
-			return "?";
99
-		}
100
-		if ($bytes < 1024) {
101
-			return $bytes . "B";
102
-		}
103
-		$bytes = round($bytes / 1024, 1);
104
-		if ($bytes < 1024) {
105
-			return $bytes . "K";
106
-		}
107
-		$bytes = round($bytes / 1024, 1);
108
-		if ($bytes < 1024) {
109
-			return $bytes . "M";
110
-		}
111
-		$bytes = round($bytes / 1024, 1);
112
-		return $bytes . "G";
113
-	}
114
-
115
-	/**
116
-	 * Make a computer file size
117
-	 * @param string $str file size in human readable format
118
-	 * @return float|bool a file size in bytes
119
-	 *
120
-	 * Makes 2kB to 2048.
121
-	 *
122
-	 * Inspired by: http://www.php.net/manual/en/function.filesize.php#92418
123
-	 */
124
-	public static function computerFileSize($str) {
125
-		$str = strtolower($str);
126
-		if (is_numeric($str)) {
127
-			return (float)$str;
128
-		}
129
-
130
-		$bytes_array = array(
131
-			'b' => 1,
132
-			'k' => 1024,
133
-			'kb' => 1024,
134
-			'mb' => 1024 * 1024,
135
-			'm' => 1024 * 1024,
136
-			'gb' => 1024 * 1024 * 1024,
137
-			'g' => 1024 * 1024 * 1024,
138
-			'tb' => 1024 * 1024 * 1024 * 1024,
139
-			't' => 1024 * 1024 * 1024 * 1024,
140
-			'pb' => 1024 * 1024 * 1024 * 1024 * 1024,
141
-			'p' => 1024 * 1024 * 1024 * 1024 * 1024,
142
-		);
143
-
144
-		$bytes = (float)$str;
145
-
146
-		if (preg_match('#([kmgtp]?b?)$#si', $str, $matches) && !empty($bytes_array[$matches[1]])) {
147
-			$bytes *= $bytes_array[$matches[1]];
148
-		} else {
149
-			return false;
150
-		}
151
-
152
-		$bytes = round($bytes);
153
-
154
-		return $bytes;
155
-	}
156
-
157
-	/**
158
-	 * Recursive copying of folders
159
-	 * @param string $src source folder
160
-	 * @param string $dest target folder
161
-	 *
162
-	 */
163
-	static function copyr($src, $dest) {
164
-		if (is_dir($src)) {
165
-			if (!is_dir($dest)) {
166
-				mkdir($dest);
167
-			}
168
-			$files = scandir($src);
169
-			foreach ($files as $file) {
170
-				if ($file != "." && $file != "..") {
171
-					self::copyr("$src/$file", "$dest/$file");
172
-				}
173
-			}
174
-		} elseif (file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
175
-			copy($src, $dest);
176
-		}
177
-	}
178
-
179
-	/**
180
-	 * Recursive deletion of folders
181
-	 * @param string $dir path to the folder
182
-	 * @param bool $deleteSelf if set to false only the content of the folder will be deleted
183
-	 * @return bool
184
-	 */
185
-	static function rmdirr($dir, $deleteSelf = true) {
186
-		if (is_dir($dir)) {
187
-			$files = new RecursiveIteratorIterator(
188
-				new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
189
-				RecursiveIteratorIterator::CHILD_FIRST
190
-			);
191
-
192
-			foreach ($files as $fileInfo) {
193
-				/** @var SplFileInfo $fileInfo */
194
-				if ($fileInfo->isLink()) {
195
-					unlink($fileInfo->getPathname());
196
-				} else if ($fileInfo->isDir()) {
197
-					rmdir($fileInfo->getRealPath());
198
-				} else {
199
-					unlink($fileInfo->getRealPath());
200
-				}
201
-			}
202
-			if ($deleteSelf) {
203
-				rmdir($dir);
204
-			}
205
-		} elseif (file_exists($dir)) {
206
-			if ($deleteSelf) {
207
-				unlink($dir);
208
-			}
209
-		}
210
-		if (!$deleteSelf) {
211
-			return true;
212
-		}
213
-
214
-		return !file_exists($dir);
215
-	}
216
-
217
-	/**
218
-	 * @return \OC\Files\Type\TemplateManager
219
-	 */
220
-	static public function getFileTemplateManager() {
221
-		if (!self::$templateManager) {
222
-			self::$templateManager = new \OC\Files\Type\TemplateManager();
223
-		}
224
-		return self::$templateManager;
225
-	}
226
-
227
-	/**
228
-	 * detect if a given program is found in the search PATH
229
-	 *
230
-	 * @param string $name
231
-	 * @param bool $path
232
-	 * @internal param string $program name
233
-	 * @internal param string $optional search path, defaults to $PATH
234
-	 * @return bool    true if executable program found in path
235
-	 */
236
-	public static function canExecute($name, $path = false) {
237
-		// path defaults to PATH from environment if not set
238
-		if ($path === false) {
239
-			$path = getenv("PATH");
240
-		}
241
-		// we look for an executable file of that name
242
-		$exts = [""];
243
-		$check_fn = "is_executable";
244
-		// Default check will be done with $path directories :
245
-		$dirs = explode(PATH_SEPARATOR, $path);
246
-		// WARNING : We have to check if open_basedir is enabled :
247
-		$obd = OC::$server->getIniWrapper()->getString('open_basedir');
248
-		if ($obd != "none") {
249
-			$obd_values = explode(PATH_SEPARATOR, $obd);
250
-			if (count($obd_values) > 0 and $obd_values[0]) {
251
-				// open_basedir is in effect !
252
-				// We need to check if the program is in one of these dirs :
253
-				$dirs = $obd_values;
254
-			}
255
-		}
256
-		foreach ($dirs as $dir) {
257
-			foreach ($exts as $ext) {
258
-				if ($check_fn("$dir/$name" . $ext))
259
-					return true;
260
-			}
261
-		}
262
-		return false;
263
-	}
264
-
265
-	/**
266
-	 * copy the contents of one stream to another
267
-	 *
268
-	 * @param resource $source
269
-	 * @param resource $target
270
-	 * @return array the number of bytes copied and result
271
-	 */
272
-	public static function streamCopy($source, $target) {
273
-		if (!$source or !$target) {
274
-			return array(0, false);
275
-		}
276
-		$bufSize = 8192;
277
-		$result = true;
278
-		$count = 0;
279
-		while (!feof($source)) {
280
-			$buf = fread($source, $bufSize);
281
-			$bytesWritten = fwrite($target, $buf);
282
-			if ($bytesWritten !== false) {
283
-				$count += $bytesWritten;
284
-			}
285
-			// note: strlen is expensive so only use it when necessary,
286
-			// on the last block
287
-			if ($bytesWritten === false
288
-				|| ($bytesWritten < $bufSize && $bytesWritten < strlen($buf))
289
-			) {
290
-				// write error, could be disk full ?
291
-				$result = false;
292
-				break;
293
-			}
294
-		}
295
-		return array($count, $result);
296
-	}
297
-
298
-	/**
299
-	 * Adds a suffix to the name in case the file exists
300
-	 *
301
-	 * @param string $path
302
-	 * @param string $filename
303
-	 * @return string
304
-	 */
305
-	public static function buildNotExistingFileName($path, $filename) {
306
-		$view = \OC\Files\Filesystem::getView();
307
-		return self::buildNotExistingFileNameForView($path, $filename, $view);
308
-	}
309
-
310
-	/**
311
-	 * Adds a suffix to the name in case the file exists
312
-	 *
313
-	 * @param string $path
314
-	 * @param string $filename
315
-	 * @return string
316
-	 */
317
-	public static function buildNotExistingFileNameForView($path, $filename, \OC\Files\View $view) {
318
-		if ($path === '/') {
319
-			$path = '';
320
-		}
321
-		if ($pos = strrpos($filename, '.')) {
322
-			$name = substr($filename, 0, $pos);
323
-			$ext = substr($filename, $pos);
324
-		} else {
325
-			$name = $filename;
326
-			$ext = '';
327
-		}
328
-
329
-		$newpath = $path . '/' . $filename;
330
-		if ($view->file_exists($newpath)) {
331
-			if (preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
332
-				//Replace the last "(number)" with "(number+1)"
333
-				$last_match = count($matches[0]) - 1;
334
-				$counter = $matches[1][$last_match][0] + 1;
335
-				$offset = $matches[0][$last_match][1];
336
-				$match_length = strlen($matches[0][$last_match][0]);
337
-			} else {
338
-				$counter = 2;
339
-				$match_length = 0;
340
-				$offset = false;
341
-			}
342
-			do {
343
-				if ($offset) {
344
-					//Replace the last "(number)" with "(number+1)"
345
-					$newname = substr_replace($name, '(' . $counter . ')', $offset, $match_length);
346
-				} else {
347
-					$newname = $name . ' (' . $counter . ')';
348
-				}
349
-				$newpath = $path . '/' . $newname . $ext;
350
-				$counter++;
351
-			} while ($view->file_exists($newpath));
352
-		}
353
-
354
-		return $newpath;
355
-	}
356
-
357
-	/**
358
-	 * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
359
-	 *
360
-	 * @param array $input The array to work on
361
-	 * @param int $case Either MB_CASE_UPPER or MB_CASE_LOWER (default)
362
-	 * @param string $encoding The encoding parameter is the character encoding. Defaults to UTF-8
363
-	 * @return array
364
-	 *
365
-	 * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
366
-	 * based on http://www.php.net/manual/en/function.array-change-key-case.php#107715
367
-	 *
368
-	 */
369
-	public static function mb_array_change_key_case($input, $case = MB_CASE_LOWER, $encoding = 'UTF-8') {
370
-		$case = ($case != MB_CASE_UPPER) ? MB_CASE_LOWER : MB_CASE_UPPER;
371
-		$ret = array();
372
-		foreach ($input as $k => $v) {
373
-			$ret[mb_convert_case($k, $case, $encoding)] = $v;
374
-		}
375
-		return $ret;
376
-	}
377
-
378
-	/**
379
-	 * performs a search in a nested array
380
-	 * @param array $haystack the array to be searched
381
-	 * @param string $needle the search string
382
-	 * @param mixed $index optional, only search this key name
383
-	 * @return mixed the key of the matching field, otherwise false
384
-	 *
385
-	 * performs a search in a nested array
386
-	 *
387
-	 * taken from http://www.php.net/manual/en/function.array-search.php#97645
388
-	 */
389
-	public static function recursiveArraySearch($haystack, $needle, $index = null) {
390
-		$aIt = new RecursiveArrayIterator($haystack);
391
-		$it = new RecursiveIteratorIterator($aIt);
392
-
393
-		while ($it->valid()) {
394
-			if (((isset($index) AND ($it->key() == $index)) OR !isset($index)) AND ($it->current() == $needle)) {
395
-				return $aIt->key();
396
-			}
397
-
398
-			$it->next();
399
-		}
400
-
401
-		return false;
402
-	}
403
-
404
-	/**
405
-	 * calculates the maximum upload size respecting system settings, free space and user quota
406
-	 *
407
-	 * @param string $dir the current folder where the user currently operates
408
-	 * @param int $freeSpace the number of bytes free on the storage holding $dir, if not set this will be received from the storage directly
409
-	 * @return int number of bytes representing
410
-	 */
411
-	public static function maxUploadFilesize($dir, $freeSpace = null) {
412
-		if (is_null($freeSpace) || $freeSpace < 0){
413
-			$freeSpace = self::freeSpace($dir);
414
-		}
415
-		return min($freeSpace, self::uploadLimit());
416
-	}
417
-
418
-	/**
419
-	 * Calculate free space left within user quota
420
-	 *
421
-	 * @param string $dir the current folder where the user currently operates
422
-	 * @return int number of bytes representing
423
-	 */
424
-	public static function freeSpace($dir) {
425
-		$freeSpace = \OC\Files\Filesystem::free_space($dir);
426
-		if ($freeSpace < \OCP\Files\FileInfo::SPACE_UNLIMITED) {
427
-			$freeSpace = max($freeSpace, 0);
428
-			return $freeSpace;
429
-		} else {
430
-			return (INF > 0)? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
431
-		}
432
-	}
433
-
434
-	/**
435
-	 * Calculate PHP upload limit
436
-	 *
437
-	 * @return int PHP upload file size limit
438
-	 */
439
-	public static function uploadLimit() {
440
-		$ini = \OC::$server->getIniWrapper();
441
-		$upload_max_filesize = OCP\Util::computerFileSize($ini->get('upload_max_filesize'));
442
-		$post_max_size = OCP\Util::computerFileSize($ini->get('post_max_size'));
443
-		if ((int)$upload_max_filesize === 0 and (int)$post_max_size === 0) {
444
-			return INF;
445
-		} elseif ((int)$upload_max_filesize === 0 or (int)$post_max_size === 0) {
446
-			return max($upload_max_filesize, $post_max_size); //only the non 0 value counts
447
-		} else {
448
-			return min($upload_max_filesize, $post_max_size);
449
-		}
450
-	}
451
-
452
-	/**
453
-	 * Checks if a function is available
454
-	 *
455
-	 * @param string $function_name
456
-	 * @return bool
457
-	 */
458
-	public static function is_function_enabled($function_name) {
459
-		if (!function_exists($function_name)) {
460
-			return false;
461
-		}
462
-		$ini = \OC::$server->getIniWrapper();
463
-		$disabled = explode(',', $ini->get('disable_functions') ?: '');
464
-		$disabled = array_map('trim', $disabled);
465
-		if (in_array($function_name, $disabled)) {
466
-			return false;
467
-		}
468
-		$disabled = explode(',', $ini->get('suhosin.executor.func.blacklist') ?: '');
469
-		$disabled = array_map('trim', $disabled);
470
-		if (in_array($function_name, $disabled)) {
471
-			return false;
472
-		}
473
-		return true;
474
-	}
475
-
476
-	/**
477
-	 * Try to find a program
478
-	 *
479
-	 * @param string $program
480
-	 * @return null|string
481
-	 */
482
-	public static function findBinaryPath($program) {
483
-		$memcache = \OC::$server->getMemCacheFactory()->createDistributed('findBinaryPath');
484
-		if ($memcache->hasKey($program)) {
485
-			return $memcache->get($program);
486
-		}
487
-		$result = null;
488
-		if (self::is_function_enabled('exec')) {
489
-			$exeSniffer = new ExecutableFinder();
490
-			// Returns null if nothing is found
491
-			$result = $exeSniffer->find($program, null, ['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/opt/bin']);
492
-		}
493
-		// store the value for 5 minutes
494
-		$memcache->set($program, $result, 300);
495
-		return $result;
496
-	}
497
-
498
-	/**
499
-	 * Calculate the disc space for the given path
500
-	 *
501
-	 * @param string $path
502
-	 * @param \OCP\Files\FileInfo $rootInfo (optional)
503
-	 * @return array
504
-	 * @throws \OCP\Files\NotFoundException
505
-	 */
506
-	public static function getStorageInfo($path, $rootInfo = null) {
507
-		// return storage info without adding mount points
508
-		$includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
509
-
510
-		if (!$rootInfo) {
511
-			$rootInfo = \OC\Files\Filesystem::getFileInfo($path, $includeExtStorage ? 'ext' : false);
512
-		}
513
-		if (!$rootInfo instanceof \OCP\Files\FileInfo) {
514
-			throw new \OCP\Files\NotFoundException();
515
-		}
516
-		$used = $rootInfo->getSize();
517
-		if ($used < 0) {
518
-			$used = 0;
519
-		}
520
-		$quota = \OCP\Files\FileInfo::SPACE_UNLIMITED;
521
-		$storage = $rootInfo->getStorage();
522
-		$sourceStorage = $storage;
523
-		if ($storage->instanceOfStorage('\OCA\Files_Sharing\SharedStorage')) {
524
-			$includeExtStorage = false;
525
-			$sourceStorage = $storage->getSourceStorage();
526
-		}
527
-		if ($includeExtStorage) {
528
-			if ($storage->instanceOfStorage('\OC\Files\Storage\Home')
529
-				|| $storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')
530
-			) {
531
-				/** @var \OC\Files\Storage\Home $storage */
532
-				$userInstance = $storage->getUser();
533
-				$user = ($userInstance === null) ? null : $userInstance->getUID();
534
-			} else {
535
-				$user = \OC::$server->getUserSession()->getUser()->getUID();
536
-			}
537
-			if ($user) {
538
-				$quota = OC_Util::getUserQuota($user);
539
-			} else {
540
-				$quota = \OCP\Files\FileInfo::SPACE_UNLIMITED;
541
-			}
542
-			if ($quota !== \OCP\Files\FileInfo::SPACE_UNLIMITED) {
543
-				// always get free space / total space from root + mount points
544
-				return self::getGlobalStorageInfo();
545
-			}
546
-		}
547
-
548
-		// TODO: need a better way to get total space from storage
549
-		if ($sourceStorage->instanceOfStorage('\OC\Files\Storage\Wrapper\Quota')) {
550
-			/** @var \OC\Files\Storage\Wrapper\Quota $storage */
551
-			$quota = $sourceStorage->getQuota();
552
-		}
553
-		$free = $sourceStorage->free_space($rootInfo->getInternalPath());
554
-		if ($free >= 0) {
555
-			$total = $free + $used;
556
-		} else {
557
-			$total = $free; //either unknown or unlimited
558
-		}
559
-		if ($total > 0) {
560
-			if ($quota > 0 && $total > $quota) {
561
-				$total = $quota;
562
-			}
563
-			// prevent division by zero or error codes (negative values)
564
-			$relative = round(($used / $total) * 10000) / 100;
565
-		} else {
566
-			$relative = 0;
567
-		}
568
-
569
-		$ownerId = $storage->getOwner($path);
570
-		$ownerDisplayName = '';
571
-		$owner = \OC::$server->getUserManager()->get($ownerId);
572
-		if($owner) {
573
-			$ownerDisplayName = $owner->getDisplayName();
574
-		}
575
-
576
-		return [
577
-			'free' => $free,
578
-			'used' => $used,
579
-			'quota' => $quota,
580
-			'total' => $total,
581
-			'relative' => $relative,
582
-			'owner' => $ownerId,
583
-			'ownerDisplayName' => $ownerDisplayName,
584
-		];
585
-	}
586
-
587
-	/**
588
-	 * Get storage info including all mount points and quota
589
-	 *
590
-	 * @return array
591
-	 */
592
-	private static function getGlobalStorageInfo() {
593
-		$quota = OC_Util::getUserQuota(\OCP\User::getUser());
594
-
595
-		$rootInfo = \OC\Files\Filesystem::getFileInfo('', 'ext');
596
-		$used = $rootInfo['size'];
597
-		if ($used < 0) {
598
-			$used = 0;
599
-		}
600
-
601
-		$total = $quota;
602
-		$free = $quota - $used;
603
-
604
-		if ($total > 0) {
605
-			if ($quota > 0 && $total > $quota) {
606
-				$total = $quota;
607
-			}
608
-			// prevent division by zero or error codes (negative values)
609
-			$relative = round(($used / $total) * 10000) / 100;
610
-		} else {
611
-			$relative = 0;
612
-		}
613
-
614
-		return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative);
615
-
616
-	}
617
-
618
-	/**
619
-	 * Returns whether the config file is set manually to read-only
620
-	 * @return bool
621
-	 */
622
-	public static function isReadOnlyConfigEnabled() {
623
-		return \OC::$server->getConfig()->getSystemValue('config_is_read_only', false);
624
-	}
52
+    private static $templateManager;
53
+
54
+    /**
55
+     * Make a human file size
56
+     * @param int $bytes file size in bytes
57
+     * @return string a human readable file size
58
+     *
59
+     * Makes 2048 to 2 kB.
60
+     */
61
+    public static function humanFileSize($bytes) {
62
+        if ($bytes < 0) {
63
+            return "?";
64
+        }
65
+        if ($bytes < 1024) {
66
+            return "$bytes B";
67
+        }
68
+        $bytes = round($bytes / 1024, 0);
69
+        if ($bytes < 1024) {
70
+            return "$bytes KB";
71
+        }
72
+        $bytes = round($bytes / 1024, 1);
73
+        if ($bytes < 1024) {
74
+            return "$bytes MB";
75
+        }
76
+        $bytes = round($bytes / 1024, 1);
77
+        if ($bytes < 1024) {
78
+            return "$bytes GB";
79
+        }
80
+        $bytes = round($bytes / 1024, 1);
81
+        if ($bytes < 1024) {
82
+            return "$bytes TB";
83
+        }
84
+
85
+        $bytes = round($bytes / 1024, 1);
86
+        return "$bytes PB";
87
+    }
88
+
89
+    /**
90
+     * Make a php file size
91
+     * @param int $bytes file size in bytes
92
+     * @return string a php parseable file size
93
+     *
94
+     * Makes 2048 to 2k and 2^41 to 2048G
95
+     */
96
+    public static function phpFileSize($bytes) {
97
+        if ($bytes < 0) {
98
+            return "?";
99
+        }
100
+        if ($bytes < 1024) {
101
+            return $bytes . "B";
102
+        }
103
+        $bytes = round($bytes / 1024, 1);
104
+        if ($bytes < 1024) {
105
+            return $bytes . "K";
106
+        }
107
+        $bytes = round($bytes / 1024, 1);
108
+        if ($bytes < 1024) {
109
+            return $bytes . "M";
110
+        }
111
+        $bytes = round($bytes / 1024, 1);
112
+        return $bytes . "G";
113
+    }
114
+
115
+    /**
116
+     * Make a computer file size
117
+     * @param string $str file size in human readable format
118
+     * @return float|bool a file size in bytes
119
+     *
120
+     * Makes 2kB to 2048.
121
+     *
122
+     * Inspired by: http://www.php.net/manual/en/function.filesize.php#92418
123
+     */
124
+    public static function computerFileSize($str) {
125
+        $str = strtolower($str);
126
+        if (is_numeric($str)) {
127
+            return (float)$str;
128
+        }
129
+
130
+        $bytes_array = array(
131
+            'b' => 1,
132
+            'k' => 1024,
133
+            'kb' => 1024,
134
+            'mb' => 1024 * 1024,
135
+            'm' => 1024 * 1024,
136
+            'gb' => 1024 * 1024 * 1024,
137
+            'g' => 1024 * 1024 * 1024,
138
+            'tb' => 1024 * 1024 * 1024 * 1024,
139
+            't' => 1024 * 1024 * 1024 * 1024,
140
+            'pb' => 1024 * 1024 * 1024 * 1024 * 1024,
141
+            'p' => 1024 * 1024 * 1024 * 1024 * 1024,
142
+        );
143
+
144
+        $bytes = (float)$str;
145
+
146
+        if (preg_match('#([kmgtp]?b?)$#si', $str, $matches) && !empty($bytes_array[$matches[1]])) {
147
+            $bytes *= $bytes_array[$matches[1]];
148
+        } else {
149
+            return false;
150
+        }
151
+
152
+        $bytes = round($bytes);
153
+
154
+        return $bytes;
155
+    }
156
+
157
+    /**
158
+     * Recursive copying of folders
159
+     * @param string $src source folder
160
+     * @param string $dest target folder
161
+     *
162
+     */
163
+    static function copyr($src, $dest) {
164
+        if (is_dir($src)) {
165
+            if (!is_dir($dest)) {
166
+                mkdir($dest);
167
+            }
168
+            $files = scandir($src);
169
+            foreach ($files as $file) {
170
+                if ($file != "." && $file != "..") {
171
+                    self::copyr("$src/$file", "$dest/$file");
172
+                }
173
+            }
174
+        } elseif (file_exists($src) && !\OC\Files\Filesystem::isFileBlacklisted($src)) {
175
+            copy($src, $dest);
176
+        }
177
+    }
178
+
179
+    /**
180
+     * Recursive deletion of folders
181
+     * @param string $dir path to the folder
182
+     * @param bool $deleteSelf if set to false only the content of the folder will be deleted
183
+     * @return bool
184
+     */
185
+    static function rmdirr($dir, $deleteSelf = true) {
186
+        if (is_dir($dir)) {
187
+            $files = new RecursiveIteratorIterator(
188
+                new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
189
+                RecursiveIteratorIterator::CHILD_FIRST
190
+            );
191
+
192
+            foreach ($files as $fileInfo) {
193
+                /** @var SplFileInfo $fileInfo */
194
+                if ($fileInfo->isLink()) {
195
+                    unlink($fileInfo->getPathname());
196
+                } else if ($fileInfo->isDir()) {
197
+                    rmdir($fileInfo->getRealPath());
198
+                } else {
199
+                    unlink($fileInfo->getRealPath());
200
+                }
201
+            }
202
+            if ($deleteSelf) {
203
+                rmdir($dir);
204
+            }
205
+        } elseif (file_exists($dir)) {
206
+            if ($deleteSelf) {
207
+                unlink($dir);
208
+            }
209
+        }
210
+        if (!$deleteSelf) {
211
+            return true;
212
+        }
213
+
214
+        return !file_exists($dir);
215
+    }
216
+
217
+    /**
218
+     * @return \OC\Files\Type\TemplateManager
219
+     */
220
+    static public function getFileTemplateManager() {
221
+        if (!self::$templateManager) {
222
+            self::$templateManager = new \OC\Files\Type\TemplateManager();
223
+        }
224
+        return self::$templateManager;
225
+    }
226
+
227
+    /**
228
+     * detect if a given program is found in the search PATH
229
+     *
230
+     * @param string $name
231
+     * @param bool $path
232
+     * @internal param string $program name
233
+     * @internal param string $optional search path, defaults to $PATH
234
+     * @return bool    true if executable program found in path
235
+     */
236
+    public static function canExecute($name, $path = false) {
237
+        // path defaults to PATH from environment if not set
238
+        if ($path === false) {
239
+            $path = getenv("PATH");
240
+        }
241
+        // we look for an executable file of that name
242
+        $exts = [""];
243
+        $check_fn = "is_executable";
244
+        // Default check will be done with $path directories :
245
+        $dirs = explode(PATH_SEPARATOR, $path);
246
+        // WARNING : We have to check if open_basedir is enabled :
247
+        $obd = OC::$server->getIniWrapper()->getString('open_basedir');
248
+        if ($obd != "none") {
249
+            $obd_values = explode(PATH_SEPARATOR, $obd);
250
+            if (count($obd_values) > 0 and $obd_values[0]) {
251
+                // open_basedir is in effect !
252
+                // We need to check if the program is in one of these dirs :
253
+                $dirs = $obd_values;
254
+            }
255
+        }
256
+        foreach ($dirs as $dir) {
257
+            foreach ($exts as $ext) {
258
+                if ($check_fn("$dir/$name" . $ext))
259
+                    return true;
260
+            }
261
+        }
262
+        return false;
263
+    }
264
+
265
+    /**
266
+     * copy the contents of one stream to another
267
+     *
268
+     * @param resource $source
269
+     * @param resource $target
270
+     * @return array the number of bytes copied and result
271
+     */
272
+    public static function streamCopy($source, $target) {
273
+        if (!$source or !$target) {
274
+            return array(0, false);
275
+        }
276
+        $bufSize = 8192;
277
+        $result = true;
278
+        $count = 0;
279
+        while (!feof($source)) {
280
+            $buf = fread($source, $bufSize);
281
+            $bytesWritten = fwrite($target, $buf);
282
+            if ($bytesWritten !== false) {
283
+                $count += $bytesWritten;
284
+            }
285
+            // note: strlen is expensive so only use it when necessary,
286
+            // on the last block
287
+            if ($bytesWritten === false
288
+                || ($bytesWritten < $bufSize && $bytesWritten < strlen($buf))
289
+            ) {
290
+                // write error, could be disk full ?
291
+                $result = false;
292
+                break;
293
+            }
294
+        }
295
+        return array($count, $result);
296
+    }
297
+
298
+    /**
299
+     * Adds a suffix to the name in case the file exists
300
+     *
301
+     * @param string $path
302
+     * @param string $filename
303
+     * @return string
304
+     */
305
+    public static function buildNotExistingFileName($path, $filename) {
306
+        $view = \OC\Files\Filesystem::getView();
307
+        return self::buildNotExistingFileNameForView($path, $filename, $view);
308
+    }
309
+
310
+    /**
311
+     * Adds a suffix to the name in case the file exists
312
+     *
313
+     * @param string $path
314
+     * @param string $filename
315
+     * @return string
316
+     */
317
+    public static function buildNotExistingFileNameForView($path, $filename, \OC\Files\View $view) {
318
+        if ($path === '/') {
319
+            $path = '';
320
+        }
321
+        if ($pos = strrpos($filename, '.')) {
322
+            $name = substr($filename, 0, $pos);
323
+            $ext = substr($filename, $pos);
324
+        } else {
325
+            $name = $filename;
326
+            $ext = '';
327
+        }
328
+
329
+        $newpath = $path . '/' . $filename;
330
+        if ($view->file_exists($newpath)) {
331
+            if (preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
332
+                //Replace the last "(number)" with "(number+1)"
333
+                $last_match = count($matches[0]) - 1;
334
+                $counter = $matches[1][$last_match][0] + 1;
335
+                $offset = $matches[0][$last_match][1];
336
+                $match_length = strlen($matches[0][$last_match][0]);
337
+            } else {
338
+                $counter = 2;
339
+                $match_length = 0;
340
+                $offset = false;
341
+            }
342
+            do {
343
+                if ($offset) {
344
+                    //Replace the last "(number)" with "(number+1)"
345
+                    $newname = substr_replace($name, '(' . $counter . ')', $offset, $match_length);
346
+                } else {
347
+                    $newname = $name . ' (' . $counter . ')';
348
+                }
349
+                $newpath = $path . '/' . $newname . $ext;
350
+                $counter++;
351
+            } while ($view->file_exists($newpath));
352
+        }
353
+
354
+        return $newpath;
355
+    }
356
+
357
+    /**
358
+     * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
359
+     *
360
+     * @param array $input The array to work on
361
+     * @param int $case Either MB_CASE_UPPER or MB_CASE_LOWER (default)
362
+     * @param string $encoding The encoding parameter is the character encoding. Defaults to UTF-8
363
+     * @return array
364
+     *
365
+     * Returns an array with all keys from input lowercased or uppercased. Numbered indices are left as is.
366
+     * based on http://www.php.net/manual/en/function.array-change-key-case.php#107715
367
+     *
368
+     */
369
+    public static function mb_array_change_key_case($input, $case = MB_CASE_LOWER, $encoding = 'UTF-8') {
370
+        $case = ($case != MB_CASE_UPPER) ? MB_CASE_LOWER : MB_CASE_UPPER;
371
+        $ret = array();
372
+        foreach ($input as $k => $v) {
373
+            $ret[mb_convert_case($k, $case, $encoding)] = $v;
374
+        }
375
+        return $ret;
376
+    }
377
+
378
+    /**
379
+     * performs a search in a nested array
380
+     * @param array $haystack the array to be searched
381
+     * @param string $needle the search string
382
+     * @param mixed $index optional, only search this key name
383
+     * @return mixed the key of the matching field, otherwise false
384
+     *
385
+     * performs a search in a nested array
386
+     *
387
+     * taken from http://www.php.net/manual/en/function.array-search.php#97645
388
+     */
389
+    public static function recursiveArraySearch($haystack, $needle, $index = null) {
390
+        $aIt = new RecursiveArrayIterator($haystack);
391
+        $it = new RecursiveIteratorIterator($aIt);
392
+
393
+        while ($it->valid()) {
394
+            if (((isset($index) AND ($it->key() == $index)) OR !isset($index)) AND ($it->current() == $needle)) {
395
+                return $aIt->key();
396
+            }
397
+
398
+            $it->next();
399
+        }
400
+
401
+        return false;
402
+    }
403
+
404
+    /**
405
+     * calculates the maximum upload size respecting system settings, free space and user quota
406
+     *
407
+     * @param string $dir the current folder where the user currently operates
408
+     * @param int $freeSpace the number of bytes free on the storage holding $dir, if not set this will be received from the storage directly
409
+     * @return int number of bytes representing
410
+     */
411
+    public static function maxUploadFilesize($dir, $freeSpace = null) {
412
+        if (is_null($freeSpace) || $freeSpace < 0){
413
+            $freeSpace = self::freeSpace($dir);
414
+        }
415
+        return min($freeSpace, self::uploadLimit());
416
+    }
417
+
418
+    /**
419
+     * Calculate free space left within user quota
420
+     *
421
+     * @param string $dir the current folder where the user currently operates
422
+     * @return int number of bytes representing
423
+     */
424
+    public static function freeSpace($dir) {
425
+        $freeSpace = \OC\Files\Filesystem::free_space($dir);
426
+        if ($freeSpace < \OCP\Files\FileInfo::SPACE_UNLIMITED) {
427
+            $freeSpace = max($freeSpace, 0);
428
+            return $freeSpace;
429
+        } else {
430
+            return (INF > 0)? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
431
+        }
432
+    }
433
+
434
+    /**
435
+     * Calculate PHP upload limit
436
+     *
437
+     * @return int PHP upload file size limit
438
+     */
439
+    public static function uploadLimit() {
440
+        $ini = \OC::$server->getIniWrapper();
441
+        $upload_max_filesize = OCP\Util::computerFileSize($ini->get('upload_max_filesize'));
442
+        $post_max_size = OCP\Util::computerFileSize($ini->get('post_max_size'));
443
+        if ((int)$upload_max_filesize === 0 and (int)$post_max_size === 0) {
444
+            return INF;
445
+        } elseif ((int)$upload_max_filesize === 0 or (int)$post_max_size === 0) {
446
+            return max($upload_max_filesize, $post_max_size); //only the non 0 value counts
447
+        } else {
448
+            return min($upload_max_filesize, $post_max_size);
449
+        }
450
+    }
451
+
452
+    /**
453
+     * Checks if a function is available
454
+     *
455
+     * @param string $function_name
456
+     * @return bool
457
+     */
458
+    public static function is_function_enabled($function_name) {
459
+        if (!function_exists($function_name)) {
460
+            return false;
461
+        }
462
+        $ini = \OC::$server->getIniWrapper();
463
+        $disabled = explode(',', $ini->get('disable_functions') ?: '');
464
+        $disabled = array_map('trim', $disabled);
465
+        if (in_array($function_name, $disabled)) {
466
+            return false;
467
+        }
468
+        $disabled = explode(',', $ini->get('suhosin.executor.func.blacklist') ?: '');
469
+        $disabled = array_map('trim', $disabled);
470
+        if (in_array($function_name, $disabled)) {
471
+            return false;
472
+        }
473
+        return true;
474
+    }
475
+
476
+    /**
477
+     * Try to find a program
478
+     *
479
+     * @param string $program
480
+     * @return null|string
481
+     */
482
+    public static function findBinaryPath($program) {
483
+        $memcache = \OC::$server->getMemCacheFactory()->createDistributed('findBinaryPath');
484
+        if ($memcache->hasKey($program)) {
485
+            return $memcache->get($program);
486
+        }
487
+        $result = null;
488
+        if (self::is_function_enabled('exec')) {
489
+            $exeSniffer = new ExecutableFinder();
490
+            // Returns null if nothing is found
491
+            $result = $exeSniffer->find($program, null, ['/usr/local/sbin', '/usr/local/bin', '/usr/sbin', '/usr/bin', '/sbin', '/bin', '/opt/bin']);
492
+        }
493
+        // store the value for 5 minutes
494
+        $memcache->set($program, $result, 300);
495
+        return $result;
496
+    }
497
+
498
+    /**
499
+     * Calculate the disc space for the given path
500
+     *
501
+     * @param string $path
502
+     * @param \OCP\Files\FileInfo $rootInfo (optional)
503
+     * @return array
504
+     * @throws \OCP\Files\NotFoundException
505
+     */
506
+    public static function getStorageInfo($path, $rootInfo = null) {
507
+        // return storage info without adding mount points
508
+        $includeExtStorage = \OC::$server->getSystemConfig()->getValue('quota_include_external_storage', false);
509
+
510
+        if (!$rootInfo) {
511
+            $rootInfo = \OC\Files\Filesystem::getFileInfo($path, $includeExtStorage ? 'ext' : false);
512
+        }
513
+        if (!$rootInfo instanceof \OCP\Files\FileInfo) {
514
+            throw new \OCP\Files\NotFoundException();
515
+        }
516
+        $used = $rootInfo->getSize();
517
+        if ($used < 0) {
518
+            $used = 0;
519
+        }
520
+        $quota = \OCP\Files\FileInfo::SPACE_UNLIMITED;
521
+        $storage = $rootInfo->getStorage();
522
+        $sourceStorage = $storage;
523
+        if ($storage->instanceOfStorage('\OCA\Files_Sharing\SharedStorage')) {
524
+            $includeExtStorage = false;
525
+            $sourceStorage = $storage->getSourceStorage();
526
+        }
527
+        if ($includeExtStorage) {
528
+            if ($storage->instanceOfStorage('\OC\Files\Storage\Home')
529
+                || $storage->instanceOfStorage('\OC\Files\ObjectStore\HomeObjectStoreStorage')
530
+            ) {
531
+                /** @var \OC\Files\Storage\Home $storage */
532
+                $userInstance = $storage->getUser();
533
+                $user = ($userInstance === null) ? null : $userInstance->getUID();
534
+            } else {
535
+                $user = \OC::$server->getUserSession()->getUser()->getUID();
536
+            }
537
+            if ($user) {
538
+                $quota = OC_Util::getUserQuota($user);
539
+            } else {
540
+                $quota = \OCP\Files\FileInfo::SPACE_UNLIMITED;
541
+            }
542
+            if ($quota !== \OCP\Files\FileInfo::SPACE_UNLIMITED) {
543
+                // always get free space / total space from root + mount points
544
+                return self::getGlobalStorageInfo();
545
+            }
546
+        }
547
+
548
+        // TODO: need a better way to get total space from storage
549
+        if ($sourceStorage->instanceOfStorage('\OC\Files\Storage\Wrapper\Quota')) {
550
+            /** @var \OC\Files\Storage\Wrapper\Quota $storage */
551
+            $quota = $sourceStorage->getQuota();
552
+        }
553
+        $free = $sourceStorage->free_space($rootInfo->getInternalPath());
554
+        if ($free >= 0) {
555
+            $total = $free + $used;
556
+        } else {
557
+            $total = $free; //either unknown or unlimited
558
+        }
559
+        if ($total > 0) {
560
+            if ($quota > 0 && $total > $quota) {
561
+                $total = $quota;
562
+            }
563
+            // prevent division by zero or error codes (negative values)
564
+            $relative = round(($used / $total) * 10000) / 100;
565
+        } else {
566
+            $relative = 0;
567
+        }
568
+
569
+        $ownerId = $storage->getOwner($path);
570
+        $ownerDisplayName = '';
571
+        $owner = \OC::$server->getUserManager()->get($ownerId);
572
+        if($owner) {
573
+            $ownerDisplayName = $owner->getDisplayName();
574
+        }
575
+
576
+        return [
577
+            'free' => $free,
578
+            'used' => $used,
579
+            'quota' => $quota,
580
+            'total' => $total,
581
+            'relative' => $relative,
582
+            'owner' => $ownerId,
583
+            'ownerDisplayName' => $ownerDisplayName,
584
+        ];
585
+    }
586
+
587
+    /**
588
+     * Get storage info including all mount points and quota
589
+     *
590
+     * @return array
591
+     */
592
+    private static function getGlobalStorageInfo() {
593
+        $quota = OC_Util::getUserQuota(\OCP\User::getUser());
594
+
595
+        $rootInfo = \OC\Files\Filesystem::getFileInfo('', 'ext');
596
+        $used = $rootInfo['size'];
597
+        if ($used < 0) {
598
+            $used = 0;
599
+        }
600
+
601
+        $total = $quota;
602
+        $free = $quota - $used;
603
+
604
+        if ($total > 0) {
605
+            if ($quota > 0 && $total > $quota) {
606
+                $total = $quota;
607
+            }
608
+            // prevent division by zero or error codes (negative values)
609
+            $relative = round(($used / $total) * 10000) / 100;
610
+        } else {
611
+            $relative = 0;
612
+        }
613
+
614
+        return array('free' => $free, 'used' => $used, 'total' => $total, 'relative' => $relative);
615
+
616
+    }
617
+
618
+    /**
619
+     * Returns whether the config file is set manually to read-only
620
+     * @return bool
621
+     */
622
+    public static function isReadOnlyConfigEnabled() {
623
+        return \OC::$server->getConfig()->getSystemValue('config_is_read_only', false);
624
+    }
625 625
 }
Please login to merge, or discard this patch.
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -98,18 +98,18 @@  discard block
 block discarded – undo
98 98
 			return "?";
99 99
 		}
100 100
 		if ($bytes < 1024) {
101
-			return $bytes . "B";
101
+			return $bytes."B";
102 102
 		}
103 103
 		$bytes = round($bytes / 1024, 1);
104 104
 		if ($bytes < 1024) {
105
-			return $bytes . "K";
105
+			return $bytes."K";
106 106
 		}
107 107
 		$bytes = round($bytes / 1024, 1);
108 108
 		if ($bytes < 1024) {
109
-			return $bytes . "M";
109
+			return $bytes."M";
110 110
 		}
111 111
 		$bytes = round($bytes / 1024, 1);
112
-		return $bytes . "G";
112
+		return $bytes."G";
113 113
 	}
114 114
 
115 115
 	/**
@@ -124,7 +124,7 @@  discard block
 block discarded – undo
124 124
 	public static function computerFileSize($str) {
125 125
 		$str = strtolower($str);
126 126
 		if (is_numeric($str)) {
127
-			return (float)$str;
127
+			return (float) $str;
128 128
 		}
129 129
 
130 130
 		$bytes_array = array(
@@ -141,7 +141,7 @@  discard block
 block discarded – undo
141 141
 			'p' => 1024 * 1024 * 1024 * 1024 * 1024,
142 142
 		);
143 143
 
144
-		$bytes = (float)$str;
144
+		$bytes = (float) $str;
145 145
 
146 146
 		if (preg_match('#([kmgtp]?b?)$#si', $str, $matches) && !empty($bytes_array[$matches[1]])) {
147 147
 			$bytes *= $bytes_array[$matches[1]];
@@ -255,7 +255,7 @@  discard block
 block discarded – undo
255 255
 		}
256 256
 		foreach ($dirs as $dir) {
257 257
 			foreach ($exts as $ext) {
258
-				if ($check_fn("$dir/$name" . $ext))
258
+				if ($check_fn("$dir/$name".$ext))
259 259
 					return true;
260 260
 			}
261 261
 		}
@@ -326,7 +326,7 @@  discard block
 block discarded – undo
326 326
 			$ext = '';
327 327
 		}
328 328
 
329
-		$newpath = $path . '/' . $filename;
329
+		$newpath = $path.'/'.$filename;
330 330
 		if ($view->file_exists($newpath)) {
331 331
 			if (preg_match_all('/\((\d+)\)/', $name, $matches, PREG_OFFSET_CAPTURE)) {
332 332
 				//Replace the last "(number)" with "(number+1)"
@@ -342,11 +342,11 @@  discard block
 block discarded – undo
342 342
 			do {
343 343
 				if ($offset) {
344 344
 					//Replace the last "(number)" with "(number+1)"
345
-					$newname = substr_replace($name, '(' . $counter . ')', $offset, $match_length);
345
+					$newname = substr_replace($name, '('.$counter.')', $offset, $match_length);
346 346
 				} else {
347
-					$newname = $name . ' (' . $counter . ')';
347
+					$newname = $name.' ('.$counter.')';
348 348
 				}
349
-				$newpath = $path . '/' . $newname . $ext;
349
+				$newpath = $path.'/'.$newname.$ext;
350 350
 				$counter++;
351 351
 			} while ($view->file_exists($newpath));
352 352
 		}
@@ -409,7 +409,7 @@  discard block
 block discarded – undo
409 409
 	 * @return int number of bytes representing
410 410
 	 */
411 411
 	public static function maxUploadFilesize($dir, $freeSpace = null) {
412
-		if (is_null($freeSpace) || $freeSpace < 0){
412
+		if (is_null($freeSpace) || $freeSpace < 0) {
413 413
 			$freeSpace = self::freeSpace($dir);
414 414
 		}
415 415
 		return min($freeSpace, self::uploadLimit());
@@ -427,7 +427,7 @@  discard block
 block discarded – undo
427 427
 			$freeSpace = max($freeSpace, 0);
428 428
 			return $freeSpace;
429 429
 		} else {
430
-			return (INF > 0)? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
430
+			return (INF > 0) ? INF: PHP_INT_MAX; // work around https://bugs.php.net/bug.php?id=69188
431 431
 		}
432 432
 	}
433 433
 
@@ -440,9 +440,9 @@  discard block
 block discarded – undo
440 440
 		$ini = \OC::$server->getIniWrapper();
441 441
 		$upload_max_filesize = OCP\Util::computerFileSize($ini->get('upload_max_filesize'));
442 442
 		$post_max_size = OCP\Util::computerFileSize($ini->get('post_max_size'));
443
-		if ((int)$upload_max_filesize === 0 and (int)$post_max_size === 0) {
443
+		if ((int) $upload_max_filesize === 0 and (int) $post_max_size === 0) {
444 444
 			return INF;
445
-		} elseif ((int)$upload_max_filesize === 0 or (int)$post_max_size === 0) {
445
+		} elseif ((int) $upload_max_filesize === 0 or (int) $post_max_size === 0) {
446 446
 			return max($upload_max_filesize, $post_max_size); //only the non 0 value counts
447 447
 		} else {
448 448
 			return min($upload_max_filesize, $post_max_size);
@@ -569,7 +569,7 @@  discard block
 block discarded – undo
569 569
 		$ownerId = $storage->getOwner($path);
570 570
 		$ownerDisplayName = '';
571 571
 		$owner = \OC::$server->getUserManager()->get($ownerId);
572
-		if($owner) {
572
+		if ($owner) {
573 573
 			$ownerDisplayName = $owner->getDisplayName();
574 574
 		}
575 575
 
Please login to merge, or discard this patch.
lib/private/BackgroundJob/Legacy/RegularJob.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -26,14 +26,14 @@
 block discarded – undo
26 26
 use OCP\AutoloadNotAllowedException;
27 27
 
28 28
 class RegularJob extends \OC\BackgroundJob\Job {
29
-	public function run($argument) {
30
-		try {
31
-			if (is_callable($argument)) {
32
-				call_user_func($argument);
33
-			}
34
-		} catch (AutoloadNotAllowedException $e) {
35
-			// job is from a disabled app, ignore
36
-			return null;
37
-		}
38
-	}
29
+    public function run($argument) {
30
+        try {
31
+            if (is_callable($argument)) {
32
+                call_user_func($argument);
33
+            }
34
+        } catch (AutoloadNotAllowedException $e) {
35
+            // job is from a disabled app, ignore
36
+            return null;
37
+        }
38
+    }
39 39
 }
Please login to merge, or discard this patch.
lib/private/BackgroundJob/Legacy/QueuedJob.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -24,12 +24,12 @@
 block discarded – undo
24 24
 namespace OC\BackgroundJob\Legacy;
25 25
 
26 26
 class QueuedJob extends \OC\BackgroundJob\QueuedJob {
27
-	public function run($argument) {
28
-		$class = $argument['klass'];
29
-		$method = $argument['method'];
30
-		$parameters = $argument['parameters'];
31
-		if (is_callable(array($class, $method))) {
32
-			call_user_func(array($class, $method), $parameters);
33
-		}
34
-	}
27
+    public function run($argument) {
28
+        $class = $argument['klass'];
29
+        $method = $argument['method'];
30
+        $parameters = $argument['parameters'];
31
+        if (is_callable(array($class, $method))) {
32
+            call_user_func(array($class, $method), $parameters);
33
+        }
34
+    }
35 35
 }
Please login to merge, or discard this patch.
lib/private/Settings/Section.php 1 patch
Indentation   +58 added lines, -58 removed lines patch added patch discarded remove patch
@@ -26,67 +26,67 @@
 block discarded – undo
26 26
 use OCP\Settings\IIconSection;
27 27
 
28 28
 class Section implements IIconSection {
29
-	/** @var string */
30
-	private $id;
31
-	/** @var string */
32
-	private $name;
33
-	/** @var int */
34
-	private $priority;
35
-	/** @var string */
36
-	private $icon;
29
+    /** @var string */
30
+    private $id;
31
+    /** @var string */
32
+    private $name;
33
+    /** @var int */
34
+    private $priority;
35
+    /** @var string */
36
+    private $icon;
37 37
 
38
-	/**
39
-	 * @param string $id
40
-	 * @param string $name
41
-	 * @param int $priority
42
-	 * @param string $icon
43
-	 */
44
-	public function __construct($id, $name, $priority, $icon = '') {
45
-		$this->id = $id;
46
-		$this->name = $name;
47
-		$this->priority = $priority;
48
-		$this->icon = $icon;
49
-	}
38
+    /**
39
+     * @param string $id
40
+     * @param string $name
41
+     * @param int $priority
42
+     * @param string $icon
43
+     */
44
+    public function __construct($id, $name, $priority, $icon = '') {
45
+        $this->id = $id;
46
+        $this->name = $name;
47
+        $this->priority = $priority;
48
+        $this->icon = $icon;
49
+    }
50 50
 
51
-	/**
52
-	 * returns the ID of the section. It is supposed to be a lower case string,
53
-	 * e.g. 'ldap'
54
-	 *
55
-	 * @returns string
56
-	 */
57
-	public function getID() {
58
-		return $this->id;
59
-	}
51
+    /**
52
+     * returns the ID of the section. It is supposed to be a lower case string,
53
+     * e.g. 'ldap'
54
+     *
55
+     * @returns string
56
+     */
57
+    public function getID() {
58
+        return $this->id;
59
+    }
60 60
 
61
-	/**
62
-	 * returns the translated name as it should be displayed, e.g. 'LDAP / AD
63
-	 * integration'. Use the L10N service to translate it.
64
-	 *
65
-	 * @return string
66
-	 */
67
-	public function getName() {
68
-		return $this->name;
69
-	}
61
+    /**
62
+     * returns the translated name as it should be displayed, e.g. 'LDAP / AD
63
+     * integration'. Use the L10N service to translate it.
64
+     *
65
+     * @return string
66
+     */
67
+    public function getName() {
68
+        return $this->name;
69
+    }
70 70
 
71
-	/**
72
-	 * @return int whether the form should be rather on the top or bottom of
73
-	 * the settings navigation. The sections are arranged in ascending order of
74
-	 * the priority values. It is required to return a value between 0 and 99.
75
-	 *
76
-	 * E.g.: 70
77
-	 */
78
-	public function getPriority() {
79
-		return $this->priority;
80
-	}
71
+    /**
72
+     * @return int whether the form should be rather on the top or bottom of
73
+     * the settings navigation. The sections are arranged in ascending order of
74
+     * the priority values. It is required to return a value between 0 and 99.
75
+     *
76
+     * E.g.: 70
77
+     */
78
+    public function getPriority() {
79
+        return $this->priority;
80
+    }
81 81
 
82
-	/**
83
-	 * returns the relative path to an 16*16 icon describing the section.
84
-	 * e.g. '/core/img/places/files.svg'
85
-	 *
86
-	 * @returns string
87
-	 * @since 12
88
-	 */
89
-	public function getIcon() {
90
-		return $this->icon;
91
-	}
82
+    /**
83
+     * returns the relative path to an 16*16 icon describing the section.
84
+     * e.g. '/core/img/places/files.svg'
85
+     *
86
+     * @returns string
87
+     * @since 12
88
+     */
89
+    public function getIcon() {
90
+        return $this->icon;
91
+    }
92 92
 }
Please login to merge, or discard this patch.
lib/private/Streamer.php 3 patches
Braces   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -80,7 +80,7 @@
 block discarded – undo
80 80
 				$fh = \OC\Files\Filesystem::fopen($file, 'r');
81 81
 				$this->addFileFromStream($fh, $internalDir . $filename, $filesize, $fileTime);
82 82
 				fclose($fh);
83
-			}elseif(\OC\Files\Filesystem::is_dir($file)) {
83
+			} elseif(\OC\Files\Filesystem::is_dir($file)) {
84 84
 				$this->addDirRecursive($file, $internalDir);
85 85
 			}
86 86
 		}
Please login to merge, or discard this patch.
Indentation   +121 added lines, -121 removed lines patch added patch discarded remove patch
@@ -29,135 +29,135 @@
 block discarded – undo
29 29
 use ZipStreamer\ZipStreamer;
30 30
 
31 31
 class Streamer {
32
-	// array of regexp. Matching user agents will get tar instead of zip
33
-	private $preferTarFor = [ '/macintosh|mac os x/i' ];
32
+    // array of regexp. Matching user agents will get tar instead of zip
33
+    private $preferTarFor = [ '/macintosh|mac os x/i' ];
34 34
 
35
-	// streamer instance
36
-	private $streamerInstance;
35
+    // streamer instance
36
+    private $streamerInstance;
37 37
 
38
-	/**
39
-	 * Streamer constructor.
40
-	 *
41
-	 * @param IRequest $request
42
-	 * @param int $size The size of the files in bytes
43
-	 * @param int $numberOfFiles The number of files (and directories) that will
44
-	 *        be included in the streamed file
45
-	 */
46
-	public function __construct(IRequest $request, int $size, int $numberOfFiles){
38
+    /**
39
+     * Streamer constructor.
40
+     *
41
+     * @param IRequest $request
42
+     * @param int $size The size of the files in bytes
43
+     * @param int $numberOfFiles The number of files (and directories) that will
44
+     *        be included in the streamed file
45
+     */
46
+    public function __construct(IRequest $request, int $size, int $numberOfFiles){
47 47
 
48
-		/**
49
-		 * zip32 constraints for a basic (without compression, volumes nor
50
-		 * encryption) zip file according to the Zip specification:
51
-		 * - No file size is larger than 4 bytes (file size < 4294967296); see
52
-		 *   4.4.9 uncompressed size
53
-		 * - The size of all files plus their local headers is not larger than
54
-		 *   4 bytes; see 4.4.16 relative offset of local header and 4.4.24
55
-		 *   offset of start of central directory with respect to the starting
56
-		 *   disk number
57
-		 * - The total number of entries (files and directories) in the zip file
58
-		 *   is not larger than 2 bytes (number of entries < 65536); see 4.4.22
59
-		 *   total number of entries in the central dir
60
-		 * - The size of the central directory is not larger than 4 bytes; see
61
-		 *   4.4.23 size of the central directory
62
-		 *
63
-		 * Due to all that, zip32 is used if the size is below 4GB and there are
64
-		 * less than 65536 files; the margin between 4*1000^3 and 4*1024^3
65
-		 * should give enough room for the extra zip metadata. Technically, it
66
-		 * would still be possible to create an invalid zip32 file (for example,
67
-		 * a zip file from files smaller than 4GB with a central directory
68
-		 * larger than 4GiB), but it should not happen in the real world.
69
-		 */
70
-		if ($size < 4 * 1000 * 1000 * 1000 && $numberOfFiles < 65536) {
71
-			$this->streamerInstance = new ZipStreamer(['zip64' => false]);
72
-		} else if ($request->isUserAgent($this->preferTarFor)) {
73
-			$this->streamerInstance = new TarStreamer();
74
-		} else {
75
-			$this->streamerInstance = new ZipStreamer(['zip64' => PHP_INT_SIZE !== 4]);
76
-		}
77
-	}
48
+        /**
49
+         * zip32 constraints for a basic (without compression, volumes nor
50
+         * encryption) zip file according to the Zip specification:
51
+         * - No file size is larger than 4 bytes (file size < 4294967296); see
52
+         *   4.4.9 uncompressed size
53
+         * - The size of all files plus their local headers is not larger than
54
+         *   4 bytes; see 4.4.16 relative offset of local header and 4.4.24
55
+         *   offset of start of central directory with respect to the starting
56
+         *   disk number
57
+         * - The total number of entries (files and directories) in the zip file
58
+         *   is not larger than 2 bytes (number of entries < 65536); see 4.4.22
59
+         *   total number of entries in the central dir
60
+         * - The size of the central directory is not larger than 4 bytes; see
61
+         *   4.4.23 size of the central directory
62
+         *
63
+         * Due to all that, zip32 is used if the size is below 4GB and there are
64
+         * less than 65536 files; the margin between 4*1000^3 and 4*1024^3
65
+         * should give enough room for the extra zip metadata. Technically, it
66
+         * would still be possible to create an invalid zip32 file (for example,
67
+         * a zip file from files smaller than 4GB with a central directory
68
+         * larger than 4GiB), but it should not happen in the real world.
69
+         */
70
+        if ($size < 4 * 1000 * 1000 * 1000 && $numberOfFiles < 65536) {
71
+            $this->streamerInstance = new ZipStreamer(['zip64' => false]);
72
+        } else if ($request->isUserAgent($this->preferTarFor)) {
73
+            $this->streamerInstance = new TarStreamer();
74
+        } else {
75
+            $this->streamerInstance = new ZipStreamer(['zip64' => PHP_INT_SIZE !== 4]);
76
+        }
77
+    }
78 78
 	
79
-	/**
80
-	 * Send HTTP headers
81
-	 * @param string $name 
82
-	 */
83
-	public function sendHeaders($name){
84
-		$extension = $this->streamerInstance instanceof ZipStreamer ? '.zip' : '.tar';
85
-		$fullName = $name . $extension;
86
-		$this->streamerInstance->sendHeaders($fullName);
87
-	}
79
+    /**
80
+     * Send HTTP headers
81
+     * @param string $name 
82
+     */
83
+    public function sendHeaders($name){
84
+        $extension = $this->streamerInstance instanceof ZipStreamer ? '.zip' : '.tar';
85
+        $fullName = $name . $extension;
86
+        $this->streamerInstance->sendHeaders($fullName);
87
+    }
88 88
 	
89
-	/**
90
-	 * Stream directory recursively
91
-	 * @param string $dir
92
-	 * @param string $internalDir
93
-	 */
94
-	public function addDirRecursive($dir, $internalDir='') {
95
-		$dirname = basename($dir);
96
-		$rootDir = $internalDir . $dirname;
97
-		if (!empty($rootDir)) {
98
-			$this->streamerInstance->addEmptyDir($rootDir);
99
-		}
100
-		$internalDir .= $dirname . '/';
101
-		// prevent absolute dirs
102
-		$internalDir = ltrim($internalDir, '/');
89
+    /**
90
+     * Stream directory recursively
91
+     * @param string $dir
92
+     * @param string $internalDir
93
+     */
94
+    public function addDirRecursive($dir, $internalDir='') {
95
+        $dirname = basename($dir);
96
+        $rootDir = $internalDir . $dirname;
97
+        if (!empty($rootDir)) {
98
+            $this->streamerInstance->addEmptyDir($rootDir);
99
+        }
100
+        $internalDir .= $dirname . '/';
101
+        // prevent absolute dirs
102
+        $internalDir = ltrim($internalDir, '/');
103 103
 
104
-		$files= \OC\Files\Filesystem::getDirectoryContent($dir);
105
-		foreach($files as $file) {
106
-			$filename = $file['name'];
107
-			$file = $dir . '/' . $filename;
108
-			if(\OC\Files\Filesystem::is_file($file)) {
109
-				$filesize = \OC\Files\Filesystem::filesize($file);
110
-				$fileTime = \OC\Files\Filesystem::filemtime($file);
111
-				$fh = \OC\Files\Filesystem::fopen($file, 'r');
112
-				$this->addFileFromStream($fh, $internalDir . $filename, $filesize, $fileTime);
113
-				fclose($fh);
114
-			}elseif(\OC\Files\Filesystem::is_dir($file)) {
115
-				$this->addDirRecursive($file, $internalDir);
116
-			}
117
-		}
118
-	}
104
+        $files= \OC\Files\Filesystem::getDirectoryContent($dir);
105
+        foreach($files as $file) {
106
+            $filename = $file['name'];
107
+            $file = $dir . '/' . $filename;
108
+            if(\OC\Files\Filesystem::is_file($file)) {
109
+                $filesize = \OC\Files\Filesystem::filesize($file);
110
+                $fileTime = \OC\Files\Filesystem::filemtime($file);
111
+                $fh = \OC\Files\Filesystem::fopen($file, 'r');
112
+                $this->addFileFromStream($fh, $internalDir . $filename, $filesize, $fileTime);
113
+                fclose($fh);
114
+            }elseif(\OC\Files\Filesystem::is_dir($file)) {
115
+                $this->addDirRecursive($file, $internalDir);
116
+            }
117
+        }
118
+    }
119 119
 	
120
-	/**
121
-	 * Add a file to the archive at the specified location and file name.
122
-	 *
123
-	 * @param string $stream Stream to read data from
124
-	 * @param string $internalName Filepath and name to be used in the archive.
125
-	 * @param int $size Filesize
126
-	 * @param int|bool $time File mtime as int, or false
127
-	 * @return bool $success
128
-	 */
129
-	public function addFileFromStream($stream, $internalName, $size, $time) {
130
-		$options = [];
131
-		if ($time) {
132
-			$options = [
133
-				'timestamp' => $time
134
-			];
135
-		}
120
+    /**
121
+     * Add a file to the archive at the specified location and file name.
122
+     *
123
+     * @param string $stream Stream to read data from
124
+     * @param string $internalName Filepath and name to be used in the archive.
125
+     * @param int $size Filesize
126
+     * @param int|bool $time File mtime as int, or false
127
+     * @return bool $success
128
+     */
129
+    public function addFileFromStream($stream, $internalName, $size, $time) {
130
+        $options = [];
131
+        if ($time) {
132
+            $options = [
133
+                'timestamp' => $time
134
+            ];
135
+        }
136 136
 
137
-		if ($this->streamerInstance instanceof ZipStreamer) {
138
-			return $this->streamerInstance->addFileFromStream($stream, $internalName, $options);
139
-		} else {
140
-			return $this->streamerInstance->addFileFromStream($stream, $internalName, $size, $options);
141
-		}
142
-	}
137
+        if ($this->streamerInstance instanceof ZipStreamer) {
138
+            return $this->streamerInstance->addFileFromStream($stream, $internalName, $options);
139
+        } else {
140
+            return $this->streamerInstance->addFileFromStream($stream, $internalName, $size, $options);
141
+        }
142
+    }
143 143
 
144
-	/**
145
-	 * Add an empty directory entry to the archive.
146
-	 *
147
-	 * @param string $dirName Directory Path and name to be added to the archive.
148
-	 * @return bool $success
149
-	 */
150
-	public function addEmptyDir($dirName){
151
-		return $this->streamerInstance->addEmptyDir($dirName);
152
-	}
144
+    /**
145
+     * Add an empty directory entry to the archive.
146
+     *
147
+     * @param string $dirName Directory Path and name to be added to the archive.
148
+     * @return bool $success
149
+     */
150
+    public function addEmptyDir($dirName){
151
+        return $this->streamerInstance->addEmptyDir($dirName);
152
+    }
153 153
 
154
-	/**
155
-	 * Close the archive.
156
-	 * A closed archive can no longer have new files added to it. After
157
-	 * closing, the file is completely written to the output stream.
158
-	 * @return bool $success
159
-	 */
160
-	public function finalize(){
161
-		return $this->streamerInstance->finalize();
162
-	}
154
+    /**
155
+     * Close the archive.
156
+     * A closed archive can no longer have new files added to it. After
157
+     * closing, the file is completely written to the output stream.
158
+     * @return bool $success
159
+     */
160
+    public function finalize(){
161
+        return $this->streamerInstance->finalize();
162
+    }
163 163
 }
Please login to merge, or discard this patch.
Spacing   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -30,7 +30,7 @@  discard block
 block discarded – undo
30 30
 
31 31
 class Streamer {
32 32
 	// array of regexp. Matching user agents will get tar instead of zip
33
-	private $preferTarFor = [ '/macintosh|mac os x/i' ];
33
+	private $preferTarFor = ['/macintosh|mac os x/i'];
34 34
 
35 35
 	// streamer instance
36 36
 	private $streamerInstance;
@@ -43,7 +43,7 @@  discard block
 block discarded – undo
43 43
 	 * @param int $numberOfFiles The number of files (and directories) that will
44 44
 	 *        be included in the streamed file
45 45
 	 */
46
-	public function __construct(IRequest $request, int $size, int $numberOfFiles){
46
+	public function __construct(IRequest $request, int $size, int $numberOfFiles) {
47 47
 
48 48
 		/**
49 49
 		 * zip32 constraints for a basic (without compression, volumes nor
@@ -80,9 +80,9 @@  discard block
 block discarded – undo
80 80
 	 * Send HTTP headers
81 81
 	 * @param string $name 
82 82
 	 */
83
-	public function sendHeaders($name){
83
+	public function sendHeaders($name) {
84 84
 		$extension = $this->streamerInstance instanceof ZipStreamer ? '.zip' : '.tar';
85
-		$fullName = $name . $extension;
85
+		$fullName = $name.$extension;
86 86
 		$this->streamerInstance->sendHeaders($fullName);
87 87
 	}
88 88
 	
@@ -91,27 +91,27 @@  discard block
 block discarded – undo
91 91
 	 * @param string $dir
92 92
 	 * @param string $internalDir
93 93
 	 */
94
-	public function addDirRecursive($dir, $internalDir='') {
94
+	public function addDirRecursive($dir, $internalDir = '') {
95 95
 		$dirname = basename($dir);
96
-		$rootDir = $internalDir . $dirname;
96
+		$rootDir = $internalDir.$dirname;
97 97
 		if (!empty($rootDir)) {
98 98
 			$this->streamerInstance->addEmptyDir($rootDir);
99 99
 		}
100
-		$internalDir .= $dirname . '/';
100
+		$internalDir .= $dirname.'/';
101 101
 		// prevent absolute dirs
102 102
 		$internalDir = ltrim($internalDir, '/');
103 103
 
104
-		$files= \OC\Files\Filesystem::getDirectoryContent($dir);
105
-		foreach($files as $file) {
104
+		$files = \OC\Files\Filesystem::getDirectoryContent($dir);
105
+		foreach ($files as $file) {
106 106
 			$filename = $file['name'];
107
-			$file = $dir . '/' . $filename;
108
-			if(\OC\Files\Filesystem::is_file($file)) {
107
+			$file = $dir.'/'.$filename;
108
+			if (\OC\Files\Filesystem::is_file($file)) {
109 109
 				$filesize = \OC\Files\Filesystem::filesize($file);
110 110
 				$fileTime = \OC\Files\Filesystem::filemtime($file);
111 111
 				$fh = \OC\Files\Filesystem::fopen($file, 'r');
112
-				$this->addFileFromStream($fh, $internalDir . $filename, $filesize, $fileTime);
112
+				$this->addFileFromStream($fh, $internalDir.$filename, $filesize, $fileTime);
113 113
 				fclose($fh);
114
-			}elseif(\OC\Files\Filesystem::is_dir($file)) {
114
+			}elseif (\OC\Files\Filesystem::is_dir($file)) {
115 115
 				$this->addDirRecursive($file, $internalDir);
116 116
 			}
117 117
 		}
@@ -147,7 +147,7 @@  discard block
 block discarded – undo
147 147
 	 * @param string $dirName Directory Path and name to be added to the archive.
148 148
 	 * @return bool $success
149 149
 	 */
150
-	public function addEmptyDir($dirName){
150
+	public function addEmptyDir($dirName) {
151 151
 		return $this->streamerInstance->addEmptyDir($dirName);
152 152
 	}
153 153
 
@@ -157,7 +157,7 @@  discard block
 block discarded – undo
157 157
 	 * closing, the file is completely written to the output stream.
158 158
 	 * @return bool $success
159 159
 	 */
160
-	public function finalize(){
160
+	public function finalize() {
161 161
 		return $this->streamerInstance->finalize();
162 162
 	}
163 163
 }
Please login to merge, or discard this patch.
lib/private/Memcache/CASTrait.php 2 patches
Indentation   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -23,35 +23,35 @@
 block discarded – undo
23 23
 namespace OC\Memcache;
24 24
 
25 25
 trait CASTrait {
26
-	abstract public function get($key);
26
+    abstract public function get($key);
27 27
 
28
-	abstract public function set($key, $value, $ttl = 0);
28
+    abstract public function set($key, $value, $ttl = 0);
29 29
 
30
-	abstract public function remove($key);
30
+    abstract public function remove($key);
31 31
 
32
-	abstract public function add($key, $value, $ttl = 0);
32
+    abstract public function add($key, $value, $ttl = 0);
33 33
 
34
-	/**
35
-	 * Compare and set
36
-	 *
37
-	 * @param string $key
38
-	 * @param mixed $old
39
-	 * @param mixed $new
40
-	 * @return bool
41
-	 */
42
-	public function cas($key, $old, $new) {
43
-		//no native cas, emulate with locking
44
-		if ($this->add($key . '_lock', true)) {
45
-			if ($this->get($key) === $old) {
46
-				$this->set($key, $new);
47
-				$this->remove($key . '_lock');
48
-				return true;
49
-			} else {
50
-				$this->remove($key . '_lock');
51
-				return false;
52
-			}
53
-		} else {
54
-			return false;
55
-		}
56
-	}
34
+    /**
35
+     * Compare and set
36
+     *
37
+     * @param string $key
38
+     * @param mixed $old
39
+     * @param mixed $new
40
+     * @return bool
41
+     */
42
+    public function cas($key, $old, $new) {
43
+        //no native cas, emulate with locking
44
+        if ($this->add($key . '_lock', true)) {
45
+            if ($this->get($key) === $old) {
46
+                $this->set($key, $new);
47
+                $this->remove($key . '_lock');
48
+                return true;
49
+            } else {
50
+                $this->remove($key . '_lock');
51
+                return false;
52
+            }
53
+        } else {
54
+            return false;
55
+        }
56
+    }
57 57
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -41,13 +41,13 @@
 block discarded – undo
41 41
 	 */
42 42
 	public function cas($key, $old, $new) {
43 43
 		//no native cas, emulate with locking
44
-		if ($this->add($key . '_lock', true)) {
44
+		if ($this->add($key.'_lock', true)) {
45 45
 			if ($this->get($key) === $old) {
46 46
 				$this->set($key, $new);
47
-				$this->remove($key . '_lock');
47
+				$this->remove($key.'_lock');
48 48
 				return true;
49 49
 			} else {
50
-				$this->remove($key . '_lock');
50
+				$this->remove($key.'_lock');
51 51
 				return false;
52 52
 			}
53 53
 		} else {
Please login to merge, or discard this patch.
lib/private/Memcache/Cache.php 1 patch
Indentation   +56 added lines, -56 removed lines patch added patch discarded remove patch
@@ -26,72 +26,72 @@
 block discarded – undo
26 26
 namespace OC\Memcache;
27 27
 
28 28
 abstract class Cache implements \ArrayAccess, \OCP\ICache {
29
-	/**
30
-	 * @var string $prefix
31
-	 */
32
-	protected $prefix;
29
+    /**
30
+     * @var string $prefix
31
+     */
32
+    protected $prefix;
33 33
 
34
-	/**
35
-	 * @param string $prefix
36
-	 */
37
-	public function __construct($prefix = '') {
38
-		$this->prefix = $prefix;
39
-	}
34
+    /**
35
+     * @param string $prefix
36
+     */
37
+    public function __construct($prefix = '') {
38
+        $this->prefix = $prefix;
39
+    }
40 40
 
41
-	/**
42
-	 * @return string Prefix used for caching purposes
43
-	 */
44
-	public function getPrefix() {
45
-		return $this->prefix;
46
-	}
41
+    /**
42
+     * @return string Prefix used for caching purposes
43
+     */
44
+    public function getPrefix() {
45
+        return $this->prefix;
46
+    }
47 47
 
48
-	/**
49
-	 * @param string $key
50
-	 * @return mixed
51
-	 */
52
-	abstract public function get($key);
48
+    /**
49
+     * @param string $key
50
+     * @return mixed
51
+     */
52
+    abstract public function get($key);
53 53
 
54
-	/**
55
-	 * @param string $key
56
-	 * @param mixed $value
57
-	 * @param int $ttl
58
-	 * @return mixed
59
-	 */
60
-	abstract public function set($key, $value, $ttl = 0);
54
+    /**
55
+     * @param string $key
56
+     * @param mixed $value
57
+     * @param int $ttl
58
+     * @return mixed
59
+     */
60
+    abstract public function set($key, $value, $ttl = 0);
61 61
 
62
-	/**
63
-	 * @param string $key
64
-	 * @return mixed
65
-	 */
66
-	abstract public function hasKey($key);
62
+    /**
63
+     * @param string $key
64
+     * @return mixed
65
+     */
66
+    abstract public function hasKey($key);
67 67
 
68
-	/**
69
-	 * @param string $key
70
-	 * @return mixed
71
-	 */
72
-	abstract public function remove($key);
68
+    /**
69
+     * @param string $key
70
+     * @return mixed
71
+     */
72
+    abstract public function remove($key);
73 73
 
74
-	/**
75
-	 * @param string $prefix
76
-	 * @return mixed
77
-	 */
78
-	abstract public function clear($prefix = '');
74
+    /**
75
+     * @param string $prefix
76
+     * @return mixed
77
+     */
78
+    abstract public function clear($prefix = '');
79 79
 
80
-	//implement the ArrayAccess interface
80
+    //implement the ArrayAccess interface
81 81
 
82
-	public function offsetExists($offset) {
83
-		return $this->hasKey($offset);
84
-	}
82
+    public function offsetExists($offset) {
83
+        return $this->hasKey($offset);
84
+    }
85 85
 
86
-	public function offsetSet($offset, $value) {
87
-		$this->set($offset, $value);
88
-	}
86
+    public function offsetSet($offset, $value) {
87
+        $this->set($offset, $value);
88
+    }
89 89
 
90
-	public function offsetGet($offset) {
91
-		return $this->get($offset);
92
-	}
90
+    public function offsetGet($offset) {
91
+        return $this->get($offset);
92
+    }
93 93
 
94
-	public function offsetUnset($offset) {
95
-		$this->remove($offset);
96
-	}
94
+    public function offsetUnset($offset) {
95
+        $this->remove($offset);
96
+    }
97 97
 }
Please login to merge, or discard this patch.
lib/private/Memcache/APCu.php 2 patches
Spacing   +14 added lines, -14 removed lines patch added patch discarded remove patch
@@ -37,7 +37,7 @@  discard block
 block discarded – undo
37 37
 	use CADTrait;
38 38
 
39 39
 	public function get($key) {
40
-		$result = apcu_fetch($this->getPrefix() . $key, $success);
40
+		$result = apcu_fetch($this->getPrefix().$key, $success);
41 41
 		if (!$success) {
42 42
 			return null;
43 43
 		}
@@ -45,24 +45,24 @@  discard block
 block discarded – undo
45 45
 	}
46 46
 
47 47
 	public function set($key, $value, $ttl = 0) {
48
-		return apcu_store($this->getPrefix() . $key, $value, $ttl);
48
+		return apcu_store($this->getPrefix().$key, $value, $ttl);
49 49
 	}
50 50
 
51 51
 	public function hasKey($key) {
52
-		return apcu_exists($this->getPrefix() . $key);
52
+		return apcu_exists($this->getPrefix().$key);
53 53
 	}
54 54
 
55 55
 	public function remove($key) {
56
-		return apcu_delete($this->getPrefix() . $key);
56
+		return apcu_delete($this->getPrefix().$key);
57 57
 	}
58 58
 
59 59
 	public function clear($prefix = '') {
60
-		$ns = $this->getPrefix() . $prefix;
60
+		$ns = $this->getPrefix().$prefix;
61 61
 		$ns = preg_quote($ns, '/');
62
-		if(class_exists('\APCIterator')) {
63
-			$iter = new \APCIterator('user', '/^' . $ns . '/', APC_ITER_KEY);
62
+		if (class_exists('\APCIterator')) {
63
+			$iter = new \APCIterator('user', '/^'.$ns.'/', APC_ITER_KEY);
64 64
 		} else {
65
-			$iter = new \APCUIterator('/^' . $ns . '/', APC_ITER_KEY);
65
+			$iter = new \APCUIterator('/^'.$ns.'/', APC_ITER_KEY);
66 66
 		}
67 67
 		return apcu_delete($iter);
68 68
 	}
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
 	 * @return bool
77 77
 	 */
78 78
 	public function add($key, $value, $ttl = 0) {
79
-		return apcu_add($this->getPrefix() . $key, $value, $ttl);
79
+		return apcu_add($this->getPrefix().$key, $value, $ttl);
80 80
 	}
81 81
 
82 82
 	/**
@@ -100,8 +100,8 @@  discard block
 block discarded – undo
100 100
 		 * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221
101 101
 		 * for details
102 102
 		 */
103
-		return apcu_exists($this->getPrefix() . $key)
104
-			? apcu_inc($this->getPrefix() . $key, $step)
103
+		return apcu_exists($this->getPrefix().$key)
104
+			? apcu_inc($this->getPrefix().$key, $step)
105 105
 			: false;
106 106
 	}
107 107
 
@@ -125,8 +125,8 @@  discard block
 block discarded – undo
125 125
 		 * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221
126 126
 		 * for details
127 127
 		 */
128
-		return apcu_exists($this->getPrefix() . $key)
129
-			? apcu_dec($this->getPrefix() . $key, $step)
128
+		return apcu_exists($this->getPrefix().$key)
129
+			? apcu_dec($this->getPrefix().$key, $step)
130 130
 			: false;
131 131
 	}
132 132
 
@@ -141,7 +141,7 @@  discard block
 block discarded – undo
141 141
 	public function cas($key, $old, $new) {
142 142
 		// apc only does cas for ints
143 143
 		if (is_int($old) and is_int($new)) {
144
-			return apcu_cas($this->getPrefix() . $key, $old, $new);
144
+			return apcu_cas($this->getPrefix().$key, $old, $new);
145 145
 		} else {
146 146
 			return $this->casEmulated($key, $old, $new);
147 147
 		}
Please login to merge, or discard this patch.
Indentation   +125 added lines, -125 removed lines patch added patch discarded remove patch
@@ -30,140 +30,140 @@
 block discarded – undo
30 30
 use OCP\IMemcache;
31 31
 
32 32
 class APCu extends Cache implements IMemcache {
33
-	use CASTrait {
34
-		cas as casEmulated;
35
-	}
33
+    use CASTrait {
34
+        cas as casEmulated;
35
+    }
36 36
 
37
-	use CADTrait;
37
+    use CADTrait;
38 38
 
39
-	public function get($key) {
40
-		$result = apcu_fetch($this->getPrefix() . $key, $success);
41
-		if (!$success) {
42
-			return null;
43
-		}
44
-		return $result;
45
-	}
39
+    public function get($key) {
40
+        $result = apcu_fetch($this->getPrefix() . $key, $success);
41
+        if (!$success) {
42
+            return null;
43
+        }
44
+        return $result;
45
+    }
46 46
 
47
-	public function set($key, $value, $ttl = 0) {
48
-		return apcu_store($this->getPrefix() . $key, $value, $ttl);
49
-	}
47
+    public function set($key, $value, $ttl = 0) {
48
+        return apcu_store($this->getPrefix() . $key, $value, $ttl);
49
+    }
50 50
 
51
-	public function hasKey($key) {
52
-		return apcu_exists($this->getPrefix() . $key);
53
-	}
51
+    public function hasKey($key) {
52
+        return apcu_exists($this->getPrefix() . $key);
53
+    }
54 54
 
55
-	public function remove($key) {
56
-		return apcu_delete($this->getPrefix() . $key);
57
-	}
55
+    public function remove($key) {
56
+        return apcu_delete($this->getPrefix() . $key);
57
+    }
58 58
 
59
-	public function clear($prefix = '') {
60
-		$ns = $this->getPrefix() . $prefix;
61
-		$ns = preg_quote($ns, '/');
62
-		if(class_exists('\APCIterator')) {
63
-			$iter = new \APCIterator('user', '/^' . $ns . '/', APC_ITER_KEY);
64
-		} else {
65
-			$iter = new \APCUIterator('/^' . $ns . '/', APC_ITER_KEY);
66
-		}
67
-		return apcu_delete($iter);
68
-	}
59
+    public function clear($prefix = '') {
60
+        $ns = $this->getPrefix() . $prefix;
61
+        $ns = preg_quote($ns, '/');
62
+        if(class_exists('\APCIterator')) {
63
+            $iter = new \APCIterator('user', '/^' . $ns . '/', APC_ITER_KEY);
64
+        } else {
65
+            $iter = new \APCUIterator('/^' . $ns . '/', APC_ITER_KEY);
66
+        }
67
+        return apcu_delete($iter);
68
+    }
69 69
 
70
-	/**
71
-	 * Set a value in the cache if it's not already stored
72
-	 *
73
-	 * @param string $key
74
-	 * @param mixed $value
75
-	 * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
76
-	 * @return bool
77
-	 */
78
-	public function add($key, $value, $ttl = 0) {
79
-		return apcu_add($this->getPrefix() . $key, $value, $ttl);
80
-	}
70
+    /**
71
+     * Set a value in the cache if it's not already stored
72
+     *
73
+     * @param string $key
74
+     * @param mixed $value
75
+     * @param int $ttl Time To Live in seconds. Defaults to 60*60*24
76
+     * @return bool
77
+     */
78
+    public function add($key, $value, $ttl = 0) {
79
+        return apcu_add($this->getPrefix() . $key, $value, $ttl);
80
+    }
81 81
 
82
-	/**
83
-	 * Increase a stored number
84
-	 *
85
-	 * @param string $key
86
-	 * @param int $step
87
-	 * @return int | bool
88
-	 */
89
-	public function inc($key, $step = 1) {
90
-		$this->add($key, 0);
91
-		/**
92
-		 * TODO - hack around a PHP 7 specific issue in APCu
93
-		 *
94
-		 * on PHP 7 the apcu_inc method on a non-existing object will increment
95
-		 * "0" and result in "1" as value - therefore we check for existence
96
-		 * first
97
-		 *
98
-		 * on PHP 5.6 this is not the case
99
-		 *
100
-		 * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221
101
-		 * for details
102
-		 */
103
-		return apcu_exists($this->getPrefix() . $key)
104
-			? apcu_inc($this->getPrefix() . $key, $step)
105
-			: false;
106
-	}
82
+    /**
83
+     * Increase a stored number
84
+     *
85
+     * @param string $key
86
+     * @param int $step
87
+     * @return int | bool
88
+     */
89
+    public function inc($key, $step = 1) {
90
+        $this->add($key, 0);
91
+        /**
92
+         * TODO - hack around a PHP 7 specific issue in APCu
93
+         *
94
+         * on PHP 7 the apcu_inc method on a non-existing object will increment
95
+         * "0" and result in "1" as value - therefore we check for existence
96
+         * first
97
+         *
98
+         * on PHP 5.6 this is not the case
99
+         *
100
+         * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221
101
+         * for details
102
+         */
103
+        return apcu_exists($this->getPrefix() . $key)
104
+            ? apcu_inc($this->getPrefix() . $key, $step)
105
+            : false;
106
+    }
107 107
 
108
-	/**
109
-	 * Decrease a stored number
110
-	 *
111
-	 * @param string $key
112
-	 * @param int $step
113
-	 * @return int | bool
114
-	 */
115
-	public function dec($key, $step = 1) {
116
-		/**
117
-		 * TODO - hack around a PHP 7 specific issue in APCu
118
-		 *
119
-		 * on PHP 7 the apcu_dec method on a non-existing object will decrement
120
-		 * "0" and result in "-1" as value - therefore we check for existence
121
-		 * first
122
-		 *
123
-		 * on PHP 5.6 this is not the case
124
-		 *
125
-		 * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221
126
-		 * for details
127
-		 */
128
-		return apcu_exists($this->getPrefix() . $key)
129
-			? apcu_dec($this->getPrefix() . $key, $step)
130
-			: false;
131
-	}
108
+    /**
109
+     * Decrease a stored number
110
+     *
111
+     * @param string $key
112
+     * @param int $step
113
+     * @return int | bool
114
+     */
115
+    public function dec($key, $step = 1) {
116
+        /**
117
+         * TODO - hack around a PHP 7 specific issue in APCu
118
+         *
119
+         * on PHP 7 the apcu_dec method on a non-existing object will decrement
120
+         * "0" and result in "-1" as value - therefore we check for existence
121
+         * first
122
+         *
123
+         * on PHP 5.6 this is not the case
124
+         *
125
+         * see https://github.com/krakjoe/apcu/issues/183#issuecomment-244038221
126
+         * for details
127
+         */
128
+        return apcu_exists($this->getPrefix() . $key)
129
+            ? apcu_dec($this->getPrefix() . $key, $step)
130
+            : false;
131
+    }
132 132
 
133
-	/**
134
-	 * Compare and set
135
-	 *
136
-	 * @param string $key
137
-	 * @param mixed $old
138
-	 * @param mixed $new
139
-	 * @return bool
140
-	 */
141
-	public function cas($key, $old, $new) {
142
-		// apc only does cas for ints
143
-		if (is_int($old) and is_int($new)) {
144
-			return apcu_cas($this->getPrefix() . $key, $old, $new);
145
-		} else {
146
-			return $this->casEmulated($key, $old, $new);
147
-		}
148
-	}
133
+    /**
134
+     * Compare and set
135
+     *
136
+     * @param string $key
137
+     * @param mixed $old
138
+     * @param mixed $new
139
+     * @return bool
140
+     */
141
+    public function cas($key, $old, $new) {
142
+        // apc only does cas for ints
143
+        if (is_int($old) and is_int($new)) {
144
+            return apcu_cas($this->getPrefix() . $key, $old, $new);
145
+        } else {
146
+            return $this->casEmulated($key, $old, $new);
147
+        }
148
+    }
149 149
 
150
-	/**
151
-	 * @return bool
152
-	 */
153
-	static public function isAvailable() {
154
-		if (!extension_loaded('apcu')) {
155
-			return false;
156
-		} elseif (!\OC::$server->getIniWrapper()->getBool('apc.enabled')) {
157
-			return false;
158
-		} elseif (!\OC::$server->getIniWrapper()->getBool('apc.enable_cli') && \OC::$CLI) {
159
-			return false;
160
-		} elseif (
161
-				version_compare(phpversion('apc') ?: '0.0.0', '4.0.6') === -1 &&
162
-				version_compare(phpversion('apcu') ?: '0.0.0', '5.1.0') === -1
163
-		) {
164
-			return false;
165
-		} else {
166
-			return true;
167
-		}
168
-	}
150
+    /**
151
+     * @return bool
152
+     */
153
+    static public function isAvailable() {
154
+        if (!extension_loaded('apcu')) {
155
+            return false;
156
+        } elseif (!\OC::$server->getIniWrapper()->getBool('apc.enabled')) {
157
+            return false;
158
+        } elseif (!\OC::$server->getIniWrapper()->getBool('apc.enable_cli') && \OC::$CLI) {
159
+            return false;
160
+        } elseif (
161
+                version_compare(phpversion('apc') ?: '0.0.0', '4.0.6') === -1 &&
162
+                version_compare(phpversion('apcu') ?: '0.0.0', '5.1.0') === -1
163
+        ) {
164
+            return false;
165
+        } else {
166
+            return true;
167
+        }
168
+    }
169 169
 }
Please login to merge, or discard this patch.