mirror of
https://github.com/nextcloud/server.git
synced 2025-03-17 17:53:16 +00:00
fix(files_sharing): Store the expiration date relative to the server's timezone
This is needed as we want to store the difference between the server's and the user's timezones. Signed-off-by: Louis Chemineau <louis@chmn.me>
This commit is contained in:
parent
5dcb807a98
commit
f5fd6c8f08
3 changed files with 29 additions and 23 deletions
apps/files_sharing/lib/Controller
lib/private/Share20
|
@ -1615,9 +1615,6 @@ class ShareAPIController extends OCSController {
|
|||
throw new \Exception('Invalid date. Format must be YYYY-MM-DD');
|
||||
}
|
||||
|
||||
// Use server timezone to store the date
|
||||
$date->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
||||
|
||||
return $date;
|
||||
}
|
||||
|
||||
|
|
|
@ -112,22 +112,28 @@ class DefaultShareProvider implements IShareProvider {
|
|||
$qb->insert('share');
|
||||
$qb->setValue('share_type', $qb->createNamedParameter($share->getShareType()));
|
||||
|
||||
$expirationDate = $share->getExpirationDate();
|
||||
if ($expirationDate !== null) {
|
||||
$expirationDate = clone $expirationDate;
|
||||
$expirationDate->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
||||
}
|
||||
|
||||
if ($share->getShareType() === IShare::TYPE_USER) {
|
||||
//Set the UID of the user we share with
|
||||
$qb->setValue('share_with', $qb->createNamedParameter($share->getSharedWith()));
|
||||
$qb->setValue('accepted', $qb->createNamedParameter(IShare::STATUS_PENDING));
|
||||
|
||||
//If an expiration date is set store it
|
||||
if ($share->getExpirationDate() !== null) {
|
||||
$qb->setValue('expiration', $qb->createNamedParameter($share->getExpirationDate(), 'datetime'));
|
||||
if ($expirationDate !== null) {
|
||||
$qb->setValue('expiration', $qb->createNamedParameter($expirationDate, 'datetime'));
|
||||
}
|
||||
} elseif ($share->getShareType() === IShare::TYPE_GROUP) {
|
||||
//Set the GID of the group we share with
|
||||
$qb->setValue('share_with', $qb->createNamedParameter($share->getSharedWith()));
|
||||
|
||||
//If an expiration date is set store it
|
||||
if ($share->getExpirationDate() !== null) {
|
||||
$qb->setValue('expiration', $qb->createNamedParameter($share->getExpirationDate(), 'datetime'));
|
||||
if ($expirationDate !== null) {
|
||||
$qb->setValue('expiration', $qb->createNamedParameter($expirationDate, 'datetime'));
|
||||
}
|
||||
} elseif ($share->getShareType() === IShare::TYPE_LINK) {
|
||||
//set label for public link
|
||||
|
@ -143,8 +149,8 @@ class DefaultShareProvider implements IShareProvider {
|
|||
$qb->setValue('password_by_talk', $qb->createNamedParameter($share->getSendPasswordByTalk(), IQueryBuilder::PARAM_BOOL));
|
||||
|
||||
//If an expiration date is set store it
|
||||
if ($share->getExpirationDate() !== null) {
|
||||
$qb->setValue('expiration', $qb->createNamedParameter($share->getExpirationDate(), 'datetime'));
|
||||
if ($expirationDate !== null) {
|
||||
$qb->setValue('expiration', $qb->createNamedParameter($expirationDate, 'datetime'));
|
||||
}
|
||||
|
||||
if (method_exists($share, 'getParent')) {
|
||||
|
@ -224,6 +230,12 @@ class DefaultShareProvider implements IShareProvider {
|
|||
|
||||
$shareAttributes = $this->formatShareAttributes($share->getAttributes());
|
||||
|
||||
$expirationDate = $share->getExpirationDate();
|
||||
if ($expirationDate !== null) {
|
||||
$expirationDate = clone $expirationDate;
|
||||
$expirationDate->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
||||
}
|
||||
|
||||
if ($share->getShareType() === IShare::TYPE_USER) {
|
||||
/*
|
||||
* We allow updating the recipient on user shares.
|
||||
|
@ -238,7 +250,7 @@ class DefaultShareProvider implements IShareProvider {
|
|||
->set('attributes', $qb->createNamedParameter($shareAttributes))
|
||||
->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE))
|
||||
->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
|
||||
->set('note', $qb->createNamedParameter($share->getNote()))
|
||||
->set('accepted', $qb->createNamedParameter($share->getStatus()))
|
||||
->execute();
|
||||
|
@ -252,7 +264,7 @@ class DefaultShareProvider implements IShareProvider {
|
|||
->set('attributes', $qb->createNamedParameter($shareAttributes))
|
||||
->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE))
|
||||
->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
|
||||
->set('note', $qb->createNamedParameter($share->getNote()))
|
||||
->execute();
|
||||
|
||||
|
@ -267,7 +279,7 @@ class DefaultShareProvider implements IShareProvider {
|
|||
->set('uid_initiator', $qb->createNamedParameter($share->getSharedBy()))
|
||||
->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE))
|
||||
->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
|
||||
->set('note', $qb->createNamedParameter($share->getNote()))
|
||||
->execute();
|
||||
|
||||
|
@ -294,7 +306,7 @@ class DefaultShareProvider implements IShareProvider {
|
|||
->set('item_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('file_source', $qb->createNamedParameter($share->getNode()->getId()))
|
||||
->set('token', $qb->createNamedParameter($share->getToken()))
|
||||
->set('expiration', $qb->createNamedParameter($share->getExpirationDate(), IQueryBuilder::PARAM_DATE))
|
||||
->set('expiration', $qb->createNamedParameter($expirationDate, IQueryBuilder::PARAM_DATE))
|
||||
->set('note', $qb->createNamedParameter($share->getNote()))
|
||||
->set('label', $qb->createNamedParameter($share->getLabel()))
|
||||
->set('hide_download', $qb->createNamedParameter($share->getHideDownload() ? 1 : 0), IQueryBuilder::PARAM_INT)
|
||||
|
|
|
@ -276,8 +276,8 @@ class Manager implements IManager {
|
|||
|
||||
// If $expirationDate is falsy, noExpirationDate is true and expiration not enforced
|
||||
// Then skip expiration date validation as null is accepted
|
||||
if(!($share->getNoExpirationDate() && !$isEnforced)) {
|
||||
if ($expirationDate != null) {
|
||||
if(!$share->getNoExpirationDate() || $isEnforced) {
|
||||
if ($expirationDate !== null) {
|
||||
$expirationDate->setTimezone($this->dateTimeZone->getTimeZone());
|
||||
$expirationDate->setTime(0, 0, 0);
|
||||
|
||||
|
@ -360,7 +360,7 @@ class Manager implements IManager {
|
|||
if ($expirationDate !== null) {
|
||||
$expirationDate->setTimezone($this->dateTimeZone->getTimeZone());
|
||||
$expirationDate->setTime(0, 0, 0);
|
||||
|
||||
|
||||
$date = new \DateTime('now', $this->dateTimeZone->getTimeZone());
|
||||
$date->setTime(0, 0, 0);
|
||||
if ($date >= $expirationDate) {
|
||||
|
@ -376,24 +376,24 @@ class Manager implements IManager {
|
|||
} catch (\UnexpectedValueException $e) {
|
||||
// This is a new share
|
||||
}
|
||||
|
||||
|
||||
if ($fullId === null && $expirationDate === null && $this->shareApiLinkDefaultExpireDate()) {
|
||||
$expirationDate = new \DateTime('now', $this->dateTimeZone->getTimeZone());
|
||||
$expirationDate->setTime(0, 0, 0);
|
||||
|
||||
|
||||
$days = (int)$this->config->getAppValue('core', 'link_defaultExpDays', (string)$this->shareApiLinkDefaultExpireDays());
|
||||
if ($days > $this->shareApiLinkDefaultExpireDays()) {
|
||||
$days = $this->shareApiLinkDefaultExpireDays();
|
||||
}
|
||||
$expirationDate->add(new \DateInterval('P' . $days . 'D'));
|
||||
}
|
||||
|
||||
|
||||
// If we enforce the expiration date check that is does not exceed
|
||||
if ($isEnforced) {
|
||||
if (empty($expirationDate)) {
|
||||
throw new \InvalidArgumentException('Expiration date is enforced');
|
||||
}
|
||||
|
||||
|
||||
$date = new \DateTime('now', $this->dateTimeZone->getTimeZone());
|
||||
$date->setTime(0, 0, 0);
|
||||
$date->add(new \DateInterval('P' . $this->shareApiLinkDefaultExpireDays() . 'D'));
|
||||
|
@ -418,9 +418,6 @@ class Manager implements IManager {
|
|||
throw new \Exception($message);
|
||||
}
|
||||
|
||||
if ($expirationDate instanceof \DateTime) {
|
||||
$expirationDate->setTimezone(new \DateTimeZone(date_default_timezone_get()));
|
||||
}
|
||||
$share->setExpirationDate($expirationDate);
|
||||
|
||||
return $share;
|
||||
|
|
Loading…
Reference in a new issue