Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorMorris Jobke <hey@morrisjobke.de>2019-03-14 12:11:31 +0300
committerGitHub <noreply@github.com>2019-03-14 12:11:31 +0300
commit6331f174d3dbf9d088f7f65d5d51032fd4e1095f (patch)
tree7d419e60c531cb5230a9f088b47ebfee23bc6a75 /apps
parent804a15115d9d06b7dbc01496ae066cabba82d6e5 (diff)
parentde8e02628efa546c66f88b49516e2c21b79c27d8 (diff)
Merge pull request #12119 from nextcloud/add_circle_to_caldav_and_filepanel-15
Add Circle to Caldav and Filepanel
Diffstat (limited to 'apps')
-rw-r--r--apps/dav/lib/Connector/Sabre/FilesReportPlugin.php39
-rw-r--r--apps/dav/lib/Connector/Sabre/Principal.php15
-rw-r--r--apps/dav/lib/Connector/Sabre/ServerFactory.php3
-rw-r--r--apps/dav/lib/Server.php3
-rw-r--r--apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php9
-rw-r--r--apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php11
6 files changed, 71 insertions, 9 deletions
diff --git a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
index 3e85615638b..d679fa307c2 100644
--- a/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
+++ b/apps/dav/lib/Connector/Sabre/FilesReportPlugin.php
@@ -25,6 +25,7 @@
namespace OCA\DAV\Connector\Sabre;
use OC\Files\View;
+use OCP\App\IAppManager;
use Sabre\DAV\Exception\PreconditionFailed;
use Sabre\DAV\Exception\BadRequest;
use Sabre\DAV\ServerPlugin;
@@ -46,6 +47,7 @@ class FilesReportPlugin extends ServerPlugin {
const NS_OWNCLOUD = 'http://owncloud.org/ns';
const REPORT_NAME = '{http://owncloud.org/ns}filter-files';
const SYSTEMTAG_PROPERTYNAME = '{http://owncloud.org/ns}systemtag';
+ const CIRCLE_PROPERTYNAME = '{http://owncloud.org/ns}circle';
/**
* Reference to main server object
@@ -97,6 +99,11 @@ class FilesReportPlugin extends ServerPlugin {
private $userFolder;
/**
+ * @var IAppManager
+ */
+ private $appManager;
+
+ /**
* @param Tree $tree
* @param View $view
* @param ISystemTagManager $tagManager
@@ -105,6 +112,7 @@ class FilesReportPlugin extends ServerPlugin {
* @param IUserSession $userSession
* @param IGroupManager $groupManager
* @param Folder $userFolder
+ * @param IAppManager $appManager
*/
public function __construct(Tree $tree,
View $view,
@@ -113,7 +121,8 @@ class FilesReportPlugin extends ServerPlugin {
ITagManager $fileTagger,
IUserSession $userSession,
IGroupManager $groupManager,
- Folder $userFolder
+ Folder $userFolder,
+ IAppManager $appManager
) {
$this->tree = $tree;
$this->fileView = $view;
@@ -123,6 +132,7 @@ class FilesReportPlugin extends ServerPlugin {
$this->userSession = $userSession;
$this->groupManager = $groupManager;
$this->userFolder = $userFolder;
+ $this->appManager = $appManager;
}
/**
@@ -256,14 +266,19 @@ class FilesReportPlugin extends ServerPlugin {
$ns = '{' . $this::NS_OWNCLOUD . '}';
$resultFileIds = null;
$systemTagIds = [];
+ $circlesIds = [];
$favoriteFilter = null;
foreach ($filterRules as $filterRule) {
if ($filterRule['name'] === $ns . 'systemtag') {
$systemTagIds[] = $filterRule['value'];
}
+ if ($filterRule['name'] === self::CIRCLE_PROPERTYNAME) {
+ $circlesIds[] = $filterRule['value'];
+ }
if ($filterRule['name'] === $ns . 'favorite') {
$favoriteFilter = true;
}
+
}
if ($favoriteFilter !== null) {
@@ -282,6 +297,15 @@ class FilesReportPlugin extends ServerPlugin {
}
}
+ if (!empty($circlesIds)) {
+ $fileIds = $this->getCirclesFileIds($circlesIds);
+ if (empty($resultFileIds)) {
+ $resultFileIds = $fileIds;
+ } else {
+ $resultFileIds = array_intersect($fileIds, $resultFileIds);
+ }
+ }
+
return $resultFileIds;
}
@@ -329,6 +353,19 @@ class FilesReportPlugin extends ServerPlugin {
}
/**
+ * @suppress PhanUndeclaredClassMethod
+ * @param array $circlesIds
+ * @return array
+ */
+ private function getCirclesFileIds(array $circlesIds) {
+ if (!$this->appManager->isEnabledForUser('circles') || !class_exists('\OCA\Circles\Api\v1\Circles')) {
+ return [];
+ }
+ return \OCA\Circles\Api\v1\Circles::getFilesForCircles($circlesIds);
+ }
+
+
+ /**
* Prepare propfind response for the given nodes
*
* @param string $filesUri $filesUri URI leading to root of the files URI,
diff --git a/apps/dav/lib/Connector/Sabre/Principal.php b/apps/dav/lib/Connector/Sabre/Principal.php
index a441e1c8122..e7816185394 100644
--- a/apps/dav/lib/Connector/Sabre/Principal.php
+++ b/apps/dav/lib/Connector/Sabre/Principal.php
@@ -45,7 +45,7 @@ use OCP\IUserManager;
use OCP\IUserSession;
use OCP\Share\IManager as IShareManager;
use Sabre\DAV\Exception;
-use \Sabre\DAV\PropPatch;
+use Sabre\DAV\PropPatch;
use Sabre\DAVACL\PrincipalBackend\BackendInterface;
class Principal implements BackendInterface {
@@ -145,7 +145,11 @@ class Principal implements BackendInterface {
return $this->userToPrincipal($user);
}
} else if ($prefix === 'principals/circles') {
- return $this->circleToPrincipal($name);
+ try {
+ return $this->circleToPrincipal($name);
+ } catch (QueryException $e) {
+ return null;
+ }
}
return null;
}
@@ -406,6 +410,7 @@ class Principal implements BackendInterface {
/**
* @param string $circleUniqueId
* @return array|null
+ * @throws \OCP\AppFramework\QueryException
* @suppress PhanUndeclaredClassMethod
* @suppress PhanUndeclaredClassCatch
*/
@@ -438,9 +443,9 @@ class Principal implements BackendInterface {
* Returns the list of circles a principal is a member of
*
* @param string $principal
- * @param bool $needGroups
* @return array
* @throws Exception
+ * @throws \OCP\AppFramework\QueryException
* @suppress PhanUndeclaredClassMethod
*/
public function getCircleMembership($principal):array {
@@ -458,13 +463,13 @@ class Principal implements BackendInterface {
$circles = \OCA\Circles\Api\v1\Circles::joinedCircles($name, true);
$circles = array_map(function($circle) {
- /** @var \OCA\Circles\Model\Circle $group */
+ /** @var \OCA\Circles\Model\Circle $circle */
return 'principals/circles/' . urlencode($circle->getUniqueId());
}, $circles);
return $circles;
-
}
+
return [];
}
diff --git a/apps/dav/lib/Connector/Sabre/ServerFactory.php b/apps/dav/lib/Connector/Sabre/ServerFactory.php
index 12b00be43f5..1821638189d 100644
--- a/apps/dav/lib/Connector/Sabre/ServerFactory.php
+++ b/apps/dav/lib/Connector/Sabre/ServerFactory.php
@@ -180,7 +180,8 @@ class ServerFactory {
\OC::$server->getTagManager(),
$this->userSession,
\OC::$server->getGroupManager(),
- $userFolder
+ $userFolder,
+ \OC::$server->getAppManager()
));
// custom properties plugin must be the last one
$server->addPlugin(
diff --git a/apps/dav/lib/Server.php b/apps/dav/lib/Server.php
index 84a914dbe9a..7eb68ce5874 100644
--- a/apps/dav/lib/Server.php
+++ b/apps/dav/lib/Server.php
@@ -271,7 +271,8 @@ class Server {
\OC::$server->getTagManager(),
$userSession,
\OC::$server->getGroupManager(),
- $userFolder
+ $userFolder,
+ \OC::$server->getAppManager()
));
$lazySearchBackend->setBackend(new \OCA\DAV\Files\FileSearchBackend(
$this->server->tree,
diff --git a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
index c10b333e28d..874d4d84ffa 100644
--- a/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
+++ b/apps/dav/tests/unit/CalDAV/PublicCalendarRootTest.php
@@ -86,6 +86,10 @@ class PublicCalendarRootTest extends TestCase {
->withAnyParameters()
->willReturn([]);
+ $this->principal->expects($this->any())->method('getCircleMembership')
+ ->withAnyParameters()
+ ->willReturn([]);
+
$this->backend = new CalDavBackend(
$db,
$this->principal,
@@ -112,6 +116,11 @@ class PublicCalendarRootTest extends TestCase {
$this->principal->expects($this->any())->method('getGroupMembership')
->withAnyParameters()
->willReturn([]);
+
+ $this->principal->expects($this->any())->method('getCircleMembership')
+ ->withAnyParameters()
+ ->willReturn([]);
+
$books = $this->backend->getCalendarsForUser(self::UNIT_TEST_USER);
foreach ($books as $book) {
$this->backend->deleteCalendar($book['id']);
diff --git a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
index b6290719e7d..09f9ea4dbfa 100644
--- a/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
+++ b/apps/dav/tests/unit/Connector/Sabre/FilesReportPluginTest.php
@@ -28,6 +28,7 @@ namespace OCA\DAV\Tests\unit\Connector\Sabre;
use OCA\DAV\Connector\Sabre\Directory;
use OCA\DAV\Connector\Sabre\FilesReportPlugin as FilesReportPluginImplementation;
+use OCP\App\IAppManager;
use OCP\Files\File;
use OCP\IConfig;
use OCP\IPreview;
@@ -81,6 +82,9 @@ class FilesReportPluginTest extends \Test\TestCase {
/** @var IPreview|\PHPUnit_Framework_MockObject_MockObject * */
private $previewManager;
+ /** @var IAppManager|\PHPUnit_Framework_MockObject_MockObject * */
+ private $appManager;
+
public function setUp() {
parent::setUp();
$this->tree = $this->getMockBuilder(Tree::class)
@@ -112,6 +116,10 @@ class FilesReportPluginTest extends \Test\TestCase {
->disableOriginalConstructor()
->getMock();
+ $this->appManager = $this->getMockBuilder(IAppManager::class)
+ ->disableOriginalConstructor()
+ ->getMock();
+
$this->tagManager = $this->createMock(ISystemTagManager::class);
$this->tagMapper = $this->createMock(ISystemTagObjectMapper::class);
$this->userSession = $this->createMock(IUserSession::class);
@@ -140,7 +148,8 @@ class FilesReportPluginTest extends \Test\TestCase {
$privateTagManager,
$this->userSession,
$this->groupManager,
- $this->userFolder
+ $this->userFolder,
+ $this->appManager
);
}