aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/Share20
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/Share20')
-rw-r--r--lib/private/Share20/DefaultShareProvider.php32
-rw-r--r--lib/private/Share20/LegacyHooks.php2
-rw-r--r--lib/private/Share20/Manager.php29
-rw-r--r--lib/private/Share20/Share.php20
4 files changed, 34 insertions, 49 deletions
diff --git a/lib/private/Share20/DefaultShareProvider.php b/lib/private/Share20/DefaultShareProvider.php
index e1eebe1e450..5300e6e1baa 100644
--- a/lib/private/Share20/DefaultShareProvider.php
+++ b/lib/private/Share20/DefaultShareProvider.php
@@ -13,12 +13,14 @@ use OC\Share20\Exception\BackendError;
use OC\Share20\Exception\InvalidShare;
use OC\Share20\Exception\ProviderException;
use OC\User\LazyUser;
+use OCA\Files_Sharing\AppInfo\Application;
use OCP\AppFramework\Utility\ITimeFactory;
use OCP\DB\QueryBuilder\IQueryBuilder;
use OCP\Defaults;
use OCP\Files\Folder;
use OCP\Files\IRootFolder;
use OCP\Files\Node;
+use OCP\IConfig;
use OCP\IDBConnection;
use OCP\IGroupManager;
use OCP\IL10N;
@@ -43,9 +45,6 @@ use function str_starts_with;
* @package OC\Share20
*/
class DefaultShareProvider implements IShareProviderWithNotification, IShareProviderSupportsAccept, IShareProviderSupportsAllSharesInFolder {
- // Special share type for user modified group shares
- public const SHARE_TYPE_USERGROUP = 2;
-
public function __construct(
private IDBConnection $dbConn,
private IUserManager $userManager,
@@ -58,6 +57,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
private ITimeFactory $timeFactory,
private LoggerInterface $logger,
private IManager $shareManager,
+ private IConfig $config,
) {
}
@@ -127,9 +127,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
$qb->setValue('expiration', $qb->createNamedParameter($expirationDate, 'datetime'));
}
- if (method_exists($share, 'getParent')) {
- $qb->setValue('parent', $qb->createNamedParameter($share->getParent()));
- }
+ $qb->setValue('parent', $qb->createNamedParameter($share->getParent()));
$qb->setValue('hide_download', $qb->createNamedParameter($share->getHideDownload() ? 1 : 0, IQueryBuilder::PARAM_INT));
} else {
@@ -284,7 +282,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATETIME_MUTABLE))
->set('note', $qb->createNamedParameter($share->getNote()))
->set('label', $qb->createNamedParameter($share->getLabel()))
- ->set('hide_download', $qb->createNamedParameter($share->getHideDownload() ? 1 : 0), IQueryBuilder::PARAM_INT)
+ ->set('hide_download', $qb->createNamedParameter($share->getHideDownload() ? 1 : 0, IQueryBuilder::PARAM_INT))
->executeStatement();
}
@@ -358,14 +356,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
return $share;
}
- /**
- * Get all children of this share
- * FIXME: remove once https://github.com/owncloud/core/pull/21660 is in
- *
- * @param \OCP\Share\IShare $parent
- * @return \OCP\Share\IShare[]
- */
- public function getChildren(\OCP\Share\IShare $parent) {
+ public function getChildren(IShare $parent): array {
$children = [];
$qb = $this->dbConn->getQueryBuilder();
@@ -485,6 +476,15 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
protected function createUserSpecificGroupShare(IShare $share, string $recipient): int {
$type = $share->getNodeType();
+ $shareFolder = $this->config->getSystemValue('share_folder', '/');
+ $allowCustomShareFolder = $this->config->getSystemValueBool('sharing.allow_custom_share_folder', true);
+ if ($allowCustomShareFolder) {
+ $shareFolder = $this->config->getUserValue($recipient, Application::APP_ID, 'share_folder', $shareFolder);
+ }
+
+ $target = $shareFolder . '/' . $share->getNode()->getName();
+ $target = \OC\Files\Filesystem::normalizePath($target);
+
$qb = $this->dbConn->getQueryBuilder();
$qb->insert('share')
->values([
@@ -496,7 +496,7 @@ class DefaultShareProvider implements IShareProviderWithNotification, IShareProv
'item_type' => $qb->createNamedParameter($type),
'item_source' => $qb->createNamedParameter($share->getNodeId()),
'file_source' => $qb->createNamedParameter($share->getNodeId()),
- 'file_target' => $qb->createNamedParameter($share->getTarget()),
+ 'file_target' => $qb->createNamedParameter($target),
'permissions' => $qb->createNamedParameter($share->getPermissions()),
'stime' => $qb->createNamedParameter($share->getShareTime()->getTimestamp()),
])->executeStatement();
diff --git a/lib/private/Share20/LegacyHooks.php b/lib/private/Share20/LegacyHooks.php
index 3bce0b9560a..d54c8e3203d 100644
--- a/lib/private/Share20/LegacyHooks.php
+++ b/lib/private/Share20/LegacyHooks.php
@@ -82,7 +82,7 @@ class LegacyHooks {
'itemSource' => $share->getNodeId(),
'shareType' => $shareType,
'shareWith' => $sharedWith,
- 'itemparent' => method_exists($share, 'getParent') ? $share->getParent() : '',
+ 'itemparent' => $share->getParent(),
'uidOwner' => $share->getSharedBy(),
'fileSource' => $share->getNodeId(),
'fileTarget' => $share->getTarget()
diff --git a/lib/private/Share20/Manager.php b/lib/private/Share20/Manager.php
index 01664c6a0a3..855bb173d56 100644
--- a/lib/private/Share20/Manager.php
+++ b/lib/private/Share20/Manager.php
@@ -7,11 +7,13 @@
*/
namespace OC\Share20;
+use OC\Core\AppInfo\ConfigLexicon;
use OC\Files\Mount\MoveableMount;
use OC\KnownUser\KnownUserService;
use OC\Share20\Exception\ProviderException;
use OCA\Files_Sharing\AppInfo\Application;
use OCA\Files_Sharing\SharedStorage;
+use OCA\ShareByMail\ShareByMailProvider;
use OCP\EventDispatcher\IEventDispatcher;
use OCP\Files\File;
use OCP\Files\Folder;
@@ -579,13 +581,10 @@ class Manager implements IManager {
* @param IShare $share
*/
protected function setLinkParent(IShare $share) {
- // No sense in checking if the method is not there.
- if (method_exists($share, 'setParent')) {
- $storage = $share->getNode()->getStorage();
- if ($storage->instanceOfStorage(SharedStorage::class)) {
- /** @var \OCA\Files_Sharing\SharedStorage $storage */
- $share->setParent($storage->getShareId());
- }
+ $storage = $share->getNode()->getStorage();
+ if ($storage->instanceOfStorage(SharedStorage::class)) {
+ /** @var \OCA\Files_Sharing\SharedStorage $storage */
+ $share->setParent((int)$storage->getShareId());
}
}
@@ -704,12 +703,12 @@ class Manager implements IManager {
}
// Generate the target
- $defaultShareFolder = $this->config->getSystemValue('share_folder', '/');
- $allowCustomShareFolder = $this->config->getSystemValueBool('sharing.allow_custom_share_folder', true);
- if ($allowCustomShareFolder) {
- $shareFolder = $this->config->getUserValue($share->getSharedWith(), Application::APP_ID, 'share_folder', $defaultShareFolder);
- } else {
- $shareFolder = $defaultShareFolder;
+ $shareFolder = $this->config->getSystemValue('share_folder', '/');
+ if ($share->getShareType() === IShare::TYPE_USER) {
+ $allowCustomShareFolder = $this->config->getSystemValueBool('sharing.allow_custom_share_folder', true);
+ if ($allowCustomShareFolder) {
+ $shareFolder = $this->config->getUserValue($share->getSharedWith(), Application::APP_ID, 'share_folder', $shareFolder);
+ }
}
$target = $shareFolder . '/' . $share->getNode()->getName();
@@ -869,6 +868,7 @@ class Manager implements IManager {
// Now update the share!
$provider = $this->factory->getProviderForType($share->getShareType());
if ($share->getShareType() === IShare::TYPE_EMAIL) {
+ /** @var ShareByMailProvider $provider */
$share = $provider->update($share, $plainTextPassword);
} else {
$share = $provider->update($share);
@@ -1006,7 +1006,6 @@ class Manager implements IManager {
/**
* Delete all the children of this share
- * FIXME: remove once https://github.com/owncloud/core/pull/21660 is in
*
* @param IShare $share
* @return IShare[] List of deleted shares
@@ -1937,7 +1936,7 @@ class Manager implements IManager {
}
public function allowCustomTokens(): bool {
- return $this->appConfig->getValueBool('core', 'shareapi_allow_custom_tokens', false);
+ return $this->appConfig->getValueBool('core', ConfigLexicon::SHARE_CUSTOM_TOKEN);
}
public function allowViewWithoutDownload(): bool {
diff --git a/lib/private/Share20/Share.php b/lib/private/Share20/Share.php
index 8caabb0898a..571efc8c4be 100644
--- a/lib/private/Share20/Share.php
+++ b/lib/private/Share20/Share.php
@@ -60,8 +60,7 @@ class Share implements IShare {
private $sendPasswordByTalk = false;
/** @var string */
private $token;
- /** @var int */
- private $parent;
+ private ?int $parent = null;
/** @var string */
private $target;
/** @var \DateTime */
@@ -526,25 +525,12 @@ class Share implements IShare {
return $this->token;
}
- /**
- * Set the parent of this share
- *
- * @param int $parent
- * @return IShare
- * @deprecated 12.0.0 The new shares do not have parents. This is just here for legacy reasons.
- */
- public function setParent($parent) {
+ public function setParent(int $parent): self {
$this->parent = $parent;
return $this;
}
- /**
- * Get the parent of this share.
- *
- * @return int
- * @deprecated 12.0.0 The new shares do not have parents. This is just here for legacy reasons.
- */
- public function getParent() {
+ public function getParent(): ?int {
return $this->parent;
}