예제 #1
0
 /**
  * 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;
 }
예제 #2
0
 /**
  * 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;
 }