/**
  * @param array $conditions
  * @param PagingProperties $pagingProperties
  * @param ApiUser $user
  * @return \Doctrine\Common\Collections\Collection|static
  * @throws \Exception
  */
 public function filter(array &$conditions, PagingProperties $pagingProperties, $user = null)
 {
     $qb = $this->_em->createQueryBuilder();
     $orderByField = sprintf('%s.%s', self::SELECT_ALIAS, $pagingProperties->getSort());
     $offset = ($pagingProperties->getPage() - 1) * $pagingProperties->getLimit();
     $qb->select(self::SELECT_ALIAS)->from($this->_entityName, self::SELECT_ALIAS);
     foreach ($conditions as $condition) {
         $whereExpression = $this->buildWhereExpression($qb, $condition);
         $qb->orWhere($whereExpression);
     }
     if (!$this->userState->isOroUser()) {
         $publicComments = sprintf('%s.private = false', self::SELECT_ALIAS);
         $qb->andWhere($publicComments);
     }
     $qb->addOrderBy($orderByField, $pagingProperties->getOrder());
     $qb->setFirstResult($offset);
     $qb->setMaxResults($pagingProperties->getLimit());
     $query = $qb->getQuery();
     try {
         $result = $query->getResult(Query::HYDRATE_OBJECT);
     } catch (\Exception $e) {
         $result = null;
     }
     return $result;
 }
 /**
  * @param NotificationEvent $event
  * @return void
  */
 public function processEvent(NotificationEvent $event)
 {
     if (false === $this->isNotificationsEnabled()) {
         return;
     }
     if ($event instanceof CommentsEvent && $event->isPrivate() && !$this->userState->isOroUser()) {
         return;
     }
     $changeList = new \ArrayIterator();
     if ($event instanceof ChangesProviderEvent) {
         $event->provideChanges($changeList);
     }
     $attachments = array();
     if ($event instanceof AttachmentsEvent) {
         $attachments = $event->attachments();
     }
     $user = $this->securityFacade->getLoggedUser();
     $notification = new TicketNotification($event->getAggregateId(), $user, $event->getHeaderText(), $event->getSubject(), $changeList, $attachments);
     $this->manager->add($notification);
 }