Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
authorJulius Härtl <jus@bitgrid.net>2021-12-06 10:59:51 +0300
committerGitHub <noreply@github.com>2021-12-06 10:59:51 +0300
commit00549f78026108219ed77c4277cf6382a9a2101e (patch)
tree91db6593bb9009077450b1ddb15897781d837323 /apps
parentf0e1621eed1ab30acd156ccaf9e513f29a7e3561 (diff)
parent5116bf146f3e21805d42997ca9b1f713474bfb6d (diff)
Merge pull request #30055 from nextcloud/enh/note-share-api
Diffstat (limited to 'apps')
-rw-r--r--apps/files_sharing/lib/Controller/ShareAPIController.php5
-rw-r--r--apps/sharebymail/lib/ShareByMailProvider.php19
-rw-r--r--apps/sharebymail/tests/ShareByMailProviderTest.php101
3 files changed, 120 insertions, 5 deletions
diff --git a/apps/files_sharing/lib/Controller/ShareAPIController.php b/apps/files_sharing/lib/Controller/ShareAPIController.php
index c9853f1e12c..96b105aae49 100644
--- a/apps/files_sharing/lib/Controller/ShareAPIController.php
+++ b/apps/files_sharing/lib/Controller/ShareAPIController.php
@@ -449,6 +449,7 @@ class ShareAPIController extends OCSController {
string $password = '',
string $sendPasswordByTalk = null,
string $expireDate = '',
+ string $note = '',
string $label = ''
): DataResponse {
$share = $this->shareManager->newShare();
@@ -653,6 +654,10 @@ class ShareAPIController extends OCSController {
$share->setShareType($shareType);
$share->setSharedBy($this->currentUser);
+ if ($note !== '') {
+ $share->setNote($note);
+ }
+
try {
$share = $this->shareManager->createShare($share);
} catch (GenericShareException $e) {
diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php
index 6fb60216031..62ba9d35f3f 100644
--- a/apps/sharebymail/lib/ShareByMailProvider.php
+++ b/apps/sharebymail/lib/ShareByMailProvider.php
@@ -330,7 +330,8 @@ class ShareByMailProvider implements IShareProvider {
$share->getSendPasswordByTalk(),
$share->getHideDownload(),
$share->getLabel(),
- $share->getExpirationDate()
+ $share->getExpirationDate(),
+ $share->getNote()
);
try {
@@ -341,7 +342,8 @@ class ShareByMailProvider implements IShareProvider {
$link,
$share->getSharedBy(),
$share->getSharedWith(),
- $share->getExpirationDate()
+ $share->getExpirationDate(),
+ $share->getNote()
);
} catch (HintException $hintException) {
$this->logger->logException($hintException, [
@@ -377,7 +379,9 @@ class ShareByMailProvider implements IShareProvider {
$link,
$initiator,
$shareWith,
- \DateTime $expiration = null) {
+ \DateTime $expiration = null,
+ $note = ''
+ ) {
$initiatorUser = $this->userManager->get($initiator);
$initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
$message = $this->mailer->createMessage();
@@ -388,6 +392,7 @@ class ShareByMailProvider implements IShareProvider {
'initiator' => $initiatorDisplayName,
'expiration' => $expiration,
'shareWith' => $shareWith,
+ 'note' => $note
]);
$emailTemplate->setSubject($this->l->t('%1$s shared »%2$s« with you', [$initiatorDisplayName, $filename]));
@@ -395,6 +400,9 @@ class ShareByMailProvider implements IShareProvider {
$emailTemplate->addHeading($this->l->t('%1$s shared »%2$s« with you', [$initiatorDisplayName, $filename]), false);
$text = $this->l->t('%1$s shared »%2$s« with you.', [$initiatorDisplayName, $filename]);
+ if ($note !== '') {
+ $emailTemplate->addBodyText(htmlspecialchars($note), $note);
+ }
$emailTemplate->addBodyText(
htmlspecialchars($text . ' ' . $this->l->t('Click the button below to open it.')),
$text
@@ -671,7 +679,7 @@ class ShareByMailProvider implements IShareProvider {
* @param \DateTime|null $expirationTime
* @return int
*/
- protected function addShareToDB($itemSource, $itemType, $shareWith, $sharedBy, $uidOwner, $permissions, $token, $password, $sendPasswordByTalk, $hideDownload, $label, $expirationTime) {
+ protected function addShareToDB($itemSource, $itemType, $shareWith, $sharedBy, $uidOwner, $permissions, $token, $password, $sendPasswordByTalk, $hideDownload, $label, $expirationTime, $note = '') {
$qb = $this->dbConnection->getQueryBuilder();
$qb->insert('share')
->setValue('share_type', $qb->createNamedParameter(IShare::TYPE_EMAIL))
@@ -687,7 +695,8 @@ class ShareByMailProvider implements IShareProvider {
->setValue('password_by_talk', $qb->createNamedParameter($sendPasswordByTalk, IQueryBuilder::PARAM_BOOL))
->setValue('stime', $qb->createNamedParameter(time()))
->setValue('hide_download', $qb->createNamedParameter((int)$hideDownload, IQueryBuilder::PARAM_INT))
- ->setValue('label', $qb->createNamedParameter($label));
+ ->setValue('label', $qb->createNamedParameter($label))
+ ->setValue('note', $qb->createNamedParameter($note));
if ($expirationTime !== null) {
$qb->setValue('expiration', $qb->createNamedParameter($expirationTime, IQueryBuilder::PARAM_DATE));
diff --git a/apps/sharebymail/tests/ShareByMailProviderTest.php b/apps/sharebymail/tests/ShareByMailProviderTest.php
index a82da164b78..bbe5516408d 100644
--- a/apps/sharebymail/tests/ShareByMailProviderTest.php
+++ b/apps/sharebymail/tests/ShareByMailProviderTest.php
@@ -1187,6 +1187,107 @@ class ShareByMailProviderTest extends TestCase {
'OwnerUser',
'john@doe.com',
null,
+ ''
+ ]);
+ }
+
+ public function testSendMailNotificationWithSameUserAndUserEmailAndNote() {
+ $provider = $this->getInstance();
+ $user = $this->createMock(IUser::class);
+ $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(true);
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('OwnerUser')
+ ->willReturn($user);
+ $user
+ ->expects($this->once())
+ ->method('getDisplayName')
+ ->willReturn('Mrs. Owner User');
+ $message = $this->createMock(Message::class);
+ $this->mailer
+ ->expects($this->once())
+ ->method('createMessage')
+ ->willReturn($message);
+ $template = $this->createMock(IEMailTemplate::class);
+ $this->mailer
+ ->expects($this->once())
+ ->method('createEMailTemplate')
+ ->willReturn($template);
+ $template
+ ->expects($this->once())
+ ->method('addHeader');
+ $template
+ ->expects($this->once())
+ ->method('addHeading')
+ ->with('Mrs. Owner User shared »file.txt« with you');
+ $template
+ ->expects($this->exactly(2))
+ ->method('addBodyText')
+ ->withConsecutive(
+ ['This is a note to the recipient', 'This is a note to the recipient'],
+ ['Mrs. Owner User shared »file.txt« with you. Click the button below to open it.', 'Mrs. Owner User shared »file.txt« with you.'],
+ );
+ $template
+ ->expects($this->once())
+ ->method('addBodyButton')
+ ->with(
+ 'Open »file.txt«',
+ 'https://example.com/file.txt'
+ );
+ $message
+ ->expects($this->once())
+ ->method('setTo')
+ ->with(['john@doe.com']);
+ $this->defaults
+ ->expects($this->once())
+ ->method('getName')
+ ->willReturn('UnitTestCloud');
+ $message
+ ->expects($this->once())
+ ->method('setFrom')
+ ->with([
+ \OCP\Util::getDefaultEmailAddress('UnitTestCloud') => 'Mrs. Owner User via UnitTestCloud'
+ ]);
+ $user
+ ->expects($this->once())
+ ->method('getEMailAddress')
+ ->willReturn('owner@example.com');
+ $message
+ ->expects($this->once())
+ ->method('setReplyTo')
+ ->with(['owner@example.com' => 'Mrs. Owner User']);
+ $this->defaults
+ ->expects($this->exactly(2))
+ ->method('getSlogan')
+ ->willReturn('Testing like 1990');
+ $template
+ ->expects($this->once())
+ ->method('addFooter')
+ ->with('UnitTestCloud - Testing like 1990');
+ $template
+ ->expects($this->once())
+ ->method('setSubject')
+ ->with('Mrs. Owner User shared »file.txt« with you');
+ $message
+ ->expects($this->once())
+ ->method('useTemplate')
+ ->with($template);
+ $this->mailer
+ ->expects($this->once())
+ ->method('send')
+ ->with($message);
+
+ self::invokePrivate(
+ $provider,
+ 'sendMailNotification',
+ [
+ 'file.txt',
+ 'https://example.com/file.txt',
+ 'OwnerUser',
+ 'john@doe.com',
+ null,
+ 'This is a note to the recipient'
]);
}