Loading module/Oscar/src/Oscar/Controller/ProjectGrantController.php +10 −18 Original line number Diff line number Diff line Loading @@ -2400,11 +2400,13 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $startEmpty = false; } $organizationsIdsPerimeter = null; if ($this->getOrganizationPerimeter()) { $include = $this->params()->fromQuery('include', null); if ($include) { foreach ($include as $index => $value) { $include[$index] = intval($value); $include[] = intval($value); } $include = array_intersect( $include, Loading @@ -2413,6 +2415,11 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif } else { $include = $this->getOrganizationPerimeter(); } // IDS concernés $organizationsIdsPerimeter = $this->getActivityService() ->getActivityRepository() ->getIdsWithOrganizations($include); } // Type de recherche supportée Loading Loading @@ -2615,14 +2622,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif if (!$search && count($criteria) === 0) { $ids = []; if ($include) { $organizationsPerimeterIds = implode(',', $include); $qb->andWhere( 'p1.organization IN(' . $organizationsPerimeterIds . ') OR p2.organization IN(' . $organizationsPerimeterIds . ')' ); $qb->andWhere('c.id IN(' . implode(',', $organizationsIdsPerimeter) .')'); } } else { if ($search) { Loading Loading @@ -3048,15 +3048,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif // FILTRE STATIC SUR LES ORGA if ($this->getOrganizationPerimeter()) { $organizationsPerimeterIds = implode(',', $include); $qb->andWhere( 'p1.organization IN(' . $organizationsPerimeterIds . ') OR p2.organization IN(' . $organizationsPerimeterIds . ')' ); $qb->andWhere('c.id IN(' . implode(',', $organizationsIdsPerimeter) .')'); } $activities = null; Loading module/Oscar/src/Oscar/Entity/ActivityRepository.php +13 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,19 @@ class ActivityRepository extends EntityRepository ->leftJoin('p2.organization', 'orga2'); } public function getIdsWithOrganizations( array $organisationsIds ): array { $queryBuilder = $this->baseQueryWithOrganizationOf() ->where('orga1.id IN (:organizations_ids) OR orga2.id IN (:organizations_ids)'); $queryBuilder->setParameters( [ 'organizations_ids' => $organisationsIds ] ); return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } /** * Retourne les IDS des activités impliquant une organisation d'un des types spécifiés. * Loading Loading
module/Oscar/src/Oscar/Controller/ProjectGrantController.php +10 −18 Original line number Diff line number Diff line Loading @@ -2400,11 +2400,13 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif $startEmpty = false; } $organizationsIdsPerimeter = null; if ($this->getOrganizationPerimeter()) { $include = $this->params()->fromQuery('include', null); if ($include) { foreach ($include as $index => $value) { $include[$index] = intval($value); $include[] = intval($value); } $include = array_intersect( $include, Loading @@ -2413,6 +2415,11 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif } else { $include = $this->getOrganizationPerimeter(); } // IDS concernés $organizationsIdsPerimeter = $this->getActivityService() ->getActivityRepository() ->getIdsWithOrganizations($include); } // Type de recherche supportée Loading Loading @@ -2615,14 +2622,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif if (!$search && count($criteria) === 0) { $ids = []; if ($include) { $organizationsPerimeterIds = implode(',', $include); $qb->andWhere( 'p1.organization IN(' . $organizationsPerimeterIds . ') OR p2.organization IN(' . $organizationsPerimeterIds . ')' ); $qb->andWhere('c.id IN(' . implode(',', $organizationsIdsPerimeter) .')'); } } else { if ($search) { Loading Loading @@ -3048,15 +3048,7 @@ class ProjectGrantController extends AbstractOscarController implements UseNotif // FILTRE STATIC SUR LES ORGA if ($this->getOrganizationPerimeter()) { $organizationsPerimeterIds = implode(',', $include); $qb->andWhere( 'p1.organization IN(' . $organizationsPerimeterIds . ') OR p2.organization IN(' . $organizationsPerimeterIds . ')' ); $qb->andWhere('c.id IN(' . implode(',', $organizationsIdsPerimeter) .')'); } $activities = null; Loading
module/Oscar/src/Oscar/Entity/ActivityRepository.php +13 −0 Original line number Diff line number Diff line Loading @@ -55,6 +55,19 @@ class ActivityRepository extends EntityRepository ->leftJoin('p2.organization', 'orga2'); } public function getIdsWithOrganizations( array $organisationsIds ): array { $queryBuilder = $this->baseQueryWithOrganizationOf() ->where('orga1.id IN (:organizations_ids) OR orga2.id IN (:organizations_ids)'); $queryBuilder->setParameters( [ 'organizations_ids' => $organisationsIds ] ); return array_map('current', $queryBuilder->getQuery()->getArrayResult()); } /** * Retourne les IDS des activités impliquant une organisation d'un des types spécifiés. * Loading