Spaces:
No application file
No application file
declare(strict_types=1); | |
namespace Mautic\CoreBundle\Service; | |
use Mautic\CoreBundle\Model\NotificationModel; | |
use Mautic\UserBundle\Entity\User; | |
final class BulkNotification implements BulkNotificationInterface | |
{ | |
/** | |
* @var mixed[] | |
*/ | |
private array $notifications = []; | |
public function __construct( | |
private NotificationModel $notificationModel | |
) { | |
} | |
public function addNotification( | |
string $deduplicateValue, | |
string $message, | |
string $type = null, | |
string $header = null, | |
string $iconClass = null, | |
\DateTime $datetime = null, | |
User $user = null | |
): void { | |
if (isset($this->notifications[$deduplicateValue])) { | |
return; | |
} | |
$this->notifications[$deduplicateValue] = [ | |
'message' => $message, | |
'type' => $type, | |
'header' => $header, | |
'iconClass' => $iconClass, | |
'datetime' => $datetime, | |
'user' => $user, | |
]; | |
} | |
/** | |
* @param \DateTime|null $deduplicateDateTimeFrom If last 24 hours for deduplication does not fit, change it here | |
*/ | |
public function flush(\DateTime $deduplicateDateTimeFrom = null): void | |
{ | |
foreach ($this->notifications as $deduplicateValue => $data) { | |
$this->notificationModel->addNotification( | |
$data['message'], | |
$data['type'], | |
false, | |
$data['header'], | |
$data['iconClass'], | |
$data['datetime'], | |
$data['user'], | |
$deduplicateValue, | |
$deduplicateDateTimeFrom | |
); | |
unset($this->notifications[$deduplicateValue]); | |
} | |
} | |
} | |