2525namespace OCA \DAV \Connector \Sabre ;
2626
2727use OC \Files \View ;
28+ use OCP \App \IAppManager ;
2829use Sabre \DAV \Exception \PreconditionFailed ;
2930use Sabre \DAV \Exception \BadRequest ;
3031use Sabre \DAV \ServerPlugin ;
@@ -46,6 +47,7 @@ class FilesReportPlugin extends ServerPlugin {
4647 const NS_OWNCLOUD = 'http://owncloud.org/ns ' ;
4748 const REPORT_NAME = '{http://owncloud.org/ns}filter-files ' ;
4849 const SYSTEMTAG_PROPERTYNAME = '{http://owncloud.org/ns}systemtag ' ;
50+ const CIRCLE_PROPERTYNAME = '{http://owncloud.org/ns}circle ' ;
4951
5052 /**
5153 * Reference to main server object
@@ -96,6 +98,11 @@ class FilesReportPlugin extends ServerPlugin {
9698 */
9799 private $ userFolder ;
98100
101+ /**
102+ * @var IAppManager
103+ */
104+ private $ appManager ;
105+
99106 /**
100107 * @param Tree $tree
101108 * @param View $view
@@ -105,6 +112,7 @@ class FilesReportPlugin extends ServerPlugin {
105112 * @param IUserSession $userSession
106113 * @param IGroupManager $groupManager
107114 * @param Folder $userFolder
115+ * @param IAppManager $appManager
108116 */
109117 public function __construct (Tree $ tree ,
110118 View $ view ,
@@ -113,7 +121,8 @@ public function __construct(Tree $tree,
113121 ITagManager $ fileTagger ,
114122 IUserSession $ userSession ,
115123 IGroupManager $ groupManager ,
116- Folder $ userFolder
124+ Folder $ userFolder ,
125+ IAppManager $ appManager
117126 ) {
118127 $ this ->tree = $ tree ;
119128 $ this ->fileView = $ view ;
@@ -123,6 +132,7 @@ public function __construct(Tree $tree,
123132 $ this ->userSession = $ userSession ;
124133 $ this ->groupManager = $ groupManager ;
125134 $ this ->userFolder = $ userFolder ;
135+ $ this ->appManager = $ appManager ;
126136 }
127137
128138 /**
@@ -256,14 +266,19 @@ protected function processFilterRules($filterRules) {
256266 $ ns = '{ ' . $ this ::NS_OWNCLOUD . '} ' ;
257267 $ resultFileIds = null ;
258268 $ systemTagIds = [];
269+ $ circlesIds = [];
259270 $ favoriteFilter = null ;
260271 foreach ($ filterRules as $ filterRule ) {
261272 if ($ filterRule ['name ' ] === $ ns . 'systemtag ' ) {
262273 $ systemTagIds [] = $ filterRule ['value ' ];
263274 }
275+ if ($ filterRule ['name ' ] === self ::CIRCLE_PROPERTYNAME ) {
276+ $ circlesIds [] = $ filterRule ['value ' ];
277+ }
264278 if ($ filterRule ['name ' ] === $ ns . 'favorite ' ) {
265279 $ favoriteFilter = true ;
266280 }
281+
267282 }
268283
269284 if ($ favoriteFilter !== null ) {
@@ -282,6 +297,15 @@ protected function processFilterRules($filterRules) {
282297 }
283298 }
284299
300+ if (!empty ($ circlesIds )) {
301+ $ fileIds = $ this ->getCirclesFileIds ($ circlesIds );
302+ if (empty ($ resultFileIds )) {
303+ $ resultFileIds = $ fileIds ;
304+ } else {
305+ $ resultFileIds = array_intersect ($ fileIds , $ resultFileIds );
306+ }
307+ }
308+
285309 return $ resultFileIds ;
286310 }
287311
@@ -328,6 +352,19 @@ private function getSystemTagFileIds($systemTagIds) {
328352 return $ resultFileIds ;
329353 }
330354
355+ /**
356+ * @suppress PhanUndeclaredClassMethod
357+ * @param array $circlesIds
358+ * @return array
359+ */
360+ private function getCirclesFileIds (array $ circlesIds ) {
361+ if (!$ this ->appManager ->isEnabledForUser ('circles ' ) || !class_exists ('\OCA\Circles\Api\v1\Circles ' )) {
362+ return [];
363+ }
364+ return \OCA \Circles \Api \v1 \Circles::getFilesForCircles ($ circlesIds );
365+ }
366+
367+
331368 /**
332369 * Prepare propfind response for the given nodes
333370 *
0 commit comments