/** * Send an event to the notifications of a user * * @param IEvent $event * @return null */ public function receive(IEvent $event) { $selfAction = $event->getAffectedUser() === $event->getAuthor(); $streamSetting = $this->userSettings->getUserSetting($event->getAffectedUser(), 'stream', $event->getType()); $emailSetting = $this->userSettings->getUserSetting($event->getAffectedUser(), 'email', $event->getType()); $emailSetting = $emailSetting ? $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'batchtime') : false; $types = $this->data->getNotificationTypes($this->l10nFactory->get('activity')); $typeData = $types[$event->getType()]; // User is not the author or wants to see their own actions $createStream = !$selfAction || $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'self'); // User can not control the setting $createStream = $createStream || is_array($typeData) && isset($typeData['methods']) && !in_array(IExtension::METHOD_STREAM, $typeData['methods']); // Add activity to stream if ($streamSetting && $createStream) { $this->data->send($event); } // User is not the author or wants to see their own actions $createEmail = !$selfAction || $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'selfemail'); // User can not control the setting $createEmail = $createEmail || is_array($typeData) && isset($typeData['methods']) && !in_array(IExtension::METHOD_MAIL, $typeData['methods']); // Add activity to mail queue if ($emailSetting && $createEmail) { $latestSend = $event->getTimestamp() + $emailSetting; $this->data->storeMail($event, $latestSend); } }
/** * Send an event to the notifications of a user * * @param IEvent $event * @return null */ public function receive(IEvent $event) { $selfAction = $event->getAffectedUser() === $event->getAuthor(); $streamSetting = $this->userSettings->getUserSetting($event->getAffectedUser(), 'stream', $event->getType()); $emailSetting = $this->userSettings->getUserSetting($event->getAffectedUser(), 'email', $event->getType()); $emailSetting = $emailSetting ? $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'batchtime') : false; // Add activity to stream if ($streamSetting && (!$selfAction || $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'self'))) { $this->data->send($event); } // Add activity to mail queue if ($emailSetting && (!$selfAction || $this->userSettings->getUserSetting($event->getAffectedUser(), 'setting', 'selfemail'))) { $latestSend = $event->getTimestamp() + $emailSetting; $this->data->storeMail($event, $latestSend); } }
/** * Publish an event to the activity consumers * * Make sure to call at least the following methods before sending an Event: * - setApp() * - setType() * - setAffectedUser() * - setSubject() * * @param IEvent $event * @return null * @throws \BadMethodCallException if required values have not been set */ public function publish(IEvent $event) { if (!$event->getApp()) { throw new \BadMethodCallException('App not set', 10); } if (!$event->getType()) { throw new \BadMethodCallException('Type not set', 11); } if ($event->getAffectedUser() === null) { throw new \BadMethodCallException('Affected user not set', 12); } if ($event->getSubject() === null || $event->getSubjectParameters() === null) { throw new \BadMethodCallException('Subject not set', 13); } if ($event->getAuthor() === null) { if ($this->session->getUser() instanceof IUser) { $event->setAuthor($this->session->getUser()->getUID()); } } if (!$event->getTimestamp()) { $event->setTimestamp(time()); } foreach ($this->getConsumers() as $c) { $c->receive($event); } }
/** * Send an event into the activity stream * * @param IEvent $event * @return bool */ public function send(IEvent $event) { if ($event->getAffectedUser() === '' || $event->getAffectedUser() === null) { return false; } // store in DB $queryBuilder = $this->connection->getQueryBuilder(); $queryBuilder->insert('activity')->values(['app' => $queryBuilder->createParameter('app'), 'subject' => $queryBuilder->createParameter('subject'), 'subjectparams' => $queryBuilder->createParameter('subjectparams'), 'message' => $queryBuilder->createParameter('message'), 'messageparams' => $queryBuilder->createParameter('messageparams'), 'file' => $queryBuilder->createParameter('object_name'), 'link' => $queryBuilder->createParameter('link'), 'user' => $queryBuilder->createParameter('user'), 'affecteduser' => $queryBuilder->createParameter('affecteduser'), 'timestamp' => $queryBuilder->createParameter('timestamp'), 'priority' => $queryBuilder->createParameter('priority'), 'type' => $queryBuilder->createParameter('type'), 'object_type' => $queryBuilder->createParameter('object_type'), 'object_id' => $queryBuilder->createParameter('object_id')])->setParameters(['app' => $event->getApp(), 'type' => $event->getType(), 'affecteduser' => $event->getAffectedUser(), 'user' => $event->getAuthor(), 'timestamp' => (int) $event->getTimestamp(), 'subject' => $event->getSubject(), 'subjectparams' => json_encode($event->getSubjectParameters()), 'message' => $event->getMessage(), 'messageparams' => json_encode($event->getMessageParameters()), 'priority' => IExtension::PRIORITY_MEDIUM, 'object_type' => $event->getObjectType(), 'object_id' => (int) $event->getObjectId(), 'object_name' => $event->getObjectName(), 'link' => $event->getLink()])->execute(); return true; }