Passed
Push — master ( 4a4262...32927f )
by Roeland
24:24 queued 11:41
created
lib/public/AppFramework/OCS/OCSForbiddenException.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -32,14 +32,14 @@
 block discarded – undo
32 32
  * @since 9.1.0
33 33
  */
34 34
 class OCSForbiddenException extends OCSException {
35
-	/**
36
-	 * OCSForbiddenException constructor.
37
-	 *
38
-	 * @param string $message
39
-	 * @param Exception|null $previous
40
-	 * @since 9.1.0
41
-	 */
42
-	public function __construct($message = '', Exception $previous = null) {
43
-		parent::__construct($message, Http::STATUS_FORBIDDEN, $previous);
44
-	}
35
+    /**
36
+     * OCSForbiddenException constructor.
37
+     *
38
+     * @param string $message
39
+     * @param Exception|null $previous
40
+     * @since 9.1.0
41
+     */
42
+    public function __construct($message = '', Exception $previous = null) {
43
+        parent::__construct($message, Http::STATUS_FORBIDDEN, $previous);
44
+    }
45 45
 }
Please login to merge, or discard this patch.
lib/public/AppFramework/OCS/OCSBadRequestException.php 1 patch
Indentation   +10 added lines, -10 removed lines patch added patch discarded remove patch
@@ -32,14 +32,14 @@
 block discarded – undo
32 32
  * @since 9.1.0
33 33
  */
34 34
 class OCSBadRequestException extends OCSException {
35
-	/**
36
-	 * OCSBadRequestException constructor.
37
-	 *
38
-	 * @param string $message
39
-	 * @param Exception|null $previous
40
-	 * @since 9.1.0
41
-	 */
42
-	public function __construct($message = '', Exception $previous = null) {
43
-		parent::__construct($message, Http::STATUS_BAD_REQUEST, $previous);
44
-	}
35
+    /**
36
+     * OCSBadRequestException constructor.
37
+     *
38
+     * @param string $message
39
+     * @param Exception|null $previous
40
+     * @since 9.1.0
41
+     */
42
+    public function __construct($message = '', Exception $previous = null) {
43
+        parent::__construct($message, Http::STATUS_BAD_REQUEST, $previous);
44
+    }
45 45
 }
Please login to merge, or discard this patch.
lib/public/AppFramework/Http/DownloadResponse.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -43,7 +43,7 @@
 block discarded – undo
43 43
 		$this->filename = $filename;
44 44
 		$this->contentType = $contentType;
45 45
 
46
-		$this->addHeader('Content-Disposition', 'attachment; filename="' . $filename . '"');
46
+		$this->addHeader('Content-Disposition', 'attachment; filename="'.$filename.'"');
47 47
 		$this->addHeader('Content-Type', $contentType);
48 48
 	}
49 49
 }
Please login to merge, or discard this patch.
Indentation   +15 added lines, -15 removed lines patch added patch discarded remove patch
@@ -30,22 +30,22 @@
 block discarded – undo
30 30
  * @since 7.0.0
31 31
  */
32 32
 class DownloadResponse extends Response {
33
-	private $filename;
34
-	private $contentType;
33
+    private $filename;
34
+    private $contentType;
35 35
 
36
-	/**
37
-	 * Creates a response that prompts the user to download the file
38
-	 * @param string $filename the name that the downloaded file should have
39
-	 * @param string $contentType the mimetype that the downloaded file should have
40
-	 * @since 7.0.0
41
-	 */
42
-	public function __construct($filename, $contentType) {
43
-		parent::__construct();
36
+    /**
37
+     * Creates a response that prompts the user to download the file
38
+     * @param string $filename the name that the downloaded file should have
39
+     * @param string $contentType the mimetype that the downloaded file should have
40
+     * @since 7.0.0
41
+     */
42
+    public function __construct($filename, $contentType) {
43
+        parent::__construct();
44 44
 
45
-		$this->filename = $filename;
46
-		$this->contentType = $contentType;
45
+        $this->filename = $filename;
46
+        $this->contentType = $contentType;
47 47
 
48
-		$this->addHeader('Content-Disposition', 'attachment; filename="' . $filename . '"');
49
-		$this->addHeader('Content-Type', $contentType);
50
-	}
48
+        $this->addHeader('Content-Disposition', 'attachment; filename="' . $filename . '"');
49
+        $this->addHeader('Content-Type', $contentType);
50
+    }
51 51
 }
Please login to merge, or discard this patch.
lib/private/IntegrityCheck/Iterator/ExcludeFoldersByPathFilterIterator.php 2 patches
Spacing   +8 added lines, -8 removed lines patch added patch discarded remove patch
@@ -35,17 +35,17 @@
 block discarded – undo
35 35
 		}
36 36
 
37 37
 		$excludedFolders = [
38
-			rtrim($root . '/data', '/'),
39
-			rtrim($root . '/themes', '/'),
40
-			rtrim($root . '/config', '/'),
41
-			rtrim($root . '/apps', '/'),
42
-			rtrim($root . '/assets', '/'),
43
-			rtrim($root . '/lost+found', '/'),
38
+			rtrim($root.'/data', '/'),
39
+			rtrim($root.'/themes', '/'),
40
+			rtrim($root.'/config', '/'),
41
+			rtrim($root.'/apps', '/'),
42
+			rtrim($root.'/assets', '/'),
43
+			rtrim($root.'/lost+found', '/'),
44 44
 			// Ignore folders generated by updater since the updater is replaced
45 45
 			// after the integrity check is run.
46 46
 			// See https://github.com/owncloud/updater/issues/318#issuecomment-212497846
47
-			rtrim($root . '/updater', '/'),
48
-			rtrim($root . '/_oc_upgrade', '/'),
47
+			rtrim($root.'/updater', '/'),
48
+			rtrim($root.'/_oc_upgrade', '/'),
49 49
 		];
50 50
 		$customDataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', '');
51 51
 		if ($customDataDir !== '') {
Please login to merge, or discard this patch.
Indentation   +36 added lines, -36 removed lines patch added patch discarded remove patch
@@ -28,45 +28,45 @@
 block discarded – undo
28 28
 namespace OC\IntegrityCheck\Iterator;
29 29
 
30 30
 class ExcludeFoldersByPathFilterIterator extends \RecursiveFilterIterator {
31
-	private $excludedFolders;
31
+    private $excludedFolders;
32 32
 
33
-	public function __construct(\RecursiveIterator $iterator, $root = '') {
34
-		parent::__construct($iterator);
33
+    public function __construct(\RecursiveIterator $iterator, $root = '') {
34
+        parent::__construct($iterator);
35 35
 
36
-		$appFolders = \OC::$APPSROOTS;
37
-		foreach ($appFolders as $key => $appFolder) {
38
-			$appFolders[$key] = rtrim($appFolder['path'], '/');
39
-		}
36
+        $appFolders = \OC::$APPSROOTS;
37
+        foreach ($appFolders as $key => $appFolder) {
38
+            $appFolders[$key] = rtrim($appFolder['path'], '/');
39
+        }
40 40
 
41
-		$excludedFolders = [
42
-			rtrim($root . '/data', '/'),
43
-			rtrim($root . '/themes', '/'),
44
-			rtrim($root . '/config', '/'),
45
-			rtrim($root . '/apps', '/'),
46
-			rtrim($root . '/assets', '/'),
47
-			rtrim($root . '/lost+found', '/'),
48
-			// Ignore folders generated by updater since the updater is replaced
49
-			// after the integrity check is run.
50
-			// See https://github.com/owncloud/updater/issues/318#issuecomment-212497846
51
-			rtrim($root . '/updater', '/'),
52
-			rtrim($root . '/_oc_upgrade', '/'),
53
-		];
54
-		$customDataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', '');
55
-		if ($customDataDir !== '') {
56
-			$excludedFolders[] = rtrim($customDataDir, '/');
57
-		}
41
+        $excludedFolders = [
42
+            rtrim($root . '/data', '/'),
43
+            rtrim($root . '/themes', '/'),
44
+            rtrim($root . '/config', '/'),
45
+            rtrim($root . '/apps', '/'),
46
+            rtrim($root . '/assets', '/'),
47
+            rtrim($root . '/lost+found', '/'),
48
+            // Ignore folders generated by updater since the updater is replaced
49
+            // after the integrity check is run.
50
+            // See https://github.com/owncloud/updater/issues/318#issuecomment-212497846
51
+            rtrim($root . '/updater', '/'),
52
+            rtrim($root . '/_oc_upgrade', '/'),
53
+        ];
54
+        $customDataDir = \OC::$server->getConfig()->getSystemValue('datadirectory', '');
55
+        if ($customDataDir !== '') {
56
+            $excludedFolders[] = rtrim($customDataDir, '/');
57
+        }
58 58
 
59
-		$this->excludedFolders = array_merge($excludedFolders, $appFolders);
60
-	}
59
+        $this->excludedFolders = array_merge($excludedFolders, $appFolders);
60
+    }
61 61
 
62
-	/**
63
-	 * @return bool
64
-	 */
65
-	public function accept() {
66
-		return !\in_array(
67
-			$this->current()->getPathName(),
68
-			$this->excludedFolders,
69
-			true
70
-		);
71
-	}
62
+    /**
63
+     * @return bool
64
+     */
65
+    public function accept() {
66
+        return !\in_array(
67
+            $this->current()->getPathName(),
68
+            $this->excludedFolders,
69
+            true
70
+        );
71
+    }
72 72
 }
Please login to merge, or discard this patch.
lib/private/App/AppStore/Version/VersionParser.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -32,7 +32,7 @@
 block discarded – undo
32 32
 	 * @return bool
33 33
 	 */
34 34
 	private function isValidVersionString($versionString) {
35
-		return (bool)preg_match('/^[0-9.]+$/', $versionString);
35
+		return (bool) preg_match('/^[0-9.]+$/', $versionString);
36 36
 	}
37 37
 
38 38
 	/**
Please login to merge, or discard this patch.
Indentation   +48 added lines, -48 removed lines patch added patch discarded remove patch
@@ -30,56 +30,56 @@
 block discarded – undo
30 30
  * @package OC\App\AppStore
31 31
  */
32 32
 class VersionParser {
33
-	/**
34
-	 * @param string $versionString
35
-	 * @return bool
36
-	 */
37
-	private function isValidVersionString($versionString) {
38
-		return (bool)preg_match('/^[0-9.]+$/', $versionString);
39
-	}
33
+    /**
34
+     * @param string $versionString
35
+     * @return bool
36
+     */
37
+    private function isValidVersionString($versionString) {
38
+        return (bool)preg_match('/^[0-9.]+$/', $versionString);
39
+    }
40 40
 
41
-	/**
42
-	 * Returns the version for a version string
43
-	 *
44
-	 * @param string $versionSpec
45
-	 * @return Version
46
-	 * @throws \Exception If the version cannot be parsed
47
-	 */
48
-	public function getVersion($versionSpec) {
49
-		// * indicates that the version is compatible with all versions
50
-		if ($versionSpec === '*') {
51
-			return new Version('', '');
52
-		}
41
+    /**
42
+     * Returns the version for a version string
43
+     *
44
+     * @param string $versionSpec
45
+     * @return Version
46
+     * @throws \Exception If the version cannot be parsed
47
+     */
48
+    public function getVersion($versionSpec) {
49
+        // * indicates that the version is compatible with all versions
50
+        if ($versionSpec === '*') {
51
+            return new Version('', '');
52
+        }
53 53
 
54
-		// Count the amount of =, if it is one then it's either maximum or minimum
55
-		// version. If it is two then it is maximum and minimum.
56
-		$versionElements = explode(' ', $versionSpec);
57
-		$firstVersion = isset($versionElements[0]) ? $versionElements[0] : '';
58
-		$firstVersionNumber = substr($firstVersion, 2);
59
-		$secondVersion = isset($versionElements[1]) ? $versionElements[1] : '';
60
-		$secondVersionNumber = substr($secondVersion, 2);
54
+        // Count the amount of =, if it is one then it's either maximum or minimum
55
+        // version. If it is two then it is maximum and minimum.
56
+        $versionElements = explode(' ', $versionSpec);
57
+        $firstVersion = isset($versionElements[0]) ? $versionElements[0] : '';
58
+        $firstVersionNumber = substr($firstVersion, 2);
59
+        $secondVersion = isset($versionElements[1]) ? $versionElements[1] : '';
60
+        $secondVersionNumber = substr($secondVersion, 2);
61 61
 
62
-		switch (count($versionElements)) {
63
-			case 1:
64
-				if (!$this->isValidVersionString($firstVersionNumber)) {
65
-					break;
66
-				}
67
-				if (strpos($firstVersion, '>') === 0) {
68
-					return new Version($firstVersionNumber, '');
69
-				}
70
-				return new Version('', $firstVersionNumber);
71
-			case 2:
72
-				if (!$this->isValidVersionString($firstVersionNumber) || !$this->isValidVersionString($secondVersionNumber)) {
73
-					break;
74
-				}
75
-				return new Version($firstVersionNumber, $secondVersionNumber);
76
-		}
62
+        switch (count($versionElements)) {
63
+            case 1:
64
+                if (!$this->isValidVersionString($firstVersionNumber)) {
65
+                    break;
66
+                }
67
+                if (strpos($firstVersion, '>') === 0) {
68
+                    return new Version($firstVersionNumber, '');
69
+                }
70
+                return new Version('', $firstVersionNumber);
71
+            case 2:
72
+                if (!$this->isValidVersionString($firstVersionNumber) || !$this->isValidVersionString($secondVersionNumber)) {
73
+                    break;
74
+                }
75
+                return new Version($firstVersionNumber, $secondVersionNumber);
76
+        }
77 77
 
78
-		throw new \Exception(
79
-			sprintf(
80
-				'Version cannot be parsed: %s',
81
-				$versionSpec
82
-			)
83
-		);
84
-	}
78
+        throw new \Exception(
79
+            sprintf(
80
+                'Version cannot be parsed: %s',
81
+                $versionSpec
82
+            )
83
+        );
84
+    }
85 85
 }
Please login to merge, or discard this patch.
lib/private/App/AppStore/Bundles/Bundle.php 1 patch
Indentation   +28 added lines, -28 removed lines patch added patch discarded remove patch
@@ -24,36 +24,36 @@
 block discarded – undo
24 24
 use OCP\IL10N;
25 25
 
26 26
 abstract class Bundle {
27
-	/** @var IL10N */
28
-	protected $l10n;
27
+    /** @var IL10N */
28
+    protected $l10n;
29 29
 
30
-	/**
31
-	 * @param IL10N $l10n
32
-	 */
33
-	public function __construct(IL10N $l10n) {
34
-		$this->l10n = $l10n;
35
-	}
30
+    /**
31
+     * @param IL10N $l10n
32
+     */
33
+    public function __construct(IL10N $l10n) {
34
+        $this->l10n = $l10n;
35
+    }
36 36
 
37
-	/**
38
-	 * Get the identifier of the bundle
39
-	 *
40
-	 * @return string
41
-	 */
42
-	final public function getIdentifier() {
43
-		return substr(strrchr(get_class($this), '\\'), 1);
44
-	}
37
+    /**
38
+     * Get the identifier of the bundle
39
+     *
40
+     * @return string
41
+     */
42
+    final public function getIdentifier() {
43
+        return substr(strrchr(get_class($this), '\\'), 1);
44
+    }
45 45
 
46
-	/**
47
-	 * Get the name of the bundle
48
-	 *
49
-	 * @return string
50
-	 */
51
-	abstract public function getName();
46
+    /**
47
+     * Get the name of the bundle
48
+     *
49
+     * @return string
50
+     */
51
+    abstract public function getName();
52 52
 
53
-	/**
54
-	 * Get the list of app identifiers in the bundle
55
-	 *
56
-	 * @return array
57
-	 */
58
-	abstract public function getAppIdentifiers();
53
+    /**
54
+     * Get the list of app identifiers in the bundle
55
+     *
56
+     * @return array
57
+     */
58
+    abstract public function getAppIdentifiers();
59 59
 }
Please login to merge, or discard this patch.
lib/private/Share20/LegacyHooks.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -66,7 +66,7 @@
 block discarded – undo
66 66
 		/** @var IShare[] $deletedShares */
67 67
 		$deletedShares = $e->getArgument('deletedShares');
68 68
 
69
-		$formattedDeletedShares = array_map(function ($share) {
69
+		$formattedDeletedShares = array_map(function($share) {
70 70
 			return $this->formatHookParams($share);
71 71
 		}, $deletedShares);
72 72
 
Please login to merge, or discard this patch.
Indentation   +140 added lines, -140 removed lines patch added patch discarded remove patch
@@ -34,144 +34,144 @@
 block discarded – undo
34 34
 
35 35
 class LegacyHooks {
36 36
 
37
-	/** @var EventDispatcherInterface */
38
-	private $eventDispatcher;
39
-
40
-	/**
41
-	 * LegacyHooks constructor.
42
-	 *
43
-	 * @param EventDispatcherInterface $eventDispatcher
44
-	 */
45
-	public function __construct(EventDispatcherInterface $eventDispatcher) {
46
-		$this->eventDispatcher = $eventDispatcher;
47
-
48
-		$this->eventDispatcher->addListener('OCP\Share::preUnshare', [$this, 'preUnshare']);
49
-		$this->eventDispatcher->addListener('OCP\Share::postUnshare', [$this, 'postUnshare']);
50
-		$this->eventDispatcher->addListener('OCP\Share::postUnshareFromSelf', [$this, 'postUnshareFromSelf']);
51
-		$this->eventDispatcher->addListener('OCP\Share::preShare', [$this, 'preShare']);
52
-		$this->eventDispatcher->addListener('OCP\Share::postShare', [$this, 'postShare']);
53
-	}
54
-
55
-	/**
56
-	 * @param GenericEvent $e
57
-	 */
58
-	public function preUnshare(GenericEvent $e) {
59
-		/** @var IShare $share */
60
-		$share = $e->getSubject();
61
-
62
-		$formatted = $this->formatHookParams($share);
63
-		\OC_Hook::emit(Share::class, 'pre_unshare', $formatted);
64
-	}
65
-
66
-	/**
67
-	 * @param GenericEvent $e
68
-	 */
69
-	public function postUnshare(GenericEvent $e) {
70
-		/** @var IShare $share */
71
-		$share = $e->getSubject();
72
-
73
-		$formatted = $this->formatHookParams($share);
74
-
75
-		/** @var IShare[] $deletedShares */
76
-		$deletedShares = $e->getArgument('deletedShares');
77
-
78
-		$formattedDeletedShares = array_map(function ($share) {
79
-			return $this->formatHookParams($share);
80
-		}, $deletedShares);
81
-
82
-		$formatted['deletedShares'] = $formattedDeletedShares;
83
-
84
-		\OC_Hook::emit(Share::class, 'post_unshare', $formatted);
85
-	}
86
-
87
-	/**
88
-	 * @param GenericEvent $e
89
-	 */
90
-	public function postUnshareFromSelf(GenericEvent $e) {
91
-		/** @var IShare $share */
92
-		$share = $e->getSubject();
93
-
94
-		$formatted = $this->formatHookParams($share);
95
-		$formatted['itemTarget'] = $formatted['fileTarget'];
96
-		$formatted['unsharedItems'] = [$formatted];
97
-
98
-		\OC_Hook::emit(Share::class, 'post_unshareFromSelf', $formatted);
99
-	}
100
-
101
-	private function formatHookParams(IShare $share) {
102
-		// Prepare hook
103
-		$shareType = $share->getShareType();
104
-		$sharedWith = '';
105
-		if ($shareType === IShare::TYPE_USER ||
106
-			$shareType === IShare::TYPE_GROUP ||
107
-			$shareType === IShare::TYPE_REMOTE) {
108
-			$sharedWith = $share->getSharedWith();
109
-		}
110
-
111
-		$hookParams = [
112
-			'id' => $share->getId(),
113
-			'itemType' => $share->getNodeType(),
114
-			'itemSource' => $share->getNodeId(),
115
-			'shareType' => $shareType,
116
-			'shareWith' => $sharedWith,
117
-			'itemparent' => method_exists($share, 'getParent') ? $share->getParent() : '',
118
-			'uidOwner' => $share->getSharedBy(),
119
-			'fileSource' => $share->getNodeId(),
120
-			'fileTarget' => $share->getTarget()
121
-		];
122
-		return $hookParams;
123
-	}
124
-
125
-	public function preShare(GenericEvent $e) {
126
-		/** @var IShare $share */
127
-		$share = $e->getSubject();
128
-
129
-		// Pre share hook
130
-		$run = true;
131
-		$error = '';
132
-		$preHookData = [
133
-			'itemType' => $share->getNode() instanceof File ? 'file' : 'folder',
134
-			'itemSource' => $share->getNode()->getId(),
135
-			'shareType' => $share->getShareType(),
136
-			'uidOwner' => $share->getSharedBy(),
137
-			'permissions' => $share->getPermissions(),
138
-			'fileSource' => $share->getNode()->getId(),
139
-			'expiration' => $share->getExpirationDate(),
140
-			'token' => $share->getToken(),
141
-			'itemTarget' => $share->getTarget(),
142
-			'shareWith' => $share->getSharedWith(),
143
-			'run' => &$run,
144
-			'error' => &$error,
145
-		];
146
-		\OC_Hook::emit(Share::class, 'pre_shared', $preHookData);
147
-
148
-		if ($run === false) {
149
-			$e->setArgument('error', $error);
150
-			$e->stopPropagation();
151
-		}
152
-
153
-		return $e;
154
-	}
155
-
156
-	public function postShare(GenericEvent $e) {
157
-		/** @var IShare $share */
158
-		$share = $e->getSubject();
159
-
160
-		$postHookData = [
161
-			'itemType' => $share->getNode() instanceof File ? 'file' : 'folder',
162
-			'itemSource' => $share->getNode()->getId(),
163
-			'shareType' => $share->getShareType(),
164
-			'uidOwner' => $share->getSharedBy(),
165
-			'permissions' => $share->getPermissions(),
166
-			'fileSource' => $share->getNode()->getId(),
167
-			'expiration' => $share->getExpirationDate(),
168
-			'token' => $share->getToken(),
169
-			'id' => $share->getId(),
170
-			'shareWith' => $share->getSharedWith(),
171
-			'itemTarget' => $share->getTarget(),
172
-			'fileTarget' => $share->getTarget(),
173
-		];
174
-
175
-		\OC_Hook::emit(Share::class, 'post_shared', $postHookData);
176
-	}
37
+    /** @var EventDispatcherInterface */
38
+    private $eventDispatcher;
39
+
40
+    /**
41
+     * LegacyHooks constructor.
42
+     *
43
+     * @param EventDispatcherInterface $eventDispatcher
44
+     */
45
+    public function __construct(EventDispatcherInterface $eventDispatcher) {
46
+        $this->eventDispatcher = $eventDispatcher;
47
+
48
+        $this->eventDispatcher->addListener('OCP\Share::preUnshare', [$this, 'preUnshare']);
49
+        $this->eventDispatcher->addListener('OCP\Share::postUnshare', [$this, 'postUnshare']);
50
+        $this->eventDispatcher->addListener('OCP\Share::postUnshareFromSelf', [$this, 'postUnshareFromSelf']);
51
+        $this->eventDispatcher->addListener('OCP\Share::preShare', [$this, 'preShare']);
52
+        $this->eventDispatcher->addListener('OCP\Share::postShare', [$this, 'postShare']);
53
+    }
54
+
55
+    /**
56
+     * @param GenericEvent $e
57
+     */
58
+    public function preUnshare(GenericEvent $e) {
59
+        /** @var IShare $share */
60
+        $share = $e->getSubject();
61
+
62
+        $formatted = $this->formatHookParams($share);
63
+        \OC_Hook::emit(Share::class, 'pre_unshare', $formatted);
64
+    }
65
+
66
+    /**
67
+     * @param GenericEvent $e
68
+     */
69
+    public function postUnshare(GenericEvent $e) {
70
+        /** @var IShare $share */
71
+        $share = $e->getSubject();
72
+
73
+        $formatted = $this->formatHookParams($share);
74
+
75
+        /** @var IShare[] $deletedShares */
76
+        $deletedShares = $e->getArgument('deletedShares');
77
+
78
+        $formattedDeletedShares = array_map(function ($share) {
79
+            return $this->formatHookParams($share);
80
+        }, $deletedShares);
81
+
82
+        $formatted['deletedShares'] = $formattedDeletedShares;
83
+
84
+        \OC_Hook::emit(Share::class, 'post_unshare', $formatted);
85
+    }
86
+
87
+    /**
88
+     * @param GenericEvent $e
89
+     */
90
+    public function postUnshareFromSelf(GenericEvent $e) {
91
+        /** @var IShare $share */
92
+        $share = $e->getSubject();
93
+
94
+        $formatted = $this->formatHookParams($share);
95
+        $formatted['itemTarget'] = $formatted['fileTarget'];
96
+        $formatted['unsharedItems'] = [$formatted];
97
+
98
+        \OC_Hook::emit(Share::class, 'post_unshareFromSelf', $formatted);
99
+    }
100
+
101
+    private function formatHookParams(IShare $share) {
102
+        // Prepare hook
103
+        $shareType = $share->getShareType();
104
+        $sharedWith = '';
105
+        if ($shareType === IShare::TYPE_USER ||
106
+            $shareType === IShare::TYPE_GROUP ||
107
+            $shareType === IShare::TYPE_REMOTE) {
108
+            $sharedWith = $share->getSharedWith();
109
+        }
110
+
111
+        $hookParams = [
112
+            'id' => $share->getId(),
113
+            'itemType' => $share->getNodeType(),
114
+            'itemSource' => $share->getNodeId(),
115
+            'shareType' => $shareType,
116
+            'shareWith' => $sharedWith,
117
+            'itemparent' => method_exists($share, 'getParent') ? $share->getParent() : '',
118
+            'uidOwner' => $share->getSharedBy(),
119
+            'fileSource' => $share->getNodeId(),
120
+            'fileTarget' => $share->getTarget()
121
+        ];
122
+        return $hookParams;
123
+    }
124
+
125
+    public function preShare(GenericEvent $e) {
126
+        /** @var IShare $share */
127
+        $share = $e->getSubject();
128
+
129
+        // Pre share hook
130
+        $run = true;
131
+        $error = '';
132
+        $preHookData = [
133
+            'itemType' => $share->getNode() instanceof File ? 'file' : 'folder',
134
+            'itemSource' => $share->getNode()->getId(),
135
+            'shareType' => $share->getShareType(),
136
+            'uidOwner' => $share->getSharedBy(),
137
+            'permissions' => $share->getPermissions(),
138
+            'fileSource' => $share->getNode()->getId(),
139
+            'expiration' => $share->getExpirationDate(),
140
+            'token' => $share->getToken(),
141
+            'itemTarget' => $share->getTarget(),
142
+            'shareWith' => $share->getSharedWith(),
143
+            'run' => &$run,
144
+            'error' => &$error,
145
+        ];
146
+        \OC_Hook::emit(Share::class, 'pre_shared', $preHookData);
147
+
148
+        if ($run === false) {
149
+            $e->setArgument('error', $error);
150
+            $e->stopPropagation();
151
+        }
152
+
153
+        return $e;
154
+    }
155
+
156
+    public function postShare(GenericEvent $e) {
157
+        /** @var IShare $share */
158
+        $share = $e->getSubject();
159
+
160
+        $postHookData = [
161
+            'itemType' => $share->getNode() instanceof File ? 'file' : 'folder',
162
+            'itemSource' => $share->getNode()->getId(),
163
+            'shareType' => $share->getShareType(),
164
+            'uidOwner' => $share->getSharedBy(),
165
+            'permissions' => $share->getPermissions(),
166
+            'fileSource' => $share->getNode()->getId(),
167
+            'expiration' => $share->getExpirationDate(),
168
+            'token' => $share->getToken(),
169
+            'id' => $share->getId(),
170
+            'shareWith' => $share->getSharedWith(),
171
+            'itemTarget' => $share->getTarget(),
172
+            'fileTarget' => $share->getTarget(),
173
+        ];
174
+
175
+        \OC_Hook::emit(Share::class, 'post_shared', $postHookData);
176
+    }
177 177
 }
Please login to merge, or discard this patch.
lib/private/Share20/Share.php 2 patches
Spacing   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -86,7 +86,7 @@  discard block
 block discarded – undo
86 86
 	 */
87 87
 	public function setId($id) {
88 88
 		if (is_int($id)) {
89
-			$id = (string)$id;
89
+			$id = (string) $id;
90 90
 		}
91 91
 
92 92
 		if (!is_string($id)) {
@@ -115,7 +115,7 @@  discard block
 block discarded – undo
115 115
 		if ($this->providerId === null || $this->id === null) {
116 116
 			throw new \UnexpectedValueException;
117 117
 		}
118
-		return $this->providerId . ':' . $this->id;
118
+		return $this->providerId.':'.$this->id;
119 119
 	}
120 120
 
121 121
 	/**
@@ -163,7 +163,7 @@  discard block
 block discarded – undo
163 163
 
164 164
 			$nodes = $userFolder->getById($this->fileId);
165 165
 			if (empty($nodes)) {
166
-				throw new NotFoundException('Node for share not found, fileid: ' . $this->fileId);
166
+				throw new NotFoundException('Node for share not found, fileid: '.$this->fileId);
167 167
 			}
168 168
 
169 169
 			$this->node = $nodes[0];
Please login to merge, or discard this patch.
Indentation   +534 added lines, -534 removed lines patch added patch discarded remove patch
@@ -40,538 +40,538 @@
 block discarded – undo
40 40
 
41 41
 class Share implements \OCP\Share\IShare {
42 42
 
43
-	/** @var string */
44
-	private $id;
45
-	/** @var string */
46
-	private $providerId;
47
-	/** @var Node */
48
-	private $node;
49
-	/** @var int */
50
-	private $fileId;
51
-	/** @var string */
52
-	private $nodeType;
53
-	/** @var int */
54
-	private $shareType;
55
-	/** @var string */
56
-	private $sharedWith;
57
-	/** @var string */
58
-	private $sharedWithDisplayName;
59
-	/** @var string */
60
-	private $sharedWithAvatar;
61
-	/** @var string */
62
-	private $sharedBy;
63
-	/** @var string */
64
-	private $shareOwner;
65
-	/** @var int */
66
-	private $permissions;
67
-	/** @var int */
68
-	private $status;
69
-	/** @var string */
70
-	private $note = '';
71
-	/** @var \DateTime */
72
-	private $expireDate;
73
-	/** @var string */
74
-	private $password;
75
-	/** @var bool */
76
-	private $sendPasswordByTalk = false;
77
-	/** @var string */
78
-	private $token;
79
-	/** @var int */
80
-	private $parent;
81
-	/** @var string */
82
-	private $target;
83
-	/** @var \DateTime */
84
-	private $shareTime;
85
-	/** @var bool */
86
-	private $mailSend;
87
-	/** @var string */
88
-	private $label = '';
89
-
90
-	/** @var IRootFolder */
91
-	private $rootFolder;
92
-
93
-	/** @var IUserManager */
94
-	private $userManager;
95
-
96
-	/** @var ICacheEntry|null */
97
-	private $nodeCacheEntry;
98
-
99
-	/** @var bool */
100
-	private $hideDownload = false;
101
-
102
-	public function __construct(IRootFolder $rootFolder, IUserManager $userManager) {
103
-		$this->rootFolder = $rootFolder;
104
-		$this->userManager = $userManager;
105
-	}
106
-
107
-	/**
108
-	 * @inheritdoc
109
-	 */
110
-	public function setId($id) {
111
-		if (is_int($id)) {
112
-			$id = (string)$id;
113
-		}
114
-
115
-		if (!is_string($id)) {
116
-			throw new \InvalidArgumentException('String expected.');
117
-		}
118
-
119
-		if ($this->id !== null) {
120
-			throw new IllegalIDChangeException('Not allowed to assign a new internal id to a share');
121
-		}
122
-
123
-		$this->id = trim($id);
124
-		return $this;
125
-	}
126
-
127
-	/**
128
-	 * @inheritdoc
129
-	 */
130
-	public function getId() {
131
-		return $this->id;
132
-	}
133
-
134
-	/**
135
-	 * @inheritdoc
136
-	 */
137
-	public function getFullId() {
138
-		if ($this->providerId === null || $this->id === null) {
139
-			throw new \UnexpectedValueException;
140
-		}
141
-		return $this->providerId . ':' . $this->id;
142
-	}
143
-
144
-	/**
145
-	 * @inheritdoc
146
-	 */
147
-	public function setProviderId($id) {
148
-		if (!is_string($id)) {
149
-			throw new \InvalidArgumentException('String expected.');
150
-		}
151
-
152
-		if ($this->providerId !== null) {
153
-			throw new IllegalIDChangeException('Not allowed to assign a new provider id to a share');
154
-		}
155
-
156
-		$this->providerId = trim($id);
157
-		return $this;
158
-	}
159
-
160
-	/**
161
-	 * @inheritdoc
162
-	 */
163
-	public function setNode(Node $node) {
164
-		$this->fileId = null;
165
-		$this->nodeType = null;
166
-		$this->node = $node;
167
-		return $this;
168
-	}
169
-
170
-	/**
171
-	 * @inheritdoc
172
-	 */
173
-	public function getNode() {
174
-		if ($this->node === null) {
175
-			if ($this->shareOwner === null || $this->fileId === null) {
176
-				throw new NotFoundException();
177
-			}
178
-
179
-			// for federated shares the owner can be a remote user, in this
180
-			// case we use the initiator
181
-			if ($this->userManager->userExists($this->shareOwner)) {
182
-				$userFolder = $this->rootFolder->getUserFolder($this->shareOwner);
183
-			} else {
184
-				$userFolder = $this->rootFolder->getUserFolder($this->sharedBy);
185
-			}
186
-
187
-			$nodes = $userFolder->getById($this->fileId);
188
-			if (empty($nodes)) {
189
-				throw new NotFoundException('Node for share not found, fileid: ' . $this->fileId);
190
-			}
191
-
192
-			$this->node = $nodes[0];
193
-		}
194
-
195
-		return $this->node;
196
-	}
197
-
198
-	/**
199
-	 * @inheritdoc
200
-	 */
201
-	public function setNodeId($fileId) {
202
-		$this->node = null;
203
-		$this->fileId = $fileId;
204
-		return $this;
205
-	}
206
-
207
-	/**
208
-	 * @inheritdoc
209
-	 */
210
-	public function getNodeId() {
211
-		if ($this->fileId === null) {
212
-			$this->fileId = $this->getNode()->getId();
213
-		}
214
-
215
-		return $this->fileId;
216
-	}
217
-
218
-	/**
219
-	 * @inheritdoc
220
-	 */
221
-	public function setNodeType($type) {
222
-		if ($type !== 'file' && $type !== 'folder') {
223
-			throw new \InvalidArgumentException();
224
-		}
225
-
226
-		$this->nodeType = $type;
227
-		return $this;
228
-	}
229
-
230
-	/**
231
-	 * @inheritdoc
232
-	 */
233
-	public function getNodeType() {
234
-		if ($this->nodeType === null) {
235
-			$node = $this->getNode();
236
-			$this->nodeType = $node instanceof File ? 'file' : 'folder';
237
-		}
238
-
239
-		return $this->nodeType;
240
-	}
241
-
242
-	/**
243
-	 * @inheritdoc
244
-	 */
245
-	public function setShareType($shareType) {
246
-		$this->shareType = $shareType;
247
-		return $this;
248
-	}
249
-
250
-	/**
251
-	 * @inheritdoc
252
-	 */
253
-	public function getShareType() {
254
-		return $this->shareType;
255
-	}
256
-
257
-	/**
258
-	 * @inheritdoc
259
-	 */
260
-	public function setSharedWith($sharedWith) {
261
-		if (!is_string($sharedWith)) {
262
-			throw new \InvalidArgumentException();
263
-		}
264
-		$this->sharedWith = $sharedWith;
265
-		return $this;
266
-	}
267
-
268
-	/**
269
-	 * @inheritdoc
270
-	 */
271
-	public function getSharedWith() {
272
-		return $this->sharedWith;
273
-	}
274
-
275
-	/**
276
-	 * @inheritdoc
277
-	 */
278
-	public function setSharedWithDisplayName($displayName) {
279
-		if (!is_string($displayName)) {
280
-			throw new \InvalidArgumentException();
281
-		}
282
-		$this->sharedWithDisplayName = $displayName;
283
-		return $this;
284
-	}
285
-
286
-	/**
287
-	 * @inheritdoc
288
-	 */
289
-	public function getSharedWithDisplayName() {
290
-		return $this->sharedWithDisplayName;
291
-	}
292
-
293
-	/**
294
-	 * @inheritdoc
295
-	 */
296
-	public function setSharedWithAvatar($src) {
297
-		if (!is_string($src)) {
298
-			throw new \InvalidArgumentException();
299
-		}
300
-		$this->sharedWithAvatar = $src;
301
-		return $this;
302
-	}
303
-
304
-	/**
305
-	 * @inheritdoc
306
-	 */
307
-	public function getSharedWithAvatar() {
308
-		return $this->sharedWithAvatar;
309
-	}
310
-
311
-	/**
312
-	 * @inheritdoc
313
-	 */
314
-	public function setPermissions($permissions) {
315
-		//TODO checkes
316
-
317
-		$this->permissions = $permissions;
318
-		return $this;
319
-	}
320
-
321
-	/**
322
-	 * @inheritdoc
323
-	 */
324
-	public function getPermissions() {
325
-		return $this->permissions;
326
-	}
327
-
328
-	/**
329
-	 * @inheritdoc
330
-	 */
331
-	public function setStatus(int $status): IShare {
332
-		$this->status = $status;
333
-		return $this;
334
-	}
335
-
336
-	/**
337
-	 * @inheritdoc
338
-	 */
339
-	public function getStatus(): int {
340
-		return $this->status;
341
-	}
342
-
343
-	/**
344
-	 * @inheritdoc
345
-	 */
346
-	public function setNote($note) {
347
-		$this->note = $note;
348
-		return $this;
349
-	}
350
-
351
-	/**
352
-	 * @inheritdoc
353
-	 */
354
-	public function getNote() {
355
-		if (is_string($this->note)) {
356
-			return $this->note;
357
-		}
358
-		return '';
359
-	}
360
-
361
-	/**
362
-	 * @inheritdoc
363
-	 */
364
-	public function setLabel($label) {
365
-		$this->label = $label;
366
-		return $this;
367
-	}
368
-
369
-	/**
370
-	 * @inheritdoc
371
-	 */
372
-	public function getLabel() {
373
-		return $this->label;
374
-	}
375
-
376
-	/**
377
-	 * @inheritdoc
378
-	 */
379
-	public function setExpirationDate($expireDate) {
380
-		//TODO checks
381
-
382
-		$this->expireDate = $expireDate;
383
-		return $this;
384
-	}
385
-
386
-	/**
387
-	 * @inheritdoc
388
-	 */
389
-	public function getExpirationDate() {
390
-		return $this->expireDate;
391
-	}
392
-
393
-	/**
394
-	 * @inheritdoc
395
-	 */
396
-	public function isExpired() {
397
-		return $this->getExpirationDate() !== null &&
398
-			$this->getExpirationDate() <= new \DateTime();
399
-	}
400
-
401
-	/**
402
-	 * @inheritdoc
403
-	 */
404
-	public function setSharedBy($sharedBy) {
405
-		if (!is_string($sharedBy)) {
406
-			throw new \InvalidArgumentException();
407
-		}
408
-		//TODO checks
409
-		$this->sharedBy = $sharedBy;
410
-
411
-		return $this;
412
-	}
413
-
414
-	/**
415
-	 * @inheritdoc
416
-	 */
417
-	public function getSharedBy() {
418
-		//TODO check if set
419
-		return $this->sharedBy;
420
-	}
421
-
422
-	/**
423
-	 * @inheritdoc
424
-	 */
425
-	public function setShareOwner($shareOwner) {
426
-		if (!is_string($shareOwner)) {
427
-			throw new \InvalidArgumentException();
428
-		}
429
-		//TODO checks
430
-
431
-		$this->shareOwner = $shareOwner;
432
-		return $this;
433
-	}
434
-
435
-	/**
436
-	 * @inheritdoc
437
-	 */
438
-	public function getShareOwner() {
439
-		//TODO check if set
440
-		return $this->shareOwner;
441
-	}
442
-
443
-	/**
444
-	 * @inheritdoc
445
-	 */
446
-	public function setPassword($password) {
447
-		$this->password = $password;
448
-		return $this;
449
-	}
450
-
451
-	/**
452
-	 * @inheritdoc
453
-	 */
454
-	public function getPassword() {
455
-		return $this->password;
456
-	}
457
-
458
-	/**
459
-	 * @inheritdoc
460
-	 */
461
-	public function setSendPasswordByTalk(bool $sendPasswordByTalk) {
462
-		$this->sendPasswordByTalk = $sendPasswordByTalk;
463
-		return $this;
464
-	}
465
-
466
-	/**
467
-	 * @inheritdoc
468
-	 */
469
-	public function getSendPasswordByTalk(): bool {
470
-		return $this->sendPasswordByTalk;
471
-	}
472
-
473
-	/**
474
-	 * @inheritdoc
475
-	 */
476
-	public function setToken($token) {
477
-		$this->token = $token;
478
-		return $this;
479
-	}
480
-
481
-	/**
482
-	 * @inheritdoc
483
-	 */
484
-	public function getToken() {
485
-		return $this->token;
486
-	}
487
-
488
-	/**
489
-	 * Set the parent of this share
490
-	 *
491
-	 * @param int parent
492
-	 * @return \OCP\Share\IShare
493
-	 * @deprecated The new shares do not have parents. This is just here for legacy reasons.
494
-	 */
495
-	public function setParent($parent) {
496
-		$this->parent = $parent;
497
-		return $this;
498
-	}
499
-
500
-	/**
501
-	 * Get the parent of this share.
502
-	 *
503
-	 * @return int
504
-	 * @deprecated The new shares do not have parents. This is just here for legacy reasons.
505
-	 */
506
-	public function getParent() {
507
-		return $this->parent;
508
-	}
509
-
510
-	/**
511
-	 * @inheritdoc
512
-	 */
513
-	public function setTarget($target) {
514
-		$this->target = $target;
515
-		return $this;
516
-	}
517
-
518
-	/**
519
-	 * @inheritdoc
520
-	 */
521
-	public function getTarget() {
522
-		return $this->target;
523
-	}
524
-
525
-	/**
526
-	 * @inheritdoc
527
-	 */
528
-	public function setShareTime(\DateTime $shareTime) {
529
-		$this->shareTime = $shareTime;
530
-		return $this;
531
-	}
532
-
533
-	/**
534
-	 * @inheritdoc
535
-	 */
536
-	public function getShareTime() {
537
-		return $this->shareTime;
538
-	}
539
-
540
-	/**
541
-	 * @inheritdoc
542
-	 */
543
-	public function setMailSend($mailSend) {
544
-		$this->mailSend = $mailSend;
545
-		return $this;
546
-	}
547
-
548
-	/**
549
-	 * @inheritdoc
550
-	 */
551
-	public function getMailSend() {
552
-		return $this->mailSend;
553
-	}
554
-
555
-	/**
556
-	 * @inheritdoc
557
-	 */
558
-	public function setNodeCacheEntry(ICacheEntry $entry) {
559
-		$this->nodeCacheEntry = $entry;
560
-	}
561
-
562
-	/**
563
-	 * @inheritdoc
564
-	 */
565
-	public function getNodeCacheEntry() {
566
-		return $this->nodeCacheEntry;
567
-	}
568
-
569
-	public function setHideDownload(bool $hide): IShare {
570
-		$this->hideDownload = $hide;
571
-		return $this;
572
-	}
573
-
574
-	public function getHideDownload(): bool {
575
-		return $this->hideDownload;
576
-	}
43
+    /** @var string */
44
+    private $id;
45
+    /** @var string */
46
+    private $providerId;
47
+    /** @var Node */
48
+    private $node;
49
+    /** @var int */
50
+    private $fileId;
51
+    /** @var string */
52
+    private $nodeType;
53
+    /** @var int */
54
+    private $shareType;
55
+    /** @var string */
56
+    private $sharedWith;
57
+    /** @var string */
58
+    private $sharedWithDisplayName;
59
+    /** @var string */
60
+    private $sharedWithAvatar;
61
+    /** @var string */
62
+    private $sharedBy;
63
+    /** @var string */
64
+    private $shareOwner;
65
+    /** @var int */
66
+    private $permissions;
67
+    /** @var int */
68
+    private $status;
69
+    /** @var string */
70
+    private $note = '';
71
+    /** @var \DateTime */
72
+    private $expireDate;
73
+    /** @var string */
74
+    private $password;
75
+    /** @var bool */
76
+    private $sendPasswordByTalk = false;
77
+    /** @var string */
78
+    private $token;
79
+    /** @var int */
80
+    private $parent;
81
+    /** @var string */
82
+    private $target;
83
+    /** @var \DateTime */
84
+    private $shareTime;
85
+    /** @var bool */
86
+    private $mailSend;
87
+    /** @var string */
88
+    private $label = '';
89
+
90
+    /** @var IRootFolder */
91
+    private $rootFolder;
92
+
93
+    /** @var IUserManager */
94
+    private $userManager;
95
+
96
+    /** @var ICacheEntry|null */
97
+    private $nodeCacheEntry;
98
+
99
+    /** @var bool */
100
+    private $hideDownload = false;
101
+
102
+    public function __construct(IRootFolder $rootFolder, IUserManager $userManager) {
103
+        $this->rootFolder = $rootFolder;
104
+        $this->userManager = $userManager;
105
+    }
106
+
107
+    /**
108
+     * @inheritdoc
109
+     */
110
+    public function setId($id) {
111
+        if (is_int($id)) {
112
+            $id = (string)$id;
113
+        }
114
+
115
+        if (!is_string($id)) {
116
+            throw new \InvalidArgumentException('String expected.');
117
+        }
118
+
119
+        if ($this->id !== null) {
120
+            throw new IllegalIDChangeException('Not allowed to assign a new internal id to a share');
121
+        }
122
+
123
+        $this->id = trim($id);
124
+        return $this;
125
+    }
126
+
127
+    /**
128
+     * @inheritdoc
129
+     */
130
+    public function getId() {
131
+        return $this->id;
132
+    }
133
+
134
+    /**
135
+     * @inheritdoc
136
+     */
137
+    public function getFullId() {
138
+        if ($this->providerId === null || $this->id === null) {
139
+            throw new \UnexpectedValueException;
140
+        }
141
+        return $this->providerId . ':' . $this->id;
142
+    }
143
+
144
+    /**
145
+     * @inheritdoc
146
+     */
147
+    public function setProviderId($id) {
148
+        if (!is_string($id)) {
149
+            throw new \InvalidArgumentException('String expected.');
150
+        }
151
+
152
+        if ($this->providerId !== null) {
153
+            throw new IllegalIDChangeException('Not allowed to assign a new provider id to a share');
154
+        }
155
+
156
+        $this->providerId = trim($id);
157
+        return $this;
158
+    }
159
+
160
+    /**
161
+     * @inheritdoc
162
+     */
163
+    public function setNode(Node $node) {
164
+        $this->fileId = null;
165
+        $this->nodeType = null;
166
+        $this->node = $node;
167
+        return $this;
168
+    }
169
+
170
+    /**
171
+     * @inheritdoc
172
+     */
173
+    public function getNode() {
174
+        if ($this->node === null) {
175
+            if ($this->shareOwner === null || $this->fileId === null) {
176
+                throw new NotFoundException();
177
+            }
178
+
179
+            // for federated shares the owner can be a remote user, in this
180
+            // case we use the initiator
181
+            if ($this->userManager->userExists($this->shareOwner)) {
182
+                $userFolder = $this->rootFolder->getUserFolder($this->shareOwner);
183
+            } else {
184
+                $userFolder = $this->rootFolder->getUserFolder($this->sharedBy);
185
+            }
186
+
187
+            $nodes = $userFolder->getById($this->fileId);
188
+            if (empty($nodes)) {
189
+                throw new NotFoundException('Node for share not found, fileid: ' . $this->fileId);
190
+            }
191
+
192
+            $this->node = $nodes[0];
193
+        }
194
+
195
+        return $this->node;
196
+    }
197
+
198
+    /**
199
+     * @inheritdoc
200
+     */
201
+    public function setNodeId($fileId) {
202
+        $this->node = null;
203
+        $this->fileId = $fileId;
204
+        return $this;
205
+    }
206
+
207
+    /**
208
+     * @inheritdoc
209
+     */
210
+    public function getNodeId() {
211
+        if ($this->fileId === null) {
212
+            $this->fileId = $this->getNode()->getId();
213
+        }
214
+
215
+        return $this->fileId;
216
+    }
217
+
218
+    /**
219
+     * @inheritdoc
220
+     */
221
+    public function setNodeType($type) {
222
+        if ($type !== 'file' && $type !== 'folder') {
223
+            throw new \InvalidArgumentException();
224
+        }
225
+
226
+        $this->nodeType = $type;
227
+        return $this;
228
+    }
229
+
230
+    /**
231
+     * @inheritdoc
232
+     */
233
+    public function getNodeType() {
234
+        if ($this->nodeType === null) {
235
+            $node = $this->getNode();
236
+            $this->nodeType = $node instanceof File ? 'file' : 'folder';
237
+        }
238
+
239
+        return $this->nodeType;
240
+    }
241
+
242
+    /**
243
+     * @inheritdoc
244
+     */
245
+    public function setShareType($shareType) {
246
+        $this->shareType = $shareType;
247
+        return $this;
248
+    }
249
+
250
+    /**
251
+     * @inheritdoc
252
+     */
253
+    public function getShareType() {
254
+        return $this->shareType;
255
+    }
256
+
257
+    /**
258
+     * @inheritdoc
259
+     */
260
+    public function setSharedWith($sharedWith) {
261
+        if (!is_string($sharedWith)) {
262
+            throw new \InvalidArgumentException();
263
+        }
264
+        $this->sharedWith = $sharedWith;
265
+        return $this;
266
+    }
267
+
268
+    /**
269
+     * @inheritdoc
270
+     */
271
+    public function getSharedWith() {
272
+        return $this->sharedWith;
273
+    }
274
+
275
+    /**
276
+     * @inheritdoc
277
+     */
278
+    public function setSharedWithDisplayName($displayName) {
279
+        if (!is_string($displayName)) {
280
+            throw new \InvalidArgumentException();
281
+        }
282
+        $this->sharedWithDisplayName = $displayName;
283
+        return $this;
284
+    }
285
+
286
+    /**
287
+     * @inheritdoc
288
+     */
289
+    public function getSharedWithDisplayName() {
290
+        return $this->sharedWithDisplayName;
291
+    }
292
+
293
+    /**
294
+     * @inheritdoc
295
+     */
296
+    public function setSharedWithAvatar($src) {
297
+        if (!is_string($src)) {
298
+            throw new \InvalidArgumentException();
299
+        }
300
+        $this->sharedWithAvatar = $src;
301
+        return $this;
302
+    }
303
+
304
+    /**
305
+     * @inheritdoc
306
+     */
307
+    public function getSharedWithAvatar() {
308
+        return $this->sharedWithAvatar;
309
+    }
310
+
311
+    /**
312
+     * @inheritdoc
313
+     */
314
+    public function setPermissions($permissions) {
315
+        //TODO checkes
316
+
317
+        $this->permissions = $permissions;
318
+        return $this;
319
+    }
320
+
321
+    /**
322
+     * @inheritdoc
323
+     */
324
+    public function getPermissions() {
325
+        return $this->permissions;
326
+    }
327
+
328
+    /**
329
+     * @inheritdoc
330
+     */
331
+    public function setStatus(int $status): IShare {
332
+        $this->status = $status;
333
+        return $this;
334
+    }
335
+
336
+    /**
337
+     * @inheritdoc
338
+     */
339
+    public function getStatus(): int {
340
+        return $this->status;
341
+    }
342
+
343
+    /**
344
+     * @inheritdoc
345
+     */
346
+    public function setNote($note) {
347
+        $this->note = $note;
348
+        return $this;
349
+    }
350
+
351
+    /**
352
+     * @inheritdoc
353
+     */
354
+    public function getNote() {
355
+        if (is_string($this->note)) {
356
+            return $this->note;
357
+        }
358
+        return '';
359
+    }
360
+
361
+    /**
362
+     * @inheritdoc
363
+     */
364
+    public function setLabel($label) {
365
+        $this->label = $label;
366
+        return $this;
367
+    }
368
+
369
+    /**
370
+     * @inheritdoc
371
+     */
372
+    public function getLabel() {
373
+        return $this->label;
374
+    }
375
+
376
+    /**
377
+     * @inheritdoc
378
+     */
379
+    public function setExpirationDate($expireDate) {
380
+        //TODO checks
381
+
382
+        $this->expireDate = $expireDate;
383
+        return $this;
384
+    }
385
+
386
+    /**
387
+     * @inheritdoc
388
+     */
389
+    public function getExpirationDate() {
390
+        return $this->expireDate;
391
+    }
392
+
393
+    /**
394
+     * @inheritdoc
395
+     */
396
+    public function isExpired() {
397
+        return $this->getExpirationDate() !== null &&
398
+            $this->getExpirationDate() <= new \DateTime();
399
+    }
400
+
401
+    /**
402
+     * @inheritdoc
403
+     */
404
+    public function setSharedBy($sharedBy) {
405
+        if (!is_string($sharedBy)) {
406
+            throw new \InvalidArgumentException();
407
+        }
408
+        //TODO checks
409
+        $this->sharedBy = $sharedBy;
410
+
411
+        return $this;
412
+    }
413
+
414
+    /**
415
+     * @inheritdoc
416
+     */
417
+    public function getSharedBy() {
418
+        //TODO check if set
419
+        return $this->sharedBy;
420
+    }
421
+
422
+    /**
423
+     * @inheritdoc
424
+     */
425
+    public function setShareOwner($shareOwner) {
426
+        if (!is_string($shareOwner)) {
427
+            throw new \InvalidArgumentException();
428
+        }
429
+        //TODO checks
430
+
431
+        $this->shareOwner = $shareOwner;
432
+        return $this;
433
+    }
434
+
435
+    /**
436
+     * @inheritdoc
437
+     */
438
+    public function getShareOwner() {
439
+        //TODO check if set
440
+        return $this->shareOwner;
441
+    }
442
+
443
+    /**
444
+     * @inheritdoc
445
+     */
446
+    public function setPassword($password) {
447
+        $this->password = $password;
448
+        return $this;
449
+    }
450
+
451
+    /**
452
+     * @inheritdoc
453
+     */
454
+    public function getPassword() {
455
+        return $this->password;
456
+    }
457
+
458
+    /**
459
+     * @inheritdoc
460
+     */
461
+    public function setSendPasswordByTalk(bool $sendPasswordByTalk) {
462
+        $this->sendPasswordByTalk = $sendPasswordByTalk;
463
+        return $this;
464
+    }
465
+
466
+    /**
467
+     * @inheritdoc
468
+     */
469
+    public function getSendPasswordByTalk(): bool {
470
+        return $this->sendPasswordByTalk;
471
+    }
472
+
473
+    /**
474
+     * @inheritdoc
475
+     */
476
+    public function setToken($token) {
477
+        $this->token = $token;
478
+        return $this;
479
+    }
480
+
481
+    /**
482
+     * @inheritdoc
483
+     */
484
+    public function getToken() {
485
+        return $this->token;
486
+    }
487
+
488
+    /**
489
+     * Set the parent of this share
490
+     *
491
+     * @param int parent
492
+     * @return \OCP\Share\IShare
493
+     * @deprecated The new shares do not have parents. This is just here for legacy reasons.
494
+     */
495
+    public function setParent($parent) {
496
+        $this->parent = $parent;
497
+        return $this;
498
+    }
499
+
500
+    /**
501
+     * Get the parent of this share.
502
+     *
503
+     * @return int
504
+     * @deprecated The new shares do not have parents. This is just here for legacy reasons.
505
+     */
506
+    public function getParent() {
507
+        return $this->parent;
508
+    }
509
+
510
+    /**
511
+     * @inheritdoc
512
+     */
513
+    public function setTarget($target) {
514
+        $this->target = $target;
515
+        return $this;
516
+    }
517
+
518
+    /**
519
+     * @inheritdoc
520
+     */
521
+    public function getTarget() {
522
+        return $this->target;
523
+    }
524
+
525
+    /**
526
+     * @inheritdoc
527
+     */
528
+    public function setShareTime(\DateTime $shareTime) {
529
+        $this->shareTime = $shareTime;
530
+        return $this;
531
+    }
532
+
533
+    /**
534
+     * @inheritdoc
535
+     */
536
+    public function getShareTime() {
537
+        return $this->shareTime;
538
+    }
539
+
540
+    /**
541
+     * @inheritdoc
542
+     */
543
+    public function setMailSend($mailSend) {
544
+        $this->mailSend = $mailSend;
545
+        return $this;
546
+    }
547
+
548
+    /**
549
+     * @inheritdoc
550
+     */
551
+    public function getMailSend() {
552
+        return $this->mailSend;
553
+    }
554
+
555
+    /**
556
+     * @inheritdoc
557
+     */
558
+    public function setNodeCacheEntry(ICacheEntry $entry) {
559
+        $this->nodeCacheEntry = $entry;
560
+    }
561
+
562
+    /**
563
+     * @inheritdoc
564
+     */
565
+    public function getNodeCacheEntry() {
566
+        return $this->nodeCacheEntry;
567
+    }
568
+
569
+    public function setHideDownload(bool $hide): IShare {
570
+        $this->hideDownload = $hide;
571
+        return $this;
572
+    }
573
+
574
+    public function getHideDownload(): bool {
575
+        return $this->hideDownload;
576
+    }
577 577
 }
Please login to merge, or discard this patch.
lib/private/AppConfig.php 2 patches
Spacing   +1 added lines, -1 removed lines patch added patch discarded remove patch
@@ -275,7 +275,7 @@
 block discarded – undo
275 275
 			return $this->getAppValues($app);
276 276
 		} else {
277 277
 			$appIds = $this->getApps();
278
-			$values = array_map(function ($appId) use ($key) {
278
+			$values = array_map(function($appId) use ($key) {
279 279
 				return isset($this->cache[$appId][$key]) ? $this->cache[$appId][$key] : null;
280 280
 			}, $appIds);
281 281
 			$result = array_combine($appIds, $values);
Please login to merge, or discard this patch.
Indentation   +296 added lines, -296 removed lines patch added patch discarded remove patch
@@ -42,304 +42,304 @@
 block discarded – undo
42 42
  */
43 43
 class AppConfig implements IAppConfig {
44 44
 
45
-	/** @var array[] */
46
-	protected $sensitiveValues = [
47
-		'external' => [
48
-			'/^sites$/',
49
-		],
50
-		'spreed' => [
51
-			'/^signaling_ticket_secret$/',
52
-			'/^turn_server_secret$/',
53
-			'/^stun_servers$/',
54
-			'/^turn_servers$/',
55
-			'/^signaling_servers$/',
56
-		],
57
-		'theming' => [
58
-			'/^imprintUrl$/',
59
-			'/^privacyUrl$/',
60
-			'/^slogan$/',
61
-			'/^url$/',
62
-		],
63
-		'user_ldap' => [
64
-			'/^(s..)?ldap_agent_password$/',
65
-		],
66
-	];
67
-
68
-	/** @var \OCP\IDBConnection */
69
-	protected $conn;
70
-
71
-	/** @var array[] */
72
-	private $cache = [];
73
-
74
-	/** @var bool */
75
-	private $configLoaded = false;
76
-
77
-	/**
78
-	 * @param IDBConnection $conn
79
-	 */
80
-	public function __construct(IDBConnection $conn) {
81
-		$this->conn = $conn;
82
-		$this->configLoaded = false;
83
-	}
84
-
85
-	/**
86
-	 * @param string $app
87
-	 * @return array
88
-	 */
89
-	private function getAppValues($app) {
90
-		$this->loadConfigValues();
91
-
92
-		if (isset($this->cache[$app])) {
93
-			return $this->cache[$app];
94
-		}
95
-
96
-		return [];
97
-	}
98
-
99
-	/**
100
-	 * Get all apps using the config
101
-	 *
102
-	 * @return array an array of app ids
103
-	 *
104
-	 * This function returns a list of all apps that have at least one
105
-	 * entry in the appconfig table.
106
-	 */
107
-	public function getApps() {
108
-		$this->loadConfigValues();
109
-
110
-		return $this->getSortedKeys($this->cache);
111
-	}
112
-
113
-	/**
114
-	 * Get the available keys for an app
115
-	 *
116
-	 * @param string $app the app we are looking for
117
-	 * @return array an array of key names
118
-	 *
119
-	 * This function gets all keys of an app. Please note that the values are
120
-	 * not returned.
121
-	 */
122
-	public function getKeys($app) {
123
-		$this->loadConfigValues();
124
-
125
-		if (isset($this->cache[$app])) {
126
-			return $this->getSortedKeys($this->cache[$app]);
127
-		}
128
-
129
-		return [];
130
-	}
131
-
132
-	public function getSortedKeys($data) {
133
-		$keys = array_keys($data);
134
-		sort($keys);
135
-		return $keys;
136
-	}
137
-
138
-	/**
139
-	 * Gets the config value
140
-	 *
141
-	 * @param string $app app
142
-	 * @param string $key key
143
-	 * @param string $default = null, default value if the key does not exist
144
-	 * @return string the value or $default
145
-	 *
146
-	 * This function gets a value from the appconfig table. If the key does
147
-	 * not exist the default value will be returned
148
-	 */
149
-	public function getValue($app, $key, $default = null) {
150
-		$this->loadConfigValues();
151
-
152
-		if ($this->hasKey($app, $key)) {
153
-			return $this->cache[$app][$key];
154
-		}
155
-
156
-		return $default;
157
-	}
158
-
159
-	/**
160
-	 * check if a key is set in the appconfig
161
-	 *
162
-	 * @param string $app
163
-	 * @param string $key
164
-	 * @return bool
165
-	 */
166
-	public function hasKey($app, $key) {
167
-		$this->loadConfigValues();
168
-
169
-		return isset($this->cache[$app][$key]);
170
-	}
171
-
172
-	/**
173
-	 * Sets a value. If the key did not exist before it will be created.
174
-	 *
175
-	 * @param string $app app
176
-	 * @param string $key key
177
-	 * @param string|float|int $value value
178
-	 * @return bool True if the value was inserted or updated, false if the value was the same
179
-	 */
180
-	public function setValue($app, $key, $value) {
181
-		if (!$this->hasKey($app, $key)) {
182
-			$inserted = (bool) $this->conn->insertIfNotExist('*PREFIX*appconfig', [
183
-				'appid' => $app,
184
-				'configkey' => $key,
185
-				'configvalue' => $value,
186
-			], [
187
-				'appid',
188
-				'configkey',
189
-			]);
190
-
191
-			if ($inserted) {
192
-				if (!isset($this->cache[$app])) {
193
-					$this->cache[$app] = [];
194
-				}
195
-
196
-				$this->cache[$app][$key] = $value;
197
-				return true;
198
-			}
199
-		}
200
-
201
-		$sql = $this->conn->getQueryBuilder();
202
-		$sql->update('appconfig')
203
-			->set('configvalue', $sql->createParameter('configvalue'))
204
-			->where($sql->expr()->eq('appid', $sql->createParameter('app')))
205
-			->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey')))
206
-			->setParameter('configvalue', $value)
207
-			->setParameter('app', $app)
208
-			->setParameter('configkey', $key);
209
-
210
-		/*
45
+    /** @var array[] */
46
+    protected $sensitiveValues = [
47
+        'external' => [
48
+            '/^sites$/',
49
+        ],
50
+        'spreed' => [
51
+            '/^signaling_ticket_secret$/',
52
+            '/^turn_server_secret$/',
53
+            '/^stun_servers$/',
54
+            '/^turn_servers$/',
55
+            '/^signaling_servers$/',
56
+        ],
57
+        'theming' => [
58
+            '/^imprintUrl$/',
59
+            '/^privacyUrl$/',
60
+            '/^slogan$/',
61
+            '/^url$/',
62
+        ],
63
+        'user_ldap' => [
64
+            '/^(s..)?ldap_agent_password$/',
65
+        ],
66
+    ];
67
+
68
+    /** @var \OCP\IDBConnection */
69
+    protected $conn;
70
+
71
+    /** @var array[] */
72
+    private $cache = [];
73
+
74
+    /** @var bool */
75
+    private $configLoaded = false;
76
+
77
+    /**
78
+     * @param IDBConnection $conn
79
+     */
80
+    public function __construct(IDBConnection $conn) {
81
+        $this->conn = $conn;
82
+        $this->configLoaded = false;
83
+    }
84
+
85
+    /**
86
+     * @param string $app
87
+     * @return array
88
+     */
89
+    private function getAppValues($app) {
90
+        $this->loadConfigValues();
91
+
92
+        if (isset($this->cache[$app])) {
93
+            return $this->cache[$app];
94
+        }
95
+
96
+        return [];
97
+    }
98
+
99
+    /**
100
+     * Get all apps using the config
101
+     *
102
+     * @return array an array of app ids
103
+     *
104
+     * This function returns a list of all apps that have at least one
105
+     * entry in the appconfig table.
106
+     */
107
+    public function getApps() {
108
+        $this->loadConfigValues();
109
+
110
+        return $this->getSortedKeys($this->cache);
111
+    }
112
+
113
+    /**
114
+     * Get the available keys for an app
115
+     *
116
+     * @param string $app the app we are looking for
117
+     * @return array an array of key names
118
+     *
119
+     * This function gets all keys of an app. Please note that the values are
120
+     * not returned.
121
+     */
122
+    public function getKeys($app) {
123
+        $this->loadConfigValues();
124
+
125
+        if (isset($this->cache[$app])) {
126
+            return $this->getSortedKeys($this->cache[$app]);
127
+        }
128
+
129
+        return [];
130
+    }
131
+
132
+    public function getSortedKeys($data) {
133
+        $keys = array_keys($data);
134
+        sort($keys);
135
+        return $keys;
136
+    }
137
+
138
+    /**
139
+     * Gets the config value
140
+     *
141
+     * @param string $app app
142
+     * @param string $key key
143
+     * @param string $default = null, default value if the key does not exist
144
+     * @return string the value or $default
145
+     *
146
+     * This function gets a value from the appconfig table. If the key does
147
+     * not exist the default value will be returned
148
+     */
149
+    public function getValue($app, $key, $default = null) {
150
+        $this->loadConfigValues();
151
+
152
+        if ($this->hasKey($app, $key)) {
153
+            return $this->cache[$app][$key];
154
+        }
155
+
156
+        return $default;
157
+    }
158
+
159
+    /**
160
+     * check if a key is set in the appconfig
161
+     *
162
+     * @param string $app
163
+     * @param string $key
164
+     * @return bool
165
+     */
166
+    public function hasKey($app, $key) {
167
+        $this->loadConfigValues();
168
+
169
+        return isset($this->cache[$app][$key]);
170
+    }
171
+
172
+    /**
173
+     * Sets a value. If the key did not exist before it will be created.
174
+     *
175
+     * @param string $app app
176
+     * @param string $key key
177
+     * @param string|float|int $value value
178
+     * @return bool True if the value was inserted or updated, false if the value was the same
179
+     */
180
+    public function setValue($app, $key, $value) {
181
+        if (!$this->hasKey($app, $key)) {
182
+            $inserted = (bool) $this->conn->insertIfNotExist('*PREFIX*appconfig', [
183
+                'appid' => $app,
184
+                'configkey' => $key,
185
+                'configvalue' => $value,
186
+            ], [
187
+                'appid',
188
+                'configkey',
189
+            ]);
190
+
191
+            if ($inserted) {
192
+                if (!isset($this->cache[$app])) {
193
+                    $this->cache[$app] = [];
194
+                }
195
+
196
+                $this->cache[$app][$key] = $value;
197
+                return true;
198
+            }
199
+        }
200
+
201
+        $sql = $this->conn->getQueryBuilder();
202
+        $sql->update('appconfig')
203
+            ->set('configvalue', $sql->createParameter('configvalue'))
204
+            ->where($sql->expr()->eq('appid', $sql->createParameter('app')))
205
+            ->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey')))
206
+            ->setParameter('configvalue', $value)
207
+            ->setParameter('app', $app)
208
+            ->setParameter('configkey', $key);
209
+
210
+        /*
211 211
 		 * Only limit to the existing value for non-Oracle DBs:
212 212
 		 * http://docs.oracle.com/cd/E11882_01/server.112/e26088/conditions002.htm#i1033286
213 213
 		 * > Large objects (LOBs) are not supported in comparison conditions.
214 214
 		 */
215
-		if (!($this->conn instanceof OracleConnection)) {
216
-			// Only update the value when it is not the same
217
-			$sql->andWhere($sql->expr()->neq('configvalue', $sql->createParameter('configvalue')))
218
-				->setParameter('configvalue', $value);
219
-		}
220
-
221
-		$changedRow = (bool) $sql->execute();
222
-
223
-		$this->cache[$app][$key] = $value;
224
-
225
-		return $changedRow;
226
-	}
227
-
228
-	/**
229
-	 * Deletes a key
230
-	 *
231
-	 * @param string $app app
232
-	 * @param string $key key
233
-	 * @return boolean
234
-	 */
235
-	public function deleteKey($app, $key) {
236
-		$this->loadConfigValues();
237
-
238
-		$sql = $this->conn->getQueryBuilder();
239
-		$sql->delete('appconfig')
240
-			->where($sql->expr()->eq('appid', $sql->createParameter('app')))
241
-			->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey')))
242
-			->setParameter('app', $app)
243
-			->setParameter('configkey', $key);
244
-		$sql->execute();
245
-
246
-		unset($this->cache[$app][$key]);
247
-		return false;
248
-	}
249
-
250
-	/**
251
-	 * Remove app from appconfig
252
-	 *
253
-	 * @param string $app app
254
-	 * @return boolean
255
-	 *
256
-	 * Removes all keys in appconfig belonging to the app.
257
-	 */
258
-	public function deleteApp($app) {
259
-		$this->loadConfigValues();
260
-
261
-		$sql = $this->conn->getQueryBuilder();
262
-		$sql->delete('appconfig')
263
-			->where($sql->expr()->eq('appid', $sql->createParameter('app')))
264
-			->setParameter('app', $app);
265
-		$sql->execute();
266
-
267
-		unset($this->cache[$app]);
268
-		return false;
269
-	}
270
-
271
-	/**
272
-	 * get multiple values, either the app or key can be used as wildcard by setting it to false
273
-	 *
274
-	 * @param string|false $app
275
-	 * @param string|false $key
276
-	 * @return array|false
277
-	 */
278
-	public function getValues($app, $key) {
279
-		if (($app !== false) === ($key !== false)) {
280
-			return false;
281
-		}
282
-
283
-		if ($key === false) {
284
-			return $this->getAppValues($app);
285
-		} else {
286
-			$appIds = $this->getApps();
287
-			$values = array_map(function ($appId) use ($key) {
288
-				return isset($this->cache[$appId][$key]) ? $this->cache[$appId][$key] : null;
289
-			}, $appIds);
290
-			$result = array_combine($appIds, $values);
291
-
292
-			return array_filter($result);
293
-		}
294
-	}
295
-
296
-	/**
297
-	 * get all values of the app or and filters out sensitive data
298
-	 *
299
-	 * @param string $app
300
-	 * @return array
301
-	 */
302
-	public function getFilteredValues($app) {
303
-		$values = $this->getValues($app, false);
304
-
305
-		if (isset($this->sensitiveValues[$app])) {
306
-			foreach ($this->sensitiveValues[$app] as $sensitiveKeyExp) {
307
-				$sensitiveKeys = preg_grep($sensitiveKeyExp, array_keys($values));
308
-				foreach ($sensitiveKeys as $sensitiveKey) {
309
-					$values[$sensitiveKey] = IConfig::SENSITIVE_VALUE;
310
-				}
311
-			}
312
-		}
313
-
314
-		return $values;
315
-	}
316
-
317
-	/**
318
-	 * Load all the app config values
319
-	 */
320
-	protected function loadConfigValues() {
321
-		if ($this->configLoaded) {
322
-			return;
323
-		}
324
-
325
-		$this->cache = [];
326
-
327
-		$sql = $this->conn->getQueryBuilder();
328
-		$sql->select('*')
329
-			->from('appconfig');
330
-		$result = $sql->execute();
331
-
332
-		// we are going to store the result in memory anyway
333
-		$rows = $result->fetchAll();
334
-		foreach ($rows as $row) {
335
-			if (!isset($this->cache[$row['appid']])) {
336
-				$this->cache[$row['appid']] = [];
337
-			}
338
-
339
-			$this->cache[$row['appid']][$row['configkey']] = $row['configvalue'];
340
-		}
341
-		$result->closeCursor();
342
-
343
-		$this->configLoaded = true;
344
-	}
215
+        if (!($this->conn instanceof OracleConnection)) {
216
+            // Only update the value when it is not the same
217
+            $sql->andWhere($sql->expr()->neq('configvalue', $sql->createParameter('configvalue')))
218
+                ->setParameter('configvalue', $value);
219
+        }
220
+
221
+        $changedRow = (bool) $sql->execute();
222
+
223
+        $this->cache[$app][$key] = $value;
224
+
225
+        return $changedRow;
226
+    }
227
+
228
+    /**
229
+     * Deletes a key
230
+     *
231
+     * @param string $app app
232
+     * @param string $key key
233
+     * @return boolean
234
+     */
235
+    public function deleteKey($app, $key) {
236
+        $this->loadConfigValues();
237
+
238
+        $sql = $this->conn->getQueryBuilder();
239
+        $sql->delete('appconfig')
240
+            ->where($sql->expr()->eq('appid', $sql->createParameter('app')))
241
+            ->andWhere($sql->expr()->eq('configkey', $sql->createParameter('configkey')))
242
+            ->setParameter('app', $app)
243
+            ->setParameter('configkey', $key);
244
+        $sql->execute();
245
+
246
+        unset($this->cache[$app][$key]);
247
+        return false;
248
+    }
249
+
250
+    /**
251
+     * Remove app from appconfig
252
+     *
253
+     * @param string $app app
254
+     * @return boolean
255
+     *
256
+     * Removes all keys in appconfig belonging to the app.
257
+     */
258
+    public function deleteApp($app) {
259
+        $this->loadConfigValues();
260
+
261
+        $sql = $this->conn->getQueryBuilder();
262
+        $sql->delete('appconfig')
263
+            ->where($sql->expr()->eq('appid', $sql->createParameter('app')))
264
+            ->setParameter('app', $app);
265
+        $sql->execute();
266
+
267
+        unset($this->cache[$app]);
268
+        return false;
269
+    }
270
+
271
+    /**
272
+     * get multiple values, either the app or key can be used as wildcard by setting it to false
273
+     *
274
+     * @param string|false $app
275
+     * @param string|false $key
276
+     * @return array|false
277
+     */
278
+    public function getValues($app, $key) {
279
+        if (($app !== false) === ($key !== false)) {
280
+            return false;
281
+        }
282
+
283
+        if ($key === false) {
284
+            return $this->getAppValues($app);
285
+        } else {
286
+            $appIds = $this->getApps();
287
+            $values = array_map(function ($appId) use ($key) {
288
+                return isset($this->cache[$appId][$key]) ? $this->cache[$appId][$key] : null;
289
+            }, $appIds);
290
+            $result = array_combine($appIds, $values);
291
+
292
+            return array_filter($result);
293
+        }
294
+    }
295
+
296
+    /**
297
+     * get all values of the app or and filters out sensitive data
298
+     *
299
+     * @param string $app
300
+     * @return array
301
+     */
302
+    public function getFilteredValues($app) {
303
+        $values = $this->getValues($app, false);
304
+
305
+        if (isset($this->sensitiveValues[$app])) {
306
+            foreach ($this->sensitiveValues[$app] as $sensitiveKeyExp) {
307
+                $sensitiveKeys = preg_grep($sensitiveKeyExp, array_keys($values));
308
+                foreach ($sensitiveKeys as $sensitiveKey) {
309
+                    $values[$sensitiveKey] = IConfig::SENSITIVE_VALUE;
310
+                }
311
+            }
312
+        }
313
+
314
+        return $values;
315
+    }
316
+
317
+    /**
318
+     * Load all the app config values
319
+     */
320
+    protected function loadConfigValues() {
321
+        if ($this->configLoaded) {
322
+            return;
323
+        }
324
+
325
+        $this->cache = [];
326
+
327
+        $sql = $this->conn->getQueryBuilder();
328
+        $sql->select('*')
329
+            ->from('appconfig');
330
+        $result = $sql->execute();
331
+
332
+        // we are going to store the result in memory anyway
333
+        $rows = $result->fetchAll();
334
+        foreach ($rows as $row) {
335
+            if (!isset($this->cache[$row['appid']])) {
336
+                $this->cache[$row['appid']] = [];
337
+            }
338
+
339
+            $this->cache[$row['appid']][$row['configkey']] = $row['configvalue'];
340
+        }
341
+        $result->closeCursor();
342
+
343
+        $this->configLoaded = true;
344
+    }
345 345
 }
Please login to merge, or discard this patch.