public function addNotification(OW_Event $event) { $params = $event->getParams(); $data = $event->getData(); if (empty($params['entityType']) || empty($params['entityId']) || empty($params['userId']) || empty($params['pluginKey'])) { throw new InvalidArgumentException('`entityType`, `entityId`, `userId`, `pluginKey` are required'); } if (!$this->service->isNotificationPermited($params['userId'], $params['action'])) { return; } $notification = $this->service->findNotification($params['entityType'], $params['entityId'], $params['userId']); if ($notification === null) { $notification = new NOTIFICATIONS_BOL_Notification(); $notification->entityType = $params['entityType']; $notification->entityId = $params['entityId']; $notification->userId = $params['userId']; $notification->pluginKey = $params['pluginKey']; $notification->action = $params['action']; } else { $notification->viewed = 0; $dublicateParams = array('originalEvent' => $event, 'notificationDto' => $notification, 'oldData' => $notification->getData()); $dublicateParams = array_merge($params, $dublicateParams); $dublicateEvent = new OW_Event('notifications.on_dublicate', $dublicateParams, $data); OW::getEventManager()->trigger($dublicateEvent); $data = $dublicateEvent->getData(); } $notification->timeStamp = empty($params['time']) ? time() : $params['time']; $notification->active = isset($params['active']) ? (bool) $params['active'] : true; $notification->setData($data); $this->service->saveNotification($notification); }