Skip to content

Commit

Permalink
Merge pull request #1803 from nextcloud/fix/834/dont-sent-digest-emai…
Browse files Browse the repository at this point in the history
…l-to-disabled-user

fix: do not send daily digest email to user who is disabled
  • Loading branch information
yemkareems authored Oct 28, 2024
2 parents 33cabc5 + b13e269 commit 05e122c
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions lib/DigestSender.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
use OCP\IConfig;
use OCP\IDateTimeFormatter;
use OCP\IURLGenerator;
use OCP\IUser;
use OCP\IUserManager;
use OCP\L10N\IFactory;
use OCP\Mail\IMailer;
Expand Down Expand Up @@ -68,17 +69,23 @@ public function sendDigests(int $now): void {
// User got todays digest already
continue;
}
$userObject = $this->userManager->get($user);
if (!$userObject->isEnabled()) {
// User is disabled so do not send the email but update last sent since after enabling avoid flooding
$this->updateLastSentForUser($userObject, $now);
continue;
}

try {
$this->sendDigestForUser($user, $now, $timezone, $language);
$this->sendDigestForUser($userObject, $now, $timezone, $language);
} catch (\Throwable $e) {
$this->logger->error('Exception occurred while sending user digest email', [
'exception' => $e,
]);
}
// We still update the digest time after an failed email,
// so it hopefully works tomorrow
$this->config->setUserValue($user, 'activity', 'digest', $timezoneDigestDay[$timezone]);
$this->config->setUserValue($userObject->getUID(), 'activity', 'digest', $timezoneDigestDay[$timezone]);
}

$this->activityManager->setRequirePNG(false);
Expand All @@ -103,11 +110,21 @@ private function getLastSendActivity(string $user, int $now): int {
return $this->data->getFirstActivitySince($user, $now - (24 * 60 * 60));
}

public function sendDigestForUser(string $uid, int $now, string $timezone, string $language) {
private function updateLastSentForUser(IUser $user, int $now): void {
$uid = $user->getUID();
$lastSend = $this->getLastSendActivity($uid, $now);

['max' => $lastActivityId] = $this->data->getActivitySince($uid, $lastSend, true);
$lastActivityId = (int)$lastActivityId;

$this->config->setUserValue($uid, 'activity', 'activity_digest_last_send', (string)$lastActivityId);
}

public function sendDigestForUser(IUser $user, int $now, string $timezone, string $language) {
$uid = $user->getUID();
$l10n = $this->l10nFactory->get('activity', $language);
$this->groupHelper->setL10n($l10n);
$lastSend = $this->getLastSendActivity($uid, $now);
$user = $this->userManager->get($uid);
if ($lastSend === 0) {
return;
}
Expand Down Expand Up @@ -181,7 +198,7 @@ public function sendDigestForUser(string $uid, int $now, string $timezone, strin
$this->activityManager->setCurrentUserId(null);
try {
$this->mailer->send($message);
$this->config->setUserValue($user->getUID(), 'activity', 'activity_digest_last_send', (string)$lastActivityId);
$this->config->setUserValue($uid, 'activity', 'activity_digest_last_send', (string)$lastActivityId);
} catch (\Exception $e) {
$this->logger->error($e->getMessage());
return;
Expand Down

0 comments on commit 05e122c

Please sign in to comment.