mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Allow to pass note when creating a share and send it with directly in the share mail when set
Signed-off-by: Julius Härtl <jus@bitgrid.net>
This commit is contained in:
parent
70f9e5e37d
commit
5116bf146f
5 changed files with 132 additions and 7 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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'
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -202,6 +202,10 @@ class DefaultShareProvider implements IShareProvider {
|
|||
// Set the file target
|
||||
$qb->setValue('file_target', $qb->createNamedParameter($share->getTarget()));
|
||||
|
||||
if ($share->getNote() !== '') {
|
||||
$qb->setValue('note', $qb->createNamedParameter($share->getNote()));
|
||||
}
|
||||
|
||||
// Set the time this share was created
|
||||
$qb->setValue('stime', $qb->createNamedParameter(time()));
|
||||
|
||||
|
|
|
|||
|
|
@ -852,7 +852,8 @@ class Manager implements IManager {
|
|||
$this->urlGenerator->linkToRouteAbsolute('files_sharing.Accept.accept', ['shareId' => $share->getFullId()]),
|
||||
$share->getSharedBy(),
|
||||
$emailAddress,
|
||||
$share->getExpirationDate()
|
||||
$share->getExpirationDate(),
|
||||
$share->getNote()
|
||||
);
|
||||
$this->logger->debug('Sent share notification to ' . $emailAddress . ' for share with ID ' . $share->getId(), ['app' => 'share']);
|
||||
} else {
|
||||
|
|
@ -886,7 +887,8 @@ class Manager implements IManager {
|
|||
$link,
|
||||
$initiator,
|
||||
$shareWith,
|
||||
\DateTime $expiration = null) {
|
||||
\DateTime $expiration = null,
|
||||
$note = '') {
|
||||
$initiatorUser = $this->userManager->get($initiator);
|
||||
$initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
|
||||
|
||||
|
|
@ -905,6 +907,10 @@ class Manager implements IManager {
|
|||
$emailTemplate->addHeading($l->t('%1$s shared »%2$s« with you', [$initiatorDisplayName, $filename]), false);
|
||||
$text = $l->t('%1$s shared »%2$s« with you.', [$initiatorDisplayName, $filename]);
|
||||
|
||||
if ($note !== '') {
|
||||
$emailTemplate->addBodyText(htmlspecialchars($note), $note);
|
||||
}
|
||||
|
||||
$emailTemplate->addBodyText(
|
||||
htmlspecialchars($text . ' ' . $l->t('Click the button below to open it.')),
|
||||
$text
|
||||
|
|
|
|||
Loading…
Reference in a new issue