ReplyTo option for sharebymail Issue #24139
Signed-off-by: Nicolas SIMIDE <2083596+dems54@users.noreply.github.com>
This commit is contained in:
parent
5fa935d6d6
commit
4ac636d252
|
@ -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);
|
||||
});
|
||||
|
||||
});
|
||||
|
|
|
@ -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, '');
|
||||
|
|
|
@ -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';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -399,6 +399,8 @@ class ShareByMailProvider implements IShareProvider {
|
|||
|
||||
// The "From" contains the sharers name
|
||||
$instanceName = $this->defaults->getName();
|
||||
$senderName = $instanceName;
|
||||
if ($this->settingsManager->replyToInitiator()) {
|
||||
$senderName = $this->l->t(
|
||||
'%1$s via %2$s',
|
||||
[
|
||||
|
@ -406,12 +408,13 @@ class ShareByMailProvider implements IShareProvider {
|
|||
$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,6 +467,8 @@ class ShareByMailProvider implements IShareProvider {
|
|||
|
||||
// The "From" contains the sharers name
|
||||
$instanceName = $this->defaults->getName();
|
||||
$senderName = $instanceName;
|
||||
if ($this->settingsManager->replyToInitiator()) {
|
||||
$senderName = $this->l->t(
|
||||
'%1$s via %2$s',
|
||||
[
|
||||
|
@ -471,8 +476,9 @@ class ShareByMailProvider implements IShareProvider {
|
|||
$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,6 +527,8 @@ class ShareByMailProvider implements IShareProvider {
|
|||
|
||||
// The "From" contains the sharers name
|
||||
$instanceName = $this->defaults->getName();
|
||||
$senderName = $instanceName;
|
||||
if ($this->settingsManager->replyToInitiator()) {
|
||||
$senderName = $this->l->t(
|
||||
'%1$s via %2$s',
|
||||
[
|
||||
|
@ -528,8 +536,9 @@ class ShareByMailProvider implements IShareProvider {
|
|||
$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 {
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue