. */ declare(strict_types=1); namespace FireflyIII\Handlers\Events; use Exception; use FireflyIII\Events\Admin\InvitationCreated; use FireflyIII\Events\AdminRequestedTestMessage; use FireflyIII\Events\NewVersionAvailable; use FireflyIII\Notifications\Admin\TestNotification; use FireflyIII\Notifications\Admin\UserInvitation; use FireflyIII\Notifications\Admin\VersionCheckResult; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\Support\Facades\FireflyConfig; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Notification; /** * Class AdminEventHandler. */ class AdminEventHandler { /** * @param InvitationCreated $event * @return void */ public function sendInvitationNotification(InvitationCreated $event): void { $sendMail = FireflyConfig::get('notification_invite_created', true)->data; if (false === $sendMail) { return; } /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); $all = $repository->all(); foreach ($all as $user) { if ($repository->hasRole($user, 'owner')) { try { Notification::send($user, new UserInvitation($event->invitee)); } catch (Exception $e) { $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); return; } if (str_contains($message, 'RFC 2822')) { Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); return; } Log::error($e->getMessage()); Log::error($e->getTraceAsString()); } } } } /** * Send new version message to admin. * * @param NewVersionAvailable $event * @return void */ public function sendNewVersion(NewVersionAvailable $event): void { $sendMail = FireflyConfig::get('notification_new_version', true)->data; if (false === $sendMail) { return; } /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); $all = $repository->all(); foreach ($all as $user) { if ($repository->hasRole($user, 'owner')) { try { Notification::send($user, new VersionCheckResult($event->message)); } catch (Exception $e) { $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); return; } if (str_contains($message, 'RFC 2822')) { Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); return; } Log::error($e->getMessage()); Log::error($e->getTraceAsString()); } } } } /** * Sends a test message to an administrator. * * @param AdminRequestedTestMessage $event * * @return void */ public function sendTestMessage(AdminRequestedTestMessage $event): void { /** @var UserRepositoryInterface $repository */ $repository = app(UserRepositoryInterface::class); if (!$repository->hasRole($event->user, 'owner')) { return; } try { Notification::send($event->user, new TestNotification($event->user->email)); } catch (Exception $e) { $message = $e->getMessage(); if (str_contains($message, 'Bcc')) { Log::warning('[Bcc] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); return; } if (str_contains($message, 'RFC 2822')) { Log::warning('[RFC] Could not send notification. Please validate your email settings, use the .env.example file as a guide.'); return; } Log::error($e->getMessage()); Log::error($e->getTraceAsString()); } } }