Passed
Push — master ( 41d2e2...e93478 )
by Roeland
20:11 queued 09:24
created
lib/private/Command/CommandJob.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -29,12 +29,12 @@
 block discarded – undo
29 29
  * Wrap a command in the background job interface
30 30
  */
31 31
 class CommandJob extends QueuedJob {
32
-	protected function run($serializedCommand) {
33
-		$command = unserialize($serializedCommand);
34
-		if ($command instanceof ICommand) {
35
-			$command->handle();
36
-		} else {
37
-			throw new \InvalidArgumentException('Invalid serialized command');
38
-		}
39
-	}
32
+    protected function run($serializedCommand) {
33
+        $command = unserialize($serializedCommand);
34
+        if ($command instanceof ICommand) {
35
+            $command->handle();
36
+        } else {
37
+            throw new \InvalidArgumentException('Invalid serialized command');
38
+        }
39
+    }
40 40
 }
Please login to merge, or discard this patch.
lib/private/Template/Base.php 3 patches
Braces   +2 added lines, -4 removed lines patch added patch discarded remove patch
@@ -114,8 +114,7 @@  discard block
 block discarded – undo
114 114
 	public function append( $key, $value ) {
115 115
 		if( array_key_exists( $key, $this->vars )) {
116 116
 			$this->vars[$key][] = $value;
117
-		}
118
-		else{
117
+		} else{
119 118
 			$this->vars[$key] = array( $value );
120 119
 		}
121 120
 	}
@@ -130,8 +129,7 @@  discard block
 block discarded – undo
130 129
 		$data = $this->fetchPage();
131 130
 		if( $data === false ) {
132 131
 			return false;
133
-		}
134
-		else{
132
+		} else{
135 133
 			print $data;
136 134
 			return true;
137 135
 		}
Please login to merge, or discard this patch.
Spacing   +11 added lines, -11 removed lines patch added patch discarded remove patch
@@ -46,7 +46,7 @@  discard block
 block discarded – undo
46 46
 	 * @param \OCP\IL10N $l10n
47 47
 	 * @param Defaults $theme
48 48
 	 */
49
-	public function __construct($template, $requestToken, $l10n, $theme ) {
49
+	public function __construct($template, $requestToken, $l10n, $theme) {
50 50
 		$this->vars = array();
51 51
 		$this->vars['requesttoken'] = $requestToken;
52 52
 		$this->l10n = $l10n;
@@ -63,7 +63,7 @@  discard block
 block discarded – undo
63 63
 	 */
64 64
 	protected function getAppTemplateDirs($theme, $app, $serverRoot, $app_dir) {
65 65
 		// Check if the app is in the app folder or in the root
66
-		if( file_exists($app_dir.'/templates/' )) {
66
+		if (file_exists($app_dir.'/templates/')) {
67 67
 			return [
68 68
 				$serverRoot.'/themes/'.$theme.'/apps/'.$app.'/templates/',
69 69
 				$app_dir.'/templates/',
@@ -98,7 +98,7 @@  discard block
 block discarded – undo
98 98
 	 *
99 99
 	 * If the key existed before, it will be overwritten
100 100
 	 */
101
-	public function assign( $key, $value) {
101
+	public function assign($key, $value) {
102 102
 		$this->vars[$key] = $value;
103 103
 		return true;
104 104
 	}
@@ -113,12 +113,12 @@  discard block
 block discarded – undo
113 113
 	 * exists, the value will be appended. It can be accessed via
114 114
 	 * $_[$key][$position] in the template.
115 115
 	 */
116
-	public function append( $key, $value ) {
117
-		if( array_key_exists( $key, $this->vars )) {
116
+	public function append($key, $value) {
117
+		if (array_key_exists($key, $this->vars)) {
118 118
 			$this->vars[$key][] = $value;
119 119
 		}
120
-		else{
121
-			$this->vars[$key] = array( $value );
120
+		else {
121
+			$this->vars[$key] = array($value);
122 122
 		}
123 123
 	}
124 124
 
@@ -130,10 +130,10 @@  discard block
 block discarded – undo
130 130
 	 */
131 131
 	public function printPage() {
132 132
 		$data = $this->fetchPage();
133
-		if( $data === false ) {
133
+		if ($data === false) {
134 134
 			return false;
135 135
 		}
136
-		else{
136
+		else {
137 137
 			print $data;
138 138
 			return true;
139 139
 		}
@@ -166,8 +166,8 @@  discard block
 block discarded – undo
166 166
 		$l = $this->l10n;
167 167
 		$theme = $this->theme;
168 168
 
169
-		if(!is_null($additionalParams)) {
170
-			$_ = array_merge( $additionalParams, $this->vars );
169
+		if (!is_null($additionalParams)) {
170
+			$_ = array_merge($additionalParams, $this->vars);
171 171
 			foreach ($_ as $var => $value) {
172 172
 				${$var} = $value;
173 173
 			}
Please login to merge, or discard this patch.
Indentation   +155 added lines, -155 removed lines patch added patch discarded remove patch
@@ -31,160 +31,160 @@
 block discarded – undo
31 31
 use OCP\Defaults;
32 32
 
33 33
 class Base {
34
-	private $template; // The template
35
-	private $vars; // Vars
36
-
37
-	/** @var \OCP\IL10N */
38
-	private $l10n;
39
-
40
-	/** @var Defaults */
41
-	private $theme;
42
-
43
-	/**
44
-	 * @param string $template
45
-	 * @param string $requestToken
46
-	 * @param \OCP\IL10N $l10n
47
-	 * @param Defaults $theme
48
-	 */
49
-	public function __construct($template, $requestToken, $l10n, $theme ) {
50
-		$this->vars = array();
51
-		$this->vars['requesttoken'] = $requestToken;
52
-		$this->l10n = $l10n;
53
-		$this->template = $template;
54
-		$this->theme = $theme;
55
-	}
56
-
57
-	/**
58
-	 * @param string $serverRoot
59
-	 * @param string|false $app_dir
60
-	 * @param string $theme
61
-	 * @param string $app
62
-	 * @return string[]
63
-	 */
64
-	protected function getAppTemplateDirs($theme, $app, $serverRoot, $app_dir) {
65
-		// Check if the app is in the app folder or in the root
66
-		if( file_exists($app_dir.'/templates/' )) {
67
-			return [
68
-				$serverRoot.'/themes/'.$theme.'/apps/'.$app.'/templates/',
69
-				$app_dir.'/templates/',
70
-			];
71
-		}
72
-		return [
73
-			$serverRoot.'/themes/'.$theme.'/'.$app.'/templates/',
74
-			$serverRoot.'/'.$app.'/templates/',
75
-		];
76
-	}
77
-
78
-	/**
79
-	 * @param string $serverRoot
80
-	 * @param string $theme
81
-	 * @return string[]
82
-	 */
83
-	protected function getCoreTemplateDirs($theme, $serverRoot) {
84
-		return [
85
-			$serverRoot.'/themes/'.$theme.'/core/templates/',
86
-			$serverRoot.'/core/templates/',
87
-		];
88
-	}
89
-
90
-	/**
91
-	 * Assign variables
92
-	 * @param string $key key
93
-	 * @param array|bool|integer|string $value value
94
-	 * @return bool
95
-	 *
96
-	 * This function assigns a variable. It can be accessed via $_[$key] in
97
-	 * the template.
98
-	 *
99
-	 * If the key existed before, it will be overwritten
100
-	 */
101
-	public function assign( $key, $value) {
102
-		$this->vars[$key] = $value;
103
-		return true;
104
-	}
105
-
106
-	/**
107
-	 * Appends a variable
108
-	 * @param string $key key
109
-	 * @param mixed $value value
110
-	 *
111
-	 * This function assigns a variable in an array context. If the key already
112
-	 * exists, the value will be appended. It can be accessed via
113
-	 * $_[$key][$position] in the template.
114
-	 */
115
-	public function append( $key, $value ) {
116
-		if( array_key_exists( $key, $this->vars )) {
117
-			$this->vars[$key][] = $value;
118
-		}
119
-		else{
120
-			$this->vars[$key] = array( $value );
121
-		}
122
-	}
123
-
124
-	/**
125
-	 * Prints the proceeded template
126
-	 * @return bool
127
-	 *
128
-	 * This function proceeds the template and prints its output.
129
-	 */
130
-	public function printPage() {
131
-		$data = $this->fetchPage();
132
-		if( $data === false ) {
133
-			return false;
134
-		}
135
-		else{
136
-			print $data;
137
-			return true;
138
-		}
139
-	}
140
-
141
-	/**
142
-	 * Process the template
143
-	 *
144
-	 * @param array|null $additionalParams
145
-	 * @return string This function processes the template.
146
-	 *
147
-	 * This function processes the template.
148
-	 */
149
-	public function fetchPage($additionalParams = null) {
150
-		return $this->load($this->template, $additionalParams);
151
-	}
152
-
153
-	/**
154
-	 * doing the actual work
155
-	 *
156
-	 * @param string $file
157
-	 * @param array|null $additionalParams
158
-	 * @return string content
159
-	 *
160
-	 * Includes the template file, fetches its output
161
-	 */
162
-	protected function load($file, $additionalParams = null) {
163
-		// Register the variables
164
-		$_ = $this->vars;
165
-		$l = $this->l10n;
166
-		$theme = $this->theme;
167
-
168
-		if(!is_null($additionalParams)) {
169
-			$_ = array_merge( $additionalParams, $this->vars );
170
-			foreach ($_ as $var => $value) {
171
-				${$var} = $value;
172
-			}
173
-		}
174
-
175
-		// Include
176
-		ob_start();
177
-		try {
178
-			include $file;
179
-			$data = ob_get_contents();
180
-		} catch (\Exception $e) {
181
-			@ob_end_clean();
182
-			throw $e;
183
-		}
184
-		@ob_end_clean();
185
-
186
-		// Return data
187
-		return $data;
188
-	}
34
+    private $template; // The template
35
+    private $vars; // Vars
36
+
37
+    /** @var \OCP\IL10N */
38
+    private $l10n;
39
+
40
+    /** @var Defaults */
41
+    private $theme;
42
+
43
+    /**
44
+     * @param string $template
45
+     * @param string $requestToken
46
+     * @param \OCP\IL10N $l10n
47
+     * @param Defaults $theme
48
+     */
49
+    public function __construct($template, $requestToken, $l10n, $theme ) {
50
+        $this->vars = array();
51
+        $this->vars['requesttoken'] = $requestToken;
52
+        $this->l10n = $l10n;
53
+        $this->template = $template;
54
+        $this->theme = $theme;
55
+    }
56
+
57
+    /**
58
+     * @param string $serverRoot
59
+     * @param string|false $app_dir
60
+     * @param string $theme
61
+     * @param string $app
62
+     * @return string[]
63
+     */
64
+    protected function getAppTemplateDirs($theme, $app, $serverRoot, $app_dir) {
65
+        // Check if the app is in the app folder or in the root
66
+        if( file_exists($app_dir.'/templates/' )) {
67
+            return [
68
+                $serverRoot.'/themes/'.$theme.'/apps/'.$app.'/templates/',
69
+                $app_dir.'/templates/',
70
+            ];
71
+        }
72
+        return [
73
+            $serverRoot.'/themes/'.$theme.'/'.$app.'/templates/',
74
+            $serverRoot.'/'.$app.'/templates/',
75
+        ];
76
+    }
77
+
78
+    /**
79
+     * @param string $serverRoot
80
+     * @param string $theme
81
+     * @return string[]
82
+     */
83
+    protected function getCoreTemplateDirs($theme, $serverRoot) {
84
+        return [
85
+            $serverRoot.'/themes/'.$theme.'/core/templates/',
86
+            $serverRoot.'/core/templates/',
87
+        ];
88
+    }
89
+
90
+    /**
91
+     * Assign variables
92
+     * @param string $key key
93
+     * @param array|bool|integer|string $value value
94
+     * @return bool
95
+     *
96
+     * This function assigns a variable. It can be accessed via $_[$key] in
97
+     * the template.
98
+     *
99
+     * If the key existed before, it will be overwritten
100
+     */
101
+    public function assign( $key, $value) {
102
+        $this->vars[$key] = $value;
103
+        return true;
104
+    }
105
+
106
+    /**
107
+     * Appends a variable
108
+     * @param string $key key
109
+     * @param mixed $value value
110
+     *
111
+     * This function assigns a variable in an array context. If the key already
112
+     * exists, the value will be appended. It can be accessed via
113
+     * $_[$key][$position] in the template.
114
+     */
115
+    public function append( $key, $value ) {
116
+        if( array_key_exists( $key, $this->vars )) {
117
+            $this->vars[$key][] = $value;
118
+        }
119
+        else{
120
+            $this->vars[$key] = array( $value );
121
+        }
122
+    }
123
+
124
+    /**
125
+     * Prints the proceeded template
126
+     * @return bool
127
+     *
128
+     * This function proceeds the template and prints its output.
129
+     */
130
+    public function printPage() {
131
+        $data = $this->fetchPage();
132
+        if( $data === false ) {
133
+            return false;
134
+        }
135
+        else{
136
+            print $data;
137
+            return true;
138
+        }
139
+    }
140
+
141
+    /**
142
+     * Process the template
143
+     *
144
+     * @param array|null $additionalParams
145
+     * @return string This function processes the template.
146
+     *
147
+     * This function processes the template.
148
+     */
149
+    public function fetchPage($additionalParams = null) {
150
+        return $this->load($this->template, $additionalParams);
151
+    }
152
+
153
+    /**
154
+     * doing the actual work
155
+     *
156
+     * @param string $file
157
+     * @param array|null $additionalParams
158
+     * @return string content
159
+     *
160
+     * Includes the template file, fetches its output
161
+     */
162
+    protected function load($file, $additionalParams = null) {
163
+        // Register the variables
164
+        $_ = $this->vars;
165
+        $l = $this->l10n;
166
+        $theme = $this->theme;
167
+
168
+        if(!is_null($additionalParams)) {
169
+            $_ = array_merge( $additionalParams, $this->vars );
170
+            foreach ($_ as $var => $value) {
171
+                ${$var} = $value;
172
+            }
173
+        }
174
+
175
+        // Include
176
+        ob_start();
177
+        try {
178
+            include $file;
179
+            $data = ob_get_contents();
180
+        } catch (\Exception $e) {
181
+            @ob_end_clean();
182
+            throw $e;
183
+        }
184
+        @ob_end_clean();
185
+
186
+        // Return data
187
+        return $data;
188
+    }
189 189
 
190 190
 }
Please login to merge, or discard this patch.
lib/private/Template/ResourceNotFoundException.php 2 patches
Indentation   +17 added lines, -17 removed lines patch added patch discarded remove patch
@@ -24,23 +24,23 @@
 block discarded – undo
24 24
 namespace OC\Template;
25 25
 
26 26
 class ResourceNotFoundException extends \LogicException {
27
-	protected $resource;
28
-	protected $webPath;
27
+    protected $resource;
28
+    protected $webPath;
29 29
 
30
-	/**
31
-	 * @param string $resource
32
-	 * @param string $webPath
33
-	 */
34
-	public function __construct($resource, $webPath) {
35
-		parent::__construct('Resource not found');
36
-		$this->resource = $resource;
37
-		$this->webPath = $webPath;
38
-	}
30
+    /**
31
+     * @param string $resource
32
+     * @param string $webPath
33
+     */
34
+    public function __construct($resource, $webPath) {
35
+        parent::__construct('Resource not found');
36
+        $this->resource = $resource;
37
+        $this->webPath = $webPath;
38
+    }
39 39
 
40
-	/**
41
-	 * @return string
42
-	 */
43
-	public function getResourcePath() {
44
-		return $this->webPath . '/' . $this->resource;
45
-	}
40
+    /**
41
+     * @return string
42
+     */
43
+    public function getResourcePath() {
44
+        return $this->webPath . '/' . $this->resource;
45
+    }
46 46
 }
Please login to merge, or discard this patch.
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -41,6 +41,6 @@
 block discarded – undo
41 41
 	 * @return string
42 42
 	 */
43 43
 	public function getResourcePath() {
44
-		return $this->webPath . '/' . $this->resource;
44
+		return $this->webPath.'/'.$this->resource;
45 45
 	}
46 46
 }
Please login to merge, or discard this patch.
lib/private/Template/TemplateFileLocator.php 2 patches
Indentation   +29 added lines, -29 removed lines patch added patch discarded remove patch
@@ -26,37 +26,37 @@
 block discarded – undo
26 26
 namespace OC\Template;
27 27
 
28 28
 class TemplateFileLocator {
29
-	protected $dirs;
30
-	private $path;
29
+    protected $dirs;
30
+    private $path;
31 31
 
32
-	/**
33
-	 * @param string[] $dirs
34
-	 */
35
-	public function __construct( $dirs ) {
36
-		$this->dirs = $dirs;
37
-	}
32
+    /**
33
+     * @param string[] $dirs
34
+     */
35
+    public function __construct( $dirs ) {
36
+        $this->dirs = $dirs;
37
+    }
38 38
 
39
-	/**
40
-	 * @param string $template
41
-	 * @return string
42
-	 * @throws \Exception
43
-	 */
44
-	public function find( $template ) {
45
-		if ($template === '') {
46
-			throw new \InvalidArgumentException('Empty template name');
47
-		}
39
+    /**
40
+     * @param string $template
41
+     * @return string
42
+     * @throws \Exception
43
+     */
44
+    public function find( $template ) {
45
+        if ($template === '') {
46
+            throw new \InvalidArgumentException('Empty template name');
47
+        }
48 48
 
49
-		foreach($this->dirs as $dir) {
50
-			$file = $dir.$template.'.php';
51
-			if (is_file($file)) {
52
-				$this->path = $dir;
53
-				return $file;
54
-			}
55
-		}
56
-		throw new \Exception('template file not found: template:'.$template);
57
-	}
49
+        foreach($this->dirs as $dir) {
50
+            $file = $dir.$template.'.php';
51
+            if (is_file($file)) {
52
+                $this->path = $dir;
53
+                return $file;
54
+            }
55
+        }
56
+        throw new \Exception('template file not found: template:'.$template);
57
+    }
58 58
 
59
-	public function getPath() {
60
-		return $this->path;
61
-	}
59
+    public function getPath() {
60
+        return $this->path;
61
+    }
62 62
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -32,7 +32,7 @@  discard block
 block discarded – undo
32 32
 	/**
33 33
 	 * @param string[] $dirs
34 34
 	 */
35
-	public function __construct( $dirs ) {
35
+	public function __construct($dirs) {
36 36
 		$this->dirs = $dirs;
37 37
 	}
38 38
 
@@ -41,12 +41,12 @@  discard block
 block discarded – undo
41 41
 	 * @return string
42 42
 	 * @throws \Exception
43 43
 	 */
44
-	public function find( $template ) {
44
+	public function find($template) {
45 45
 		if ($template === '') {
46 46
 			throw new \InvalidArgumentException('Empty template name');
47 47
 		}
48 48
 
49
-		foreach($this->dirs as $dir) {
49
+		foreach ($this->dirs as $dir) {
50 50
 			$file = $dir.$template.'.php';
51 51
 			if (is_file($file)) {
52 52
 				$this->path = $dir;
Please login to merge, or discard this patch.
lib/private/Hooks/ForwardingEmitter.php 1 patch
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -31,35 +31,35 @@
 block discarded – undo
31 31
  * @package OC\Hooks
32 32
  */
33 33
 abstract class ForwardingEmitter extends BasicEmitter {
34
-	/**
35
-	 * @var \OC\Hooks\Emitter[] array
36
-	 */
37
-	private $forwardEmitters = array();
34
+    /**
35
+     * @var \OC\Hooks\Emitter[] array
36
+     */
37
+    private $forwardEmitters = array();
38 38
 
39
-	/**
40
-	 * @param string $scope
41
-	 * @param string $method
42
-	 * @param callable $callback
43
-	 */
44
-	public function listen($scope, $method, callable $callback) {
45
-		parent::listen($scope, $method, $callback);
46
-		foreach ($this->forwardEmitters as $emitter) {
47
-			$emitter->listen($scope, $method, $callback);
48
-		}
49
-	}
39
+    /**
40
+     * @param string $scope
41
+     * @param string $method
42
+     * @param callable $callback
43
+     */
44
+    public function listen($scope, $method, callable $callback) {
45
+        parent::listen($scope, $method, $callback);
46
+        foreach ($this->forwardEmitters as $emitter) {
47
+            $emitter->listen($scope, $method, $callback);
48
+        }
49
+    }
50 50
 
51
-	/**
52
-	 * @param \OC\Hooks\Emitter $emitter
53
-	 */
54
-	protected function forward(Emitter $emitter) {
55
-		$this->forwardEmitters[] = $emitter;
51
+    /**
52
+     * @param \OC\Hooks\Emitter $emitter
53
+     */
54
+    protected function forward(Emitter $emitter) {
55
+        $this->forwardEmitters[] = $emitter;
56 56
 
57
-		//forward all previously connected hooks
58
-		foreach ($this->listeners as $key => $listeners) {
59
-			list($scope, $method) = explode('::', $key, 2);
60
-			foreach ($listeners as $listener) {
61
-				$emitter->listen($scope, $method, $listener);
62
-			}
63
-		}
64
-	}
57
+        //forward all previously connected hooks
58
+        foreach ($this->listeners as $key => $listeners) {
59
+            list($scope, $method) = explode('::', $key, 2);
60
+            foreach ($listeners as $listener) {
61
+                $emitter->listen($scope, $method, $listener);
62
+            }
63
+        }
64
+    }
65 65
 }
Please login to merge, or discard this patch.
lib/private/Hooks/EmitterTrait.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -35,7 +35,7 @@  discard block
 block discarded – undo
35 35
 	 * @param callable $callback
36 36
 	 */
37 37
 	public function listen($scope, $method, callable $callback) {
38
-		$eventName = $scope . '::' . $method;
38
+		$eventName = $scope.'::'.$method;
39 39
 		if (!isset($this->listeners[$eventName])) {
40 40
 			$this->listeners[$eventName] = array();
41 41
 		}
@@ -53,7 +53,7 @@  discard block
 block discarded – undo
53 53
 		$names = array();
54 54
 		$allNames = array_keys($this->listeners);
55 55
 		if ($scope and $method) {
56
-			$name = $scope . '::' . $method;
56
+			$name = $scope.'::'.$method;
57 57
 			if (isset($this->listeners[$name])) {
58 58
 				$names[] = $name;
59 59
 			}
@@ -93,7 +93,7 @@  discard block
 block discarded – undo
93 93
 	 * @param array $arguments optional
94 94
 	 */
95 95
 	protected function emit($scope, $method, array $arguments = array()) {
96
-		$eventName = $scope . '::' . $method;
96
+		$eventName = $scope.'::'.$method;
97 97
 		if (isset($this->listeners[$eventName])) {
98 98
 			foreach ($this->listeners[$eventName] as $callback) {
99 99
 				call_user_func_array($callback, $arguments);
Please login to merge, or discard this patch.
Indentation   +72 added lines, -72 removed lines patch added patch discarded remove patch
@@ -24,80 +24,80 @@
 block discarded – undo
24 24
 
25 25
 trait EmitterTrait {
26 26
 
27
-	/**
28
-	 * @var callable[][] $listeners
29
-	 */
30
-	protected $listeners = array();
27
+    /**
28
+     * @var callable[][] $listeners
29
+     */
30
+    protected $listeners = array();
31 31
 
32
-	/**
33
-	 * @param string $scope
34
-	 * @param string $method
35
-	 * @param callable $callback
36
-	 */
37
-	public function listen($scope, $method, callable $callback) {
38
-		$eventName = $scope . '::' . $method;
39
-		if (!isset($this->listeners[$eventName])) {
40
-			$this->listeners[$eventName] = array();
41
-		}
42
-		if (array_search($callback, $this->listeners[$eventName], true) === false) {
43
-			$this->listeners[$eventName][] = $callback;
44
-		}
45
-	}
32
+    /**
33
+     * @param string $scope
34
+     * @param string $method
35
+     * @param callable $callback
36
+     */
37
+    public function listen($scope, $method, callable $callback) {
38
+        $eventName = $scope . '::' . $method;
39
+        if (!isset($this->listeners[$eventName])) {
40
+            $this->listeners[$eventName] = array();
41
+        }
42
+        if (array_search($callback, $this->listeners[$eventName], true) === false) {
43
+            $this->listeners[$eventName][] = $callback;
44
+        }
45
+    }
46 46
 
47
-	/**
48
-	 * @param string $scope optional
49
-	 * @param string $method optional
50
-	 * @param callable $callback optional
51
-	 */
52
-	public function removeListener($scope = null, $method = null, callable $callback = null) {
53
-		$names = array();
54
-		$allNames = array_keys($this->listeners);
55
-		if ($scope and $method) {
56
-			$name = $scope . '::' . $method;
57
-			if (isset($this->listeners[$name])) {
58
-				$names[] = $name;
59
-			}
60
-		} elseif ($scope) {
61
-			foreach ($allNames as $name) {
62
-				$parts = explode('::', $name, 2);
63
-				if ($parts[0] == $scope) {
64
-					$names[] = $name;
65
-				}
66
-			}
67
-		} elseif ($method) {
68
-			foreach ($allNames as $name) {
69
-				$parts = explode('::', $name, 2);
70
-				if ($parts[1] == $method) {
71
-					$names[] = $name;
72
-				}
73
-			}
74
-		} else {
75
-			$names = $allNames;
76
-		}
47
+    /**
48
+     * @param string $scope optional
49
+     * @param string $method optional
50
+     * @param callable $callback optional
51
+     */
52
+    public function removeListener($scope = null, $method = null, callable $callback = null) {
53
+        $names = array();
54
+        $allNames = array_keys($this->listeners);
55
+        if ($scope and $method) {
56
+            $name = $scope . '::' . $method;
57
+            if (isset($this->listeners[$name])) {
58
+                $names[] = $name;
59
+            }
60
+        } elseif ($scope) {
61
+            foreach ($allNames as $name) {
62
+                $parts = explode('::', $name, 2);
63
+                if ($parts[0] == $scope) {
64
+                    $names[] = $name;
65
+                }
66
+            }
67
+        } elseif ($method) {
68
+            foreach ($allNames as $name) {
69
+                $parts = explode('::', $name, 2);
70
+                if ($parts[1] == $method) {
71
+                    $names[] = $name;
72
+                }
73
+            }
74
+        } else {
75
+            $names = $allNames;
76
+        }
77 77
 
78
-		foreach ($names as $name) {
79
-			if ($callback) {
80
-				$index = array_search($callback, $this->listeners[$name], true);
81
-				if ($index !== false) {
82
-					unset($this->listeners[$name][$index]);
83
-				}
84
-			} else {
85
-				$this->listeners[$name] = array();
86
-			}
87
-		}
88
-	}
78
+        foreach ($names as $name) {
79
+            if ($callback) {
80
+                $index = array_search($callback, $this->listeners[$name], true);
81
+                if ($index !== false) {
82
+                    unset($this->listeners[$name][$index]);
83
+                }
84
+            } else {
85
+                $this->listeners[$name] = array();
86
+            }
87
+        }
88
+    }
89 89
 
90
-	/**
91
-	 * @param string $scope
92
-	 * @param string $method
93
-	 * @param array $arguments optional
94
-	 */
95
-	protected function emit($scope, $method, array $arguments = array()) {
96
-		$eventName = $scope . '::' . $method;
97
-		if (isset($this->listeners[$eventName])) {
98
-			foreach ($this->listeners[$eventName] as $callback) {
99
-				call_user_func_array($callback, $arguments);
100
-			}
101
-		}
102
-	}
90
+    /**
91
+     * @param string $scope
92
+     * @param string $method
93
+     * @param array $arguments optional
94
+     */
95
+    protected function emit($scope, $method, array $arguments = array()) {
96
+        $eventName = $scope . '::' . $method;
97
+        if (isset($this->listeners[$eventName])) {
98
+            foreach ($this->listeners[$eventName] as $callback) {
99
+                call_user_func_array($callback, $arguments);
100
+            }
101
+        }
102
+    }
103 103
 }
Please login to merge, or discard this patch.
lib/private/legacy/files.php 3 patches
Braces   +6 added lines, -12 removed lines patch added patch discarded remove patch
@@ -83,13 +83,11 @@  discard block
 block discarded – undo
83 83
 			    if (count($rangeArray) > 1) {
84 84
 				$type = 'multipart/byteranges; boundary='.self::getBoundary();
85 85
 				// no Content-Length header here
86
-			    }
87
-			    else {
86
+			    } else {
88 87
 				header(sprintf('Content-Range: bytes %d-%d/%d', $rangeArray[0]['from'], $rangeArray[0]['to'], $fileSize), true);
89 88
 				OC_Response::setContentLengthHeader($rangeArray[0]['to'] - $rangeArray[0]['from'] + 1);
90 89
 			    }
91
-			}
92
-			else {
90
+			} else {
93 91
 			    OC_Response::setContentLengthHeader($fileSize);
94 92
 			}
95 93
 		}
@@ -223,13 +221,11 @@  discard block
 block discarded – undo
223 221
 				if ($minOffset >= $fileSize) {
224 222
 					break;
225 223
 				}
226
-			}
227
-			elseif (is_numeric($ranges[0]) && $ranges[0] < $fileSize) {
224
+			} elseif (is_numeric($ranges[0]) && $ranges[0] < $fileSize) {
228 225
 				// case: x-
229 226
 				$rangeArray[$ind++] = array( 'from' => $ranges[0], 'to' => $fileSize-1, 'size' => $fileSize );
230 227
 				break;
231
-			}
232
-			elseif (is_numeric($ranges[1])) {
228
+			} elseif (is_numeric($ranges[1])) {
233 229
 				// case: -x
234 230
 				if ($ranges[1] > $fileSize) {
235 231
 					$ranges[1] = $fileSize;
@@ -277,8 +273,7 @@  discard block
 block discarded – undo
277 273
 			try {
278 274
 			    if (count($rangeArray) == 1) {
279 275
 				$view->readfilePart($filename, $rangeArray[0]['from'], $rangeArray[0]['to']);
280
-			    }
281
-			    else {
276
+			    } else {
282 277
 				// check if file is seekable (if not throw UnseekableException)
283 278
 				// we have to check it before body contents
284 279
 				$view->readfilePart($filename, $rangeArray[0]['size'], $rangeArray[0]['size']);
@@ -301,8 +296,7 @@  discard block
 block discarded – undo
301 296
 			    self::sendHeaders($filename, $name, array());
302 297
 			    $view->readfile($filename);
303 298
 			}
304
-		}
305
-		else {
299
+		} else {
306 300
 		    $view->readfile($filename);
307 301
 		}
308 302
 	}
Please login to merge, or discard this patch.
Indentation   +380 added lines, -380 removed lines patch added patch discarded remove patch
@@ -49,385 +49,385 @@
 block discarded – undo
49 49
  *
50 50
  */
51 51
 class OC_Files {
52
-	const FILE = 1;
53
-	const ZIP_FILES = 2;
54
-	const ZIP_DIR = 3;
55
-
56
-	const UPLOAD_MIN_LIMIT_BYTES = 1048576; // 1 MiB
57
-
58
-
59
-	private static $multipartBoundary = '';
60
-
61
-	/**
62
-	 * @return string
63
-	 */
64
-	private static function getBoundary() {
65
-		if (empty(self::$multipartBoundary)) {
66
-			self::$multipartBoundary = md5(mt_rand());
67
-		}
68
-		return self::$multipartBoundary;
69
-	}
70
-
71
-	/**
72
-	 * @param string $filename
73
-	 * @param string $name
74
-	 * @param array $rangeArray ('from'=>int,'to'=>int), ...
75
-	 */
76
-	private static function sendHeaders($filename, $name, array $rangeArray) {
77
-		OC_Response::setContentDispositionHeader($name, 'attachment');
78
-		header('Content-Transfer-Encoding: binary', true);
79
-		header('Pragma: public');// enable caching in IE
80
-		header('Expires: 0');
81
-		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
82
-		$fileSize = \OC\Files\Filesystem::filesize($filename);
83
-		$type = \OC::$server->getMimeTypeDetector()->getSecureMimeType(\OC\Files\Filesystem::getMimeType($filename));
84
-		if ($fileSize > -1) {
85
-			if (!empty($rangeArray)) {
86
-			    http_response_code(206);
87
-			    header('Accept-Ranges: bytes', true);
88
-			    if (count($rangeArray) > 1) {
89
-				$type = 'multipart/byteranges; boundary='.self::getBoundary();
90
-				// no Content-Length header here
91
-			    }
92
-			    else {
93
-				header(sprintf('Content-Range: bytes %d-%d/%d', $rangeArray[0]['from'], $rangeArray[0]['to'], $fileSize), true);
94
-				OC_Response::setContentLengthHeader($rangeArray[0]['to'] - $rangeArray[0]['from'] + 1);
95
-			    }
96
-			}
97
-			else {
98
-			    OC_Response::setContentLengthHeader($fileSize);
99
-			}
100
-		}
101
-		header('Content-Type: '.$type, true);
102
-	}
103
-
104
-	/**
105
-	 * return the content of a file or return a zip file containing multiple files
106
-	 *
107
-	 * @param string $dir
108
-	 * @param string $files ; separated list of files to download
109
-	 * @param array $params ; 'head' boolean to only send header of the request ; 'range' http range header
110
-	 */
111
-	public static function get($dir, $files, $params = null) {
112
-
113
-		$view = \OC\Files\Filesystem::getView();
114
-		$getType = self::FILE;
115
-		$filename = $dir;
116
-		try {
117
-
118
-			if (is_array($files) && count($files) === 1) {
119
-				$files = $files[0];
120
-			}
121
-
122
-			if (!is_array($files)) {
123
-				$filename = $dir . '/' . $files;
124
-				if (!$view->is_dir($filename)) {
125
-					self::getSingleFile($view, $dir, $files, is_null($params) ? array() : $params);
126
-					return;
127
-				}
128
-			}
129
-
130
-			$name = 'download';
131
-			if (is_array($files)) {
132
-				$getType = self::ZIP_FILES;
133
-				$basename = basename($dir);
134
-				if ($basename) {
135
-					$name = $basename;
136
-				}
137
-
138
-				$filename = $dir . '/' . $name;
139
-			} else {
140
-				$filename = $dir . '/' . $files;
141
-				$getType = self::ZIP_DIR;
142
-				// downloading root ?
143
-				if ($files !== '') {
144
-					$name = $files;
145
-				}
146
-			}
147
-
148
-			self::lockFiles($view, $dir, $files);
149
-
150
-			/* Calculate filesize and number of files */
151
-			if ($getType === self::ZIP_FILES) {
152
-				$fileInfos = array();
153
-				$fileSize = 0;
154
-				foreach ($files as $file) {
155
-					$fileInfo = \OC\Files\Filesystem::getFileInfo($dir . '/' . $file);
156
-					$fileSize += $fileInfo->getSize();
157
-					$fileInfos[] = $fileInfo;
158
-				}
159
-				$numberOfFiles = self::getNumberOfFiles($fileInfos);
160
-			} elseif ($getType === self::ZIP_DIR) {
161
-				$fileInfo = \OC\Files\Filesystem::getFileInfo($dir . '/' . $files);
162
-				$fileSize = $fileInfo->getSize();
163
-				$numberOfFiles = self::getNumberOfFiles(array($fileInfo));
164
-			}
165
-
166
-			$streamer = new Streamer(\OC::$server->getRequest(), $fileSize, $numberOfFiles);
167
-			OC_Util::obEnd();
168
-
169
-			$streamer->sendHeaders($name);
170
-			$executionTime = (int)OC::$server->getIniWrapper()->getNumeric('max_execution_time');
171
-			if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
172
-				@set_time_limit(0);
173
-			}
174
-			ignore_user_abort(true);
175
-
176
-			if ($getType === self::ZIP_FILES) {
177
-				foreach ($files as $file) {
178
-					$file = $dir . '/' . $file;
179
-					if (\OC\Files\Filesystem::is_file($file)) {
180
-						$userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
181
-						$file = $userFolder->get($file);
182
-						if($file instanceof \OC\Files\Node\File) {
183
-							try {
184
-								$fh = $file->fopen('r');
185
-							} catch (\OCP\Files\NotPermittedException $e) {
186
-								continue;
187
-							}
188
-							$fileSize = $file->getSize();
189
-							$fileTime = $file->getMTime();
190
-						} else {
191
-							// File is not a file? …
192
-							\OC::$server->getLogger()->debug(
193
-								'File given, but no Node available. Name {file}',
194
-								[ 'app' => 'files', 'file' => $file ]
195
-							);
196
-							continue;
197
-						}
198
-						$streamer->addFileFromStream($fh, $file->getName(), $fileSize, $fileTime);
199
-						fclose($fh);
200
-					} elseif (\OC\Files\Filesystem::is_dir($file)) {
201
-						$streamer->addDirRecursive($file);
202
-					}
203
-				}
204
-			} elseif ($getType === self::ZIP_DIR) {
205
-				$file = $dir . '/' . $files;
206
-				$streamer->addDirRecursive($file);
207
-			}
208
-			$streamer->finalize();
209
-			set_time_limit($executionTime);
210
-			self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
211
-		} catch (\OCP\Lock\LockedException $ex) {
212
-			self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
213
-			OC::$server->getLogger()->logException($ex);
214
-			$l = \OC::$server->getL10N('core');
215
-			$hint = method_exists($ex, 'getHint') ? $ex->getHint() : '';
216
-			\OC_Template::printErrorPage($l->t('File is currently busy, please try again later'), $hint, 200);
217
-		} catch (\OCP\Files\ForbiddenException $ex) {
218
-			self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
219
-			OC::$server->getLogger()->logException($ex);
220
-			$l = \OC::$server->getL10N('core');
221
-			\OC_Template::printErrorPage($l->t('Can\'t read file'), $ex->getMessage(), 200);
222
-		} catch (\Exception $ex) {
223
-			self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
224
-			OC::$server->getLogger()->logException($ex);
225
-			$l = \OC::$server->getL10N('core');
226
-			$hint = method_exists($ex, 'getHint') ? $ex->getHint() : '';
227
-			\OC_Template::printErrorPage($l->t('Can\'t read file'), $hint, 200);
228
-		}
229
-	}
230
-
231
-	/**
232
-	 * @param string $rangeHeaderPos
233
-	 * @param int $fileSize
234
-	 * @return array $rangeArray ('from'=>int,'to'=>int), ...
235
-	 */
236
-	private static function parseHttpRangeHeader($rangeHeaderPos, $fileSize) {
237
-		$rArray=explode(',', $rangeHeaderPos);
238
-		$minOffset = 0;
239
-		$ind = 0;
240
-
241
-		$rangeArray = array();
242
-
243
-		foreach ($rArray as $value) {
244
-			$ranges = explode('-', $value);
245
-			if (is_numeric($ranges[0])) {
246
-				if ($ranges[0] < $minOffset) { // case: bytes=500-700,601-999
247
-					$ranges[0] = $minOffset;
248
-				}
249
-				if ($ind > 0 && $rangeArray[$ind-1]['to']+1 == $ranges[0]) { // case: bytes=500-600,601-999
250
-					$ind--;
251
-					$ranges[0] = $rangeArray[$ind]['from'];
252
-				}
253
-			}
254
-
255
-			if (is_numeric($ranges[0]) && is_numeric($ranges[1]) && $ranges[0] < $fileSize && $ranges[0] <= $ranges[1]) {
256
-				// case: x-x
257
-				if ($ranges[1] >= $fileSize) {
258
-					$ranges[1] = $fileSize-1;
259
-				}
260
-				$rangeArray[$ind++] = array( 'from' => $ranges[0], 'to' => $ranges[1], 'size' => $fileSize );
261
-				$minOffset = $ranges[1] + 1;
262
-				if ($minOffset >= $fileSize) {
263
-					break;
264
-				}
265
-			}
266
-			elseif (is_numeric($ranges[0]) && $ranges[0] < $fileSize) {
267
-				// case: x-
268
-				$rangeArray[$ind++] = array( 'from' => $ranges[0], 'to' => $fileSize-1, 'size' => $fileSize );
269
-				break;
270
-			}
271
-			elseif (is_numeric($ranges[1])) {
272
-				// case: -x
273
-				if ($ranges[1] > $fileSize) {
274
-					$ranges[1] = $fileSize;
275
-				}
276
-				$rangeArray[$ind++] = array( 'from' => $fileSize-$ranges[1], 'to' => $fileSize-1, 'size' => $fileSize );
277
-				break;
278
-			}
279
-		}
280
-		return $rangeArray;
281
-	}
282
-
283
-	/**
284
-	 * @param View $view
285
-	 * @param string $name
286
-	 * @param string $dir
287
-	 * @param array $params ; 'head' boolean to only send header of the request ; 'range' http range header
288
-	 */
289
-	private static function getSingleFile($view, $dir, $name, $params) {
290
-		$filename = $dir . '/' . $name;
291
-		$file = null;
292
-
293
-		try {
294
-			$userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
295
-			$file = $userFolder->get($filename);
296
-			if(!$file instanceof \OC\Files\Node\File || !$file->isReadable()) {
297
-				http_response_code(403);
298
-				die('403 Forbidden');
299
-			}
300
-			$fileSize = $file->getSize();
301
-		} catch (\OCP\Files\NotPermittedException $e) {
302
-			http_response_code(403);
303
-			die('403 Forbidden');
304
-		} catch (\OCP\Files\InvalidPathException $e) {
305
-			http_response_code(403);
306
-			die('403 Forbidden');
307
-		} catch (\OCP\Files\NotFoundException $e) {
308
-			http_response_code(404);
309
-			$tmpl = new OC_Template('', '404', 'guest');
310
-			$tmpl->printPage();
311
-			exit();
312
-		}
313
-
314
-		OC_Util::obEnd();
315
-		$view->lockFile($filename, ILockingProvider::LOCK_SHARED);
316
-
317
-		$rangeArray = array();
318
-
319
-		if (isset($params['range']) && substr($params['range'], 0, 6) === 'bytes=') {
320
-			$rangeArray = self::parseHttpRangeHeader(substr($params['range'], 6), $fileSize);
321
-		}
322
-
323
-		self::sendHeaders($filename, $name, $rangeArray);
324
-
325
-		if (isset($params['head']) && $params['head']) {
326
-			return;
327
-		}
328
-
329
-		if (!empty($rangeArray)) {
330
-			try {
331
-			    if (count($rangeArray) == 1) {
332
-				$view->readfilePart($filename, $rangeArray[0]['from'], $rangeArray[0]['to']);
333
-			    }
334
-			    else {
335
-				// check if file is seekable (if not throw UnseekableException)
336
-				// we have to check it before body contents
337
-				$view->readfilePart($filename, $rangeArray[0]['size'], $rangeArray[0]['size']);
338
-
339
-				$type = \OC::$server->getMimeTypeDetector()->getSecureMimeType(\OC\Files\Filesystem::getMimeType($filename));
340
-
341
-				foreach ($rangeArray as $range) {
342
-				    echo "\r\n--".self::getBoundary()."\r\n".
343
-				         "Content-type: ".$type."\r\n".
344
-				         "Content-range: bytes ".$range['from']."-".$range['to']."/".$range['size']."\r\n\r\n";
345
-				    $view->readfilePart($filename, $range['from'], $range['to']);
346
-				}
347
-				echo "\r\n--".self::getBoundary()."--\r\n";
348
-			    }
349
-			} catch (\OCP\Files\UnseekableException $ex) {
350
-			    // file is unseekable
351
-			    header_remove('Accept-Ranges');
352
-			    header_remove('Content-Range');
353
-			    http_response_code(200);
354
-			    self::sendHeaders($filename, $name, array());
355
-			    $view->readfile($filename);
356
-			}
357
-		}
358
-		else {
359
-		    $view->readfile($filename);
360
-		}
361
-	}
362
-
363
-	/**
364
-	 * Returns the total (recursive) number of files and folders in the given
365
-	 * FileInfos.
366
-	 *
367
-	 * @param \OCP\Files\FileInfo[] $fileInfos the FileInfos to count
368
-	 * @return int the total number of files and folders
369
-	 */
370
-	private static function getNumberOfFiles($fileInfos) {
371
-		$numberOfFiles = 0;
372
-
373
-		$view = new View();
374
-
375
-		while ($fileInfo = array_pop($fileInfos)) {
376
-			$numberOfFiles++;
377
-
378
-			if ($fileInfo->getType() === \OCP\Files\FileInfo::TYPE_FOLDER) {
379
-				$fileInfos = array_merge($fileInfos, $view->getDirectoryContent($fileInfo->getPath()));
380
-			}
381
-		}
382
-
383
-		return $numberOfFiles;
384
-	}
385
-
386
-	/**
387
-	 * @param View $view
388
-	 * @param string $dir
389
-	 * @param string[]|string $files
390
-	 */
391
-	public static function lockFiles($view, $dir, $files) {
392
-		if (!is_array($files)) {
393
-			$file = $dir . '/' . $files;
394
-			$files = [$file];
395
-		}
396
-		foreach ($files as $file) {
397
-			$file = $dir . '/' . $file;
398
-			$view->lockFile($file, ILockingProvider::LOCK_SHARED);
399
-			if ($view->is_dir($file)) {
400
-				$contents = $view->getDirectoryContent($file);
401
-				$contents = array_map(function($fileInfo) use ($file) {
402
-					/** @var \OCP\Files\FileInfo $fileInfo */
403
-					return $file . '/' . $fileInfo->getName();
404
-				}, $contents);
405
-				self::lockFiles($view, $dir, $contents);
406
-			}
407
-		}
408
-	}
409
-
410
-	/**
411
-	 * @param string $dir
412
-	 * @param $files
413
-	 * @param integer $getType
414
-	 * @param View $view
415
-	 * @param string $filename
416
-	 */
417
-	private static function unlockAllTheFiles($dir, $files, $getType, $view, $filename) {
418
-		if ($getType === self::FILE) {
419
-			$view->unlockFile($filename, ILockingProvider::LOCK_SHARED);
420
-		}
421
-		if ($getType === self::ZIP_FILES) {
422
-			foreach ($files as $file) {
423
-				$file = $dir . '/' . $file;
424
-				$view->unlockFile($file, ILockingProvider::LOCK_SHARED);
425
-			}
426
-		}
427
-		if ($getType === self::ZIP_DIR) {
428
-			$file = $dir . '/' . $files;
429
-			$view->unlockFile($file, ILockingProvider::LOCK_SHARED);
430
-		}
431
-	}
52
+    const FILE = 1;
53
+    const ZIP_FILES = 2;
54
+    const ZIP_DIR = 3;
55
+
56
+    const UPLOAD_MIN_LIMIT_BYTES = 1048576; // 1 MiB
57
+
58
+
59
+    private static $multipartBoundary = '';
60
+
61
+    /**
62
+     * @return string
63
+     */
64
+    private static function getBoundary() {
65
+        if (empty(self::$multipartBoundary)) {
66
+            self::$multipartBoundary = md5(mt_rand());
67
+        }
68
+        return self::$multipartBoundary;
69
+    }
70
+
71
+    /**
72
+     * @param string $filename
73
+     * @param string $name
74
+     * @param array $rangeArray ('from'=>int,'to'=>int), ...
75
+     */
76
+    private static function sendHeaders($filename, $name, array $rangeArray) {
77
+        OC_Response::setContentDispositionHeader($name, 'attachment');
78
+        header('Content-Transfer-Encoding: binary', true);
79
+        header('Pragma: public');// enable caching in IE
80
+        header('Expires: 0');
81
+        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
82
+        $fileSize = \OC\Files\Filesystem::filesize($filename);
83
+        $type = \OC::$server->getMimeTypeDetector()->getSecureMimeType(\OC\Files\Filesystem::getMimeType($filename));
84
+        if ($fileSize > -1) {
85
+            if (!empty($rangeArray)) {
86
+                http_response_code(206);
87
+                header('Accept-Ranges: bytes', true);
88
+                if (count($rangeArray) > 1) {
89
+                $type = 'multipart/byteranges; boundary='.self::getBoundary();
90
+                // no Content-Length header here
91
+                }
92
+                else {
93
+                header(sprintf('Content-Range: bytes %d-%d/%d', $rangeArray[0]['from'], $rangeArray[0]['to'], $fileSize), true);
94
+                OC_Response::setContentLengthHeader($rangeArray[0]['to'] - $rangeArray[0]['from'] + 1);
95
+                }
96
+            }
97
+            else {
98
+                OC_Response::setContentLengthHeader($fileSize);
99
+            }
100
+        }
101
+        header('Content-Type: '.$type, true);
102
+    }
103
+
104
+    /**
105
+     * return the content of a file or return a zip file containing multiple files
106
+     *
107
+     * @param string $dir
108
+     * @param string $files ; separated list of files to download
109
+     * @param array $params ; 'head' boolean to only send header of the request ; 'range' http range header
110
+     */
111
+    public static function get($dir, $files, $params = null) {
112
+
113
+        $view = \OC\Files\Filesystem::getView();
114
+        $getType = self::FILE;
115
+        $filename = $dir;
116
+        try {
117
+
118
+            if (is_array($files) && count($files) === 1) {
119
+                $files = $files[0];
120
+            }
121
+
122
+            if (!is_array($files)) {
123
+                $filename = $dir . '/' . $files;
124
+                if (!$view->is_dir($filename)) {
125
+                    self::getSingleFile($view, $dir, $files, is_null($params) ? array() : $params);
126
+                    return;
127
+                }
128
+            }
129
+
130
+            $name = 'download';
131
+            if (is_array($files)) {
132
+                $getType = self::ZIP_FILES;
133
+                $basename = basename($dir);
134
+                if ($basename) {
135
+                    $name = $basename;
136
+                }
137
+
138
+                $filename = $dir . '/' . $name;
139
+            } else {
140
+                $filename = $dir . '/' . $files;
141
+                $getType = self::ZIP_DIR;
142
+                // downloading root ?
143
+                if ($files !== '') {
144
+                    $name = $files;
145
+                }
146
+            }
147
+
148
+            self::lockFiles($view, $dir, $files);
149
+
150
+            /* Calculate filesize and number of files */
151
+            if ($getType === self::ZIP_FILES) {
152
+                $fileInfos = array();
153
+                $fileSize = 0;
154
+                foreach ($files as $file) {
155
+                    $fileInfo = \OC\Files\Filesystem::getFileInfo($dir . '/' . $file);
156
+                    $fileSize += $fileInfo->getSize();
157
+                    $fileInfos[] = $fileInfo;
158
+                }
159
+                $numberOfFiles = self::getNumberOfFiles($fileInfos);
160
+            } elseif ($getType === self::ZIP_DIR) {
161
+                $fileInfo = \OC\Files\Filesystem::getFileInfo($dir . '/' . $files);
162
+                $fileSize = $fileInfo->getSize();
163
+                $numberOfFiles = self::getNumberOfFiles(array($fileInfo));
164
+            }
165
+
166
+            $streamer = new Streamer(\OC::$server->getRequest(), $fileSize, $numberOfFiles);
167
+            OC_Util::obEnd();
168
+
169
+            $streamer->sendHeaders($name);
170
+            $executionTime = (int)OC::$server->getIniWrapper()->getNumeric('max_execution_time');
171
+            if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
172
+                @set_time_limit(0);
173
+            }
174
+            ignore_user_abort(true);
175
+
176
+            if ($getType === self::ZIP_FILES) {
177
+                foreach ($files as $file) {
178
+                    $file = $dir . '/' . $file;
179
+                    if (\OC\Files\Filesystem::is_file($file)) {
180
+                        $userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
181
+                        $file = $userFolder->get($file);
182
+                        if($file instanceof \OC\Files\Node\File) {
183
+                            try {
184
+                                $fh = $file->fopen('r');
185
+                            } catch (\OCP\Files\NotPermittedException $e) {
186
+                                continue;
187
+                            }
188
+                            $fileSize = $file->getSize();
189
+                            $fileTime = $file->getMTime();
190
+                        } else {
191
+                            // File is not a file? …
192
+                            \OC::$server->getLogger()->debug(
193
+                                'File given, but no Node available. Name {file}',
194
+                                [ 'app' => 'files', 'file' => $file ]
195
+                            );
196
+                            continue;
197
+                        }
198
+                        $streamer->addFileFromStream($fh, $file->getName(), $fileSize, $fileTime);
199
+                        fclose($fh);
200
+                    } elseif (\OC\Files\Filesystem::is_dir($file)) {
201
+                        $streamer->addDirRecursive($file);
202
+                    }
203
+                }
204
+            } elseif ($getType === self::ZIP_DIR) {
205
+                $file = $dir . '/' . $files;
206
+                $streamer->addDirRecursive($file);
207
+            }
208
+            $streamer->finalize();
209
+            set_time_limit($executionTime);
210
+            self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
211
+        } catch (\OCP\Lock\LockedException $ex) {
212
+            self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
213
+            OC::$server->getLogger()->logException($ex);
214
+            $l = \OC::$server->getL10N('core');
215
+            $hint = method_exists($ex, 'getHint') ? $ex->getHint() : '';
216
+            \OC_Template::printErrorPage($l->t('File is currently busy, please try again later'), $hint, 200);
217
+        } catch (\OCP\Files\ForbiddenException $ex) {
218
+            self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
219
+            OC::$server->getLogger()->logException($ex);
220
+            $l = \OC::$server->getL10N('core');
221
+            \OC_Template::printErrorPage($l->t('Can\'t read file'), $ex->getMessage(), 200);
222
+        } catch (\Exception $ex) {
223
+            self::unlockAllTheFiles($dir, $files, $getType, $view, $filename);
224
+            OC::$server->getLogger()->logException($ex);
225
+            $l = \OC::$server->getL10N('core');
226
+            $hint = method_exists($ex, 'getHint') ? $ex->getHint() : '';
227
+            \OC_Template::printErrorPage($l->t('Can\'t read file'), $hint, 200);
228
+        }
229
+    }
230
+
231
+    /**
232
+     * @param string $rangeHeaderPos
233
+     * @param int $fileSize
234
+     * @return array $rangeArray ('from'=>int,'to'=>int), ...
235
+     */
236
+    private static function parseHttpRangeHeader($rangeHeaderPos, $fileSize) {
237
+        $rArray=explode(',', $rangeHeaderPos);
238
+        $minOffset = 0;
239
+        $ind = 0;
240
+
241
+        $rangeArray = array();
242
+
243
+        foreach ($rArray as $value) {
244
+            $ranges = explode('-', $value);
245
+            if (is_numeric($ranges[0])) {
246
+                if ($ranges[0] < $minOffset) { // case: bytes=500-700,601-999
247
+                    $ranges[0] = $minOffset;
248
+                }
249
+                if ($ind > 0 && $rangeArray[$ind-1]['to']+1 == $ranges[0]) { // case: bytes=500-600,601-999
250
+                    $ind--;
251
+                    $ranges[0] = $rangeArray[$ind]['from'];
252
+                }
253
+            }
254
+
255
+            if (is_numeric($ranges[0]) && is_numeric($ranges[1]) && $ranges[0] < $fileSize && $ranges[0] <= $ranges[1]) {
256
+                // case: x-x
257
+                if ($ranges[1] >= $fileSize) {
258
+                    $ranges[1] = $fileSize-1;
259
+                }
260
+                $rangeArray[$ind++] = array( 'from' => $ranges[0], 'to' => $ranges[1], 'size' => $fileSize );
261
+                $minOffset = $ranges[1] + 1;
262
+                if ($minOffset >= $fileSize) {
263
+                    break;
264
+                }
265
+            }
266
+            elseif (is_numeric($ranges[0]) && $ranges[0] < $fileSize) {
267
+                // case: x-
268
+                $rangeArray[$ind++] = array( 'from' => $ranges[0], 'to' => $fileSize-1, 'size' => $fileSize );
269
+                break;
270
+            }
271
+            elseif (is_numeric($ranges[1])) {
272
+                // case: -x
273
+                if ($ranges[1] > $fileSize) {
274
+                    $ranges[1] = $fileSize;
275
+                }
276
+                $rangeArray[$ind++] = array( 'from' => $fileSize-$ranges[1], 'to' => $fileSize-1, 'size' => $fileSize );
277
+                break;
278
+            }
279
+        }
280
+        return $rangeArray;
281
+    }
282
+
283
+    /**
284
+     * @param View $view
285
+     * @param string $name
286
+     * @param string $dir
287
+     * @param array $params ; 'head' boolean to only send header of the request ; 'range' http range header
288
+     */
289
+    private static function getSingleFile($view, $dir, $name, $params) {
290
+        $filename = $dir . '/' . $name;
291
+        $file = null;
292
+
293
+        try {
294
+            $userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
295
+            $file = $userFolder->get($filename);
296
+            if(!$file instanceof \OC\Files\Node\File || !$file->isReadable()) {
297
+                http_response_code(403);
298
+                die('403 Forbidden');
299
+            }
300
+            $fileSize = $file->getSize();
301
+        } catch (\OCP\Files\NotPermittedException $e) {
302
+            http_response_code(403);
303
+            die('403 Forbidden');
304
+        } catch (\OCP\Files\InvalidPathException $e) {
305
+            http_response_code(403);
306
+            die('403 Forbidden');
307
+        } catch (\OCP\Files\NotFoundException $e) {
308
+            http_response_code(404);
309
+            $tmpl = new OC_Template('', '404', 'guest');
310
+            $tmpl->printPage();
311
+            exit();
312
+        }
313
+
314
+        OC_Util::obEnd();
315
+        $view->lockFile($filename, ILockingProvider::LOCK_SHARED);
316
+
317
+        $rangeArray = array();
318
+
319
+        if (isset($params['range']) && substr($params['range'], 0, 6) === 'bytes=') {
320
+            $rangeArray = self::parseHttpRangeHeader(substr($params['range'], 6), $fileSize);
321
+        }
322
+
323
+        self::sendHeaders($filename, $name, $rangeArray);
324
+
325
+        if (isset($params['head']) && $params['head']) {
326
+            return;
327
+        }
328
+
329
+        if (!empty($rangeArray)) {
330
+            try {
331
+                if (count($rangeArray) == 1) {
332
+                $view->readfilePart($filename, $rangeArray[0]['from'], $rangeArray[0]['to']);
333
+                }
334
+                else {
335
+                // check if file is seekable (if not throw UnseekableException)
336
+                // we have to check it before body contents
337
+                $view->readfilePart($filename, $rangeArray[0]['size'], $rangeArray[0]['size']);
338
+
339
+                $type = \OC::$server->getMimeTypeDetector()->getSecureMimeType(\OC\Files\Filesystem::getMimeType($filename));
340
+
341
+                foreach ($rangeArray as $range) {
342
+                    echo "\r\n--".self::getBoundary()."\r\n".
343
+                            "Content-type: ".$type."\r\n".
344
+                            "Content-range: bytes ".$range['from']."-".$range['to']."/".$range['size']."\r\n\r\n";
345
+                    $view->readfilePart($filename, $range['from'], $range['to']);
346
+                }
347
+                echo "\r\n--".self::getBoundary()."--\r\n";
348
+                }
349
+            } catch (\OCP\Files\UnseekableException $ex) {
350
+                // file is unseekable
351
+                header_remove('Accept-Ranges');
352
+                header_remove('Content-Range');
353
+                http_response_code(200);
354
+                self::sendHeaders($filename, $name, array());
355
+                $view->readfile($filename);
356
+            }
357
+        }
358
+        else {
359
+            $view->readfile($filename);
360
+        }
361
+    }
362
+
363
+    /**
364
+     * Returns the total (recursive) number of files and folders in the given
365
+     * FileInfos.
366
+     *
367
+     * @param \OCP\Files\FileInfo[] $fileInfos the FileInfos to count
368
+     * @return int the total number of files and folders
369
+     */
370
+    private static function getNumberOfFiles($fileInfos) {
371
+        $numberOfFiles = 0;
372
+
373
+        $view = new View();
374
+
375
+        while ($fileInfo = array_pop($fileInfos)) {
376
+            $numberOfFiles++;
377
+
378
+            if ($fileInfo->getType() === \OCP\Files\FileInfo::TYPE_FOLDER) {
379
+                $fileInfos = array_merge($fileInfos, $view->getDirectoryContent($fileInfo->getPath()));
380
+            }
381
+        }
382
+
383
+        return $numberOfFiles;
384
+    }
385
+
386
+    /**
387
+     * @param View $view
388
+     * @param string $dir
389
+     * @param string[]|string $files
390
+     */
391
+    public static function lockFiles($view, $dir, $files) {
392
+        if (!is_array($files)) {
393
+            $file = $dir . '/' . $files;
394
+            $files = [$file];
395
+        }
396
+        foreach ($files as $file) {
397
+            $file = $dir . '/' . $file;
398
+            $view->lockFile($file, ILockingProvider::LOCK_SHARED);
399
+            if ($view->is_dir($file)) {
400
+                $contents = $view->getDirectoryContent($file);
401
+                $contents = array_map(function($fileInfo) use ($file) {
402
+                    /** @var \OCP\Files\FileInfo $fileInfo */
403
+                    return $file . '/' . $fileInfo->getName();
404
+                }, $contents);
405
+                self::lockFiles($view, $dir, $contents);
406
+            }
407
+        }
408
+    }
409
+
410
+    /**
411
+     * @param string $dir
412
+     * @param $files
413
+     * @param integer $getType
414
+     * @param View $view
415
+     * @param string $filename
416
+     */
417
+    private static function unlockAllTheFiles($dir, $files, $getType, $view, $filename) {
418
+        if ($getType === self::FILE) {
419
+            $view->unlockFile($filename, ILockingProvider::LOCK_SHARED);
420
+        }
421
+        if ($getType === self::ZIP_FILES) {
422
+            foreach ($files as $file) {
423
+                $file = $dir . '/' . $file;
424
+                $view->unlockFile($file, ILockingProvider::LOCK_SHARED);
425
+            }
426
+        }
427
+        if ($getType === self::ZIP_DIR) {
428
+            $file = $dir . '/' . $files;
429
+            $view->unlockFile($file, ILockingProvider::LOCK_SHARED);
430
+        }
431
+    }
432 432
 
433 433
 }
Please login to merge, or discard this patch.
Spacing   +24 added lines, -24 removed lines patch added patch discarded remove patch
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
 	private static function sendHeaders($filename, $name, array $rangeArray) {
77 77
 		OC_Response::setContentDispositionHeader($name, 'attachment');
78 78
 		header('Content-Transfer-Encoding: binary', true);
79
-		header('Pragma: public');// enable caching in IE
79
+		header('Pragma: public'); // enable caching in IE
80 80
 		header('Expires: 0');
81 81
 		header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
82 82
 		$fileSize = \OC\Files\Filesystem::filesize($filename);
@@ -120,7 +120,7 @@  discard block
 block discarded – undo
120 120
 			}
121 121
 
122 122
 			if (!is_array($files)) {
123
-				$filename = $dir . '/' . $files;
123
+				$filename = $dir.'/'.$files;
124 124
 				if (!$view->is_dir($filename)) {
125 125
 					self::getSingleFile($view, $dir, $files, is_null($params) ? array() : $params);
126 126
 					return;
@@ -135,9 +135,9 @@  discard block
 block discarded – undo
135 135
 					$name = $basename;
136 136
 				}
137 137
 
138
-				$filename = $dir . '/' . $name;
138
+				$filename = $dir.'/'.$name;
139 139
 			} else {
140
-				$filename = $dir . '/' . $files;
140
+				$filename = $dir.'/'.$files;
141 141
 				$getType = self::ZIP_DIR;
142 142
 				// downloading root ?
143 143
 				if ($files !== '') {
@@ -152,13 +152,13 @@  discard block
 block discarded – undo
152 152
 				$fileInfos = array();
153 153
 				$fileSize = 0;
154 154
 				foreach ($files as $file) {
155
-					$fileInfo = \OC\Files\Filesystem::getFileInfo($dir . '/' . $file);
155
+					$fileInfo = \OC\Files\Filesystem::getFileInfo($dir.'/'.$file);
156 156
 					$fileSize += $fileInfo->getSize();
157 157
 					$fileInfos[] = $fileInfo;
158 158
 				}
159 159
 				$numberOfFiles = self::getNumberOfFiles($fileInfos);
160 160
 			} elseif ($getType === self::ZIP_DIR) {
161
-				$fileInfo = \OC\Files\Filesystem::getFileInfo($dir . '/' . $files);
161
+				$fileInfo = \OC\Files\Filesystem::getFileInfo($dir.'/'.$files);
162 162
 				$fileSize = $fileInfo->getSize();
163 163
 				$numberOfFiles = self::getNumberOfFiles(array($fileInfo));
164 164
 			}
@@ -167,7 +167,7 @@  discard block
 block discarded – undo
167 167
 			OC_Util::obEnd();
168 168
 
169 169
 			$streamer->sendHeaders($name);
170
-			$executionTime = (int)OC::$server->getIniWrapper()->getNumeric('max_execution_time');
170
+			$executionTime = (int) OC::$server->getIniWrapper()->getNumeric('max_execution_time');
171 171
 			if (strpos(@ini_get('disable_functions'), 'set_time_limit') === false) {
172 172
 				@set_time_limit(0);
173 173
 			}
@@ -175,11 +175,11 @@  discard block
 block discarded – undo
175 175
 
176 176
 			if ($getType === self::ZIP_FILES) {
177 177
 				foreach ($files as $file) {
178
-					$file = $dir . '/' . $file;
178
+					$file = $dir.'/'.$file;
179 179
 					if (\OC\Files\Filesystem::is_file($file)) {
180 180
 						$userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
181 181
 						$file = $userFolder->get($file);
182
-						if($file instanceof \OC\Files\Node\File) {
182
+						if ($file instanceof \OC\Files\Node\File) {
183 183
 							try {
184 184
 								$fh = $file->fopen('r');
185 185
 							} catch (\OCP\Files\NotPermittedException $e) {
@@ -191,7 +191,7 @@  discard block
 block discarded – undo
191 191
 							// File is not a file? …
192 192
 							\OC::$server->getLogger()->debug(
193 193
 								'File given, but no Node available. Name {file}',
194
-								[ 'app' => 'files', 'file' => $file ]
194
+								['app' => 'files', 'file' => $file]
195 195
 							);
196 196
 							continue;
197 197
 						}
@@ -202,7 +202,7 @@  discard block
 block discarded – undo
202 202
 					}
203 203
 				}
204 204
 			} elseif ($getType === self::ZIP_DIR) {
205
-				$file = $dir . '/' . $files;
205
+				$file = $dir.'/'.$files;
206 206
 				$streamer->addDirRecursive($file);
207 207
 			}
208 208
 			$streamer->finalize();
@@ -234,7 +234,7 @@  discard block
 block discarded – undo
234 234
 	 * @return array $rangeArray ('from'=>int,'to'=>int), ...
235 235
 	 */
236 236
 	private static function parseHttpRangeHeader($rangeHeaderPos, $fileSize) {
237
-		$rArray=explode(',', $rangeHeaderPos);
237
+		$rArray = explode(',', $rangeHeaderPos);
238 238
 		$minOffset = 0;
239 239
 		$ind = 0;
240 240
 
@@ -246,7 +246,7 @@  discard block
 block discarded – undo
246 246
 				if ($ranges[0] < $minOffset) { // case: bytes=500-700,601-999
247 247
 					$ranges[0] = $minOffset;
248 248
 				}
249
-				if ($ind > 0 && $rangeArray[$ind-1]['to']+1 == $ranges[0]) { // case: bytes=500-600,601-999
249
+				if ($ind > 0 && $rangeArray[$ind - 1]['to'] + 1 == $ranges[0]) { // case: bytes=500-600,601-999
250 250
 					$ind--;
251 251
 					$ranges[0] = $rangeArray[$ind]['from'];
252 252
 				}
@@ -255,9 +255,9 @@  discard block
 block discarded – undo
255 255
 			if (is_numeric($ranges[0]) && is_numeric($ranges[1]) && $ranges[0] < $fileSize && $ranges[0] <= $ranges[1]) {
256 256
 				// case: x-x
257 257
 				if ($ranges[1] >= $fileSize) {
258
-					$ranges[1] = $fileSize-1;
258
+					$ranges[1] = $fileSize - 1;
259 259
 				}
260
-				$rangeArray[$ind++] = array( 'from' => $ranges[0], 'to' => $ranges[1], 'size' => $fileSize );
260
+				$rangeArray[$ind++] = array('from' => $ranges[0], 'to' => $ranges[1], 'size' => $fileSize);
261 261
 				$minOffset = $ranges[1] + 1;
262 262
 				if ($minOffset >= $fileSize) {
263 263
 					break;
@@ -265,7 +265,7 @@  discard block
 block discarded – undo
265 265
 			}
266 266
 			elseif (is_numeric($ranges[0]) && $ranges[0] < $fileSize) {
267 267
 				// case: x-
268
-				$rangeArray[$ind++] = array( 'from' => $ranges[0], 'to' => $fileSize-1, 'size' => $fileSize );
268
+				$rangeArray[$ind++] = array('from' => $ranges[0], 'to' => $fileSize - 1, 'size' => $fileSize);
269 269
 				break;
270 270
 			}
271 271
 			elseif (is_numeric($ranges[1])) {
@@ -273,7 +273,7 @@  discard block
 block discarded – undo
273 273
 				if ($ranges[1] > $fileSize) {
274 274
 					$ranges[1] = $fileSize;
275 275
 				}
276
-				$rangeArray[$ind++] = array( 'from' => $fileSize-$ranges[1], 'to' => $fileSize-1, 'size' => $fileSize );
276
+				$rangeArray[$ind++] = array('from' => $fileSize - $ranges[1], 'to' => $fileSize - 1, 'size' => $fileSize);
277 277
 				break;
278 278
 			}
279 279
 		}
@@ -287,13 +287,13 @@  discard block
 block discarded – undo
287 287
 	 * @param array $params ; 'head' boolean to only send header of the request ; 'range' http range header
288 288
 	 */
289 289
 	private static function getSingleFile($view, $dir, $name, $params) {
290
-		$filename = $dir . '/' . $name;
290
+		$filename = $dir.'/'.$name;
291 291
 		$file = null;
292 292
 
293 293
 		try {
294 294
 			$userFolder = \OC::$server->getRootFolder()->get(\OC\Files\Filesystem::getRoot());
295 295
 			$file = $userFolder->get($filename);
296
-			if(!$file instanceof \OC\Files\Node\File || !$file->isReadable()) {
296
+			if (!$file instanceof \OC\Files\Node\File || !$file->isReadable()) {
297 297
 				http_response_code(403);
298 298
 				die('403 Forbidden');
299 299
 			}
@@ -390,17 +390,17 @@  discard block
 block discarded – undo
390 390
 	 */
391 391
 	public static function lockFiles($view, $dir, $files) {
392 392
 		if (!is_array($files)) {
393
-			$file = $dir . '/' . $files;
393
+			$file = $dir.'/'.$files;
394 394
 			$files = [$file];
395 395
 		}
396 396
 		foreach ($files as $file) {
397
-			$file = $dir . '/' . $file;
397
+			$file = $dir.'/'.$file;
398 398
 			$view->lockFile($file, ILockingProvider::LOCK_SHARED);
399 399
 			if ($view->is_dir($file)) {
400 400
 				$contents = $view->getDirectoryContent($file);
401 401
 				$contents = array_map(function($fileInfo) use ($file) {
402 402
 					/** @var \OCP\Files\FileInfo $fileInfo */
403
-					return $file . '/' . $fileInfo->getName();
403
+					return $file.'/'.$fileInfo->getName();
404 404
 				}, $contents);
405 405
 				self::lockFiles($view, $dir, $contents);
406 406
 			}
@@ -420,12 +420,12 @@  discard block
 block discarded – undo
420 420
 		}
421 421
 		if ($getType === self::ZIP_FILES) {
422 422
 			foreach ($files as $file) {
423
-				$file = $dir . '/' . $file;
423
+				$file = $dir.'/'.$file;
424 424
 				$view->unlockFile($file, ILockingProvider::LOCK_SHARED);
425 425
 			}
426 426
 		}
427 427
 		if ($getType === self::ZIP_DIR) {
428
-			$file = $dir . '/' . $files;
428
+			$file = $dir.'/'.$files;
429 429
 			$view->unlockFile($file, ILockingProvider::LOCK_SHARED);
430 430
 		}
431 431
 	}
Please login to merge, or discard this patch.
lib/private/legacy/filechunking.php 2 patches
Indentation   +152 added lines, -152 removed lines patch added patch discarded remove patch
@@ -30,156 +30,156 @@
 block discarded – undo
30 30
 
31 31
 
32 32
 class OC_FileChunking {
33
-	protected $info;
34
-	protected $cache;
35
-
36
-	/**
37
-	 * TTL of chunks
38
-	 *
39
-	 * @var int
40
-	 */
41
-	protected $ttl;
42
-
43
-	static public function decodeName($name) {
44
-		preg_match('/(?P<name>.*)-chunking-(?P<transferid>\d+)-(?P<chunkcount>\d+)-(?P<index>\d+)/', $name, $matches);
45
-		return $matches;
46
-	}
47
-
48
-	/**
49
-	 * @param string[] $info
50
-	 */
51
-	public function __construct($info) {
52
-		$this->info = $info;
53
-		$this->ttl = \OC::$server->getConfig()->getSystemValue('cache_chunk_gc_ttl', 86400);
54
-	}
55
-
56
-	public function getPrefix() {
57
-		$name = $this->info['name'];
58
-		$transferid = $this->info['transferid'];
59
-
60
-		return $name.'-chunking-'.$transferid.'-';
61
-	}
62
-
63
-	protected function getCache() {
64
-		if (!isset($this->cache)) {
65
-			$this->cache = new \OC\Cache\File();
66
-		}
67
-		return $this->cache;
68
-	}
69
-
70
-	/**
71
-	 * Stores the given $data under the given $key - the number of stored bytes is returned
72
-	 *
73
-	 * @param string $index
74
-	 * @param resource $data
75
-	 * @return int
76
-	 */
77
-	public function store($index, $data) {
78
-		$cache = $this->getCache();
79
-		$name = $this->getPrefix().$index;
80
-		$cache->set($name, $data, $this->ttl);
81
-
82
-		return $cache->size($name);
83
-	}
84
-
85
-	public function isComplete() {
86
-		$prefix = $this->getPrefix();
87
-		$cache = $this->getCache();
88
-		$chunkcount = (int)$this->info['chunkcount'];
89
-
90
-		for($i=($chunkcount-1); $i >= 0; $i--) {
91
-			if (!$cache->hasKey($prefix.$i)) {
92
-				return false;
93
-			}
94
-		}
95
-
96
-		return true;
97
-	}
98
-
99
-	/**
100
-	 * Assembles the chunks into the file specified by the path.
101
-	 * Chunks are deleted afterwards.
102
-	 *
103
-	 * @param resource $f target path
104
-	 *
105
-	 * @return integer assembled file size
106
-	 *
107
-	 * @throws \OC\InsufficientStorageException when file could not be fully
108
-	 * assembled due to lack of free space
109
-	 */
110
-	public function assemble($f) {
111
-		$cache = $this->getCache();
112
-		$prefix = $this->getPrefix();
113
-		$count = 0;
114
-		for ($i = 0; $i < $this->info['chunkcount']; $i++) {
115
-			$chunk = $cache->get($prefix.$i);
116
-			// remove after reading to directly save space
117
-			$cache->remove($prefix.$i);
118
-			$count += fwrite($f, $chunk);
119
-			// let php release the memory to work around memory exhausted error with php 5.6
120
-			$chunk = null;
121
-		}
122
-
123
-		return $count;
124
-	}
125
-
126
-	/**
127
-	 * Returns the size of the chunks already present
128
-	 * @return integer size in bytes
129
-	 */
130
-	public function getCurrentSize() {
131
-		$cache = $this->getCache();
132
-		$prefix = $this->getPrefix();
133
-		$total = 0;
134
-		for ($i = 0; $i < $this->info['chunkcount']; $i++) {
135
-			$total += $cache->size($prefix.$i);
136
-		}
137
-		return $total;
138
-	}
139
-
140
-	/**
141
-	 * Removes all chunks which belong to this transmission
142
-	 */
143
-	public function cleanup() {
144
-		$cache = $this->getCache();
145
-		$prefix = $this->getPrefix();
146
-		for($i=0; $i < $this->info['chunkcount']; $i++) {
147
-			$cache->remove($prefix.$i);
148
-		}
149
-	}
150
-
151
-	/**
152
-	 * Removes one specific chunk
153
-	 * @param string $index
154
-	 */
155
-	public function remove($index) {
156
-		$cache = $this->getCache();
157
-		$prefix = $this->getPrefix();
158
-		$cache->remove($prefix.$index);
159
-	}
160
-
161
-	/**
162
-	 * Assembles the chunks into the file specified by the path.
163
-	 * Also triggers the relevant hooks and proxies.
164
-	 *
165
-	 * @param \OC\Files\Storage\Storage $storage storage
166
-	 * @param string $path target path relative to the storage
167
-	 * @return bool true on success or false if file could not be created
168
-	 *
169
-	 * @throws \OC\ServerNotAvailableException
170
-	 */
171
-	public function file_assemble($storage, $path) {
172
-		// use file_put_contents as method because that best matches what this function does
173
-		if (\OC\Files\Filesystem::isValidPath($path)) {
174
-			$target = $storage->fopen($path, 'w');
175
-			if ($target) {
176
-				$count = $this->assemble($target);
177
-				fclose($target);
178
-				return $count > 0;
179
-			} else {
180
-				return false;
181
-			}
182
-		}
183
-		return false;
184
-	}
33
+    protected $info;
34
+    protected $cache;
35
+
36
+    /**
37
+     * TTL of chunks
38
+     *
39
+     * @var int
40
+     */
41
+    protected $ttl;
42
+
43
+    static public function decodeName($name) {
44
+        preg_match('/(?P<name>.*)-chunking-(?P<transferid>\d+)-(?P<chunkcount>\d+)-(?P<index>\d+)/', $name, $matches);
45
+        return $matches;
46
+    }
47
+
48
+    /**
49
+     * @param string[] $info
50
+     */
51
+    public function __construct($info) {
52
+        $this->info = $info;
53
+        $this->ttl = \OC::$server->getConfig()->getSystemValue('cache_chunk_gc_ttl', 86400);
54
+    }
55
+
56
+    public function getPrefix() {
57
+        $name = $this->info['name'];
58
+        $transferid = $this->info['transferid'];
59
+
60
+        return $name.'-chunking-'.$transferid.'-';
61
+    }
62
+
63
+    protected function getCache() {
64
+        if (!isset($this->cache)) {
65
+            $this->cache = new \OC\Cache\File();
66
+        }
67
+        return $this->cache;
68
+    }
69
+
70
+    /**
71
+     * Stores the given $data under the given $key - the number of stored bytes is returned
72
+     *
73
+     * @param string $index
74
+     * @param resource $data
75
+     * @return int
76
+     */
77
+    public function store($index, $data) {
78
+        $cache = $this->getCache();
79
+        $name = $this->getPrefix().$index;
80
+        $cache->set($name, $data, $this->ttl);
81
+
82
+        return $cache->size($name);
83
+    }
84
+
85
+    public function isComplete() {
86
+        $prefix = $this->getPrefix();
87
+        $cache = $this->getCache();
88
+        $chunkcount = (int)$this->info['chunkcount'];
89
+
90
+        for($i=($chunkcount-1); $i >= 0; $i--) {
91
+            if (!$cache->hasKey($prefix.$i)) {
92
+                return false;
93
+            }
94
+        }
95
+
96
+        return true;
97
+    }
98
+
99
+    /**
100
+     * Assembles the chunks into the file specified by the path.
101
+     * Chunks are deleted afterwards.
102
+     *
103
+     * @param resource $f target path
104
+     *
105
+     * @return integer assembled file size
106
+     *
107
+     * @throws \OC\InsufficientStorageException when file could not be fully
108
+     * assembled due to lack of free space
109
+     */
110
+    public function assemble($f) {
111
+        $cache = $this->getCache();
112
+        $prefix = $this->getPrefix();
113
+        $count = 0;
114
+        for ($i = 0; $i < $this->info['chunkcount']; $i++) {
115
+            $chunk = $cache->get($prefix.$i);
116
+            // remove after reading to directly save space
117
+            $cache->remove($prefix.$i);
118
+            $count += fwrite($f, $chunk);
119
+            // let php release the memory to work around memory exhausted error with php 5.6
120
+            $chunk = null;
121
+        }
122
+
123
+        return $count;
124
+    }
125
+
126
+    /**
127
+     * Returns the size of the chunks already present
128
+     * @return integer size in bytes
129
+     */
130
+    public function getCurrentSize() {
131
+        $cache = $this->getCache();
132
+        $prefix = $this->getPrefix();
133
+        $total = 0;
134
+        for ($i = 0; $i < $this->info['chunkcount']; $i++) {
135
+            $total += $cache->size($prefix.$i);
136
+        }
137
+        return $total;
138
+    }
139
+
140
+    /**
141
+     * Removes all chunks which belong to this transmission
142
+     */
143
+    public function cleanup() {
144
+        $cache = $this->getCache();
145
+        $prefix = $this->getPrefix();
146
+        for($i=0; $i < $this->info['chunkcount']; $i++) {
147
+            $cache->remove($prefix.$i);
148
+        }
149
+    }
150
+
151
+    /**
152
+     * Removes one specific chunk
153
+     * @param string $index
154
+     */
155
+    public function remove($index) {
156
+        $cache = $this->getCache();
157
+        $prefix = $this->getPrefix();
158
+        $cache->remove($prefix.$index);
159
+    }
160
+
161
+    /**
162
+     * Assembles the chunks into the file specified by the path.
163
+     * Also triggers the relevant hooks and proxies.
164
+     *
165
+     * @param \OC\Files\Storage\Storage $storage storage
166
+     * @param string $path target path relative to the storage
167
+     * @return bool true on success or false if file could not be created
168
+     *
169
+     * @throws \OC\ServerNotAvailableException
170
+     */
171
+    public function file_assemble($storage, $path) {
172
+        // use file_put_contents as method because that best matches what this function does
173
+        if (\OC\Files\Filesystem::isValidPath($path)) {
174
+            $target = $storage->fopen($path, 'w');
175
+            if ($target) {
176
+                $count = $this->assemble($target);
177
+                fclose($target);
178
+                return $count > 0;
179
+            } else {
180
+                return false;
181
+            }
182
+        }
183
+        return false;
184
+    }
185 185
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -85,9 +85,9 @@  discard block
 block discarded – undo
85 85
 	public function isComplete() {
86 86
 		$prefix = $this->getPrefix();
87 87
 		$cache = $this->getCache();
88
-		$chunkcount = (int)$this->info['chunkcount'];
88
+		$chunkcount = (int) $this->info['chunkcount'];
89 89
 
90
-		for($i=($chunkcount-1); $i >= 0; $i--) {
90
+		for ($i = ($chunkcount - 1); $i >= 0; $i--) {
91 91
 			if (!$cache->hasKey($prefix.$i)) {
92 92
 				return false;
93 93
 			}
@@ -143,7 +143,7 @@  discard block
 block discarded – undo
143 143
 	public function cleanup() {
144 144
 		$cache = $this->getCache();
145 145
 		$prefix = $this->getPrefix();
146
-		for($i=0; $i < $this->info['chunkcount']; $i++) {
146
+		for ($i = 0; $i < $this->info['chunkcount']; $i++) {
147 147
 			$cache->remove($prefix.$i);
148 148
 		}
149 149
 	}
Please login to merge, or discard this patch.
lib/private/legacy/hook.php 3 patches
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.
Indentation   +103 added lines, -103 removed lines patch added patch discarded remove patch
@@ -33,118 +33,118 @@
 block discarded – undo
33 33
  * @deprecated 18.0.0 use events and the \OCP\EventDispatcher\IEventDispatcher service
34 34
  */
35 35
 class OC_Hook {
36
-	public static $thrownExceptions = [];
36
+    public static $thrownExceptions = [];
37 37
 
38
-	static private $registered = array();
38
+    static private $registered = array();
39 39
 
40
-	/**
41
-	 * connects a function to a hook
42
-	 *
43
-	 * @param string $signalClass class name of emitter
44
-	 * @param string $signalName name of signal
45
-	 * @param string|object $slotClass class name of slot
46
-	 * @param string $slotName name of slot
47
-	 * @return bool
48
-	 *
49
-	 * This function makes it very easy to connect to use hooks.
50
-	 *
51
-	 * TODO: write example
52
-	 */
53
-	static public function connect($signalClass, $signalName, $slotClass, $slotName ) {
54
-		// If we're trying to connect to an emitting class that isn't
55
-		// yet registered, register it
56
-		if( !array_key_exists($signalClass, self::$registered )) {
57
-			self::$registered[$signalClass] = array();
58
-		}
59
-		// If we're trying to connect to an emitting method that isn't
60
-		// yet registered, register it with the emitting class
61
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
62
-			self::$registered[$signalClass][$signalName] = array();
63
-		}
40
+    /**
41
+     * connects a function to a hook
42
+     *
43
+     * @param string $signalClass class name of emitter
44
+     * @param string $signalName name of signal
45
+     * @param string|object $slotClass class name of slot
46
+     * @param string $slotName name of slot
47
+     * @return bool
48
+     *
49
+     * This function makes it very easy to connect to use hooks.
50
+     *
51
+     * TODO: write example
52
+     */
53
+    static public function connect($signalClass, $signalName, $slotClass, $slotName ) {
54
+        // If we're trying to connect to an emitting class that isn't
55
+        // yet registered, register it
56
+        if( !array_key_exists($signalClass, self::$registered )) {
57
+            self::$registered[$signalClass] = array();
58
+        }
59
+        // If we're trying to connect to an emitting method that isn't
60
+        // yet registered, register it with the emitting class
61
+        if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
62
+            self::$registered[$signalClass][$signalName] = array();
63
+        }
64 64
 
65
-		// don't connect hooks twice
66
-		foreach (self::$registered[$signalClass][$signalName] as $hook) {
67
-			if ($hook['class'] === $slotClass and $hook['name'] === $slotName) {
68
-				return false;
69
-			}
70
-		}
71
-		// Connect the hook handler to the requested emitter
72
-		self::$registered[$signalClass][$signalName][] = array(
73
-				"class" => $slotClass,
74
-				"name" => $slotName
75
-		);
65
+        // don't connect hooks twice
66
+        foreach (self::$registered[$signalClass][$signalName] as $hook) {
67
+            if ($hook['class'] === $slotClass and $hook['name'] === $slotName) {
68
+                return false;
69
+            }
70
+        }
71
+        // Connect the hook handler to the requested emitter
72
+        self::$registered[$signalClass][$signalName][] = array(
73
+                "class" => $slotClass,
74
+                "name" => $slotName
75
+        );
76 76
 
77
-		// No chance for failure ;-)
78
-		return true;
79
-	}
77
+        // No chance for failure ;-)
78
+        return true;
79
+    }
80 80
 
81
-	/**
82
-	 * emits a signal
83
-	 *
84
-	 * @param string $signalClass class name of emitter
85
-	 * @param string $signalName name of signal
86
-	 * @param mixed $params default: array() array with additional data
87
-	 * @return bool true if slots exists or false if not
88
-	 * @throws \OC\HintException
89
-	 * @throws \OC\ServerNotAvailableException Emits a signal. To get data from the slot use references!
90
-	 *
91
-	 * TODO: write example
92
-	 */
93
-	static public function emit($signalClass, $signalName, $params = []) {
81
+    /**
82
+     * emits a signal
83
+     *
84
+     * @param string $signalClass class name of emitter
85
+     * @param string $signalName name of signal
86
+     * @param mixed $params default: array() array with additional data
87
+     * @return bool true if slots exists or false if not
88
+     * @throws \OC\HintException
89
+     * @throws \OC\ServerNotAvailableException Emits a signal. To get data from the slot use references!
90
+     *
91
+     * TODO: write example
92
+     */
93
+    static public function emit($signalClass, $signalName, $params = []) {
94 94
 
95
-		// Return false if no hook handlers are listening to this
96
-		// emitting class
97
-		if( !array_key_exists($signalClass, self::$registered )) {
98
-			return false;
99
-		}
95
+        // Return false if no hook handlers are listening to this
96
+        // emitting class
97
+        if( !array_key_exists($signalClass, self::$registered )) {
98
+            return false;
99
+        }
100 100
 
101
-		// Return false if no hook handlers are listening to this
102
-		// emitting method
103
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
104
-			return false;
105
-		}
101
+        // Return false if no hook handlers are listening to this
102
+        // emitting method
103
+        if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
104
+            return false;
105
+        }
106 106
 
107
-		// Call all slots
108
-		foreach( self::$registered[$signalClass][$signalName] as $i ) {
109
-			try {
110
-				call_user_func( array( $i["class"], $i["name"] ), $params );
111
-			} catch (Exception $e){
112
-				self::$thrownExceptions[] = $e;
113
-				\OC::$server->getLogger()->logException($e);
114
-				if($e instanceof \OC\HintException) {
115
-					throw $e;
116
-				}
117
-				if($e instanceof \OC\ServerNotAvailableException) {
118
-					throw $e;
119
-				}
120
-			}
121
-		}
107
+        // Call all slots
108
+        foreach( self::$registered[$signalClass][$signalName] as $i ) {
109
+            try {
110
+                call_user_func( array( $i["class"], $i["name"] ), $params );
111
+            } catch (Exception $e){
112
+                self::$thrownExceptions[] = $e;
113
+                \OC::$server->getLogger()->logException($e);
114
+                if($e instanceof \OC\HintException) {
115
+                    throw $e;
116
+                }
117
+                if($e instanceof \OC\ServerNotAvailableException) {
118
+                    throw $e;
119
+                }
120
+            }
121
+        }
122 122
 
123
-		return true;
124
-	}
123
+        return true;
124
+    }
125 125
 
126
-	/**
127
-	 * clear hooks
128
-	 * @param string $signalClass
129
-	 * @param string $signalName
130
-	 */
131
-	static public function clear($signalClass='', $signalName='') {
132
-		if ($signalClass) {
133
-			if ($signalName) {
134
-				self::$registered[$signalClass][$signalName]=array();
135
-			}else{
136
-				self::$registered[$signalClass]=array();
137
-			}
138
-		}else{
139
-			self::$registered=array();
140
-		}
141
-	}
126
+    /**
127
+     * clear hooks
128
+     * @param string $signalClass
129
+     * @param string $signalName
130
+     */
131
+    static public function clear($signalClass='', $signalName='') {
132
+        if ($signalClass) {
133
+            if ($signalName) {
134
+                self::$registered[$signalClass][$signalName]=array();
135
+            }else{
136
+                self::$registered[$signalClass]=array();
137
+            }
138
+        }else{
139
+            self::$registered=array();
140
+        }
141
+    }
142 142
 
143
-	/**
144
-	 * DO NOT USE!
145
-	 * For unit tests ONLY!
146
-	 */
147
-	static public function getHooks() {
148
-		return self::$registered;
149
-	}
143
+    /**
144
+     * DO NOT USE!
145
+     * For unit tests ONLY!
146
+     */
147
+    static public function getHooks() {
148
+        return self::$registered;
149
+    }
150 150
 }
Please login to merge, or discard this patch.
Spacing   +16 added lines, -16 removed lines patch added patch discarded remove patch
@@ -50,15 +50,15 @@  discard block
 block discarded – undo
50 50
 	 *
51 51
 	 * TODO: write example
52 52
 	 */
53
-	static public function connect($signalClass, $signalName, $slotClass, $slotName ) {
53
+	static public function connect($signalClass, $signalName, $slotClass, $slotName) {
54 54
 		// If we're trying to connect to an emitting class that isn't
55 55
 		// yet registered, register it
56
-		if( !array_key_exists($signalClass, self::$registered )) {
56
+		if (!array_key_exists($signalClass, self::$registered)) {
57 57
 			self::$registered[$signalClass] = array();
58 58
 		}
59 59
 		// If we're trying to connect to an emitting method that isn't
60 60
 		// yet registered, register it with the emitting class
61
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
61
+		if (!array_key_exists($signalName, self::$registered[$signalClass])) {
62 62
 			self::$registered[$signalClass][$signalName] = array();
63 63
 		}
64 64
 
@@ -94,27 +94,27 @@  discard block
 block discarded – undo
94 94
 
95 95
 		// Return false if no hook handlers are listening to this
96 96
 		// emitting class
97
-		if( !array_key_exists($signalClass, self::$registered )) {
97
+		if (!array_key_exists($signalClass, self::$registered)) {
98 98
 			return false;
99 99
 		}
100 100
 
101 101
 		// Return false if no hook handlers are listening to this
102 102
 		// emitting method
103
-		if( !array_key_exists( $signalName, self::$registered[$signalClass] )) {
103
+		if (!array_key_exists($signalName, self::$registered[$signalClass])) {
104 104
 			return false;
105 105
 		}
106 106
 
107 107
 		// Call all slots
108
-		foreach( self::$registered[$signalClass][$signalName] as $i ) {
108
+		foreach (self::$registered[$signalClass][$signalName] as $i) {
109 109
 			try {
110
-				call_user_func( array( $i["class"], $i["name"] ), $params );
111
-			} catch (Exception $e){
110
+				call_user_func(array($i["class"], $i["name"]), $params);
111
+			} catch (Exception $e) {
112 112
 				self::$thrownExceptions[] = $e;
113 113
 				\OC::$server->getLogger()->logException($e);
114
-				if($e instanceof \OC\HintException) {
114
+				if ($e instanceof \OC\HintException) {
115 115
 					throw $e;
116 116
 				}
117
-				if($e instanceof \OC\ServerNotAvailableException) {
117
+				if ($e instanceof \OC\ServerNotAvailableException) {
118 118
 					throw $e;
119 119
 				}
120 120
 			}
@@ -128,15 +128,15 @@  discard block
 block discarded – undo
128 128
 	 * @param string $signalClass
129 129
 	 * @param string $signalName
130 130
 	 */
131
-	static public function clear($signalClass='', $signalName='') {
131
+	static public function clear($signalClass = '', $signalName = '') {
132 132
 		if ($signalClass) {
133 133
 			if ($signalName) {
134
-				self::$registered[$signalClass][$signalName]=array();
135
-			}else{
136
-				self::$registered[$signalClass]=array();
134
+				self::$registered[$signalClass][$signalName] = array();
135
+			} else {
136
+				self::$registered[$signalClass] = array();
137 137
 			}
138
-		}else{
139
-			self::$registered=array();
138
+		} else {
139
+			self::$registered = array();
140 140
 		}
141 141
 	}
142 142
 
Please login to merge, or discard this patch.