Loading module/Structure/src/Structure/Search/EcoleDoctorale/EcoleDoctoraleSearchFilter.php +1 −7 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Structure\Search\EcoleDoctorale; use Application\Search\Filter\SelectSearchFilter; use Doctrine\ORM\QueryBuilder; use Structure\Entity\Db\EcoleDoctorale; use Webmozart\Assert\Assert; /** * Filtre de type "école doctorale liée" (attribut : `sourceCode`). Loading Loading @@ -38,13 +37,8 @@ class EcoleDoctoraleSearchFilter extends SelectSearchFilter return $instance; } /** * @param QueryBuilder $qb */ public function applyToQueryBuilder(QueryBuilder $qb) protected function applyToQueryBuilderUsingWhereField(QueryBuilder $qb) { $this->checkWhereField(); /** * Pas de jointure en dur ici. Désormais, il faut : * - faire la jointure nécessaire dans {@see \Application\Search\SearchService::createQueryBuilder()} ; Loading module/Structure/src/Structure/Search/Etablissement/EtablissementSearchFilter.php +1 −7 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Structure\Search\Etablissement; use Application\Search\Filter\SelectSearchFilter; use Doctrine\ORM\QueryBuilder; use Structure\Entity\Db\Etablissement; use Webmozart\Assert\Assert; /** * Filtre de type "établissement lié" (attribut : `sourceCode`). Loading Loading @@ -35,13 +34,8 @@ class EtablissementSearchFilter extends SelectSearchFilter ); } /** * @param QueryBuilder $qb */ public function applyToQueryBuilder(QueryBuilder $qb) protected function applyToQueryBuilderUsingWhereField(QueryBuilder $qb) { $this->checkWhereField(); /** * Pas de jointure en dur ici. Désormais, il faut : * - faire la jointure nécessaire dans {@see \Application\Search\SearchService::createQueryBuilder()} ; Loading module/Structure/src/Structure/Search/UniteRecherche/UniteRechercheSearchFilter.php +1 −7 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Structure\Search\UniteRecherche; use Application\Search\Filter\SelectSearchFilter; use Doctrine\ORM\QueryBuilder; use Structure\Entity\Db\UniteRecherche; use Webmozart\Assert\Assert; /** * Filtre de type "unité de recherche liée" (attribut : `sourceCode`). Loading Loading @@ -38,13 +37,8 @@ class UniteRechercheSearchFilter extends SelectSearchFilter return $instance; } /** * @param QueryBuilder $qb */ public function applyToQueryBuilder(QueryBuilder $qb) protected function applyToQueryBuilderUsingWhereField(QueryBuilder $qb) { $this->checkWhereField(); /** * Pas de jointure en dur ici. Désormais, il faut : * - faire la jointure nécessaire dans {@see \Application\Search\SearchService::createQueryBuilder()} ; Loading module/These/src/These/Service/These/TheseSearchService.php +69 −54 Original line number Diff line number Diff line Loading @@ -3,37 +3,37 @@ namespace These\Service\These; use Application\Entity\Db\Role; use Doctrine\ORM\Query\Expr\Join; use These\Entity\Db\These; use Structure\Entity\Db\TypeStructure; use Application\Filter\AnneeUnivFormatter; use Application\Search\DomaineScientifique\DomaineScientifiqueSearchFilterAwareTrait; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilter; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilterAwareTrait; use Structure\Search\Etablissement\EtablissementInscSearchFilterAwareTrait; use Application\Search\Filter\SearchFilter; use Application\Search\Filter\SelectSearchFilter; use Application\Search\Filter\TextCriteriaSearchFilter; use Application\Search\Financement\OrigineFinancementSearchFilterAwareTrait; use Application\Search\SearchService; use Application\Search\Sorter\SearchSorter; use These\Search\These\EtatTheseSearchFilterAwareTrait; use These\Search\These\TheseTextSearchFilter; use These\Search\These\TheseTextSearchFilterAwareTrait; use Application\Service\DomaineScientifiqueServiceAwareTrait; use Application\Service\Financement\FinancementServiceAwareTrait; use Application\Service\UserContextServiceAwareTrait; use Application\View\Helper\Sortable; use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; use Exception; use Structure\Entity\Db\TypeStructure; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilter; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilterAwareTrait; use Structure\Search\Etablissement\EtablissementInscSearchFilterAwareTrait; use Structure\Search\Etablissement\EtablissementSearchFilter; use Structure\Search\UniteRecherche\UniteRechercheSearchFilter; use Structure\Search\UniteRecherche\UniteRechercheSearchFilterAwareTrait; use Application\Service\DomaineScientifiqueServiceAwareTrait; use Structure\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait; use Structure\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\Financement\FinancementServiceAwareTrait; use Structure\Service\Structure\StructureServiceAwareTrait; use These\Service\TheseAnneeUniv\TheseAnneeUnivServiceAwareTrait; use Structure\Service\UniteRecherche\UniteRechercheServiceAwareTrait; use Application\Service\UserContextServiceAwareTrait; use Application\View\Helper\Sortable; use Doctrine\ORM\QueryBuilder; use Exception; use These\Entity\Db\These; use These\Search\These\EtatTheseSearchFilterAwareTrait; use These\Search\These\TheseTextSearchFilter; use These\Search\These\TheseTextSearchFilterAwareTrait; use These\Service\TheseAnneeUniv\TheseAnneeUnivServiceAwareTrait; use UnicaenApp\Exception\LogicException; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Util; Loading Loading @@ -77,29 +77,79 @@ class TheseSearchService extends SearchService */ private $role; /** * @inheritDoc */ protected function createQueryBuilder(): QueryBuilder { $qb = $this->theseService->getRepository()->createQueryBuilder('these'); $qb ->addSelect('etab')->leftJoin('these.etablissement', 'etab') ->addSelect('ed')->leftJoin('these.ecoleDoctorale', 'ed') ->addSelect('ur')->leftJoin('these.uniteRecherche', 'ur') ->addSelect('di')->leftJoin('th.individu', 'di') ->addSelect('a')->leftJoin('these.acteurs', 'a') ->addSelect('i')->leftJoin('a.individu', 'i') ->addSelect('r')->leftJoin('a.role', 'r') ->addSelect('f')->leftJoin('these.financements', 'f') ->addSelect('fi')->leftJoin('these.fichierTheses', 'fi') ->addSelect('ta')->leftJoin('these.titreAcces', 'ta') ->andWhere('these.histoDestruction is null'); $qb ->addSelect('etab_structure')->leftJoin("etab.structure", "etab_structure") ->addSelect('etab_ss')->leftJoin("etab_structure.structureSubstituante", "etab_ss") ->addSelect('etab_substituant')->leftJoin("etab_ss.etablissement", "etab_substituant"); $qb ->addSelect('ed_structure')->leftJoin("ed.structure", "ed_structure") ->addSelect('ed_ss')->leftJoin("ed_structure.structureSubstituante", "ed_ss") ->addSelect('ed_substituant')->leftJoin("ed_ss.ecoleDoctorale", "ed_substituant"); $qb ->addSelect('ur_structure')->leftJoin("ur.structure", "ur_structure") ->addSelect('ur_ss')->leftJoin("ur_structure.structureSubstituante", "ur_ss") ->addSelect('ur_substituant')->leftJoin("ur_ss.uniteRecherche", "ur_substituant"); return $qb; } /** * @inheritDoc */ public function init() { $etablissementInscrFilter = $this->getEtablissementInscSearchFilter() ->setWhereField('etab_substituant.sourceCode') ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchEtablissements($filter); }) ->setQueryBuilderApplier(function(SearchFilter $filter, QueryBuilder $qb, string $alias = 'these') { /** @var TextCriteriaSearchFilter $filter */ $qb ->andWhere($qb->expr()->orX('etab.sourceCode = :sourceCodeEtab', 'etab_substituant.sourceCode = :sourceCodeEtab')) ->setParameter('sourceCodeEtab', $filter->getValue()); }); $origineFinancementFilter = $this->getOrigineFinancementSearchFilter() ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchOriginesFinancements($filter); }); $uniteRechercheFilter = $this->getUniteRechercheSearchFilter() ->setWhereField('ur_substituant.sourceCode') ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchUnitesRecherches($filter); }) ->setQueryBuilderApplier(function(SearchFilter $filter, QueryBuilder $qb, string $alias = 'these') { /** @var TextCriteriaSearchFilter $filter */ $qb ->andWhere($qb->expr()->orX('ur.sourceCode = :sourceCodeUR', 'ur_substituant.sourceCode = :sourceCodeUR')) ->setParameter('sourceCodeUR', $filter->getValue()); }); $ecoleDoctoraleFilter = $this->getEcoleDoctoraleSearchFilter() ->setWhereField('ed_substituant.sourceCode') ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchEcolesDoctorales($filter); }) ->setQueryBuilderApplier(function(SearchFilter $filter, QueryBuilder $qb, string $alias = 'these') { /** @var TextCriteriaSearchFilter $filter */ $qb ->andWhere($qb->expr()->orX('ed.sourceCode = :sourceCodeED', 'ed_substituant.sourceCode = :sourceCodeED')) ->setParameter('sourceCodeED', $filter->getValue()); }); $domaineScientifiqueFilter = $this->getDomaineScientifiqueSearchFilter() ->setDataProvider(function(SelectSearchFilter $filter) { Loading Loading @@ -232,41 +282,6 @@ class TheseSearchService extends SearchService } } /** * @inheritDoc */ protected function createQueryBuilder(): QueryBuilder { $qb = $this->theseService->getRepository()->createQueryBuilder('these'); $qb ->addSelect('etab')->leftJoin('these.etablissement', 'etab') ->addSelect('ed')->leftJoin('these.ecoleDoctorale', 'ed') ->addSelect('ur')->leftJoin('these.uniteRecherche', 'ur') ->addSelect('di')->leftJoin('th.individu', 'di') ->addSelect('a')->leftJoin('these.acteurs', 'a') ->addSelect('i')->leftJoin('a.individu', 'i') ->addSelect('r')->leftJoin('a.role', 'r') ->addSelect('f')->leftJoin('these.financements', 'f') ->addSelect('fi')->leftJoin('these.fichierTheses', 'fi') ->addSelect('ta')->leftJoin('these.titreAcces', 'ta') ->andWhere('these.histoDestruction is null'); $qb ->addSelect('etab_structure')->leftJoin("etab.structure", "etab_structure") ->addSelect('etab_ss')->leftJoin("etab_structure.structureSubstituante", "etab_ss") ->addSelect('etab_substituant')->leftJoin("etab_ss.etablissement", "etab_substituant"); $qb ->addSelect('ed_structure')->leftJoin("ed.structure", "ed_structure") ->addSelect('ed_ss')->leftJoin("ed_structure.structureSubstituante", "ed_ss") ->addSelect('ed_substituant')->leftJoin("ed_ss.ecoleDoctorale", "ed_substituant"); $qb ->addSelect('ur_structure')->leftJoin("ur.structure", "ur_structure") ->addSelect('ur_ss')->leftJoin("ur_structure.structureSubstituante", "ur_ss") ->addSelect('ur_substituant')->leftJoin("ur_ss.uniteRecherche", "ur_substituant"); return $qb; } /** * Recherche textuelle de thèses dans la vue matérialisée MV_RECHERCHE_THESE. * Loading Loading
module/Structure/src/Structure/Search/EcoleDoctorale/EcoleDoctoraleSearchFilter.php +1 −7 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Structure\Search\EcoleDoctorale; use Application\Search\Filter\SelectSearchFilter; use Doctrine\ORM\QueryBuilder; use Structure\Entity\Db\EcoleDoctorale; use Webmozart\Assert\Assert; /** * Filtre de type "école doctorale liée" (attribut : `sourceCode`). Loading Loading @@ -38,13 +37,8 @@ class EcoleDoctoraleSearchFilter extends SelectSearchFilter return $instance; } /** * @param QueryBuilder $qb */ public function applyToQueryBuilder(QueryBuilder $qb) protected function applyToQueryBuilderUsingWhereField(QueryBuilder $qb) { $this->checkWhereField(); /** * Pas de jointure en dur ici. Désormais, il faut : * - faire la jointure nécessaire dans {@see \Application\Search\SearchService::createQueryBuilder()} ; Loading
module/Structure/src/Structure/Search/Etablissement/EtablissementSearchFilter.php +1 −7 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Structure\Search\Etablissement; use Application\Search\Filter\SelectSearchFilter; use Doctrine\ORM\QueryBuilder; use Structure\Entity\Db\Etablissement; use Webmozart\Assert\Assert; /** * Filtre de type "établissement lié" (attribut : `sourceCode`). Loading Loading @@ -35,13 +34,8 @@ class EtablissementSearchFilter extends SelectSearchFilter ); } /** * @param QueryBuilder $qb */ public function applyToQueryBuilder(QueryBuilder $qb) protected function applyToQueryBuilderUsingWhereField(QueryBuilder $qb) { $this->checkWhereField(); /** * Pas de jointure en dur ici. Désormais, il faut : * - faire la jointure nécessaire dans {@see \Application\Search\SearchService::createQueryBuilder()} ; Loading
module/Structure/src/Structure/Search/UniteRecherche/UniteRechercheSearchFilter.php +1 −7 Original line number Diff line number Diff line Loading @@ -5,7 +5,6 @@ namespace Structure\Search\UniteRecherche; use Application\Search\Filter\SelectSearchFilter; use Doctrine\ORM\QueryBuilder; use Structure\Entity\Db\UniteRecherche; use Webmozart\Assert\Assert; /** * Filtre de type "unité de recherche liée" (attribut : `sourceCode`). Loading Loading @@ -38,13 +37,8 @@ class UniteRechercheSearchFilter extends SelectSearchFilter return $instance; } /** * @param QueryBuilder $qb */ public function applyToQueryBuilder(QueryBuilder $qb) protected function applyToQueryBuilderUsingWhereField(QueryBuilder $qb) { $this->checkWhereField(); /** * Pas de jointure en dur ici. Désormais, il faut : * - faire la jointure nécessaire dans {@see \Application\Search\SearchService::createQueryBuilder()} ; Loading
module/These/src/These/Service/These/TheseSearchService.php +69 −54 Original line number Diff line number Diff line Loading @@ -3,37 +3,37 @@ namespace These\Service\These; use Application\Entity\Db\Role; use Doctrine\ORM\Query\Expr\Join; use These\Entity\Db\These; use Structure\Entity\Db\TypeStructure; use Application\Filter\AnneeUnivFormatter; use Application\Search\DomaineScientifique\DomaineScientifiqueSearchFilterAwareTrait; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilter; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilterAwareTrait; use Structure\Search\Etablissement\EtablissementInscSearchFilterAwareTrait; use Application\Search\Filter\SearchFilter; use Application\Search\Filter\SelectSearchFilter; use Application\Search\Filter\TextCriteriaSearchFilter; use Application\Search\Financement\OrigineFinancementSearchFilterAwareTrait; use Application\Search\SearchService; use Application\Search\Sorter\SearchSorter; use These\Search\These\EtatTheseSearchFilterAwareTrait; use These\Search\These\TheseTextSearchFilter; use These\Search\These\TheseTextSearchFilterAwareTrait; use Application\Service\DomaineScientifiqueServiceAwareTrait; use Application\Service\Financement\FinancementServiceAwareTrait; use Application\Service\UserContextServiceAwareTrait; use Application\View\Helper\Sortable; use Doctrine\ORM\Query\Expr\Join; use Doctrine\ORM\QueryBuilder; use Exception; use Structure\Entity\Db\TypeStructure; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilter; use Structure\Search\EcoleDoctorale\EcoleDoctoraleSearchFilterAwareTrait; use Structure\Search\Etablissement\EtablissementInscSearchFilterAwareTrait; use Structure\Search\Etablissement\EtablissementSearchFilter; use Structure\Search\UniteRecherche\UniteRechercheSearchFilter; use Structure\Search\UniteRecherche\UniteRechercheSearchFilterAwareTrait; use Application\Service\DomaineScientifiqueServiceAwareTrait; use Structure\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait; use Structure\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\Financement\FinancementServiceAwareTrait; use Structure\Service\Structure\StructureServiceAwareTrait; use These\Service\TheseAnneeUniv\TheseAnneeUnivServiceAwareTrait; use Structure\Service\UniteRecherche\UniteRechercheServiceAwareTrait; use Application\Service\UserContextServiceAwareTrait; use Application\View\Helper\Sortable; use Doctrine\ORM\QueryBuilder; use Exception; use These\Entity\Db\These; use These\Search\These\EtatTheseSearchFilterAwareTrait; use These\Search\These\TheseTextSearchFilter; use These\Search\These\TheseTextSearchFilterAwareTrait; use These\Service\TheseAnneeUniv\TheseAnneeUnivServiceAwareTrait; use UnicaenApp\Exception\LogicException; use UnicaenApp\Exception\RuntimeException; use UnicaenApp\Util; Loading Loading @@ -77,29 +77,79 @@ class TheseSearchService extends SearchService */ private $role; /** * @inheritDoc */ protected function createQueryBuilder(): QueryBuilder { $qb = $this->theseService->getRepository()->createQueryBuilder('these'); $qb ->addSelect('etab')->leftJoin('these.etablissement', 'etab') ->addSelect('ed')->leftJoin('these.ecoleDoctorale', 'ed') ->addSelect('ur')->leftJoin('these.uniteRecherche', 'ur') ->addSelect('di')->leftJoin('th.individu', 'di') ->addSelect('a')->leftJoin('these.acteurs', 'a') ->addSelect('i')->leftJoin('a.individu', 'i') ->addSelect('r')->leftJoin('a.role', 'r') ->addSelect('f')->leftJoin('these.financements', 'f') ->addSelect('fi')->leftJoin('these.fichierTheses', 'fi') ->addSelect('ta')->leftJoin('these.titreAcces', 'ta') ->andWhere('these.histoDestruction is null'); $qb ->addSelect('etab_structure')->leftJoin("etab.structure", "etab_structure") ->addSelect('etab_ss')->leftJoin("etab_structure.structureSubstituante", "etab_ss") ->addSelect('etab_substituant')->leftJoin("etab_ss.etablissement", "etab_substituant"); $qb ->addSelect('ed_structure')->leftJoin("ed.structure", "ed_structure") ->addSelect('ed_ss')->leftJoin("ed_structure.structureSubstituante", "ed_ss") ->addSelect('ed_substituant')->leftJoin("ed_ss.ecoleDoctorale", "ed_substituant"); $qb ->addSelect('ur_structure')->leftJoin("ur.structure", "ur_structure") ->addSelect('ur_ss')->leftJoin("ur_structure.structureSubstituante", "ur_ss") ->addSelect('ur_substituant')->leftJoin("ur_ss.uniteRecherche", "ur_substituant"); return $qb; } /** * @inheritDoc */ public function init() { $etablissementInscrFilter = $this->getEtablissementInscSearchFilter() ->setWhereField('etab_substituant.sourceCode') ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchEtablissements($filter); }) ->setQueryBuilderApplier(function(SearchFilter $filter, QueryBuilder $qb, string $alias = 'these') { /** @var TextCriteriaSearchFilter $filter */ $qb ->andWhere($qb->expr()->orX('etab.sourceCode = :sourceCodeEtab', 'etab_substituant.sourceCode = :sourceCodeEtab')) ->setParameter('sourceCodeEtab', $filter->getValue()); }); $origineFinancementFilter = $this->getOrigineFinancementSearchFilter() ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchOriginesFinancements($filter); }); $uniteRechercheFilter = $this->getUniteRechercheSearchFilter() ->setWhereField('ur_substituant.sourceCode') ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchUnitesRecherches($filter); }) ->setQueryBuilderApplier(function(SearchFilter $filter, QueryBuilder $qb, string $alias = 'these') { /** @var TextCriteriaSearchFilter $filter */ $qb ->andWhere($qb->expr()->orX('ur.sourceCode = :sourceCodeUR', 'ur_substituant.sourceCode = :sourceCodeUR')) ->setParameter('sourceCodeUR', $filter->getValue()); }); $ecoleDoctoraleFilter = $this->getEcoleDoctoraleSearchFilter() ->setWhereField('ed_substituant.sourceCode') ->setDataProvider(function(SelectSearchFilter $filter) { return $this->fetchEcolesDoctorales($filter); }) ->setQueryBuilderApplier(function(SearchFilter $filter, QueryBuilder $qb, string $alias = 'these') { /** @var TextCriteriaSearchFilter $filter */ $qb ->andWhere($qb->expr()->orX('ed.sourceCode = :sourceCodeED', 'ed_substituant.sourceCode = :sourceCodeED')) ->setParameter('sourceCodeED', $filter->getValue()); }); $domaineScientifiqueFilter = $this->getDomaineScientifiqueSearchFilter() ->setDataProvider(function(SelectSearchFilter $filter) { Loading Loading @@ -232,41 +282,6 @@ class TheseSearchService extends SearchService } } /** * @inheritDoc */ protected function createQueryBuilder(): QueryBuilder { $qb = $this->theseService->getRepository()->createQueryBuilder('these'); $qb ->addSelect('etab')->leftJoin('these.etablissement', 'etab') ->addSelect('ed')->leftJoin('these.ecoleDoctorale', 'ed') ->addSelect('ur')->leftJoin('these.uniteRecherche', 'ur') ->addSelect('di')->leftJoin('th.individu', 'di') ->addSelect('a')->leftJoin('these.acteurs', 'a') ->addSelect('i')->leftJoin('a.individu', 'i') ->addSelect('r')->leftJoin('a.role', 'r') ->addSelect('f')->leftJoin('these.financements', 'f') ->addSelect('fi')->leftJoin('these.fichierTheses', 'fi') ->addSelect('ta')->leftJoin('these.titreAcces', 'ta') ->andWhere('these.histoDestruction is null'); $qb ->addSelect('etab_structure')->leftJoin("etab.structure", "etab_structure") ->addSelect('etab_ss')->leftJoin("etab_structure.structureSubstituante", "etab_ss") ->addSelect('etab_substituant')->leftJoin("etab_ss.etablissement", "etab_substituant"); $qb ->addSelect('ed_structure')->leftJoin("ed.structure", "ed_structure") ->addSelect('ed_ss')->leftJoin("ed_structure.structureSubstituante", "ed_ss") ->addSelect('ed_substituant')->leftJoin("ed_ss.ecoleDoctorale", "ed_substituant"); $qb ->addSelect('ur_structure')->leftJoin("ur.structure", "ur_structure") ->addSelect('ur_ss')->leftJoin("ur_structure.structureSubstituante", "ur_ss") ->addSelect('ur_substituant')->leftJoin("ur_ss.uniteRecherche", "ur_substituant"); return $qb; } /** * Recherche textuelle de thèses dans la vue matérialisée MV_RECHERCHE_THESE. * Loading