diff --git a/apps/sharebymail/lib/Activity.php b/apps/sharebymail/lib/Activity.php index 1c2f37dc38..acc3e59f92 100644 --- a/apps/sharebymail/lib/Activity.php +++ b/apps/sharebymail/lib/Activity.php @@ -58,6 +58,8 @@ class Activity implements IProvider { const SUBJECT_SHARED_EMAIL_SELF = 'shared_with_email_self'; const SUBJECT_SHARED_EMAIL_BY = 'shared_with_email_by'; + const SUBJECT_SHARED_EMAIL_PASSWORD_SEND = 'shared_with_email_password_send'; + const SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF = 'shared_with_email_password_send_self'; /** * @param IFactory $languageFactory @@ -119,15 +121,26 @@ class Activity implements IProvider { ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_BY) { $event->setParsedSubject($this->l->t('Shared with %1$s by %2$s', [ - $parsedParameters['email']['name'], - $parsedParameters['actor']['name'], - ])) + $parsedParameters['email']['name'], + $parsedParameters['actor']['name'], + ])) ->setRichSubject($this->l->t('Shared with {email} by {actor}'), [ 'email' => $parsedParameters['email'], 'actor' => $parsedParameters['actor'], ]) ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); - + } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND) { + $event->setParsedSubject($this->l->t('Password for mail share send to %1$s', [ + $parsedParameters['email']['name'] + ])) + ->setRichSubject($this->l->t('Password for mail share send to {email}'), [ + 'email' => $parsedParameters['email'] + ]) + ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF) { + $event->setParsedSubject($this->l->t('Password for mail share send to you')) + ->setRichSubject($this->l->t('Password for mail share send to you')) + ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); } else { throw new \InvalidArgumentException(); } @@ -153,12 +166,26 @@ class Activity implements IProvider { ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_BY) { $event->setParsedSubject($this->l->t('%3$s shared %1$s with %2$s by mail', [ - $parsedParameters['file']['path'], - $parsedParameters['email']['name'], - $parsedParameters['actor']['name'], - ])) + $parsedParameters['file']['path'], + $parsedParameters['email']['name'], + $parsedParameters['actor']['name'], + ])) ->setRichSubject($this->l->t('{actor} shared {file} with {email} by mail'), $parsedParameters) ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND) { + $event->setParsedSubject($this->l->t('Password to access %1$s was send to %2s', [ + $parsedParameters['file']['path'], + $parsedParameters['email']['name'] + ])) + ->setRichSubject($this->l->t('Password to access {file} was send to {email}'), $parsedParameters) + ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } else if ($event->getSubject() === self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF) { + $event->setParsedSubject( + $this->l->t('Password to access %1$s was send to you', + [$parsedParameters['file']['path']])) + ->setRichSubject($this->l->t('Password to access {file} was send to you'), $parsedParameters) + ->setIcon($this->url->getAbsoluteURL($this->url->imagePath('core', 'actions/share.svg'))); + } else { throw new \InvalidArgumentException(); } @@ -182,6 +209,15 @@ class Activity implements IProvider { 'email' => $this->generateEmailParameter($parameters[1]), 'actor' => $this->generateUserParameter($parameters[2]), ]; + case self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND: + return [ + 'file' => $this->generateFileParameter((int) $event->getObjectId(), $parameters[0]), + 'email' => $this->generateEmailParameter($parameters[1]), + ]; + case self::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF: + return [ + 'file' => $this->generateFileParameter((int) $event->getObjectId(), $parameters[0]), + ]; } throw new \InvalidArgumentException(); } diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php index defcd5d4ac..7093fd3dfe 100644 --- a/apps/sharebymail/lib/ShareByMailProvider.php +++ b/apps/sharebymail/lib/ShareByMailProvider.php @@ -172,11 +172,12 @@ class ShareByMailProvider implements IShareProvider { } $shareId = $this->createMailShare($share); - $send = $this->sendPassword($share->getNode()->getName(), $share->getSharedBy(), $share->getSharedWith(), $password); + $send = $this->sendPassword($share, $password); if ($passwordEnforced && $send === false) { - $this->sendPasswordToOwner($share->getNode()->getName(), $share->getSharedBy(), $shareWith, $password); + $this->sendPasswordToOwner($share, $password); } - $this->createActivity($share); + + $this->createShareActivity($share); $data = $this->getRawShare($shareId); return $this->createShareObject($data); @@ -212,7 +213,7 @@ class ShareByMailProvider implements IShareProvider { * * @param IShare $share */ - protected function createActivity(IShare $share) { + protected function createShareActivity(IShare $share) { $userFolder = $this->rootFolder->getUserFolder($share->getSharedBy()); @@ -240,6 +241,37 @@ class ShareByMailProvider implements IShareProvider { } + /** + * create activity if a file/folder was shared by mail + * + * @param IShare $share + * @param string $sharedWith + * @param bool $sendToSelf + */ + protected function createPasswordSendActivity(IShare $share, $sharedWith, $sendToSelf) { + + $userFolder = $this->rootFolder->getUserFolder($share->getSharedBy()); + + if ($sendToSelf) { + $this->publishActivity( + Activity::SUBJECT_SHARED_EMAIL_PASSWORD_SEND_SELF, + [$userFolder->getRelativePath($share->getNode()->getPath())], + $share->getSharedBy(), + $share->getNode()->getId(), + $userFolder->getRelativePath($share->getNode()->getPath()) + ); + } else { + $this->publishActivity( + Activity::SUBJECT_SHARED_EMAIL_PASSWORD_SEND, + [$userFolder->getRelativePath($share->getNode()->getPath()), $sharedWith], + $share->getSharedBy(), + $share->getNode()->getId(), + $userFolder->getRelativePath($share->getNode()->getPath()) + ); + } + } + + /** * publish activity if a file/folder was shared by mail * @@ -384,13 +416,15 @@ class ShareByMailProvider implements IShareProvider { /** * send password to recipient of a mail share * - * @param string $filename - * @param string $initiator - * @param string $shareWith + * @param IShare $share * @param string $password * @return bool */ - protected function sendPassword($filename, $initiator, $shareWith, $password) { + protected function sendPassword(IShare $share, $password) { + + $filename = $share->getNode()->getName(); + $initiator = $share->getSharedBy(); + $shareWith = $share->getSharedWith(); if ($password === '' || $this->settingsManager->sendPasswordByMail() === false) { return false; @@ -422,6 +456,8 @@ class ShareByMailProvider implements IShareProvider { $message->setHtmlBody($emailTemplate->renderHtml()); $this->mailer->send($message); + $this->createPasswordSendActivity($share, $shareWith, false); + return true; } @@ -429,17 +465,18 @@ class ShareByMailProvider implements IShareProvider { * send auto generated password to the owner. This happens if the admin enforces * a password for mail shares and forbid to send the password by mail to the recipient * - * @param string $filename - * @param string $initiator - * @param string $shareWith + * @param IShare $share * @param string $password + * @return bool * @throws \Exception */ - protected function sendPasswordToOwner($filename, $initiator, $shareWith, $password) { + protected function sendPasswordToOwner(IShare $share, $password) { - $initiatorUser = $this->userManager->get($initiator); - $initiatorEMailAddress = ($initiatorUser instanceof IUser) ? $initiatorUser->getEMailAddress() : null; - $initiatorDisplayName = ($initiatorUser instanceof IUser) ? $initiatorUser->getDisplayName() : $initiator; + $filename = $share->getNode()->getName(); + $initiator = $this->userManager->get($share->getSharedBy()); + $initiatorEMailAddress = ($initiator instanceof IUser) ? $initiator->getEMailAddress() : null; + $initiatorDisplayName = ($initiator instanceof IUser) ? $initiator->getDisplayName() : $share->getSharedBy(); + $shareWith = $share->getSharedWith(); if ($initiatorEMailAddress === null) { throw new \Exception( @@ -469,6 +506,10 @@ class ShareByMailProvider implements IShareProvider { $message->setBody($emailTemplate->renderText(), 'text/plain'); $message->setHtmlBody($emailTemplate->renderHTML()); $this->mailer->send($message); + + $this->createPasswordSendActivity($share, $shareWith, true); + + return true; } /** @@ -561,7 +602,7 @@ class ShareByMailProvider implements IShareProvider { $validPassword = $plainTextPassword !== null && $plainTextPassword !== ''; if($validPassword && $originalShare->getPassword() !== $share->getPassword()) { - $this->sendPassword($share->getNode()->getName(), $share->getSharedBy(), $share->getSharedWith(), $plainTextPassword); + $this->sendPassword($share, $plainTextPassword); } /* * We allow updating the permissions and password of mail shares