/** * Pull notification events from queue until stop time is reached * * @param int $stopTime The Unix time to stop sending notifications * @return int The number of notification events handled * @access private */ public function processQueue($stopTime) { $this->subscriptions->methods = $this->methods; $count = 0; // @todo grab mutex $ia = $this->session->setIgnoreAccess(true); while (time() < $stopTime) { // dequeue notification event $event = $this->queue->dequeue(); if (!$event) { break; } // test for usage of the deprecated override hook if ($this->existsDeprecatedNotificationOverride($event)) { continue; } $subscriptions = $this->subscriptions->getSubscriptions($event); // return false to stop the default notification sender $params = array('event' => $event, 'subscriptions' => $subscriptions); if ($this->hooks->trigger('send:before', 'notifications', $params, true)) { $this->sendNotifications($event, $subscriptions); } $this->hooks->trigger('send:after', 'notifications', $params); $count++; } // release mutex $this->session->setIgnoreAccess($ia); return $count; }
/** * Pull notification events from queue until stop time is reached * * @param int $stopTime The Unix time to stop sending notifications * @param bool $matrix If true, will return delivery matrix instead of a notifications event count * @return int|array The number of notification events handled, or a delivery matrix * @access private */ public function processQueue($stopTime, $matrix = false) { $this->subscriptions->methods = $this->methods; $delivery_matrix = []; $count = 0; // @todo grab mutex $ia = $this->session->setIgnoreAccess(true); while (time() < $stopTime) { // dequeue notification event $event = $this->queue->dequeue(); /* @var $event NotificationEvent */ if (!$event) { // queue is empty break; } if (!$event instanceof NotificationEvent || !$event->getObject() || !$event->getActor()) { // event object or actor have been deleted since the event was enqueued continue; } $subscriptions = $this->subscriptions->getSubscriptions($event); // return false to stop the default notification sender $params = ['event' => $event, 'subscriptions' => $subscriptions]; $deliveries = []; if ($this->hooks->trigger('send:before', 'notifications', $params, true)) { $deliveries = $this->sendNotifications($event, $subscriptions); } $params['deliveries'] = $deliveries; $this->hooks->trigger('send:after', 'notifications', $params); $count++; $delivery_matrix[$event->getDescription()] = $deliveries; } // release mutex $this->session->setIgnoreAccess($ia); return $matrix ? $delivery_matrix : $count; }