diff --git a/lib/DigestSender.php b/lib/DigestSender.php index 75adc28cb..f5b50dfd1 100644 --- a/lib/DigestSender.php +++ b/lib/DigestSender.php @@ -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; @@ -68,6 +69,12 @@ public function sendDigests(int $now): void { // User got todays digest already continue; } + $user = $this->userManager->get($user); + if (!$user->isEnabled()) { + // User is disabled so do not send the email but update last sent since after enabling avoid flooding + $this->updateLastSentForUser($user, $now); + continue; + } try { $this->sendDigestForUser($user, $now, $timezone, $language); @@ -78,7 +85,7 @@ public function sendDigests(int $now): void { } // 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($user->getUID(), 'activity', 'digest', $timezoneDigestDay[$timezone]); } $this->activityManager->setRequirePNG(false); @@ -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; } @@ -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;