Spaces:
No application file
No application file
| namespace Mautic\CoreBundle\Service; | |
| use Mautic\CoreBundle\Model\NotificationModel; | |
| use Symfony\Component\HttpFoundation\RequestStack; | |
| use Symfony\Component\HttpFoundation\Session\Session; | |
| use Symfony\Contracts\Translation\TranslatorInterface; | |
| /** | |
| * Provides translated flash messages. | |
| */ | |
| class FlashBag | |
| { | |
| public const LEVEL_ERROR = 'error'; | |
| public const LEVEL_WARNING = 'warning'; | |
| public const LEVEL_NOTICE = 'notice'; | |
| public function __construct( | |
| private Session $session, | |
| private TranslatorInterface $translator, | |
| private RequestStack $requestStack, | |
| private NotificationModel $notificationModel | |
| ) { | |
| } | |
| /** | |
| * @param string $message | |
| * @param array|null $messageVars | |
| * @param string $level | |
| * @param string $domain | |
| * @param bool $addNotification | |
| */ | |
| public function add($message, $messageVars = [], $level = self::LEVEL_NOTICE, $domain = 'flashes', $addNotification = false): void | |
| { | |
| if (false === $domain) { | |
| // message is already translated | |
| $translatedMessage = $message; | |
| } else { | |
| if (isset($messageVars['pluralCount']) && empty($messageVars['%count%'])) { | |
| $messageVars['%count%'] = $messageVars['pluralCount']; | |
| } | |
| $translatedMessage = $this->translator->trans($message, $messageVars, $domain); | |
| } | |
| $this->session->getFlashBag()->add($level, $translatedMessage); | |
| if (!defined('MAUTIC_INSTALLER') && $addNotification) { | |
| $iconClass = match ($level) { | |
| self::LEVEL_WARNING => 'text-warning ri-alert-line', | |
| self::LEVEL_ERROR => 'text-danger ri-error-warning-line-circle', | |
| default => 'ri-information-2-line', | |
| }; | |
| // If the user has not interacted with the browser for the last 30 seconds, consider the message unread | |
| $lastActive = $this->requestStack->getCurrentRequest()->get('mauticUserLastActive', 0); | |
| $isRead = $lastActive > 30 ? 0 : 1; | |
| $this->notificationModel->addNotification($message, $level, $isRead, null, $iconClass); | |
| } | |
| } | |
| } | |