Merge pull request #6255 from nextcloud/email-meta-data

Add meta information to emails for better customisation
This commit is contained in:
Morris Jobke 2017-08-26 18:53:52 +02:00 committed by GitHub
commit 2bf15eda26
6 changed files with 50 additions and 4 deletions

View File

@ -347,7 +347,8 @@ class ShareByMailProvider implements IShareProvider {
$share->getNode()->getName(), $share->getNode()->getName(),
$link, $link,
$share->getSharedBy(), $share->getSharedBy(),
$share->getSharedWith() $share->getSharedWith(),
$share->getExpirationDate()
); );
} catch (HintException $hintException) { } catch (HintException $hintException) {
$this->logger->error('Failed to send share by mail: ' . $hintException->getMessage()); $this->logger->error('Failed to send share by mail: ' . $hintException->getMessage());
@ -369,12 +370,14 @@ class ShareByMailProvider implements IShareProvider {
* @param string $link * @param string $link
* @param string $initiator * @param string $initiator
* @param string $shareWith * @param string $shareWith
* @param \DateTime|null $expiration
* @throws \Exception If mail couldn't be sent * @throws \Exception If mail couldn't be sent
*/ */
protected function sendMailNotification($filename, protected function sendMailNotification($filename,
$link, $link,
$initiator, $initiator,
$shareWith) { $shareWith,
$expiration) {
$initiatorUser = $this->userManager->get($initiator); $initiatorUser = $this->userManager->get($initiator);
$initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
$subject = (string)$this->l->t('%s shared »%s« with you', array($initiatorDisplayName, $filename)); $subject = (string)$this->l->t('%s shared »%s« with you', array($initiatorDisplayName, $filename));
@ -382,6 +385,12 @@ class ShareByMailProvider implements IShareProvider {
$message = $this->mailer->createMessage(); $message = $this->mailer->createMessage();
$emailTemplate = $this->mailer->createEMailTemplate(); $emailTemplate = $this->mailer->createEMailTemplate();
$emailTemplate->setMetaData('sharebymail.RecipientNotification', [
'filename' => $filename,
'link' => $link,
'initiator' => $initiatorDisplayName,
'expiration' => $expiration,
]);
$emailTemplate->addHeader(); $emailTemplate->addHeader();
$emailTemplate->addHeading($this->l->t('%s shared »%s« with you', [$initiatorDisplayName, $filename]), false); $emailTemplate->addHeading($this->l->t('%s shared »%s« with you', [$initiatorDisplayName, $filename]), false);

View File

@ -868,6 +868,7 @@ class ShareByMailProviderTest extends TestCase {
'https://example.com/file.txt', 'https://example.com/file.txt',
'OwnerUser', 'OwnerUser',
'john@doe.com', 'john@doe.com',
null,
]); ]);
} }
@ -968,6 +969,7 @@ class ShareByMailProviderTest extends TestCase {
'https://example.com/file.txt', 'https://example.com/file.txt',
'InitiatorUser', 'InitiatorUser',
'john@doe.com', 'john@doe.com',
null,
]); ]);
} }
} }

View File

@ -306,6 +306,9 @@ class LostController extends Controller {
$link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user->getUID(), 'token' => $token)); $link = $this->urlGenerator->linkToRouteAbsolute('core.lost.resetform', array('userId' => $user->getUID(), 'token' => $token));
$emailTemplate = $this->mailer->createEMailTemplate(); $emailTemplate = $this->mailer->createEMailTemplate();
$emailTemplate->setMetaData('core.ResetPassword', [
'link' => $link,
]);
$emailTemplate->addHeader(); $emailTemplate->addHeader();
$emailTemplate->addHeading($this->l10n->t('Password reset')); $emailTemplate->addHeading($this->l10n->t('Password reset'));

View File

@ -45,6 +45,10 @@ class EMailTemplate implements IEMailTemplate {
protected $urlGenerator; protected $urlGenerator;
/** @var IL10N */ /** @var IL10N */
protected $l10n; protected $l10n;
/** @var string */
protected $emailId;
/** @var array */
protected $data;
/** @var string */ /** @var string */
protected $htmlBody = ''; protected $htmlBody = '';
@ -348,6 +352,18 @@ EOF;
$this->htmlBody .= $this->head; $this->htmlBody .= $this->head;
} }
/**
* Set meta data of an email
*
* @param string $emailId
* @param array $data
* @since 12.0.3
*/
public function setMetaData($emailId, array $data = []) {
$this->emailId = $emailId;
$this->data = $data;
}
/** /**
* Adds a header to the email * Adds a header to the email
*/ */

View File

@ -662,7 +662,8 @@ class Manager implements IManager {
$share->getNode()->getName(), $share->getNode()->getName(),
$this->urlGenerator->linkToRouteAbsolute('files.viewcontroller.showFile', [ 'fileid' => $share->getNode()->getId() ]), $this->urlGenerator->linkToRouteAbsolute('files.viewcontroller.showFile', [ 'fileid' => $share->getNode()->getId() ]),
$share->getSharedBy(), $share->getSharedBy(),
$emailAddress $emailAddress,
$share->getExpirationDate()
); );
$this->logger->debug('Send share notification to ' . $emailAddress . ' for share with ID ' . $share->getId(), ['app' => 'share']); $this->logger->debug('Send share notification to ' . $emailAddress . ' for share with ID ' . $share->getId(), ['app' => 'share']);
} else { } else {
@ -681,12 +682,14 @@ class Manager implements IManager {
* @param string $link link to the file/folder * @param string $link link to the file/folder
* @param string $initiator user ID of share sender * @param string $initiator user ID of share sender
* @param string $shareWith email address of share receiver * @param string $shareWith email address of share receiver
* @param \DateTime $expiration
* @throws \Exception If mail couldn't be sent * @throws \Exception If mail couldn't be sent
*/ */
protected function sendMailNotification($filename, protected function sendMailNotification($filename,
$link, $link,
$initiator, $initiator,
$shareWith) { $shareWith,
\DateTime $expiration) {
$initiatorUser = $this->userManager->get($initiator); $initiatorUser = $this->userManager->get($initiator);
$initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator;
$subject = (string)$this->l->t('%s shared »%s« with you', array($initiatorDisplayName, $filename)); $subject = (string)$this->l->t('%s shared »%s« with you', array($initiatorDisplayName, $filename));
@ -694,6 +697,12 @@ class Manager implements IManager {
$message = $this->mailer->createMessage(); $message = $this->mailer->createMessage();
$emailTemplate = $this->mailer->createEMailTemplate(); $emailTemplate = $this->mailer->createEMailTemplate();
$emailTemplate->setMetaData('files_sharing.RecipientNotification', [
'filename' => $filename,
'link' => $link,
'initiator' => $initiatorDisplayName,
'expiration' => $expiration,
]);
$emailTemplate->addHeader(); $emailTemplate->addHeader();
$emailTemplate->addHeading($this->l->t('%s shared »%s« with you', [$initiatorDisplayName, $filename]), false); $emailTemplate->addHeading($this->l->t('%s shared »%s« with you', [$initiatorDisplayName, $filename]), false);

View File

@ -51,6 +51,13 @@ namespace OCP\Mail;
* @since 12.0.0 * @since 12.0.0
*/ */
interface IEMailTemplate { interface IEMailTemplate {
/**
* Set meta data of an email
*
* @since 12.0.3
*/
public function setMetaData($emailId, array $data = []);
/** /**
* Adds a header to the email * Adds a header to the email
* *