Passed
Push — master ( 3a99ef...34868f )
by Roeland
09:54 queued 11s
created
apps/dav/lib/Connector/Sabre/ShareeList.php 1 patch
Indentation   +21 added lines, -21 removed lines patch added patch discarded remove patch
@@ -34,28 +34,28 @@
 block discarded – undo
34 34
  * This property contains multiple "sharee" elements, each containing a share sharee
35 35
  */
36 36
 class ShareeList implements XmlSerializable {
37
-	const NS_NEXTCLOUD = 'http://nextcloud.org/ns';
37
+    const NS_NEXTCLOUD = 'http://nextcloud.org/ns';
38 38
 
39
-	/** @var IShare[] */
40
-	private $shares;
39
+    /** @var IShare[] */
40
+    private $shares;
41 41
 
42
-	public function __construct(array $shares) {
43
-		$this->shares = $shares;
44
-	}
42
+    public function __construct(array $shares) {
43
+        $this->shares = $shares;
44
+    }
45 45
 
46
-	/**
47
-	 * The xmlSerialize metod is called during xml writing.
48
-	 *
49
-	 * @param Writer $writer
50
-	 * @return void
51
-	 */
52
-	function xmlSerialize(Writer $writer) {
53
-		foreach ($this->shares as $share) {
54
-			$writer->startElement('{' . self::NS_NEXTCLOUD . '}sharee');
55
-			$writer->writeElement('{' . self::NS_NEXTCLOUD . '}id', $share->getSharedWith());
56
-			$writer->writeElement('{' . self::NS_NEXTCLOUD . '}display-name', $share->getSharedWithDisplayName());
57
-			$writer->writeElement('{' . self::NS_NEXTCLOUD . '}type', $share->getShareType());
58
-			$writer->endElement();
59
-		}
60
-	}
46
+    /**
47
+     * The xmlSerialize metod is called during xml writing.
48
+     *
49
+     * @param Writer $writer
50
+     * @return void
51
+     */
52
+    function xmlSerialize(Writer $writer) {
53
+        foreach ($this->shares as $share) {
54
+            $writer->startElement('{' . self::NS_NEXTCLOUD . '}sharee');
55
+            $writer->writeElement('{' . self::NS_NEXTCLOUD . '}id', $share->getSharedWith());
56
+            $writer->writeElement('{' . self::NS_NEXTCLOUD . '}display-name', $share->getSharedWithDisplayName());
57
+            $writer->writeElement('{' . self::NS_NEXTCLOUD . '}type', $share->getShareType());
58
+            $writer->endElement();
59
+        }
60
+    }
61 61
 }
Please login to merge, or discard this patch.
apps/dav/lib/Connector/Sabre/SharesPlugin.php 1 patch
Indentation   +177 added lines, -177 removed lines patch added patch discarded remove patch
@@ -36,181 +36,181 @@
 block discarded – undo
36 36
  */
37 37
 class SharesPlugin extends \Sabre\DAV\ServerPlugin {
38 38
 
39
-	const NS_OWNCLOUD = 'http://owncloud.org/ns';
40
-	const NS_NEXTCLOUD = 'http://nextcloud.org/ns';
41
-	const SHARETYPES_PROPERTYNAME = '{http://owncloud.org/ns}share-types';
42
-	const SHAREES_PROPERTYNAME = '{http://nextcloud.org/ns}sharees';
43
-
44
-	/**
45
-	 * Reference to main server object
46
-	 *
47
-	 * @var \Sabre\DAV\Server
48
-	 */
49
-	private $server;
50
-
51
-	/**
52
-	 * @var \OCP\Share\IManager
53
-	 */
54
-	private $shareManager;
55
-
56
-	/**
57
-	 * @var \Sabre\DAV\Tree
58
-	 */
59
-	private $tree;
60
-
61
-	/**
62
-	 * @var string
63
-	 */
64
-	private $userId;
65
-
66
-	/**
67
-	 * @var \OCP\Files\Folder
68
-	 */
69
-	private $userFolder;
70
-
71
-	/** @var IShare[] */
72
-	private $cachedShares = [];
73
-
74
-	private $cachedFolders = [];
75
-
76
-	/**
77
-	 * @param \Sabre\DAV\Tree $tree tree
78
-	 * @param IUserSession $userSession user session
79
-	 * @param \OCP\Files\Folder $userFolder user home folder
80
-	 * @param \OCP\Share\IManager $shareManager share manager
81
-	 */
82
-	public function __construct(
83
-		\Sabre\DAV\Tree $tree,
84
-		IUserSession $userSession,
85
-		\OCP\Files\Folder $userFolder,
86
-		\OCP\Share\IManager $shareManager
87
-	) {
88
-		$this->tree = $tree;
89
-		$this->shareManager = $shareManager;
90
-		$this->userFolder = $userFolder;
91
-		$this->userId = $userSession->getUser()->getUID();
92
-	}
93
-
94
-	/**
95
-	 * This initializes the plugin.
96
-	 *
97
-	 * This function is called by \Sabre\DAV\Server, after
98
-	 * addPlugin is called.
99
-	 *
100
-	 * This method should set up the required event subscriptions.
101
-	 *
102
-	 * @param \Sabre\DAV\Server $server
103
-	 */
104
-	public function initialize(\Sabre\DAV\Server $server) {
105
-		$server->xml->namespacesMap[self::NS_OWNCLOUD] = 'oc';
106
-		$server->xml->elementMap[self::SHARETYPES_PROPERTYNAME] = ShareTypeList::class;
107
-		$server->protectedProperties[] = self::SHARETYPES_PROPERTYNAME;
108
-		$server->protectedProperties[] = self::SHAREES_PROPERTYNAME;
109
-
110
-		$this->server = $server;
111
-		$this->server->on('propFind', array($this, 'handleGetProperties'));
112
-	}
113
-
114
-	private function getShare(\OCP\Files\Node $node): array {
115
-		$result = [];
116
-		$requestedShareTypes = [
117
-			\OCP\Share::SHARE_TYPE_USER,
118
-			\OCP\Share::SHARE_TYPE_GROUP,
119
-			\OCP\Share::SHARE_TYPE_LINK,
120
-			\OCP\Share::SHARE_TYPE_REMOTE,
121
-			\OCP\Share::SHARE_TYPE_EMAIL,
122
-			\OCP\Share::SHARE_TYPE_ROOM,
123
-			\OCP\Share::SHARE_TYPE_CIRCLE,
124
-		];
125
-		foreach ($requestedShareTypes as $requestedShareType) {
126
-			$shares = $this->shareManager->getSharesBy(
127
-				$this->userId,
128
-				$requestedShareType,
129
-				$node,
130
-				false,
131
-				-1
132
-			);
133
-			foreach ($shares as $share) {
134
-				$result[] = $share;
135
-			}
136
-		}
137
-		return $result;
138
-	}
139
-
140
-	private function getSharesFolder(\OCP\Files\Folder $node): array {
141
-		return $this->shareManager->getSharesInFolder(
142
-			$this->userId,
143
-			$node,
144
-			true
145
-		);
146
-	}
147
-
148
-	private function getShares(\Sabre\DAV\INode $sabreNode): array {
149
-		if (isset($this->cachedShares[$sabreNode->getId()])) {
150
-			$shares = $this->cachedShares[$sabreNode->getId()];
151
-		} else {
152
-			list($parentPath,) = \Sabre\Uri\split($sabreNode->getPath());
153
-			if ($parentPath === '') {
154
-				$parentPath = '/';
155
-			}
156
-			// if we already cached the folder this file is in we know there are no shares for this file
157
-			if (array_search($parentPath, $this->cachedFolders) === false) {
158
-				$node = $this->userFolder->get($sabreNode->getPath());
159
-				$shares = $this->getShare($node);
160
-				$this->cachedShares[$sabreNode->getId()] = $shares;
161
-			} else {
162
-				return [];
163
-			}
164
-		}
165
-
166
-		return $shares;
167
-	}
168
-
169
-	/**
170
-	 * Adds shares to propfind response
171
-	 *
172
-	 * @param PropFind $propFind propfind object
173
-	 * @param \Sabre\DAV\INode $sabreNode sabre node
174
-	 */
175
-	public function handleGetProperties(
176
-		PropFind $propFind,
177
-		\Sabre\DAV\INode $sabreNode
178
-	) {
179
-		if (!($sabreNode instanceof \OCA\DAV\Connector\Sabre\Node)) {
180
-			return;
181
-		}
182
-
183
-		// need prefetch ?
184
-		if ($sabreNode instanceof \OCA\DAV\Connector\Sabre\Directory
185
-			&& $propFind->getDepth() !== 0
186
-			&& (
187
-				!is_null($propFind->getStatus(self::SHARETYPES_PROPERTYNAME)) ||
188
-				!is_null($propFind->getStatus(self::SHAREES_PROPERTYNAME))
189
-			)
190
-		) {
191
-			$folderNode = $this->userFolder->get($sabreNode->getPath());
192
-
193
-			$this->cachedFolders[] = $sabreNode->getPath();
194
-			$childShares = $this->getSharesFolder($folderNode);
195
-			foreach ($childShares as $id => $shares) {
196
-				$this->cachedShares[$id] = $shares;
197
-			}
198
-		}
199
-
200
-		$propFind->handle(self::SHARETYPES_PROPERTYNAME, function () use ($sabreNode) {
201
-			$shares = $this->getShares($sabreNode);
202
-
203
-			$shareTypes = array_unique(array_map(function(IShare $share) {
204
-				return $share->getShareType();
205
-			}, $shares));
206
-
207
-			return new ShareTypeList($shareTypes);
208
-		});
209
-
210
-		$propFind->handle(self::SHAREES_PROPERTYNAME, function() use ($sabreNode) {
211
-			$shares = $this->getShares($sabreNode);
212
-
213
-			return new ShareeList($shares);
214
-		});
215
-	}
39
+    const NS_OWNCLOUD = 'http://owncloud.org/ns';
40
+    const NS_NEXTCLOUD = 'http://nextcloud.org/ns';
41
+    const SHARETYPES_PROPERTYNAME = '{http://owncloud.org/ns}share-types';
42
+    const SHAREES_PROPERTYNAME = '{http://nextcloud.org/ns}sharees';
43
+
44
+    /**
45
+     * Reference to main server object
46
+     *
47
+     * @var \Sabre\DAV\Server
48
+     */
49
+    private $server;
50
+
51
+    /**
52
+     * @var \OCP\Share\IManager
53
+     */
54
+    private $shareManager;
55
+
56
+    /**
57
+     * @var \Sabre\DAV\Tree
58
+     */
59
+    private $tree;
60
+
61
+    /**
62
+     * @var string
63
+     */
64
+    private $userId;
65
+
66
+    /**
67
+     * @var \OCP\Files\Folder
68
+     */
69
+    private $userFolder;
70
+
71
+    /** @var IShare[] */
72
+    private $cachedShares = [];
73
+
74
+    private $cachedFolders = [];
75
+
76
+    /**
77
+     * @param \Sabre\DAV\Tree $tree tree
78
+     * @param IUserSession $userSession user session
79
+     * @param \OCP\Files\Folder $userFolder user home folder
80
+     * @param \OCP\Share\IManager $shareManager share manager
81
+     */
82
+    public function __construct(
83
+        \Sabre\DAV\Tree $tree,
84
+        IUserSession $userSession,
85
+        \OCP\Files\Folder $userFolder,
86
+        \OCP\Share\IManager $shareManager
87
+    ) {
88
+        $this->tree = $tree;
89
+        $this->shareManager = $shareManager;
90
+        $this->userFolder = $userFolder;
91
+        $this->userId = $userSession->getUser()->getUID();
92
+    }
93
+
94
+    /**
95
+     * This initializes the plugin.
96
+     *
97
+     * This function is called by \Sabre\DAV\Server, after
98
+     * addPlugin is called.
99
+     *
100
+     * This method should set up the required event subscriptions.
101
+     *
102
+     * @param \Sabre\DAV\Server $server
103
+     */
104
+    public function initialize(\Sabre\DAV\Server $server) {
105
+        $server->xml->namespacesMap[self::NS_OWNCLOUD] = 'oc';
106
+        $server->xml->elementMap[self::SHARETYPES_PROPERTYNAME] = ShareTypeList::class;
107
+        $server->protectedProperties[] = self::SHARETYPES_PROPERTYNAME;
108
+        $server->protectedProperties[] = self::SHAREES_PROPERTYNAME;
109
+
110
+        $this->server = $server;
111
+        $this->server->on('propFind', array($this, 'handleGetProperties'));
112
+    }
113
+
114
+    private function getShare(\OCP\Files\Node $node): array {
115
+        $result = [];
116
+        $requestedShareTypes = [
117
+            \OCP\Share::SHARE_TYPE_USER,
118
+            \OCP\Share::SHARE_TYPE_GROUP,
119
+            \OCP\Share::SHARE_TYPE_LINK,
120
+            \OCP\Share::SHARE_TYPE_REMOTE,
121
+            \OCP\Share::SHARE_TYPE_EMAIL,
122
+            \OCP\Share::SHARE_TYPE_ROOM,
123
+            \OCP\Share::SHARE_TYPE_CIRCLE,
124
+        ];
125
+        foreach ($requestedShareTypes as $requestedShareType) {
126
+            $shares = $this->shareManager->getSharesBy(
127
+                $this->userId,
128
+                $requestedShareType,
129
+                $node,
130
+                false,
131
+                -1
132
+            );
133
+            foreach ($shares as $share) {
134
+                $result[] = $share;
135
+            }
136
+        }
137
+        return $result;
138
+    }
139
+
140
+    private function getSharesFolder(\OCP\Files\Folder $node): array {
141
+        return $this->shareManager->getSharesInFolder(
142
+            $this->userId,
143
+            $node,
144
+            true
145
+        );
146
+    }
147
+
148
+    private function getShares(\Sabre\DAV\INode $sabreNode): array {
149
+        if (isset($this->cachedShares[$sabreNode->getId()])) {
150
+            $shares = $this->cachedShares[$sabreNode->getId()];
151
+        } else {
152
+            list($parentPath,) = \Sabre\Uri\split($sabreNode->getPath());
153
+            if ($parentPath === '') {
154
+                $parentPath = '/';
155
+            }
156
+            // if we already cached the folder this file is in we know there are no shares for this file
157
+            if (array_search($parentPath, $this->cachedFolders) === false) {
158
+                $node = $this->userFolder->get($sabreNode->getPath());
159
+                $shares = $this->getShare($node);
160
+                $this->cachedShares[$sabreNode->getId()] = $shares;
161
+            } else {
162
+                return [];
163
+            }
164
+        }
165
+
166
+        return $shares;
167
+    }
168
+
169
+    /**
170
+     * Adds shares to propfind response
171
+     *
172
+     * @param PropFind $propFind propfind object
173
+     * @param \Sabre\DAV\INode $sabreNode sabre node
174
+     */
175
+    public function handleGetProperties(
176
+        PropFind $propFind,
177
+        \Sabre\DAV\INode $sabreNode
178
+    ) {
179
+        if (!($sabreNode instanceof \OCA\DAV\Connector\Sabre\Node)) {
180
+            return;
181
+        }
182
+
183
+        // need prefetch ?
184
+        if ($sabreNode instanceof \OCA\DAV\Connector\Sabre\Directory
185
+            && $propFind->getDepth() !== 0
186
+            && (
187
+                !is_null($propFind->getStatus(self::SHARETYPES_PROPERTYNAME)) ||
188
+                !is_null($propFind->getStatus(self::SHAREES_PROPERTYNAME))
189
+            )
190
+        ) {
191
+            $folderNode = $this->userFolder->get($sabreNode->getPath());
192
+
193
+            $this->cachedFolders[] = $sabreNode->getPath();
194
+            $childShares = $this->getSharesFolder($folderNode);
195
+            foreach ($childShares as $id => $shares) {
196
+                $this->cachedShares[$id] = $shares;
197
+            }
198
+        }
199
+
200
+        $propFind->handle(self::SHARETYPES_PROPERTYNAME, function () use ($sabreNode) {
201
+            $shares = $this->getShares($sabreNode);
202
+
203
+            $shareTypes = array_unique(array_map(function(IShare $share) {
204
+                return $share->getShareType();
205
+            }, $shares));
206
+
207
+            return new ShareTypeList($shareTypes);
208
+        });
209
+
210
+        $propFind->handle(self::SHAREES_PROPERTYNAME, function() use ($sabreNode) {
211
+            $shares = $this->getShares($sabreNode);
212
+
213
+            return new ShareeList($shares);
214
+        });
215
+    }
216 216
 }
Please login to merge, or discard this patch.