aboutsummaryrefslogtreecommitdiffstats
path: root/lib/private/share/mailnotifications.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/private/share/mailnotifications.php')
-rw-r--r--lib/private/share/mailnotifications.php254
1 files changed, 0 insertions, 254 deletions
diff --git a/lib/private/share/mailnotifications.php b/lib/private/share/mailnotifications.php
deleted file mode 100644
index f71651e71fc..00000000000
--- a/lib/private/share/mailnotifications.php
+++ /dev/null
@@ -1,254 +0,0 @@
-<?php
-/**
- * @author Björn Schießle <schiessle@owncloud.com>
- * @author Joas Schilling <nickvergessen@owncloud.com>
- * @author Lukas Reschke <lukas@owncloud.com>
- * @author Morris Jobke <hey@morrisjobke.de>
- * @author Robin McCorkell <robin@mccorkell.me.uk>
- * @author scolebrook <scolebrook@mac.com>
- * @author Thomas Müller <thomas.mueller@tmit.eu>
- * @author Tom Needham <tom@owncloud.com>
- *
- * @copyright Copyright (c) 2016, ownCloud, Inc.
- * @license AGPL-3.0
- *
- * This code is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License, version 3,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License, version 3,
- * along with this program. If not, see <http://www.gnu.org/licenses/>
- *
- */
-
-namespace OC\Share;
-
-use DateTime;
-use OCP\IL10N;
-use OCP\IURLGenerator;
-use OCP\IUser;
-use OCP\Mail\IMailer;
-use OCP\ILogger;
-use OCP\Defaults;
-use OCP\Util;
-
-/**
- * Class MailNotifications
- *
- * @package OC\Share
- */
-class MailNotifications {
-
- /** @var IUser sender userId */
- private $user;
- /** @var string sender email address */
- private $replyTo;
- /** @var string */
- private $senderDisplayName;
- /** @var IL10N */
- private $l;
- /** @var IMailer */
- private $mailer;
- /** @var Defaults */
- private $defaults;
- /** @var ILogger */
- private $logger;
- /** @var IURLGenerator */
- private $urlGenerator;
-
- /**
- * @param IUser $user
- * @param IL10N $l10n
- * @param IMailer $mailer
- * @param ILogger $logger
- * @param Defaults $defaults
- * @param IURLGenerator $urlGenerator
- */
- public function __construct(IUser $user,
- IL10N $l10n,
- IMailer $mailer,
- ILogger $logger,
- Defaults $defaults,
- IURLGenerator $urlGenerator) {
- $this->l = $l10n;
- $this->user = $user;
- $this->mailer = $mailer;
- $this->logger = $logger;
- $this->defaults = $defaults;
- $this->urlGenerator = $urlGenerator;
-
- $this->replyTo = $this->user->getEMailAddress();
- $this->senderDisplayName = $this->user->getDisplayName();
- }
-
- /**
- * inform users if a file was shared with them
- *
- * @param IUser[] $recipientList list of recipients
- * @param string $itemSource shared item source
- * @param string $itemType shared item type
- * @return array list of user to whom the mail send operation failed
- */
- public function sendInternalShareMail($recipientList, $itemSource, $itemType) {
- $noMail = [];
-
- foreach ($recipientList as $recipient) {
- $recipientDisplayName = $recipient->getDisplayName();
- $to = $recipient->getEMailAddress();
-
- if ($to === '') {
- $noMail[] = $recipientDisplayName;
- continue;
- }
-
- $items = $this->getItemSharedWithUser($itemSource, $itemType, $recipient);
- $filename = trim($items[0]['file_target'], '/');
- $subject = (string) $this->l->t('%s shared »%s« with you', array($this->senderDisplayName, $filename));
- $expiration = null;
- if (isset($items[0]['expiration'])) {
- try {
- $date = new DateTime($items[0]['expiration']);
- $expiration = $date->getTimestamp();
- } catch (\Exception $e) {
- $this->logger->error("Couldn't read date: ".$e->getMessage(), ['app' => 'sharing']);
- }
- }
-
- // Link to folder, or root folder if a file
-
- if ($itemType === 'folder') {
- $args = array(
- 'dir' => $filename,
- );
- } else if (strpos($filename, '/')) {
- $args = array(
- 'dir' => '/' . dirname($filename),
- 'scrollto' => basename($filename),
- );
- } else {
- $args = array(
- 'dir' => '/',
- 'scrollto' => $filename,
- );
- }
-
- $link = $this->urlGenerator->linkToRouteAbsolute(
- 'files.view.index',
- $args
- );
-
- list($htmlBody, $textBody) = $this->createMailBody($filename, $link, $expiration, 'internal');
-
- // send it out now
- try {
- $message = $this->mailer->createMessage();
- $message->setSubject($subject);
- $message->setTo([$to => $recipientDisplayName]);
- $message->setHtmlBody($htmlBody);
- $message->setPlainBody($textBody);
- $message->setFrom([
- Util::getDefaultEmailAddress('sharing-noreply') =>
- (string)$this->l->t('%s via %s', [
- $this->senderDisplayName,
- $this->defaults->getName()
- ]),
- ]);
- if(!is_null($this->replyTo)) {
- $message->setReplyTo([$this->replyTo]);
- }
-
- $this->mailer->send($message);
- } catch (\Exception $e) {
- $this->logger->error("Can't send mail to inform the user about an internal share: ".$e->getMessage(), ['app' => 'sharing']);
- $noMail[] = $recipientDisplayName;
- }
- }
-
- return $noMail;
-
- }
-
- /**
- * inform recipient about public link share
- *
- * @param string $recipient recipient email address
- * @param string $filename the shared file
- * @param string $link the public link
- * @param int $expiration expiration date (timestamp)
- * @return string[] $result of failed recipients
- */
- public function sendLinkShareMail($recipient, $filename, $link, $expiration) {
- $subject = (string)$this->l->t('%s shared »%s« with you', [$this->senderDisplayName, $filename]);
- list($htmlBody, $textBody) = $this->createMailBody($filename, $link, $expiration);
-
- $recipient = str_replace([', ', '; ', ',', ';', ' '], ',', $recipient);
- $recipients = explode(',', $recipient);
- try {
- $message = $this->mailer->createMessage();
- $message->setSubject($subject);
- $message->setTo($recipients);
- $message->setHtmlBody($htmlBody);
- $message->setPlainBody($textBody);
- $message->setFrom([
- Util::getDefaultEmailAddress('sharing-noreply') =>
- (string)$this->l->t('%s via %s', [
- $this->senderDisplayName,
- $this->defaults->getName()
- ]),
- ]);
- if(!is_null($this->replyTo)) {
- $message->setReplyTo([$this->replyTo]);
- }
-
- return $this->mailer->send($message);
- } catch (\Exception $e) {
- $this->logger->error("Can't send mail with public link to $recipient: ".$e->getMessage(), ['app' => 'sharing']);
- return [$recipient];
- }
- }
-
- /**
- * create mail body for plain text and html mail
- *
- * @param string $filename the shared file
- * @param string $link link to the shared file
- * @param int $expiration expiration date (timestamp)
- * @param string $prefix prefix of mail template files
- * @return array an array of the html mail body and the plain text mail body
- */
- private function createMailBody($filename, $link, $expiration, $prefix = '') {
- $formattedDate = $expiration ? $this->l->l('date', $expiration) : null;
-
- $html = new \OC_Template('core', $prefix . 'mail', '');
- $html->assign ('link', $link);
- $html->assign ('user_displayname', $this->senderDisplayName);
- $html->assign ('filename', $filename);
- $html->assign('expiration', $formattedDate);
- $htmlMail = $html->fetchPage();
-
- $plainText = new \OC_Template('core', $prefix . 'altmail', '');
- $plainText->assign ('link', $link);
- $plainText->assign ('user_displayname', $this->senderDisplayName);
- $plainText->assign ('filename', $filename);
- $plainText->assign('expiration', $formattedDate);
- $plainTextMail = $plainText->fetchPage();
-
- return [$htmlMail, $plainTextMail];
- }
-
- /**
- * @param string $itemSource
- * @param string $itemType
- * @param IUser $recipient
- * @return array
- */
- protected function getItemSharedWithUser($itemSource, $itemType, $recipient) {
- return Share::getItemSharedWithUser($itemType, $itemSource, $recipient->getUID());
- }
-
-}