createQueryBuilder('a'); $qb->join('a.roles', 'r'); if (count($roles)) { $ids = []; foreach ($roles as $r) { $ids[] = (int) $r->getId(); } $qb->andWhere($qb->expr()->in('r.id', $ids)); } $qb->andWhere('a.publishedat <= :today') ->andWhere($qb->expr()->orX( $qb->expr()->gt('a.unpublishedat', ':today'), $qb->expr()->isNull('a.unpublishedat') )) ->orderBy('a.rowOrder', $order); return $qb->getQuery() ->setParameter('today', date('Y-m-d')) ->getResult() ; } public function getUserAlerts($user,$idalertcategory,$alertcategoryfilter,$ssoitems) { // Profilage $roles=($user?$user->getRoles():["ROLE_ANONYME"]); $niveau01=($user?$user->getNiveau01():null); $groups=($user?$user->getGroups():[]); // Initialisation du calcul des alerts $alerts=new ArrayCollection(); // Récupération des alerts par rôles foreach($roles as $role) { $qb = $this->createQueryBuilder('a'); $qb->select('alert') ->from("CadolesPortalBundle:Alert", 'alert') ->where($qb->expr()->like('alert.roles', $qb->expr()->literal("%$role%"))) ->andWhere('alert.publishedat <= :today') ->andWhere($qb->expr()->orX( $qb->expr()->gt('alert.unpublishedat', ':today'), $qb->expr()->isNull('alert.unpublishedat') )) ->setParameter('today', date('Y-m-d')); if($idalertcategory && $alertcategoryfilter) { $qb->andWhere("alert.alertcategory=:alertcategory") ->setParameter("alertcategory",$alertcategoryfilter); } $alertsroles=$qb->getQuery()->getResult(); foreach($alertsroles as $alertrole) { if(!$alerts->contains($alertrole)&&!$alertrole->getReaders()->contains($user)) $alerts->add($alertrole); } } // Récupération par Niveau01 $qb = $this->createQueryBuilder('a'); $qb->select('alert') ->from("CadolesPortalBundle:Alert", 'alert') ->where(":niveau01 MEMBER OF alert.niveau01s") ->andWhere('alert.publishedat <= :today') ->andWhere($qb->expr()->orX( $qb->expr()->gt('alert.unpublishedat', ':today'), $qb->expr()->isNull('alert.unpublishedat') )) ->setParameter("niveau01",$niveau01) ->setParameter('today', date('Y-m-d')); if($idalertcategory && $alertcategoryfilter) { $qb->andWhere("alert.alertcategory=:alertcategory") ->setParameter("alertcategory",$alertcategoryfilter); } $alertsniveau01s=$qb->getQuery()->getResult(); foreach($alertsniveau01s as $alertniveau01) { if(!$alerts->contains($alertniveau01)&&!$alertniveau01->getReaders()->contains($user)) $alerts->add($alertniveau01); } // Récupération des alerts par group foreach($groups as $group) { $qb = $this->createQueryBuilder('a'); $qb->select('alert') ->from("CadolesPortalBundle:Alert", 'alert') ->where(":group MEMBER OF alert.groups") ->andWhere('alert.publishedat <= :today') ->andWhere($qb->expr()->orX( $qb->expr()->gt('alert.unpublishedat', ':today'), $qb->expr()->isNull('alert.unpublishedat') )) ->setParameter("group",$group->getGroup()) ->setParameter('today', date('Y-m-d')); if($idalertcategory && $alertcategoryfilter) { $qb->andWhere("alert.alertcategory=:alertcategory") ->setParameter("alertcategory",$alertcategoryfilter); } $alertsgroups=$qb->getQuery()->getResult(); foreach($alertsgroups as $alertgroup) { if(!$alerts->contains($alertgroup)&&!$alertgroup->getReaders()->contains($user)) $alerts->add($alertgroup); } } // Récupération des alerts par item $bookmarks=null; $items=null; $itemcategorys=null; $this->getEntityManager()->getRepository("CadolesPortalBundle:Item")->getUserItems($user,$bookmarks,$items,$itemcategorys,null,$ssoitems,4); foreach($items as $item) { $qb = $this->createQueryBuilder('a'); $qb->select('alert') ->from("CadolesPortalBundle:Alert", 'alert') ->where(":item MEMBER OF alert.items") ->andWhere('alert.publishedat <= :today') ->andWhere($qb->expr()->orX( $qb->expr()->gt('alert.unpublishedat', ':today'), $qb->expr()->isNull('alert.unpublishedat') )) ->setParameter("item",$item) ->setParameter('today', date('Y-m-d')); if($idalertcategory && $alertcategoryfilter) { $qb->andWhere("alert.alertcategory=:alertcategory") ->setParameter("alertcategory",$alertcategoryfilter); } $alertsitems=$qb->getQuery()->getResult(); foreach($alertsitems as $alertitem) { if(!$alerts->contains($alertitem)&&!$alertitem->getReaders()->contains($user)) $alerts->add($alertitem); } } // Trie des alerts $alertsordered = $alerts->getIterator(); $alertsordered->uasort(function ($first, $second) { return (int) $first->getRowOrder() > (int) $second->getRowOrder() ? 1 : -1; }); return $alertsordered; } }