Merge pull request #37347 from nextcloud/backport/37139/stable25

This commit is contained in:
Julius Härtl 2023-03-24 09:53:50 +01:00 committed by GitHub
commit 81e8da2b95
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 172 additions and 21 deletions

View file

@ -160,6 +160,19 @@ class Sharing extends Action {
'id',
]
);
} elseif ($params['shareType'] === IShare::TYPE_SCIENCEMESH) {
$this->log(
'The %s "%s" with ID "%s" has been shared to the sciencemesh user "%s" with permissions "%s" (Share ID: %s)',
$params,
[
'itemType',
'path',
'itemSource',
'shareWith',
'permissions',
'id',
]
);
}
}
@ -276,6 +289,18 @@ class Sharing extends Action {
'id',
]
);
} elseif ($params['shareType'] === IShare::TYPE_SCIENCEMESH) {
$this->log(
'The %s "%s" with ID "%s" has been unshared from the sciencemesh user "%s" (Share ID: %s)',
$params,
[
'itemType',
'fileTarget',
'itemSource',
'shareWith',
'id',
]
);
}
}

View file

@ -110,6 +110,7 @@ class SharesPlugin extends \Sabre\DAV\ServerPlugin {
IShare::TYPE_ROOM,
IShare::TYPE_CIRCLE,
IShare::TYPE_DECK,
IShare::TYPE_SCIENCEMESH,
];
foreach ($requestedShareTypes as $requestedShareType) {
$shares = $this->shareManager->getSharesBy(

View file

@ -278,6 +278,7 @@ class SharesPluginTest extends \Test\TestCase {
[[IShare::TYPE_REMOTE]],
[[IShare::TYPE_ROOM]],
[[IShare::TYPE_DECK]],
[[IShare::TYPE_SCIENCEMESH]],
[[IShare::TYPE_USER, IShare::TYPE_GROUP]],
[[IShare::TYPE_USER, IShare::TYPE_GROUP, IShare::TYPE_LINK]],
[[IShare::TYPE_USER, IShare::TYPE_LINK]],

View file

@ -211,6 +211,7 @@ class ApiController extends Controller {
IShare::TYPE_EMAIL,
IShare::TYPE_ROOM,
IShare::TYPE_DECK,
IShare::TYPE_SCIENCEMESH,
];
$shareTypes = [];

View file

@ -286,7 +286,7 @@ class OwnershipTransferService {
$shares = [];
$progress = new ProgressBar($output);
foreach ([IShare::TYPE_GROUP, IShare::TYPE_USER, IShare::TYPE_LINK, IShare::TYPE_REMOTE, IShare::TYPE_ROOM, IShare::TYPE_EMAIL, IShare::TYPE_CIRCLE, IShare::TYPE_DECK] as $shareType) {
foreach ([IShare::TYPE_GROUP, IShare::TYPE_USER, IShare::TYPE_LINK, IShare::TYPE_REMOTE, IShare::TYPE_ROOM, IShare::TYPE_EMAIL, IShare::TYPE_CIRCLE, IShare::TYPE_DECK, IShare::TYPE_SCIENCEMESH] as $shareType) {
$offset = 0;
while (true) {
$sharePage = $this->shareManager->getSharesBy($sourceUid, $shareType, null, true, 50, $offset);

View file

@ -159,6 +159,14 @@ class DeletedShareAPIController extends OCSController {
$result = array_merge($result, $this->getDeckShareHelper()->formatShare($share));
} catch (QueryException $e) {
}
} elseif ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
$result['share_with'] = $share->getSharedWith();
$result['share_with_displayname'] = '';
try {
$result = array_merge($result, $this->getSciencemeshShareHelper()->formatShare($share));
} catch (QueryException $e) {
}
}
return $result;
@ -171,8 +179,9 @@ class DeletedShareAPIController extends OCSController {
$groupShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_GROUP, null, -1, 0);
$roomShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_ROOM, null, -1, 0);
$deckShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_DECK, null, -1, 0);
$sciencemeshShares = $this->shareManager->getDeletedSharedWith($this->userId, IShare::TYPE_SCIENCEMESH, null, -1, 0);
$shares = array_merge($groupShares, $roomShares, $deckShares);
$shares = array_merge($groupShares, $roomShares, $deckShares, $sciencemeshShares);
$shares = array_map(function (IShare $share) {
return $this->formatShare($share);
@ -224,7 +233,7 @@ class DeletedShareAPIController extends OCSController {
}
/**
* Returns the helper of ShareAPIHelper for deck shares.
* Returns the helper of DeletedShareAPIHelper for deck shares.
*
* If the Deck application is not enabled or the helper is not available
* a QueryException is thrown instead.
@ -239,4 +248,21 @@ class DeletedShareAPIController extends OCSController {
return $this->serverContainer->get('\OCA\Deck\Sharing\ShareAPIHelper');
}
/**
* Returns the helper of DeletedShareAPIHelper for sciencemesh shares.
*
* If the sciencemesh application is not enabled or the helper is not available
* a QueryException is thrown instead.
*
* @return \OCA\Deck\Sharing\ShareAPIHelper
* @throws QueryException
*/
private function getSciencemeshShareHelper() {
if (!$this->appManager->isEnabledForUser('sciencemesh')) {
throw new QueryException();
}
return $this->serverContainer->get('\OCA\ScienceMesh\Sharing\ShareAPIHelper');
}
}

View file

@ -320,6 +320,14 @@ class ShareAPIController extends OCSController {
$result = array_merge($result, $this->getDeckShareHelper()->formatShare($share));
} catch (QueryException $e) {
}
} elseif ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
$result['share_with'] = $share->getSharedWith();
$result['share_with_displayname'] = '';
try {
$result = array_merge($result, $this->getSciencemeshShareHelper()->formatShare($share));
} catch (QueryException $e) {
}
}
@ -687,6 +695,12 @@ class ShareAPIController extends OCSController {
} catch (QueryException $e) {
throw new OCSForbiddenException($this->l->t('Sharing %s failed because the back end does not support room shares', [$node->getPath()]));
}
} elseif ($shareType === IShare::TYPE_SCIENCEMESH) {
try {
$this->getSciencemeshShareHelper()->createShare($share, $shareWith, $permissions, $expireDate);
} catch (QueryException $e) {
throw new OCSForbiddenException($this->l->t('Sharing %s failed because the back end does not support sciencemesh shares', [$node->getPath()]));
}
} else {
throw new OCSBadRequestException($this->l->t('Unknown share type'));
}
@ -725,8 +739,9 @@ class ShareAPIController extends OCSController {
$circleShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_CIRCLE, $node, -1, 0);
$roomShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_ROOM, $node, -1, 0);
$deckShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_DECK, $node, -1, 0);
$sciencemeshShares = $this->shareManager->getSharedWith($this->currentUser, IShare::TYPE_SCIENCEMESH, $node, -1, 0);
$shares = array_merge($userShares, $groupShares, $circleShares, $roomShares, $deckShares);
$shares = array_merge($userShares, $groupShares, $circleShares, $roomShares, $deckShares, $sciencemeshShares);
$filteredShares = array_filter($shares, function (IShare $share) {
return $share->getShareOwner() !== $this->currentUser;
@ -1409,6 +1424,14 @@ class ShareAPIController extends OCSController {
}
}
if ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
try {
return $this->getSciencemeshShareHelper()->canAccessShare($share, $this->currentUser);
} catch (QueryException $e) {
return false;
}
}
return false;
}
@ -1485,7 +1508,8 @@ class ShareAPIController extends OCSController {
protected function canDeleteShareFromSelf(\OCP\Share\IShare $share): bool {
if ($share->getShareType() !== IShare::TYPE_GROUP &&
$share->getShareType() !== IShare::TYPE_ROOM &&
$share->getShareType() !== IShare::TYPE_DECK
$share->getShareType() !== IShare::TYPE_DECK &&
$share->getShareType() !== IShare::TYPE_SCIENCEMESH
) {
return false;
}
@ -1522,6 +1546,14 @@ class ShareAPIController extends OCSController {
}
}
if ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
try {
return $this->getSciencemeshShareHelper()->canAccessShare($share, $this->currentUser);
} catch (QueryException $e) {
return false;
}
}
return false;
}
@ -1601,6 +1633,15 @@ class ShareAPIController extends OCSController {
// Do nothing, just try the other share type
}
try {
if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) {
$share = $this->shareManager->getShareById('sciencemesh:' . $id, $this->currentUser);
return $share;
}
} catch (ShareNotFound $e) {
// Do nothing, just try the other share type
}
if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
throw new ShareNotFound();
}
@ -1664,6 +1705,23 @@ class ShareAPIController extends OCSController {
return $this->serverContainer->get('\OCA\Deck\Sharing\ShareAPIHelper');
}
/**
* Returns the helper of ShareAPIHelper for sciencemesh shares.
*
* If the sciencemesh application is not enabled or the helper is not available
* a QueryException is thrown instead.
*
* @return \OCA\Deck\Sharing\ShareAPIHelper
* @throws QueryException
*/
private function getSciencemeshShareHelper() {
if (!$this->appManager->isEnabledForUser('sciencemesh')) {
throw new QueryException();
}
return $this->serverContainer->get('\OCA\ScienceMesh\Sharing\ShareAPIHelper');
}
/**
* @param string $viewer
* @param Node $node
@ -1679,7 +1737,8 @@ class ShareAPIController extends OCSController {
IShare::TYPE_EMAIL,
IShare::TYPE_CIRCLE,
IShare::TYPE_ROOM,
IShare::TYPE_DECK
IShare::TYPE_DECK,
IShare::TYPE_SCIENCEMESH
];
// Should we assume that the (currentUser) viewer is the owner of the node !?
@ -1832,8 +1891,12 @@ class ShareAPIController extends OCSController {
// TALK SHARES
$roomShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_ROOM, $path, $reshares, -1, 0);
// DECK SHARES
$deckShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_DECK, $path, $reshares, -1, 0);
// SCIENCEMESH SHARES
$sciencemeshShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_SCIENCEMESH, $path, $reshares, -1, 0);
// FEDERATION
if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
$federatedShares = $this->shareManager->getSharesBy($this->currentUser, IShare::TYPE_REMOTE, $path, $reshares, -1, 0);
@ -1846,7 +1909,7 @@ class ShareAPIController extends OCSController {
$federatedGroupShares = [];
}
return array_merge($userShares, $groupShares, $linkShares, $mailShares, $circleShares, $roomShares, $deckShares, $federatedShares, $federatedGroupShares);
return array_merge($userShares, $groupShares, $linkShares, $mailShares, $circleShares, $roomShares, $deckShares, $sciencemeshShares, $federatedShares, $federatedGroupShares);
}

View file

@ -188,6 +188,10 @@ class ShareesAPIController extends OCSController {
$shareTypes[] = IShare::TYPE_ROOM;
}
if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) {
$shareTypes[] = IShare::TYPE_SCIENCEMESH;
}
if ($this->shareManager->shareProviderExists(IShare::TYPE_DECK)) {
$shareTypes[] = IShare::TYPE_DECK;
}
@ -203,6 +207,10 @@ class ShareesAPIController extends OCSController {
$shareTypes[] = IShare::TYPE_CIRCLE;
}
if ($this->shareManager->shareProviderExists(IShare::TYPE_SCIENCEMESH)) {
$shareTypes[] = IShare::TYPE_SCIENCEMESH;
}
if ($this->shareManager->shareProviderExists(IShare::TYPE_DECK)) {
$shareTypes[] = IShare::TYPE_DECK;
}

View file

@ -97,6 +97,7 @@ class MountProvider implements IMountProvider {
$shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_CIRCLE, null, -1));
$shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_ROOM, null, -1));
$shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_DECK, null, -1));
$shares = array_merge($shares, $this->shareManager->getSharedWith($user->getUID(), IShare::TYPE_SCIENCEMESH, null, -1));
// filter out excluded shares and group shares that includes self

View file

@ -194,6 +194,7 @@ export default {
this.SHARE_TYPES.SHARE_TYPE_ROOM,
this.SHARE_TYPES.SHARE_TYPE_GUEST,
this.SHARE_TYPES.SHARE_TYPE_DECK,
this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH,
]
if (OC.getCapabilities().files_sharing.public.enabled === true) {
@ -420,6 +421,11 @@ export default {
icon: 'icon-deck',
iconTitle: t('files_sharing', 'Deck board'),
}
case this.SHARE_TYPES.SHARE_TYPE_SCIENCEMESH:
return {
icon: 'icon-sciencemesh',
iconTitle: t('files_sharing', 'Science Mesh'),
}
default:
return {}
}

View file

@ -34,5 +34,6 @@ Object.assign(OC, {
SHARE_TYPE_REMOTE_GROUP: 9,
SHARE_TYPE_ROOM: 10,
SHARE_TYPE_DECK: 12,
SHARE_TYPE_SCIENCEMESH: 15,
},
})

View file

@ -201,6 +201,8 @@ import { getCapabilities } from '@nextcloud/capabilities'
hasShares = true
} else if (shareType === ShareTypes.SHARE_TYPE_DECK) {
hasShares = true
} else if (shareType === ShareTypes.SHARE_TYPE_SCIENCEMESH) {
hasShares = true
}
})
OCA.Sharing.Util._updateFileActionIcon($tr, hasShares, hasLink)

View file

@ -218,10 +218,10 @@ class ShareAPIControllerTest extends TestCase {
$this->expectExceptionMessage('Wrong share ID, share does not exist');
$this->shareManager
->expects($this->exactly(6))
->expects($this->exactly(7))
->method('getShareById')
->willReturnCallback(function ($id) {
if ($id === 'ocinternal:42' || $id === 'ocRoomShare:42' || $id === 'ocFederatedSharing:42' || $id === 'ocCircleShare:42' || $id === 'ocMailShare:42' || $id === 'deck:42') {
if ($id === 'ocinternal:42' || $id === 'ocRoomShare:42' || $id === 'ocFederatedSharing:42' || $id === 'ocCircleShare:42' || $id === 'ocMailShare:42' || $id === 'deck:42' || $id === 'sciencemesh:42') {
throw new \OCP\Share\Exceptions\ShareNotFound();
} else {
throw new \Exception();

View file

@ -163,12 +163,13 @@ class MountProviderTest extends \Test\TestCase {
$this->makeMockShare(12, 103, 'user2', '/share7', 31),
$this->makeMockShare(13, 103, 'user2', '/share7', 31),
];
// tests regarding circles are made in the app itself.
// tests regarding circles and sciencemesh are made in the apps themselves.
$circleShares = [];
$sciencemeshShares = [];
$this->user->expects($this->any())
->method('getUID')
->willReturn('user1');
$this->shareManager->expects($this->exactly(5))
$this->shareManager->expects($this->exactly(6))
->method('getSharedWith')
->withConsecutive(
['user1', IShare::TYPE_USER],
@ -176,12 +177,14 @@ class MountProviderTest extends \Test\TestCase {
['user1', IShare::TYPE_CIRCLE, null, -1],
['user1', IShare::TYPE_ROOM, null, -1],
['user1', IShare::TYPE_DECK, null, -1],
['user1', IShare::TYPE_SCIENCEMESH, null, -1],
)->willReturnOnConsecutiveCalls(
$userShares,
$groupShares,
$circleShares,
$roomShares,
$deckShares,
$sciencemeshShares
);
$this->shareManager->expects($this->any())
->method('newShare')
@ -386,7 +389,8 @@ class MountProviderTest extends \Test\TestCase {
$circleShares = [];
$roomShares = [];
$deckShares = [];
$this->shareManager->expects($this->exactly(5))
$sciencemeshShares = [];
$this->shareManager->expects($this->exactly(6))
->method('getSharedWith')
->withConsecutive(
['user1', IShare::TYPE_USER],
@ -394,12 +398,14 @@ class MountProviderTest extends \Test\TestCase {
['user1', IShare::TYPE_CIRCLE, null, -1],
['user1', IShare::TYPE_ROOM, null, -1],
['user1', IShare::TYPE_DECK, null, -1],
['user1', IShare::TYPE_SCIENCEMESH, null, -1],
)->willReturnOnConsecutiveCalls(
$userShares,
$groupShares,
$circleShares,
$roomShares,
$deckShares,
$sciencemeshShares
);
$this->shareManager->expects($this->any())
->method('newShare')

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1,3 +1,3 @@
/*! For license information please see files_sharing-main.js.LICENSE.txt */
Object.assign(OC,{Share:{SHARE_TYPE_USER:0,SHARE_TYPE_GROUP:1,SHARE_TYPE_LINK:3,SHARE_TYPE_EMAIL:4,SHARE_TYPE_REMOTE:6,SHARE_TYPE_CIRCLE:7,SHARE_TYPE_GUEST:8,SHARE_TYPE_REMOTE_GROUP:9,SHARE_TYPE_ROOM:10,SHARE_TYPE_DECK:12}});
//# sourceMappingURL=files_sharing-main.js.map?v=4c7ee07633a21133e94e
Object.assign(OC,{Share:{SHARE_TYPE_USER:0,SHARE_TYPE_GROUP:1,SHARE_TYPE_LINK:3,SHARE_TYPE_EMAIL:4,SHARE_TYPE_REMOTE:6,SHARE_TYPE_CIRCLE:7,SHARE_TYPE_GUEST:8,SHARE_TYPE_REMOTE_GROUP:9,SHARE_TYPE_ROOM:10,SHARE_TYPE_DECK:12,SHARE_TYPE_SCIENCEMESH:15}});
//# sourceMappingURL=files_sharing-main.js.map?v=325eef5d4954bda3055f

View file

@ -1 +1 @@
{"version":3,"file":"files_sharing-main.js?v=4c7ee07633a21133e94e","mappings":";AAwBAA,OAAOC,OAAOC,GAAI,CACjBC,MAAO,CACNC,gBAAiB,EACjBC,iBAAkB,EAClBC,gBAAiB,EACjBC,iBAAkB,EAClBC,kBAAmB,EACnBC,kBAAmB,EACnBC,iBAAkB,EAClBC,wBAAyB,EACzBC,gBAAiB,GACjBC,gBAAiB","sources":["webpack:///nextcloud/apps/files_sharing/src/index.js"],"sourcesContent":["/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// register default shares types\nObject.assign(OC, {\n\tShare: {\n\t\tSHARE_TYPE_USER: 0,\n\t\tSHARE_TYPE_GROUP: 1,\n\t\tSHARE_TYPE_LINK: 3,\n\t\tSHARE_TYPE_EMAIL: 4,\n\t\tSHARE_TYPE_REMOTE: 6,\n\t\tSHARE_TYPE_CIRCLE: 7,\n\t\tSHARE_TYPE_GUEST: 8,\n\t\tSHARE_TYPE_REMOTE_GROUP: 9,\n\t\tSHARE_TYPE_ROOM: 10,\n\t\tSHARE_TYPE_DECK: 12,\n\t},\n})\n"],"names":["Object","assign","OC","Share","SHARE_TYPE_USER","SHARE_TYPE_GROUP","SHARE_TYPE_LINK","SHARE_TYPE_EMAIL","SHARE_TYPE_REMOTE","SHARE_TYPE_CIRCLE","SHARE_TYPE_GUEST","SHARE_TYPE_REMOTE_GROUP","SHARE_TYPE_ROOM","SHARE_TYPE_DECK"],"sourceRoot":""}
{"version":3,"file":"files_sharing-main.js?v=325eef5d4954bda3055f","mappings":";AAwBAA,OAAOC,OAAOC,GAAI,CACjBC,MAAO,CACNC,gBAAiB,EACjBC,iBAAkB,EAClBC,gBAAiB,EACjBC,iBAAkB,EAClBC,kBAAmB,EACnBC,kBAAmB,EACnBC,iBAAkB,EAClBC,wBAAyB,EACzBC,gBAAiB,GACjBC,gBAAiB,GACjBC,uBAAwB","sources":["webpack:///nextcloud/apps/files_sharing/src/index.js"],"sourcesContent":["/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\n// register default shares types\nObject.assign(OC, {\n\tShare: {\n\t\tSHARE_TYPE_USER: 0,\n\t\tSHARE_TYPE_GROUP: 1,\n\t\tSHARE_TYPE_LINK: 3,\n\t\tSHARE_TYPE_EMAIL: 4,\n\t\tSHARE_TYPE_REMOTE: 6,\n\t\tSHARE_TYPE_CIRCLE: 7,\n\t\tSHARE_TYPE_GUEST: 8,\n\t\tSHARE_TYPE_REMOTE_GROUP: 9,\n\t\tSHARE_TYPE_ROOM: 10,\n\t\tSHARE_TYPE_DECK: 12,\n\t\tSHARE_TYPE_SCIENCEMESH: 15,\n\t},\n})\n"],"names":["Object","assign","OC","Share","SHARE_TYPE_USER","SHARE_TYPE_GROUP","SHARE_TYPE_LINK","SHARE_TYPE_EMAIL","SHARE_TYPE_REMOTE","SHARE_TYPE_CIRCLE","SHARE_TYPE_GUEST","SHARE_TYPE_REMOTE_GROUP","SHARE_TYPE_ROOM","SHARE_TYPE_DECK","SHARE_TYPE_SCIENCEMESH"],"sourceRoot":""}

View file

@ -75,6 +75,8 @@ class Constants {
public const SHARE_TYPE_DECK = 12;
// const SHARE_TYPE_DECK_USER = 13; // Internal type used by DeckShareProvider
// Note to developers: Do not add new share types here
public const FORMAT_NONE = -1;
public const FORMAT_STATUSES = -2;
public const FORMAT_SOURCES = -3; // ToDo Check if it is still in use otherwise remove it

View file

@ -245,6 +245,7 @@ class Manager implements IManager {
}
} elseif ($share->getShareType() === IShare::TYPE_ROOM) {
} elseif ($share->getShareType() === IShare::TYPE_DECK) {
} elseif ($share->getShareType() === IShare::TYPE_SCIENCEMESH) {
} else {
// We cannot handle other types yet
throw new \InvalidArgumentException('unknown share type');

View file

@ -341,6 +341,8 @@ class ProviderFactory implements IProviderFactory {
$provider = $this->getRoomShareProvider();
} elseif ($shareType === IShare::TYPE_DECK) {
$provider = $this->getProvider('deck');
} elseif ($shareType === IShare::TYPE_SCIENCEMESH) {
$provider = $this->getProvider('sciencemesh');
}

View file

@ -118,6 +118,11 @@ interface IShare {
*/
public const TYPE_DECK_USER = 13;
/**
* @since 26.0.0
*/
public const TYPE_SCIENCEMESH = 15;
/**
* @since 18.0.0
*/