diff options
-rw-r--r-- | apps/files_sharing/js/share.js | 2 | ||||
-rw-r--r-- | apps/files_sharing/lib/Controller/ShareAPIController.php | 44 | ||||
-rw-r--r-- | apps/files_sharing/lib/Controller/ShareesAPIController.php | 29 | ||||
-rw-r--r-- | apps/files_sharing/lib/MountProvider.php | 3 | ||||
-rw-r--r-- | apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php | 18 | ||||
-rw-r--r-- | apps/files_sharing/tests/MountProviderTest.php | 12 | ||||
-rw-r--r-- | apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js | 18 | ||||
-rw-r--r-- | core/js/share.js | 1 | ||||
-rw-r--r-- | core/js/sharedialogshareelistview.js | 4 | ||||
-rw-r--r-- | core/js/sharedialogview.js | 20 | ||||
-rw-r--r-- | lib/private/Share/Constants.php | 1 | ||||
-rw-r--r-- | lib/private/Share20/Manager.php | 7 | ||||
-rw-r--r-- | lib/private/Share20/ProviderFactory.php | 54 | ||||
-rw-r--r-- | tests/lib/Share20/ManagerTest.php | 2 |
14 files changed, 198 insertions, 17 deletions
diff --git a/apps/files_sharing/js/share.js b/apps/files_sharing/js/share.js index fcae7bc9a58..ed516efc3c9 100644 --- a/apps/files_sharing/js/share.js +++ b/apps/files_sharing/js/share.js @@ -134,6 +134,8 @@ hasShares = true; } else if (shareType === OC.Share.SHARE_TYPE_REMOTE) { hasShares = true; + } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) { + hasShares = true; } }); OCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink); diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php index 6181cde6fe6..711970d0c84 100644 --- a/apps/files_sharing/lib/Controller/ShareAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareAPIController.php @@ -192,8 +192,12 @@ class ShareAPIController extends OCSController { $result['share_with'] = $share->getSharedWith(); $result['share_with_displayname'] = $this->getDisplayNameFromAddressBook($share->getSharedWith(), 'EMAIL'); $result['token'] = $share->getToken(); + } else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_CIRCLE) { + $result['share_with_displayname'] = $share->getSharedWith(); + $result['share_with'] = explode(' ', $share->getSharedWith(), 2)[0]; } + $result['mail_send'] = $share->getMailSend() ? 1 : 0; return $result; @@ -443,6 +447,19 @@ class ShareAPIController extends OCSController { \OCP\Constants::PERMISSION_DELETE); } $share->setSharedWith($shareWith); + } else if ($shareType === \OCP\Share::SHARE_TYPE_CIRCLE) { + if (!\OCP\App::isEnabled('circles')) { + throw new OCSNotFoundException($this->l->t('You cannot share to a Circle if the app is not enabled')); + } + + $circle = \OCA\Circles\Api\Circles::detailsCircle($shareWith); + + // Valid circle is required to share + if ($circle === null) { + throw new OCSNotFoundException($this->l->t('Please specify a valid circle')); + } + $share->setSharedWith($shareWith); + $share->setPermissions($permissions); } else { throw new OCSBadRequestException($this->l->t('Unknown share type')); } @@ -469,10 +486,12 @@ class ShareAPIController extends OCSController { * @return DataResponse */ private function getSharedWithMe($node = null) { + $userShares = $this->shareManager->getSharedWith($this->currentUser, \OCP\Share::SHARE_TYPE_USER, $node, -1, 0); $groupShares = $this->shareManager->getSharedWith($this->currentUser, \OCP\Share::SHARE_TYPE_GROUP, $node, -1, 0); + $circleShares = $this->shareManager->getSharedWith($this->currentUser, \OCP\Share::SHARE_TYPE_CIRCLE, $node, -1, 0); - $shares = array_merge($userShares, $groupShares); + $shares = array_merge($userShares, $groupShares, $circleShares); $shares = array_filter($shares, function (IShare $share) { return $share->getShareOwner() !== $this->currentUser; @@ -592,7 +611,13 @@ class ShareAPIController extends OCSController { } else { $mailShares = []; } - $shares = array_merge($userShares, $groupShares, $linkShares, $mailShares); + if ($this->shareManager->shareProviderExists(\OCP\Share::SHARE_TYPE_CIRCLE)) { + $circleShares = $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_CIRCLE, $path, $reshares, -1, 0); + } else { + $circleShares = []; + } + + $shares = array_merge($userShares, $groupShares, $linkShares, $mailShares, $circleShares); if ($this->shareManager->outgoingServer2ServerSharesAllowed()) { $federatedShares = $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_REMOTE, $path, $reshares, -1, 0); @@ -784,6 +809,11 @@ class ShareAPIController extends OCSController { } } + if ($share->getShareType() === \OCP\Share::SHARE_TYPE_CIRCLE) { + // TODO: have a sanity check like above? + return true; + } + return false; } @@ -832,6 +862,16 @@ class ShareAPIController extends OCSController { // Do nothing, just try the other share type } + + try { + if ($this->shareManager->shareProviderExists(\OCP\Share::SHARE_TYPE_CIRCLE)) { + $share = $this->shareManager->getShareById('ocCircleShare:' . $id); + return $share; + } + } catch (ShareNotFound $e) { + // Do nothing, just try the other share type + } + try { if ($this->shareManager->shareProviderExists(\OCP\Share::SHARE_TYPE_EMAIL)) { $share = $this->shareManager->getShareById('ocMailShare:' . $id); diff --git a/apps/files_sharing/lib/Controller/ShareesAPIController.php b/apps/files_sharing/lib/Controller/ShareesAPIController.php index e4b5b0ce19c..eb65727c770 100644 --- a/apps/files_sharing/lib/Controller/ShareesAPIController.php +++ b/apps/files_sharing/lib/Controller/ShareesAPIController.php @@ -92,12 +92,14 @@ class ShareesAPIController extends OCSController { 'groups' => [], 'remotes' => [], 'emails' => [], + 'circles' => [], ], 'users' => [], 'groups' => [], 'remotes' => [], 'emails' => [], 'lookup' => [], + 'circles' => [], ]; protected $reachedEndFor = []; @@ -294,6 +296,23 @@ class ShareesAPIController extends OCSController { } } + + /** + * @param string $search + */ + protected function getCircles($search) { + $this->result['circles'] = $this->result['exact']['circles'] = []; + + $result = \OCA\Circles\Api\Sharees::search($search, $this->limit, $this->offset); + if (array_key_exists('circles', $result['exact'])) { + $this->result['exact']['circles'] = $result['exact']['circles']; + } + if (array_key_exists('circles', $result)) { + $this->result['circles'] = $result['circles']; + } + } + + /** * @param string $search * @return array @@ -453,6 +472,10 @@ class ShareesAPIController extends OCSController { $shareTypes[] = Share::SHARE_TYPE_EMAIL; } + if (\OCP\App::isEnabled('circles')) { + $shareTypes[] = Share::SHARE_TYPE_CIRCLE; + } + if (isset($_GET['shareType']) && is_array($_GET['shareType'])) { $shareTypes = array_intersect($shareTypes, $_GET['shareType']); sort($shareTypes); @@ -512,6 +535,12 @@ class ShareesAPIController extends OCSController { $this->getGroups($search); } + // Get circles + if (in_array(Share::SHARE_TYPE_CIRCLE, $shareTypes)) { + $this->getCircles($search); + } + + // Get remote $remoteResults = ['results' => [], 'exact' => [], 'exactIdMatch' => false]; if (in_array(Share::SHARE_TYPE_REMOTE, $shareTypes)) { diff --git a/apps/files_sharing/lib/MountProvider.php b/apps/files_sharing/lib/MountProvider.php index 5c5d57057b2..f474190fc98 100644 --- a/apps/files_sharing/lib/MountProvider.php +++ b/apps/files_sharing/lib/MountProvider.php @@ -68,8 +68,11 @@ class MountProvider implements IMountProvider { * @return \OCP\Files\Mount\IMountPoint[] */ public function getMountsForUser(IUser $user, IStorageFactory $storageFactory) { + $shares = $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_USER, null, -1); $shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_GROUP, null, -1)); + $shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), \OCP\Share::SHARE_TYPE_CIRCLE, null, -1)); + // filter out excluded shares and group shares that includes self $shares = array_filter($shares, function (\OCP\Share\IShare $share) use ($user) { return $share->getPermissions() > 0 && $share->getShareOwner() !== $user->getUID(); diff --git a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php index 035085d811a..e3d869db3d6 100644 --- a/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php +++ b/apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php @@ -1576,20 +1576,22 @@ class ShareesAPIControllerTest extends TestCase { return [ ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], ['results' => [], 'exact' => [], 'exactIdMatch' => false], [ - 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []], + 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'circles' => [], 'emails' => []], 'users' => [], 'groups' => [], 'remotes' => [], 'emails' => [], + 'circles' => [], 'lookup' => [], ], false], ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], ['results' => [], 'exact' => [], 'exactIdMatch' => false], [ - 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []], + 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'circles' => [], 'emails' => []], 'users' => [], 'groups' => [], 'remotes' => [], 'emails' => [], + 'circles' => [], 'lookup' => [], ], false], [ @@ -1601,7 +1603,7 @@ class ShareesAPIControllerTest extends TestCase { 'results' => [['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']]], 'exact' => [], 'exactIdMatch' => false, ], [ - 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []], + 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'circles' => [], 'emails' => []], 'users' => [ ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], ], @@ -1612,6 +1614,7 @@ class ShareesAPIControllerTest extends TestCase { ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']], ], 'emails' => [], + 'circles' => [], 'lookup' => [], ], true, ], @@ -1623,7 +1626,7 @@ class ShareesAPIControllerTest extends TestCase { 'results' => [['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']]], 'exact' => [], 'exactIdMatch' => false ], [ - 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []], + 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'circles' => [], 'emails' => []], 'users' => [ ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], ], @@ -1632,6 +1635,7 @@ class ShareesAPIControllerTest extends TestCase { ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']], ], 'emails' => [], + 'circles' => [], 'lookup' => [], ], false, ], @@ -1641,13 +1645,14 @@ class ShareesAPIControllerTest extends TestCase { ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], ], null, null, [ - 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []], + 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'circles' => [], 'emails' => []], 'users' => [ ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], ], 'groups' => [], 'remotes' => [], 'emails' => [], + 'circles' => [], 'lookup' => [], ], false, ], @@ -1658,7 +1663,7 @@ class ShareesAPIControllerTest extends TestCase { ['label' => 'test 2', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], ], null, null, [ - 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []], + 'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'circles' => [], 'emails' => []], 'users' => [ ['label' => 'test 1', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']], ['label' => 'test 2', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test2']], @@ -1666,6 +1671,7 @@ class ShareesAPIControllerTest extends TestCase { 'groups' => [], 'remotes' => [], 'emails' => [], + 'circles' => [], 'lookup' => [], ], true, ], diff --git a/apps/files_sharing/tests/MountProviderTest.php b/apps/files_sharing/tests/MountProviderTest.php index 0be74a645a9..1c83d91d08f 100644 --- a/apps/files_sharing/tests/MountProviderTest.php +++ b/apps/files_sharing/tests/MountProviderTest.php @@ -113,6 +113,8 @@ class MountProviderTest extends \Test\TestCase { $this->makeMockShare(4, 101, 'user2', '/share4', 31), $this->makeMockShare(5, 100, 'user1', '/share4', 31), ]; + // tests regarding circles are made in the app itself. + $circleShares = []; $this->user->expects($this->any()) ->method('getUID') ->will($this->returnValue('user1')); @@ -124,6 +126,10 @@ class MountProviderTest extends \Test\TestCase { ->method('getSharedWith') ->with('user1', \OCP\Share::SHARE_TYPE_GROUP, null, -1) ->will($this->returnValue($groupShares)); + $this->shareManager->expects($this->at(2)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_CIRCLE, null, -1) + ->will($this->returnValue($circleShares)); $this->shareManager->expects($this->any()) ->method('newShare') ->will($this->returnCallback(function() use ($rootFolder, $userManager) { @@ -293,6 +299,8 @@ class MountProviderTest extends \Test\TestCase { ->method('getUID') ->will($this->returnValue('user1')); + // tests regarding circles are made in the app itself. + $circleShares = []; $this->shareManager->expects($this->at(0)) ->method('getSharedWith') ->with('user1', \OCP\Share::SHARE_TYPE_USER) @@ -301,6 +309,10 @@ class MountProviderTest extends \Test\TestCase { ->method('getSharedWith') ->with('user1', \OCP\Share::SHARE_TYPE_GROUP, null, -1) ->will($this->returnValue($groupShares)); + $this->shareManager->expects($this->at(2)) + ->method('getSharedWith') + ->with('user1', \OCP\Share::SHARE_TYPE_CIRCLE, null, -1) + ->will($this->returnValue($circleShares)); $this->shareManager->expects($this->any()) ->method('newShare') ->will($this->returnCallback(function() use ($rootFolder, $userManager) { diff --git a/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js b/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js index b2193f4458b..501dd819fa8 100644 --- a/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js +++ b/apps/files_sharing/tests/js/sharedbreadcrumviewSpec.js @@ -120,6 +120,21 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() { expect(bc.$el.find('.shared').length).toEqual(1); expect(bc.$el.find('.icon-public').length).toEqual(1); }); + it('Render shared if dir is shared by circle', function() { + var dirInfo = new OC.Files.FileInfo({ + id: 42, + path: '/foo', + type: 'dir', + shareTypes: [OC.Share.SHARE_TYPE_CIRCLE] + }); + bc.setDirectoryInfo(dirInfo); + bc.setDirectory('/foo'); + bc.render(); + expect(bc.$el.hasClass('breadcrumb')).toEqual(true); + expect(bc.$el.find('.icon-share').length).toEqual(1); + expect(bc.$el.find('.shared').length).toEqual(1); + expect(bc.$el.find('.icon-public').length).toEqual(0); + }); it('Render shared if dir is shared with remote', function() { var dirInfo = new OC.Files.FileInfo({ id: 42, @@ -145,7 +160,8 @@ describe('OCA.Sharing.ShareBreadCrumbView tests', function() { OC.Share.SHARE_TYPE_GROUP, OC.Share.SHARE_TYPE_LINK, OC.Share.SHARE_TYPE_EMAIL, - OC.Share.SHARE_TYPE_REMOTE + OC.Share.SHARE_TYPE_REMOTE, + OC.Share.SHARE_TYPE_CIRCLE ] }); bc.setDirectoryInfo(dirInfo); diff --git a/core/js/share.js b/core/js/share.js index 5bde7e63f36..ba1afe08190 100644 --- a/core/js/share.js +++ b/core/js/share.js @@ -9,6 +9,7 @@ OC.Share = _.extend(OC.Share || {}, { SHARE_TYPE_LINK:3, SHARE_TYPE_EMAIL:4, SHARE_TYPE_REMOTE:6, + SHARE_TYPE_CIRCLE:7, /** * Regular expression for splitting parts of remote share owners: diff --git a/core/js/sharedialogshareelistview.js b/core/js/sharedialogshareelistview.js index 47dc62d14fe..e46a761db6c 100644 --- a/core/js/sharedialogshareelistview.js +++ b/core/js/sharedialogshareelistview.js @@ -158,6 +158,7 @@ shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'remote') + ')'; } else if (shareType === OC.Share.SHARE_TYPE_EMAIL) { shareWithDisplayName = shareWithDisplayName + " (" + t('core', 'email') + ')'; + } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) { } if (shareType === OC.Share.SHARE_TYPE_GROUP) { @@ -166,6 +167,8 @@ shareWithTitle = shareWith + " (" + t('core', 'remote') + ')'; } else if (shareType === OC.Share.SHARE_TYPE_EMAIL) { shareWithTitle = shareWith + " (" + t('core', 'email') + ')'; + } else if (shareType === OC.Share.SHARE_TYPE_CIRCLE) { + shareWithTitle = shareWith; } return _.extend(hasPermissionOverride, { @@ -183,6 +186,7 @@ modSeed: shareType !== OC.Share.SHARE_TYPE_USER, isRemoteShare: shareType === OC.Share.SHARE_TYPE_REMOTE, isMailShare: shareType === OC.Share.SHARE_TYPE_EMAIL, + isCircleShare: shareType === OC.Share.SHARE_TYPE_CIRCLE, isFileSharedByMail: shareType === OC.Share.SHARE_TYPE_EMAIL && !this.model.isFolder() }); }, diff --git a/core/js/sharedialogview.js b/core/js/sharedialogview.js index a63960da2b8..58dd706fb1f 100644 --- a/core/js/sharedialogview.js +++ b/core/js/sharedialogview.js @@ -186,18 +186,24 @@ } else { var emails = []; } + if (typeof(result.ocs.data.circles) !== 'undefined') { + var circles = result.ocs.data.exact.circles.concat(result.ocs.data.circles); + } else { + var circles = []; + } var usersLength; var groupsLength; var remotesLength; var emailsLength; + var circlesLength; var lookupLength; var i, j; //Filter out the current user usersLength = users.length; - for (i = 0 ; i < usersLength; i++) { + for (i = 0; i < usersLength; i++) { if (users[i].value.shareWith === OC.currentUser) { users.splice(i, 1); break; @@ -254,10 +260,18 @@ break; } } + } else if (share.share_type === OC.Share.SHARE_TYPE_CIRCLE) { + circlesLength = circles.length; + for (j = 0; j < circlesLength; j++) { + if (circles[j].value.shareWith === share.share_with) { + circles.splice(j, 1); + break; + } + } } } - var suggestions = users.concat(groups).concat(remotes).concat(emails).concat(lookup); + var suggestions = users.concat(groups).concat(remotes).concat(emails).concat(circles).concat(lookup); if (suggestions.length > 0) { $shareWithField @@ -313,6 +327,8 @@ text = t('core', '{sharee} (remote)', { sharee: text }, undefined, { escape: false }); } else if (item.value.shareType === OC.Share.SHARE_TYPE_EMAIL) { text = t('core', '{sharee} (email)', { sharee: text }, undefined, { escape: false }); + } else if (item.value.shareType === OC.Share.SHARE_TYPE_CIRCLE) { + text = t('core', '{sharee} ({type}, {owner})', {sharee: text, type: item.value.circleInfo, owner: item.value.circleOwner}, undefined, {escape: false}); } var insert = $("<div class='share-autocomplete-item'/>"); var avatar = $("<div class='avatardiv'></div>").appendTo(insert); diff --git a/lib/private/Share/Constants.php b/lib/private/Share/Constants.php index f13f83f8ba9..1eb5b1e078b 100644 --- a/lib/private/Share/Constants.php +++ b/lib/private/Share/Constants.php @@ -32,6 +32,7 @@ class Constants { const SHARE_TYPE_EMAIL = 4; const SHARE_TYPE_CONTACT = 5; // ToDo Check if it is still in use otherwise remove it const SHARE_TYPE_REMOTE = 6; + const SHARE_TYPE_CIRCLE = 7; const FORMAT_NONE = -1; const FORMAT_STATUSES = -2; diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php index acc142f62be..3b565d1ba8c 100644 --- a/lib/private/Share20/Manager.php +++ b/lib/private/Share20/Manager.php @@ -190,9 +190,14 @@ class Manager implements IManager { if ($share->getSharedWith() === null) { throw new \InvalidArgumentException('SharedWith should not be empty'); } + } else if ($share->getShareType() === \OCP\Share::SHARE_TYPE_CIRCLE) { + $circle = \OCA\Circles\Api\Circles::detailsCircle($share->getSharedWith()); + if ($circle === null) { + throw new \InvalidArgumentException('SharedWith is not a valid circle'); + } } else { // We can't handle other types yet - throw new \InvalidArgumentException('unkown share type'); + throw new \InvalidArgumentException('unknown share type'); } // Verify the initiator of the share is set diff --git a/lib/private/Share20/ProviderFactory.php b/lib/private/Share20/ProviderFactory.php index bbc6f4ffbd3..1a39cfbf337 100644 --- a/lib/private/Share20/ProviderFactory.php +++ b/lib/private/Share20/ProviderFactory.php @@ -48,9 +48,13 @@ class ProviderFactory implements IProviderFactory { private $federatedProvider = null; /** @var ShareByMailProvider */ private $shareByMailProvider; + /** @var \OCA\Circles\ShareByCircleProvider; + * ShareByCircleProvider */ + private $shareByCircleProvider; /** * IProviderFactory constructor. + * * @param IServerContainer $serverContainer */ public function __construct(IServerContainer $serverContainer) { @@ -165,6 +169,36 @@ class ProviderFactory implements IProviderFactory { /** + * Create the circle share provider + * + * @return FederatedShareProvider + */ + protected function getShareByCircleProvider() { + + $appManager = $this->serverContainer->getAppManager(); + if (!$appManager->isEnabledForUser('circles')) { + return null; + } + + + if ($this->shareByCircleProvider === null) { + + $this->shareByCircleProvider = new \OCA\Circles\ShareByCircleProvider( + $this->serverContainer->getDatabaseConnection(), + $this->serverContainer->getSecureRandom(), + $this->serverContainer->getUserManager(), + $this->serverContainer->getLazyRootFolder(), + $this->serverContainer->getL10N('circles'), + $this->serverContainer->getLogger(), + $this->serverContainer->getURLGenerator() + ); + } + + return $this->shareByCircleProvider; + } + + + /** * @inheritdoc */ public function getProvider($id) { @@ -175,6 +209,8 @@ class ProviderFactory implements IProviderFactory { $provider = $this->federatedShareProvider(); } else if ($id === 'ocMailShare') { $provider = $this->getShareByMailProvider(); + } else if ($id === 'ocCircleShare') { + $provider = $this->getShareByCircleProvider(); } if ($provider === null) { @@ -190,16 +226,20 @@ class ProviderFactory implements IProviderFactory { public function getProviderForType($shareType) { $provider = null; - if ($shareType === \OCP\Share::SHARE_TYPE_USER || + if ($shareType === \OCP\Share::SHARE_TYPE_USER || $shareType === \OCP\Share::SHARE_TYPE_GROUP || - $shareType === \OCP\Share::SHARE_TYPE_LINK) { + $shareType === \OCP\Share::SHARE_TYPE_LINK + ) { $provider = $this->defaultShareProvider(); } else if ($shareType === \OCP\Share::SHARE_TYPE_REMOTE) { $provider = $this->federatedShareProvider(); } else if ($shareType === \OCP\Share::SHARE_TYPE_EMAIL) { $provider = $this->getShareByMailProvider(); + } else if ($shareType === \OCP\Share::SHARE_TYPE_CIRCLE) { + $provider = $this->getShareByCircleProvider(); } + if ($provider === null) { throw new ProviderException('No share provider for share type ' . $shareType); } @@ -208,10 +248,16 @@ class ProviderFactory implements IProviderFactory { } public function getAllProviders() { + $shares = [$this->defaultShareProvider(), $this->federatedShareProvider()]; $shareByMail = $this->getShareByMailProvider(); if ($shareByMail !== null) { - return [$this->defaultShareProvider(), $this->federatedShareProvider(), $shareByMail]; + $shares[] = $shareByMail; + } + $shareByCircle = $this->getShareByCircleProvider(); + if ($shareByCircle !== null) { + $shares[] = $shareByCircle; } - return [$this->defaultShareProvider(), $this->federatedShareProvider()]; + + return $shares; } } diff --git a/tests/lib/Share20/ManagerTest.php b/tests/lib/Share20/ManagerTest.php index 7b01a8f9e70..448373a8368 100644 --- a/tests/lib/Share20/ManagerTest.php +++ b/tests/lib/Share20/ManagerTest.php @@ -622,7 +622,7 @@ class ManagerTest extends \Test\TestCase { [$this->createShare(null, \OCP\Share::SHARE_TYPE_LINK, $file, $user2, $user0, $user0, 31, null, null), 'SharedWith should be empty', true], [$this->createShare(null, \OCP\Share::SHARE_TYPE_LINK, $file, $group0, $user0, $user0, 31, null, null), 'SharedWith should be empty', true], [$this->createShare(null, \OCP\Share::SHARE_TYPE_LINK, $file, 'foo@bar.com', $user0, $user0, 31, null, null), 'SharedWith should be empty', true], - [$this->createShare(null, -1, $file, null, $user0, $user0, 31, null, null), 'unkown share type', true], + [$this->createShare(null, -1, $file, null, $user0, $user0, 31, null, null), 'unknown share type', true], [$this->createShare(null, \OCP\Share::SHARE_TYPE_USER, $file, $user2, null, $user0, 31, null, null), 'SharedBy should be set', true], [$this->createShare(null, \OCP\Share::SHARE_TYPE_GROUP, $file, $group0, null, $user0, 31, null, null), 'SharedBy should be set', true], |