diff options
author | Thomas Müller <thomas.mueller@tmit.eu> | 2016-01-11 17:29:01 +0100 |
---|---|---|
committer | Thomas Müller <thomas.mueller@tmit.eu> | 2016-01-18 22:14:30 +0100 |
commit | 8b8edc1f5dbe27cbeaf9935aa175037fdf6d0c1c (patch) | |
tree | 0fca2a5dd6c9f53a7c7f4d4b7c172ea79481ccd3 /apps/dav/lib/connector/sabre | |
parent | d7729a8ff6b16aa41f789ef2ca76da27648300fd (diff) | |
download | nextcloud-server-8b8edc1f5dbe27cbeaf9935aa175037fdf6d0c1c.tar.gz nextcloud-server-8b8edc1f5dbe27cbeaf9935aa175037fdf6d0c1c.zip |
Show group shared addressbooks
Diffstat (limited to 'apps/dav/lib/connector/sabre')
-rw-r--r-- | apps/dav/lib/connector/sabre/principal.php | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/apps/dav/lib/connector/sabre/principal.php b/apps/dav/lib/connector/sabre/principal.php index ece799c7019..583deb3a175 100644 --- a/apps/dav/lib/connector/sabre/principal.php +++ b/apps/dav/lib/connector/sabre/principal.php @@ -29,9 +29,10 @@ namespace OCA\DAV\Connector\Sabre; +use OCP\IGroup; +use OCP\IGroupManager; use OCP\IUser; use OCP\IUserManager; -use OCP\IConfig; use Sabre\DAV\Exception; use \Sabre\DAV\PropPatch; use Sabre\DAVACL\PrincipalBackend\BackendInterface; @@ -42,11 +43,15 @@ class Principal implements BackendInterface { /** @var IUserManager */ private $userManager; + /** @var IGroupManager */ + private $groupManager; + /** * @param IUserManager $userManager */ - public function __construct(IUserManager $userManager) { + public function __construct(IUserManager $userManager, IGroupManager $groupManager) { $this->userManager = $userManager; + $this->groupManager = $groupManager; } /** @@ -127,24 +132,24 @@ class Principal implements BackendInterface { public function getGroupMembership($principal) { list($prefix, $name) = URLUtil::splitPath($principal); - $group_membership = array(); if ($prefix === 'principals/users') { $principal = $this->getPrincipalByPath($principal); if (!$principal) { throw new Exception('Principal not found'); } - // TODO: for now the user principal has only its own groups - return array( - 'principals/users/'.$name.'/calendar-proxy-read', - 'principals/users/'.$name.'/calendar-proxy-write', - // The addressbook groups are not supported in Sabre, - // see http://groups.google.com/group/sabredav-discuss/browse_thread/thread/ef2fa9759d55f8c#msg_5720afc11602e753 - //'principals/'.$name.'/addressbook-proxy-read', - //'principals/'.$name.'/addressbook-proxy-write', - ); + $user = $this->userManager->get($name); + $groups = $this->groupManager->getUserGroups($user); + $groups = array_map(function($group) { + /** @var IGroup $group */ + return 'principals/groups/' . $group->getGID(); + }, $groups); + + $groups[]= 'principals/users/'.$name.'/calendar-proxy-read'; + $groups[]= 'principals/users/'.$name.'/calendar-proxy-write'; + return $groups; } - return $group_membership; + return []; } /** |