Passed
Push — master ( 6fbf8f...2b4b5d )
by Georg
35:25 queued 18:20
created
apps/files_external/lib/Settings/Section.php 1 patch
Indentation   +46 added lines, -46 removed lines patch added patch discarded remove patch
@@ -28,55 +28,55 @@
 block discarded – undo
28 28
 use OCP\Settings\IIconSection;
29 29
 
30 30
 class Section implements IIconSection {
31
-	/** @var IL10N */
32
-	private $l;
33
-	/** @var IURLGenerator */
34
-	private $url;
31
+    /** @var IL10N */
32
+    private $l;
33
+    /** @var IURLGenerator */
34
+    private $url;
35 35
 
36
-	/**
37
-	 * @param IURLGenerator $url
38
-	 * @param IL10N $l
39
-	 */
40
-	public function __construct(IURLGenerator $url, IL10N $l) {
41
-		$this->url = $url;
42
-		$this->l = $l;
43
-	}
36
+    /**
37
+     * @param IURLGenerator $url
38
+     * @param IL10N $l
39
+     */
40
+    public function __construct(IURLGenerator $url, IL10N $l) {
41
+        $this->url = $url;
42
+        $this->l = $l;
43
+    }
44 44
 
45
-	/**
46
-	 * returns the ID of the section. It is supposed to be a lower case string,
47
-	 * e.g. 'ldap'
48
-	 *
49
-	 * @returns string
50
-	 */
51
-	public function getID() {
52
-		return 'externalstorages';
53
-	}
45
+    /**
46
+     * returns the ID of the section. It is supposed to be a lower case string,
47
+     * e.g. 'ldap'
48
+     *
49
+     * @returns string
50
+     */
51
+    public function getID() {
52
+        return 'externalstorages';
53
+    }
54 54
 
55
-	/**
56
-	 * returns the translated name as it should be displayed, e.g. 'LDAP / AD
57
-	 * integration'. Use the L10N service to translate it.
58
-	 *
59
-	 * @return string
60
-	 */
61
-	public function getName() {
62
-		return $this->l->t('External storages');
63
-	}
55
+    /**
56
+     * returns the translated name as it should be displayed, e.g. 'LDAP / AD
57
+     * integration'. Use the L10N service to translate it.
58
+     *
59
+     * @return string
60
+     */
61
+    public function getName() {
62
+        return $this->l->t('External storages');
63
+    }
64 64
 
65
-	/**
66
-	 * @return int whether the form should be rather on the top or bottom of
67
-	 * the settings navigation. The sections are arranged in ascending order of
68
-	 * the priority values. It is required to return a value between 0 and 99.
69
-	 *
70
-	 * E.g.: 70
71
-	 */
72
-	public function getPriority() {
73
-		return 10;
74
-	}
65
+    /**
66
+     * @return int whether the form should be rather on the top or bottom of
67
+     * the settings navigation. The sections are arranged in ascending order of
68
+     * the priority values. It is required to return a value between 0 and 99.
69
+     *
70
+     * E.g.: 70
71
+     */
72
+    public function getPriority() {
73
+        return 10;
74
+    }
75 75
 
76
-	/**
77
-	 * {@inheritdoc}
78
-	 */
79
-	public function getIcon() {
80
-		return $this->url->imagePath('files_external', 'app-dark.svg');
81
-	}
76
+    /**
77
+     * {@inheritdoc}
78
+     */
79
+    public function getIcon() {
80
+        return $this->url->imagePath('files_external', 'app-dark.svg');
81
+    }
82 82
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/LegacyDependencyCheckPolyfill.php 1 patch
Indentation   +34 added lines, -34 removed lines patch added patch discarded remove patch
@@ -29,43 +29,43 @@
 block discarded – undo
29 29
  */
30 30
 trait LegacyDependencyCheckPolyfill {
31 31
 
32
-	/**
33
-	 * @return string
34
-	 */
35
-	abstract public function getStorageClass();
32
+    /**
33
+     * @return string
34
+     */
35
+    abstract public function getStorageClass();
36 36
 
37
-	/**
38
-	 * Check if object is valid for use
39
-	 *
40
-	 * @return MissingDependency[] Unsatisfied dependencies
41
-	 */
42
-	public function checkDependencies() {
43
-		$ret = [];
37
+    /**
38
+     * Check if object is valid for use
39
+     *
40
+     * @return MissingDependency[] Unsatisfied dependencies
41
+     */
42
+    public function checkDependencies() {
43
+        $ret = [];
44 44
 
45
-		$result = call_user_func([$this->getStorageClass(), 'checkDependencies']);
46
-		if ($result !== true) {
47
-			if (!is_array($result)) {
48
-				$result = [$result];
49
-			}
50
-			foreach ($result as $key => $value) {
51
-				if (!($value instanceof MissingDependency)) {
52
-					$module = null;
53
-					$message = null;
54
-					if (is_numeric($key)) {
55
-						$module = $value;
56
-					} else {
57
-						$module = $key;
58
-						$message = $value;
59
-					}
60
-					$value = new MissingDependency($module, $this);
61
-					$value->setMessage($message);
62
-				}
63
-				$ret[] = $value;
64
-			}
65
-		}
45
+        $result = call_user_func([$this->getStorageClass(), 'checkDependencies']);
46
+        if ($result !== true) {
47
+            if (!is_array($result)) {
48
+                $result = [$result];
49
+            }
50
+            foreach ($result as $key => $value) {
51
+                if (!($value instanceof MissingDependency)) {
52
+                    $module = null;
53
+                    $message = null;
54
+                    if (is_numeric($key)) {
55
+                        $module = $value;
56
+                    } else {
57
+                        $module = $key;
58
+                        $message = $value;
59
+                    }
60
+                    $value = new MissingDependency($module, $this);
61
+                    $value->setMessage($message);
62
+                }
63
+                $ret[] = $value;
64
+            }
65
+        }
66 66
 
67
-		return $ret;
68
-	}
67
+        return $ret;
68
+    }
69 69
 
70 70
 }
71 71
 
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/DefinitionParameter.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -140,7 +140,7 @@
 block discarded – undo
140 140
 	 * @return bool
141 141
 	 */
142 142
 	public function isFlagSet($flag) {
143
-		return (bool)($this->flags & $flag);
143
+		return (bool) ($this->flags & $flag);
144 144
 	}
145 145
 
146 146
 	/**
Please login to merge, or discard this patch.
Indentation   +187 added lines, -187 removed lines patch added patch discarded remove patch
@@ -27,191 +27,191 @@
 block discarded – undo
27 27
  * Parameter for an external storage definition
28 28
  */
29 29
 class DefinitionParameter implements \JsonSerializable {
30
-	// placeholder value for password fields, when the client updates a storage configuration
31
-	// placeholder values are ignored and the field is left unmodified
32
-	public const UNMODIFIED_PLACEHOLDER = '__unmodified__';
33
-
34
-	/** Value constants */
35
-	public const VALUE_TEXT = 0;
36
-	public const VALUE_BOOLEAN = 1;
37
-	public const VALUE_PASSWORD = 2;
38
-	public const VALUE_HIDDEN = 3;
39
-
40
-	/** Flag constants */
41
-	public const FLAG_NONE = 0;
42
-	public const FLAG_OPTIONAL = 1;
43
-	public const FLAG_USER_PROVIDED = 2;
44
-
45
-	/** @var string name of parameter */
46
-	private $name;
47
-
48
-	/** @var string human-readable parameter text */
49
-	private $text;
50
-
51
-	/** @var string human-readable parameter tooltip */
52
-	private $tooltip = '';
53
-
54
-	/** @var int value type, see self::VALUE_* constants */
55
-	private $type = self::VALUE_TEXT;
56
-
57
-	/** @var int flags, see self::FLAG_* constants */
58
-	private $flags = self::FLAG_NONE;
59
-
60
-	/**
61
-	 * @param string $name
62
-	 * @param string $text
63
-	 */
64
-	public function __construct($name, $text) {
65
-		$this->name = $name;
66
-		$this->text = $text;
67
-	}
68
-
69
-	/**
70
-	 * @return string
71
-	 */
72
-	public function getName() {
73
-		return $this->name;
74
-	}
75
-
76
-	/**
77
-	 * @return string
78
-	 */
79
-	public function getText() {
80
-		return $this->text;
81
-	}
82
-
83
-	/**
84
-	 * Get value type
85
-	 *
86
-	 * @return int
87
-	 */
88
-	public function getType() {
89
-		return $this->type;
90
-	}
91
-
92
-	/**
93
-	 * Set value type
94
-	 *
95
-	 * @param int $type
96
-	 * @return self
97
-	 */
98
-	public function setType($type) {
99
-		$this->type = $type;
100
-		return $this;
101
-	}
102
-
103
-	/**
104
-	 * @return string
105
-	 */
106
-	public function getTypeName() {
107
-		switch ($this->type) {
108
-			case self::VALUE_BOOLEAN:
109
-				return 'boolean';
110
-			case self::VALUE_TEXT:
111
-				return 'text';
112
-			case self::VALUE_PASSWORD:
113
-				return 'password';
114
-			default:
115
-				return 'unknown';
116
-		}
117
-	}
118
-
119
-	/**
120
-	 * @return int
121
-	 */
122
-	public function getFlags() {
123
-		return $this->flags;
124
-	}
125
-
126
-	/**
127
-	 * @param int $flags
128
-	 * @return self
129
-	 */
130
-	public function setFlags($flags) {
131
-		$this->flags = $flags;
132
-		return $this;
133
-	}
134
-
135
-	/**
136
-	 * @param int $flag
137
-	 * @return self
138
-	 */
139
-	public function setFlag($flag) {
140
-		$this->flags |= $flag;
141
-		return $this;
142
-	}
143
-
144
-	/**
145
-	 * @param int $flag
146
-	 * @return bool
147
-	 */
148
-	public function isFlagSet($flag) {
149
-		return (bool)($this->flags & $flag);
150
-	}
151
-
152
-	/**
153
-	 * @return string
154
-	 */
155
-	public function getTooltip(): string {
156
-		return $this->tooltip;
157
-	}
158
-
159
-	/**
160
-	 * @param string $tooltip
161
-	 * @return self
162
-	 */
163
-	public function setTooltip(string $tooltip) {
164
-		$this->tooltip = $tooltip;
165
-		return $this;
166
-	}
167
-
168
-	/**
169
-	 * Serialize into JSON for client-side JS
170
-	 *
171
-	 * @return string
172
-	 */
173
-	public function jsonSerialize() {
174
-		return [
175
-			'value' => $this->getText(),
176
-			'flags' => $this->getFlags(),
177
-			'type' => $this->getType(),
178
-			'tooltip' => $this->getTooltip(),
179
-		];
180
-	}
181
-
182
-	public function isOptional() {
183
-		return $this->isFlagSet(self::FLAG_OPTIONAL) || $this->isFlagSet(self::FLAG_USER_PROVIDED);
184
-	}
185
-
186
-	/**
187
-	 * Validate a parameter value against this
188
-	 * Convert type as necessary
189
-	 *
190
-	 * @param mixed $value Value to check
191
-	 * @return bool success
192
-	 */
193
-	public function validateValue(&$value) {
194
-		switch ($this->getType()) {
195
-			case self::VALUE_BOOLEAN:
196
-				if (!is_bool($value)) {
197
-					switch ($value) {
198
-						case 'true':
199
-							$value = true;
200
-							break;
201
-						case 'false':
202
-							$value = false;
203
-							break;
204
-						default:
205
-							return false;
206
-					}
207
-				}
208
-				break;
209
-			default:
210
-				if (!$value && !$this->isOptional()) {
211
-					return false;
212
-				}
213
-				break;
214
-		}
215
-		return true;
216
-	}
30
+    // placeholder value for password fields, when the client updates a storage configuration
31
+    // placeholder values are ignored and the field is left unmodified
32
+    public const UNMODIFIED_PLACEHOLDER = '__unmodified__';
33
+
34
+    /** Value constants */
35
+    public const VALUE_TEXT = 0;
36
+    public const VALUE_BOOLEAN = 1;
37
+    public const VALUE_PASSWORD = 2;
38
+    public const VALUE_HIDDEN = 3;
39
+
40
+    /** Flag constants */
41
+    public const FLAG_NONE = 0;
42
+    public const FLAG_OPTIONAL = 1;
43
+    public const FLAG_USER_PROVIDED = 2;
44
+
45
+    /** @var string name of parameter */
46
+    private $name;
47
+
48
+    /** @var string human-readable parameter text */
49
+    private $text;
50
+
51
+    /** @var string human-readable parameter tooltip */
52
+    private $tooltip = '';
53
+
54
+    /** @var int value type, see self::VALUE_* constants */
55
+    private $type = self::VALUE_TEXT;
56
+
57
+    /** @var int flags, see self::FLAG_* constants */
58
+    private $flags = self::FLAG_NONE;
59
+
60
+    /**
61
+     * @param string $name
62
+     * @param string $text
63
+     */
64
+    public function __construct($name, $text) {
65
+        $this->name = $name;
66
+        $this->text = $text;
67
+    }
68
+
69
+    /**
70
+     * @return string
71
+     */
72
+    public function getName() {
73
+        return $this->name;
74
+    }
75
+
76
+    /**
77
+     * @return string
78
+     */
79
+    public function getText() {
80
+        return $this->text;
81
+    }
82
+
83
+    /**
84
+     * Get value type
85
+     *
86
+     * @return int
87
+     */
88
+    public function getType() {
89
+        return $this->type;
90
+    }
91
+
92
+    /**
93
+     * Set value type
94
+     *
95
+     * @param int $type
96
+     * @return self
97
+     */
98
+    public function setType($type) {
99
+        $this->type = $type;
100
+        return $this;
101
+    }
102
+
103
+    /**
104
+     * @return string
105
+     */
106
+    public function getTypeName() {
107
+        switch ($this->type) {
108
+            case self::VALUE_BOOLEAN:
109
+                return 'boolean';
110
+            case self::VALUE_TEXT:
111
+                return 'text';
112
+            case self::VALUE_PASSWORD:
113
+                return 'password';
114
+            default:
115
+                return 'unknown';
116
+        }
117
+    }
118
+
119
+    /**
120
+     * @return int
121
+     */
122
+    public function getFlags() {
123
+        return $this->flags;
124
+    }
125
+
126
+    /**
127
+     * @param int $flags
128
+     * @return self
129
+     */
130
+    public function setFlags($flags) {
131
+        $this->flags = $flags;
132
+        return $this;
133
+    }
134
+
135
+    /**
136
+     * @param int $flag
137
+     * @return self
138
+     */
139
+    public function setFlag($flag) {
140
+        $this->flags |= $flag;
141
+        return $this;
142
+    }
143
+
144
+    /**
145
+     * @param int $flag
146
+     * @return bool
147
+     */
148
+    public function isFlagSet($flag) {
149
+        return (bool)($this->flags & $flag);
150
+    }
151
+
152
+    /**
153
+     * @return string
154
+     */
155
+    public function getTooltip(): string {
156
+        return $this->tooltip;
157
+    }
158
+
159
+    /**
160
+     * @param string $tooltip
161
+     * @return self
162
+     */
163
+    public function setTooltip(string $tooltip) {
164
+        $this->tooltip = $tooltip;
165
+        return $this;
166
+    }
167
+
168
+    /**
169
+     * Serialize into JSON for client-side JS
170
+     *
171
+     * @return string
172
+     */
173
+    public function jsonSerialize() {
174
+        return [
175
+            'value' => $this->getText(),
176
+            'flags' => $this->getFlags(),
177
+            'type' => $this->getType(),
178
+            'tooltip' => $this->getTooltip(),
179
+        ];
180
+    }
181
+
182
+    public function isOptional() {
183
+        return $this->isFlagSet(self::FLAG_OPTIONAL) || $this->isFlagSet(self::FLAG_USER_PROVIDED);
184
+    }
185
+
186
+    /**
187
+     * Validate a parameter value against this
188
+     * Convert type as necessary
189
+     *
190
+     * @param mixed $value Value to check
191
+     * @return bool success
192
+     */
193
+    public function validateValue(&$value) {
194
+        switch ($this->getType()) {
195
+            case self::VALUE_BOOLEAN:
196
+                if (!is_bool($value)) {
197
+                    switch ($value) {
198
+                        case 'true':
199
+                            $value = true;
200
+                            break;
201
+                        case 'false':
202
+                            $value = false;
203
+                            break;
204
+                        default:
205
+                            return false;
206
+                    }
207
+                }
208
+                break;
209
+            default:
210
+                if (!$value && !$this->isOptional()) {
211
+                    return false;
212
+                }
213
+                break;
214
+        }
215
+        return true;
216
+    }
217 217
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/Auth/Password/SessionCredentials.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -39,31 +39,31 @@
 block discarded – undo
39 39
  */
40 40
 class SessionCredentials extends AuthMechanism {
41 41
 
42
-	/** @var CredentialsStore */
43
-	private $credentialsStore;
42
+    /** @var CredentialsStore */
43
+    private $credentialsStore;
44 44
 
45
-	public function __construct(IL10N $l, CredentialsStore $credentialsStore) {
46
-		$this->credentialsStore = $credentialsStore;
45
+    public function __construct(IL10N $l, CredentialsStore $credentialsStore) {
46
+        $this->credentialsStore = $credentialsStore;
47 47
 
48
-		$this->setIdentifier('password::sessioncredentials')
49
-			->setScheme(self::SCHEME_PASSWORD)
50
-			->setText($l->t('Log-in credentials, save in session'))
51
-			->addParameters([]);
52
-	}
48
+        $this->setIdentifier('password::sessioncredentials')
49
+            ->setScheme(self::SCHEME_PASSWORD)
50
+            ->setText($l->t('Log-in credentials, save in session'))
51
+            ->addParameters([]);
52
+    }
53 53
 
54
-	public function manipulateStorageConfig(StorageConfig &$storage, IUser $user = null) {
55
-		try {
56
-			$credentials = $this->credentialsStore->getLoginCredentials();
57
-		} catch (CredentialsUnavailableException $e) {
58
-			throw new InsufficientDataForMeaningfulAnswerException('No session credentials saved');
59
-		}
54
+    public function manipulateStorageConfig(StorageConfig &$storage, IUser $user = null) {
55
+        try {
56
+            $credentials = $this->credentialsStore->getLoginCredentials();
57
+        } catch (CredentialsUnavailableException $e) {
58
+            throw new InsufficientDataForMeaningfulAnswerException('No session credentials saved');
59
+        }
60 60
 
61
-		$storage->setBackendOption('user', $credentials->getLoginName());
62
-		$storage->setBackendOption('password', $credentials->getPassword());
63
-	}
61
+        $storage->setBackendOption('user', $credentials->getLoginName());
62
+        $storage->setBackendOption('password', $credentials->getPassword());
63
+    }
64 64
 
65
-	public function wrapStorage(Storage $storage) {
66
-		return new SessionStorageWrapper(['storage' => $storage]);
67
-	}
65
+    public function wrapStorage(Storage $storage) {
66
+        return new SessionStorageWrapper(['storage' => $storage]);
67
+    }
68 68
 
69 69
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/Auth/IUserProvided.php 1 patch
Indentation   +6 added lines, -6 removed lines patch added patch discarded remove patch
@@ -28,10 +28,10 @@
 block discarded – undo
28 28
  * For auth mechanisms where the user needs to provide credentials
29 29
  */
30 30
 interface IUserProvided {
31
-	/**
32
-	 * @param IUser $user the user for which to save the user provided options
33
-	 * @param int $mountId the mount id to save the options for
34
-	 * @param array $options the user provided options
35
-	 */
36
-	public function saveBackendOptions(IUser $user, $mountId, array $options);
31
+    /**
32
+     * @param IUser $user the user for which to save the user provided options
33
+     * @param int $mountId the mount id to save the options for
34
+     * @param array $options the user provided options
35
+     */
36
+    public function saveBackendOptions(IUser $user, $mountId, array $options);
37 37
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/Config/IBackendProvider.php 1 patch
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -30,10 +30,10 @@
 block discarded – undo
30 30
  */
31 31
 interface IBackendProvider {
32 32
 
33
-	/**
34
-	 * @since 9.1.0
35
-	 * @return Backend[]
36
-	 */
37
-	public function getBackends();
33
+    /**
34
+     * @since 9.1.0
35
+     * @return Backend[]
36
+     */
37
+    public function getBackends();
38 38
 
39 39
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/Config/IAuthMechanismProvider.php 1 patch
Indentation   +5 added lines, -5 removed lines patch added patch discarded remove patch
@@ -30,10 +30,10 @@
 block discarded – undo
30 30
  */
31 31
 interface IAuthMechanismProvider {
32 32
 
33
-	/**
34
-	 * @since 9.1.0
35
-	 * @return AuthMechanism[]
36
-	 */
37
-	public function getAuthMechanisms();
33
+    /**
34
+     * @since 9.1.0
35
+     * @return AuthMechanism[]
36
+     */
37
+    public function getAuthMechanisms();
38 38
 
39 39
 }
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/SessionStorageWrapper.php 1 patch
Indentation   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -31,14 +31,14 @@
 block discarded – undo
31 31
  */
32 32
 class SessionStorageWrapper extends PermissionsMask {
33 33
 
34
-	/**
35
-	 * @param array $arguments ['storage' => $storage]
36
-	 */
37
-	public function __construct($arguments) {
38
-		// disable sharing permission
39
-		$arguments['mask'] = Constants::PERMISSION_ALL & ~Constants::PERMISSION_SHARE;
40
-		parent::__construct($arguments);
41
-	}
34
+    /**
35
+     * @param array $arguments ['storage' => $storage]
36
+     */
37
+    public function __construct($arguments) {
38
+        // disable sharing permission
39
+        $arguments['mask'] = Constants::PERMISSION_ALL & ~Constants::PERMISSION_SHARE;
40
+        parent::__construct($arguments);
41
+    }
42 42
 
43 43
 }
44 44
 
Please login to merge, or discard this patch.
apps/files_external/lib/Lib/Storage/StreamWrapper.php 2 patches
Indentation   +96 added lines, -96 removed lines patch added patch discarded remove patch
@@ -30,101 +30,101 @@
 block discarded – undo
30 30
 
31 31
 abstract class StreamWrapper extends \OC\Files\Storage\Common {
32 32
 
33
-	/**
34
-	 * @param string $path
35
-	 * @return string|null
36
-	 */
37
-	abstract public function constructUrl($path);
38
-
39
-	public function mkdir($path) {
40
-		return mkdir($this->constructUrl($path));
41
-	}
42
-
43
-	public function rmdir($path) {
44
-		if ($this->is_dir($path) && $this->isDeletable($path)) {
45
-			$dh = $this->opendir($path);
46
-			if (!is_resource($dh)) {
47
-				return false;
48
-			}
49
-			while (($file = readdir($dh)) !== false) {
50
-				if ($this->is_dir($path . '/' . $file)) {
51
-					$this->rmdir($path . '/' . $file);
52
-				} else {
53
-					$this->unlink($path . '/' . $file);
54
-				}
55
-			}
56
-			$url = $this->constructUrl($path);
57
-			$success = rmdir($url);
58
-			clearstatcache(false, $url);
59
-			return $success;
60
-		} else {
61
-			return false;
62
-		}
63
-	}
64
-
65
-	public function opendir($path) {
66
-		return opendir($this->constructUrl($path));
67
-	}
68
-
69
-	public function filetype($path) {
70
-		return @filetype($this->constructUrl($path));
71
-	}
72
-
73
-	public function file_exists($path) {
74
-		return file_exists($this->constructUrl($path));
75
-	}
76
-
77
-	public function unlink($path) {
78
-		$url = $this->constructUrl($path);
79
-		$success = unlink($url);
80
-		// normally unlink() is supposed to do this implicitly,
81
-		// but doing it anyway just to be sure
82
-		clearstatcache(false, $url);
83
-		return $success;
84
-	}
85
-
86
-	public function fopen($path, $mode) {
87
-		return fopen($this->constructUrl($path), $mode);
88
-	}
89
-
90
-	public function touch($path, $mtime = null) {
91
-		if ($this->file_exists($path)) {
92
-			if (is_null($mtime)) {
93
-				$fh = $this->fopen($path, 'a');
94
-				fwrite($fh, '');
95
-				fclose($fh);
96
-
97
-				return true;
98
-			} else {
99
-				return false; //not supported
100
-			}
101
-		} else {
102
-			$this->file_put_contents($path, '');
103
-			return true;
104
-		}
105
-	}
106
-
107
-	/**
108
-	 * @param string $path
109
-	 * @param string $target
110
-	 */
111
-	public function getFile($path, $target) {
112
-		return copy($this->constructUrl($path), $target);
113
-	}
114
-
115
-	/**
116
-	 * @param string $target
117
-	 */
118
-	public function uploadFile($path, $target) {
119
-		return copy($path, $this->constructUrl($target));
120
-	}
121
-
122
-	public function rename($path1, $path2) {
123
-		return rename($this->constructUrl($path1), $this->constructUrl($path2));
124
-	}
125
-
126
-	public function stat($path) {
127
-		return stat($this->constructUrl($path));
128
-	}
33
+    /**
34
+     * @param string $path
35
+     * @return string|null
36
+     */
37
+    abstract public function constructUrl($path);
38
+
39
+    public function mkdir($path) {
40
+        return mkdir($this->constructUrl($path));
41
+    }
42
+
43
+    public function rmdir($path) {
44
+        if ($this->is_dir($path) && $this->isDeletable($path)) {
45
+            $dh = $this->opendir($path);
46
+            if (!is_resource($dh)) {
47
+                return false;
48
+            }
49
+            while (($file = readdir($dh)) !== false) {
50
+                if ($this->is_dir($path . '/' . $file)) {
51
+                    $this->rmdir($path . '/' . $file);
52
+                } else {
53
+                    $this->unlink($path . '/' . $file);
54
+                }
55
+            }
56
+            $url = $this->constructUrl($path);
57
+            $success = rmdir($url);
58
+            clearstatcache(false, $url);
59
+            return $success;
60
+        } else {
61
+            return false;
62
+        }
63
+    }
64
+
65
+    public function opendir($path) {
66
+        return opendir($this->constructUrl($path));
67
+    }
68
+
69
+    public function filetype($path) {
70
+        return @filetype($this->constructUrl($path));
71
+    }
72
+
73
+    public function file_exists($path) {
74
+        return file_exists($this->constructUrl($path));
75
+    }
76
+
77
+    public function unlink($path) {
78
+        $url = $this->constructUrl($path);
79
+        $success = unlink($url);
80
+        // normally unlink() is supposed to do this implicitly,
81
+        // but doing it anyway just to be sure
82
+        clearstatcache(false, $url);
83
+        return $success;
84
+    }
85
+
86
+    public function fopen($path, $mode) {
87
+        return fopen($this->constructUrl($path), $mode);
88
+    }
89
+
90
+    public function touch($path, $mtime = null) {
91
+        if ($this->file_exists($path)) {
92
+            if (is_null($mtime)) {
93
+                $fh = $this->fopen($path, 'a');
94
+                fwrite($fh, '');
95
+                fclose($fh);
96
+
97
+                return true;
98
+            } else {
99
+                return false; //not supported
100
+            }
101
+        } else {
102
+            $this->file_put_contents($path, '');
103
+            return true;
104
+        }
105
+    }
106
+
107
+    /**
108
+     * @param string $path
109
+     * @param string $target
110
+     */
111
+    public function getFile($path, $target) {
112
+        return copy($this->constructUrl($path), $target);
113
+    }
114
+
115
+    /**
116
+     * @param string $target
117
+     */
118
+    public function uploadFile($path, $target) {
119
+        return copy($path, $this->constructUrl($target));
120
+    }
121
+
122
+    public function rename($path1, $path2) {
123
+        return rename($this->constructUrl($path1), $this->constructUrl($path2));
124
+    }
125
+
126
+    public function stat($path) {
127
+        return stat($this->constructUrl($path));
128
+    }
129 129
 
130 130
 }
Please login to merge, or discard this patch.
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -47,10 +47,10 @@
 block discarded – undo
47 47
 				return false;
48 48
 			}
49 49
 			while (($file = readdir($dh)) !== false) {
50
-				if ($this->is_dir($path . '/' . $file)) {
51
-					$this->rmdir($path . '/' . $file);
50
+				if ($this->is_dir($path.'/'.$file)) {
51
+					$this->rmdir($path.'/'.$file);
52 52
 				} else {
53
-					$this->unlink($path . '/' . $file);
53
+					$this->unlink($path.'/'.$file);
54 54
 				}
55 55
 			}
56 56
 			$url = $this->constructUrl($path);
Please login to merge, or discard this patch.