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
diff options
context:
space:
mode:
-rw-r--r--apps/sharebymail/js/settings-admin.js8
-rw-r--r--apps/sharebymail/lib/Settings/Admin.php3
-rw-r--r--apps/sharebymail/lib/Settings/SettingsManager.php12
-rw-r--r--apps/sharebymail/lib/ShareByMailProvider.php57
-rw-r--r--apps/sharebymail/templates/settings-admin.php6
-rw-r--r--apps/sharebymail/tests/ShareByMailProviderTest.php186
6 files changed, 246 insertions, 26 deletions
diff --git a/apps/sharebymail/js/settings-admin.js b/apps/sharebymail/js/settings-admin.js
index 35a0e9855ac..a26e687f133 100644
--- a/apps/sharebymail/js/settings-admin.js
+++ b/apps/sharebymail/js/settings-admin.js
@@ -35,4 +35,12 @@ $(function() {
OCP.AppConfig.setValue('sharebymail', 'enforcePasswordProtection', status);
});
+ $('#replyToInitiator').on('change', function() {
+ var status = 'no';
+ if ($(this).is(':checked')) {
+ status = 'yes';
+ }
+ OCP.AppConfig.setValue('sharebymail', 'replyToInitiator', status);
+ });
+
});
diff --git a/apps/sharebymail/lib/Settings/Admin.php b/apps/sharebymail/lib/Settings/Admin.php
index 23881212692..bc766d59af6 100644
--- a/apps/sharebymail/lib/Settings/Admin.php
+++ b/apps/sharebymail/lib/Settings/Admin.php
@@ -41,7 +41,8 @@ class Admin implements ISettings {
public function getForm() {
$parameters = [
'sendPasswordMail' => $this->settingsManager->sendPasswordByMail(),
- 'enforcePasswordProtection' => $this->settingsManager->enforcePasswordProtection()
+ 'enforcePasswordProtection' => $this->settingsManager->enforcePasswordProtection(),
+ 'replyToInitiator' => $this->settingsManager->replyToInitiator()
];
return new TemplateResponse('sharebymail', 'settings-admin', $parameters, '');
diff --git a/apps/sharebymail/lib/Settings/SettingsManager.php b/apps/sharebymail/lib/Settings/SettingsManager.php
index e7937e4c60f..fd351a2db72 100644
--- a/apps/sharebymail/lib/Settings/SettingsManager.php
+++ b/apps/sharebymail/lib/Settings/SettingsManager.php
@@ -38,6 +38,8 @@ class SettingsManager {
private $enforcePasswordProtectionDefault = 'no';
+ private $replyToInitiator = 'yes';
+
public function __construct(IConfig $config) {
$this->config = $config;
}
@@ -61,4 +63,14 @@ class SettingsManager {
$enforcePassword = $this->config->getAppValue('sharebymail', 'enforcePasswordProtection', $this->enforcePasswordProtectionDefault);
return $enforcePassword === 'yes';
}
+
+ /**
+ * should add reply to with initiator mail
+ *
+ * @return bool
+ */
+ public function replyToInitiator(): bool {
+ $replyToInitiator = $this->config->getAppValue('sharebymail', 'replyToInitiator', $this->replyToInitiator);
+ return $replyToInitiator === 'yes';
+ }
}
diff --git a/apps/sharebymail/lib/ShareByMailProvider.php b/apps/sharebymail/lib/ShareByMailProvider.php
index 5977cbd18bb..6f2b5de437f 100644
--- a/apps/sharebymail/lib/ShareByMailProvider.php
+++ b/apps/sharebymail/lib/ShareByMailProvider.php
@@ -399,19 +399,22 @@ class ShareByMailProvider implements IShareProvider {
// The "From" contains the sharers name
$instanceName = $this->defaults->getName();
- $senderName = $this->l->t(
- '%1$s via %2$s',
- [
- $initiatorDisplayName,
- $instanceName
- ]
- );
+ $senderName = $instanceName;
+ if ($this->settingsManager->replyToInitiator()) {
+ $senderName = $this->l->t(
+ '%1$s via %2$s',
+ [
+ $initiatorDisplayName,
+ $instanceName
+ ]
+ );
+ }
$message->setFrom([\OCP\Util::getDefaultEmailAddress($instanceName) => $senderName]);
// The "Reply-To" is set to the sharer if an mail address is configured
// also the default footer contains a "Do not reply" which needs to be adjusted.
$initiatorEmail = $initiatorUser->getEMailAddress();
- if ($initiatorEmail !== null) {
+ if ($this->settingsManager->replyToInitiator() && $initiatorEmail !== null) {
$message->setReplyTo([$initiatorEmail => $initiatorDisplayName]);
$emailTemplate->addFooter($instanceName . ($this->defaults->getSlogan() !== '' ? ' - ' . $this->defaults->getSlogan() : ''));
} else {
@@ -464,15 +467,18 @@ class ShareByMailProvider implements IShareProvider {
// The "From" contains the sharers name
$instanceName = $this->defaults->getName();
- $senderName = $this->l->t(
- '%1$s via %2$s',
- [
- $initiatorDisplayName,
- $instanceName
- ]
- );
+ $senderName = $instanceName;
+ if ($this->settingsManager->replyToInitiator()) {
+ $senderName = $this->l->t(
+ '%1$s via %2$s',
+ [
+ $initiatorDisplayName,
+ $instanceName
+ ]
+ );
+ }
$message->setFrom([\OCP\Util::getDefaultEmailAddress($instanceName) => $senderName]);
- if ($initiatorEmailAddress !== null) {
+ if ($this->settingsManager->replyToInitiator() && $initiatorEmailAddress !== null) {
$message->setReplyTo([$initiatorEmailAddress => $initiatorDisplayName]);
$emailTemplate->addFooter($instanceName . ' - ' . $this->defaults->getSlogan());
} else {
@@ -521,15 +527,18 @@ class ShareByMailProvider implements IShareProvider {
// The "From" contains the sharers name
$instanceName = $this->defaults->getName();
- $senderName = $this->l->t(
- '%1$s via %2$s',
- [
- $initiatorDisplayName,
- $instanceName
- ]
- );
+ $senderName = $instanceName;
+ if ($this->settingsManager->replyToInitiator()) {
+ $senderName = $this->l->t(
+ '%1$s via %2$s',
+ [
+ $initiatorDisplayName,
+ $instanceName
+ ]
+ );
+ }
$message->setFrom([\OCP\Util::getDefaultEmailAddress($instanceName) => $senderName]);
- if ($initiatorEmailAddress !== null) {
+ if ($this->settingsManager->replyToInitiator() && $initiatorEmailAddress !== null) {
$message->setReplyTo([$initiatorEmailAddress => $initiatorDisplayName]);
$emailTemplate->addFooter($instanceName . ' - ' . $this->defaults->getSlogan());
} else {
diff --git a/apps/sharebymail/templates/settings-admin.php b/apps/sharebymail/templates/settings-admin.php
index 52b9ea29593..8e3dff90760 100644
--- a/apps/sharebymail/templates/settings-admin.php
+++ b/apps/sharebymail/templates/settings-admin.php
@@ -17,7 +17,11 @@ style('sharebymail', 'settings-admin');
<input id="enforcePasswordProtection" type="checkbox" class="checkbox" <?php if ($_['enforcePasswordProtection']) {
p('checked');
} ?> />
- <label for="enforcePasswordProtection"><?php p($l->t('Enforce password protection')); ?></label>
+ <label for="enforcePasswordProtection"><?php p($l->t('Enforce password protection')); ?></label><br/>
+ <input id="replyToInitiator" type="checkbox" class="checkbox" <?php if ($_['replyToInitiator']) {
+ p('checked');
+} ?> />
+ <label for="replyToInitiator"><?php p($l->t('Reply to initiator')); ?></label>
</p>
</div>
diff --git a/apps/sharebymail/tests/ShareByMailProviderTest.php b/apps/sharebymail/tests/ShareByMailProviderTest.php
index 6285de2188c..61ad8ae3fd2 100644
--- a/apps/sharebymail/tests/ShareByMailProviderTest.php
+++ b/apps/sharebymail/tests/ShareByMailProviderTest.php
@@ -1077,6 +1077,7 @@ class ShareByMailProviderTest extends TestCase {
public function testSendMailNotificationWithSameUserAndUserEmail() {
$provider = $this->getInstance();
$user = $this->createMock(IUser::class);
+ $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(true);
$this->userManager
->expects($this->once())
->method('get')
@@ -1175,6 +1176,7 @@ class ShareByMailProviderTest extends TestCase {
public function testSendMailNotificationWithDifferentUserAndNoUserEmail() {
$provider = $this->getInstance();
$initiatorUser = $this->createMock(IUser::class);
+ $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(true);
$this->userManager
->expects($this->once())
->method('get')
@@ -1260,4 +1262,188 @@ class ShareByMailProviderTest extends TestCase {
null,
]);
}
+
+ public function testSendMailNotificationWithSameUserAndUserEmailAndReplyToDesactivate() {
+ $provider = $this->getInstance();
+ $user = $this->createMock(IUser::class);
+ $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(false);
+ $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->once())
+ ->method('addBodyText')
+ ->with(
+ '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') => 'UnitTestCloud'
+ ]);
+ $user
+ ->expects($this->once())
+ ->method('getEMailAddress')
+ ->willReturn('owner@example.com');
+ $message
+ ->expects($this->never())
+ ->method('setReplyTo');
+ $template
+ ->expects($this->once())
+ ->method('addFooter')
+ ->with('');
+ $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,
+ ]);
+ }
+
+ public function testSendMailNotificationWithDifferentUserAndNoUserEmailAndReplyToDesactivate() {
+ $provider = $this->getInstance();
+ $initiatorUser = $this->createMock(IUser::class);
+ $this->settingsManager->expects($this->any())->method('replyToInitiator')->willReturn(false);
+ $this->userManager
+ ->expects($this->once())
+ ->method('get')
+ ->with('InitiatorUser')
+ ->willReturn($initiatorUser);
+ $initiatorUser
+ ->expects($this->once())
+ ->method('getDisplayName')
+ ->willReturn('Mr. Initiator 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('Mr. Initiator User shared »file.txt« with you');
+ $template
+ ->expects($this->once())
+ ->method('addBodyText')
+ ->with(
+ 'Mr. Initiator User shared »file.txt« with you. Click the button below to open it.',
+ 'Mr. Initiator 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') => 'UnitTestCloud'
+ ]);
+ $message
+ ->expects($this->never())
+ ->method('setReplyTo');
+ $template
+ ->expects($this->once())
+ ->method('addFooter')
+ ->with('');
+ $template
+ ->expects($this->once())
+ ->method('setSubject')
+ ->with('Mr. Initiator 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',
+ 'InitiatorUser',
+ 'john@doe.com',
+ null,
+ ]);
+ }
}