Loading module/Application/src/Application/Controller/ListeDiffusionController.php +7 −4 Original line number Diff line number Diff line Loading @@ -84,6 +84,8 @@ class ListeDiffusionController extends AbstractController $codesRolesAvecTemoinsED = [ Role::CODE_DOCTORANT => true, Role::CODE_DIRECTEUR_THESE => true, Role::CODE_GEST_ED => true, Role::CODE_RESP_ED => true, Role::CODE_BU => false, Role::CODE_BDD => false, Role::CODE_ADMIN_TECH => false, // NB: pas de structure liée Loading @@ -96,7 +98,8 @@ class ListeDiffusionController extends AbstractController $roles = array_filter($roles, function(Role $role) use ($etablissementsAsStructures) { return $role->getStructure() === null || // ex: Admin tech in_array($role->getStructure(), $etablissementsAsStructures); $role->getStructure()->getTypeStructure()->isEcoleDoctorale() || $role->getStructure()->getTypeStructure()->isEtablissement() && in_array($role->getStructure(), $etablissementsAsStructures); }); $this->prepareDataForView($etablissements, $ecolesDoctorales, $roles, $codesRolesAvecTemoinsED); $this->loadListesDiffusionActives(); Loading Loading @@ -221,9 +224,6 @@ class ListeDiffusionController extends AbstractController } $dataByEtablissement->attach($etablissement, $dataByRole); } $rolesAvecTemoinsED = array_filter($roles, function (Role $r) use ($codesRolesAvecTemoinsED) { return $codesRolesAvecTemoinsED[$r->getCode()] === true; }); if (count($etablissements) > 1) { // Loading @@ -232,6 +232,9 @@ class ListeDiffusionController extends AbstractController /** @var Role $rolePrec */ $rolePrec = null; $dataByRole = new SplObjectStorage(); $rolesAvecTemoinsED = array_filter($roles, function (Role $r) use ($codesRolesAvecTemoinsED) { return $codesRolesAvecTemoinsED[$r->getCode()] === true; }); foreach ($rolesAvecTemoinsED as $role) { if ($rolePrec && ($isSameRoleAgain = $rolePrec->getCode() === $role->getCode())) { continue; // on ne retient qu'un rôle pour tous les établissements confondus Loading module/Application/src/Application/Service/Email/EmailTheseService.php +3 −3 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ class EmailTheseService public function fetchEmailEcoleDoctorale(These $these) : array { /** @var IndividuRole[] $individuRoles */ $individuRoles = $this->roleService->getIndividuRoleByStructure($these->getEcoleDoctorale()->getStructure()); $individuRoles = $this->roleService->findIndividuRolesByStructure($these->getEcoleDoctorale()->getStructure()); return $this->fetchEmailsByEtablissement($individuRoles, $these); } Loading @@ -95,7 +95,7 @@ class EmailTheseService public function fetchEmailUniteRecherche(These $these) : array { /** @var IndividuRole[] $individuRoles */ $individuRoles = $this->roleService->getIndividuRoleByStructure($these->getUniteRecherche()->getStructure()); $individuRoles = $this->roleService->findIndividuRolesByStructure($these->getUniteRecherche()->getStructure()); return $this->fetchEmailsByEtablissement($individuRoles, $these); } Loading @@ -106,7 +106,7 @@ class EmailTheseService public function fetchEmailMaisonDuDoctorat(These $these) : array { /** @var IndividuRole[] $individuRoles */ $individuRoles = $this->roleService->getIndividuRoleByStructure($these->getEtablissement()->getStructure()); $individuRoles = $this->roleService->findIndividuRolesByStructure($these->getEtablissement()->getStructure()); $individuRoles = array_filter($individuRoles, function (IndividuRole $ir) { return $ir->getRole()->getCode() === Role::CODE_BDD;}); return $this->fetchEmailsByEtablissement($individuRoles, $these); } Loading module/Application/src/Application/Service/ListeDiffusion/Address/ListeDiffusionAddressGenerator.php +9 −2 Original line number Diff line number Diff line Loading @@ -10,10 +10,17 @@ use Webmozart\Assert\Assert; class ListeDiffusionAddressGenerator { const CODE_ROLE_ALIAS_DOCTORANT = 'doctorants'; const CODE_ROLE_ALIAS_DIRECTEUR_THESE = 'dirtheses'; const CODE_ROLE_ALIAS_GEST_ED = 'gest-ed'; const CODE_ROLE_ALIAS_RESP_ED = 'resp-ed'; const SEPARATOR = '.'; const CODES_ROLES_ALIASES = [ Role::CODE_DOCTORANT => 'doctorants', Role::CODE_DIRECTEUR_THESE => 'dirtheses', Role::CODE_DOCTORANT => self::CODE_ROLE_ALIAS_DOCTORANT, Role::CODE_DIRECTEUR_THESE => self::CODE_ROLE_ALIAS_DIRECTEUR_THESE, Role::CODE_GEST_ED => self::CODE_ROLE_ALIAS_GEST_ED, Role::CODE_RESP_ED => self::CODE_ROLE_ALIAS_RESP_ED, ]; /** Loading module/Application/src/Application/Service/ListeDiffusion/Handler/ListeDiffusionAbstractHandler.php +11 −11 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @var string[] */ protected $config = []; protected array $config = []; /** * @var ListeDiffusionAddressParser Loading Loading @@ -49,12 +49,12 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @var Individu[] */ protected $individusAvecAdresse = []; protected array $individusAvecAdresse = []; /** * @var Individu[] */ protected $individusSansAdresse = []; protected array $individusSansAdresse = []; /** * ListeDiffusionAbstractPlugin constructor. Loading @@ -76,7 +76,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * @param ListeDiffusion $listeDiffusion * @return self */ public function setListeDiffusion(ListeDiffusion $listeDiffusion) public function setListeDiffusion(ListeDiffusion $listeDiffusion): self { $this->listeDiffusion = $listeDiffusion; $this->parserResult = null; Loading @@ -100,7 +100,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return string[] [mail => nom individu] */ public function getIndividusAvecAdresse() public function getIndividusAvecAdresse(): array { return $this->individusAvecAdresse; } Loading @@ -108,7 +108,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return string[] [id individu => nom individu] */ public function getIndividusSansAdresse() public function getIndividusSansAdresse(): array { return $this->individusSansAdresse; } Loading @@ -116,7 +116,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return Individu[]|string[] */ public function fetchProprietaires() public function fetchProprietaires(): array { //return $this->individuService->getRepository()->findByRole(Role::CODE_ADMIN_TECH); return (array) $this->config['proprietaires'] ?? []; Loading @@ -125,7 +125,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return string */ protected function createFileContent() protected function createFileContent(): string { $lines = []; foreach ($this->individusAvecAdresse as $adresse => $nom) { Loading @@ -143,7 +143,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * * @return string */ abstract public function createMemberIncludeFileContent(); abstract public function createMemberIncludeFileContent(): string; /** * Génération du contenu du fichier attendu par Sympa pour obtenir les PROPRIÉTAIRES d'une liste de diffusion. Loading @@ -152,7 +152,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * * @return string */ public function createOwnerIncludeFileContent() public function createOwnerIncludeFileContent(): string { $entities = $this->fetchProprietaires(); $this->extractEmailsFromEntities($entities); Loading Loading @@ -206,5 +206,5 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * @param string $prefix * @return string */ abstract public function generateResultFileName(string $prefix); abstract public function generateResultFileName(string $prefix): string; } No newline at end of file module/Application/src/Application/Service/ListeDiffusion/Handler/ListeDiffusionHandler.php +76 −11 Original line number Diff line number Diff line Loading @@ -3,12 +3,16 @@ namespace Application\Service\ListeDiffusion\Handler; use Application\Entity\Db\Acteur; use Application\Service\ListeDiffusion\Address\ListeDiffusionAddressGenerator; use Doctorant\Entity\Db\Doctorant; use Individu\Entity\Db\IndividuRole; use Structure\Entity\Db\EcoleDoctorale; use Structure\Entity\Db\Etablissement; use Individu\Entity\Db\Individu; use Application\Entity\Db\Role; use Application\Service\Acteur\ActeurServiceAwareTrait; use Doctorant\Service\DoctorantServiceAwareTrait; use Structure\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait; use Structure\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\ListeDiffusion\Address\ListeDiffusionAddressParserResult; use Application\Service\ListeDiffusion\Address\ListeDiffusionAddressParserResultWithED; Loading @@ -20,6 +24,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler { use StructureServiceAwareTrait; use EtablissementServiceAwareTrait; use EcoleDoctoraleServiceAwareTrait; use ActeurServiceAwareTrait; use DoctorantServiceAwareTrait; use RoleServiceAwareTrait; Loading Loading @@ -57,7 +62,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @inheritDoc */ public function canHandleListeDiffusion() public function canHandleListeDiffusion(): bool { $this->parseAdresse(); Loading @@ -79,7 +84,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler * * @return string */ public function createMemberIncludeFileContent() public function createMemberIncludeFileContent(): string { $entities = $this->fetchMembers(); $this->extractEmailsFromEntities($entities); Loading @@ -90,28 +95,32 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @return Individu[] */ protected function fetchMembers() protected function fetchMembers(): array { switch ($this->role) { case 'dirtheses': case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_DIRECTEUR_THESE: $acteurs = $this->fetchActeursDirecteursTheses(); return array_map(function(Acteur $acteur) { return $acteur->getIndividu(); }, $acteurs); case 'doctorants': case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_DOCTORANT: $acteurs = $this->fetchDoctorants(); return array_map(function(Doctorant $doctorant) { return $doctorant->getIndividu(); }, $acteurs); case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_GEST_ED: return $this->fetchGestionnairesED(); case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_RESP_ED: return $this->fetchResponsablesED(); default: return $this->fetchIndividusWithRole(); return $this->fetchIndividusWithRoleOnEtablissement(); } } /** * @return Acteur[] */ protected function fetchActeursDirecteursTheses() protected function fetchActeursDirecteursTheses(): array { $critereEd = $this->computeCritereED(); Loading @@ -125,7 +134,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @return Doctorant[] */ protected function fetchDoctorants() protected function fetchDoctorants(): array { $critereEd = $this->computeCritereED(); Loading @@ -135,10 +144,66 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler ); } /** * @return Individu[] */ protected function fetchGestionnairesED(): array { $code = Role::CODE_GEST_ED; $ed = $this->fetchED(); if ($ed === null) { $individuRoles = $this->roleService->findIndividuRolesByCodeRole($code); } else { $individuRoles = $this->roleService->findIndividuRolesByStructure($ed->getStructure(), $code); } return array_unique(array_map( function (IndividuRole $ir) { return $ir->getIndividu(); }, $individuRoles )); } /** * @return Individu[] */ protected function fetchResponsablesED(): array { $code = Role::CODE_RESP_ED; $ed = $this->fetchED(); if ($ed === null) { $individuRoles = $this->roleService->findIndividuRolesByCodeRole($code); } else { $individuRoles = $this->roleService->findIndividuRolesByStructure($ed->getStructure(), $code); } return array_unique(array_map( function (IndividuRole $ir) { return $ir->getIndividu(); }, $individuRoles )); } protected function fetchED(): ?EcoleDoctorale { if ($this->parserResult instanceof ListeDiffusionAddressParserResultWithED) { $sigleSansEspace = $this->parserResult->getEcoleDoctorale(); return $this->ecoleDoctoraleService->getRepository()->findOneBySigleSansEspace($sigleSansEspace); } elseif ($this->parserResult instanceof ListeDiffusionAddressParserResult) { return null; } else { throw new BadMethodCallException("Cas imprévu"); } } /** * @return array|null */ protected function computeCritereED() protected function computeCritereED(): ?array { if ($this->parserResult instanceof ListeDiffusionAddressParserResultWithED) { $sigleSansEspace = $this->parserResult->getEcoleDoctorale(); Loading @@ -153,7 +218,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @return Individu[] */ protected function fetchIndividusWithRole() protected function fetchIndividusWithRoleOnEtablissement(): array { $code = strtoupper($this->role); $structure = $this->etablissement->getStructure(); Loading @@ -167,7 +232,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler * @param string $prefix * @return string */ public function generateResultFileName(string $prefix) public function generateResultFileName(string $prefix): string { return sprintf('%sinclude_%s.inc', $prefix, Loading Loading
module/Application/src/Application/Controller/ListeDiffusionController.php +7 −4 Original line number Diff line number Diff line Loading @@ -84,6 +84,8 @@ class ListeDiffusionController extends AbstractController $codesRolesAvecTemoinsED = [ Role::CODE_DOCTORANT => true, Role::CODE_DIRECTEUR_THESE => true, Role::CODE_GEST_ED => true, Role::CODE_RESP_ED => true, Role::CODE_BU => false, Role::CODE_BDD => false, Role::CODE_ADMIN_TECH => false, // NB: pas de structure liée Loading @@ -96,7 +98,8 @@ class ListeDiffusionController extends AbstractController $roles = array_filter($roles, function(Role $role) use ($etablissementsAsStructures) { return $role->getStructure() === null || // ex: Admin tech in_array($role->getStructure(), $etablissementsAsStructures); $role->getStructure()->getTypeStructure()->isEcoleDoctorale() || $role->getStructure()->getTypeStructure()->isEtablissement() && in_array($role->getStructure(), $etablissementsAsStructures); }); $this->prepareDataForView($etablissements, $ecolesDoctorales, $roles, $codesRolesAvecTemoinsED); $this->loadListesDiffusionActives(); Loading Loading @@ -221,9 +224,6 @@ class ListeDiffusionController extends AbstractController } $dataByEtablissement->attach($etablissement, $dataByRole); } $rolesAvecTemoinsED = array_filter($roles, function (Role $r) use ($codesRolesAvecTemoinsED) { return $codesRolesAvecTemoinsED[$r->getCode()] === true; }); if (count($etablissements) > 1) { // Loading @@ -232,6 +232,9 @@ class ListeDiffusionController extends AbstractController /** @var Role $rolePrec */ $rolePrec = null; $dataByRole = new SplObjectStorage(); $rolesAvecTemoinsED = array_filter($roles, function (Role $r) use ($codesRolesAvecTemoinsED) { return $codesRolesAvecTemoinsED[$r->getCode()] === true; }); foreach ($rolesAvecTemoinsED as $role) { if ($rolePrec && ($isSameRoleAgain = $rolePrec->getCode() === $role->getCode())) { continue; // on ne retient qu'un rôle pour tous les établissements confondus Loading
module/Application/src/Application/Service/Email/EmailTheseService.php +3 −3 Original line number Diff line number Diff line Loading @@ -84,7 +84,7 @@ class EmailTheseService public function fetchEmailEcoleDoctorale(These $these) : array { /** @var IndividuRole[] $individuRoles */ $individuRoles = $this->roleService->getIndividuRoleByStructure($these->getEcoleDoctorale()->getStructure()); $individuRoles = $this->roleService->findIndividuRolesByStructure($these->getEcoleDoctorale()->getStructure()); return $this->fetchEmailsByEtablissement($individuRoles, $these); } Loading @@ -95,7 +95,7 @@ class EmailTheseService public function fetchEmailUniteRecherche(These $these) : array { /** @var IndividuRole[] $individuRoles */ $individuRoles = $this->roleService->getIndividuRoleByStructure($these->getUniteRecherche()->getStructure()); $individuRoles = $this->roleService->findIndividuRolesByStructure($these->getUniteRecherche()->getStructure()); return $this->fetchEmailsByEtablissement($individuRoles, $these); } Loading @@ -106,7 +106,7 @@ class EmailTheseService public function fetchEmailMaisonDuDoctorat(These $these) : array { /** @var IndividuRole[] $individuRoles */ $individuRoles = $this->roleService->getIndividuRoleByStructure($these->getEtablissement()->getStructure()); $individuRoles = $this->roleService->findIndividuRolesByStructure($these->getEtablissement()->getStructure()); $individuRoles = array_filter($individuRoles, function (IndividuRole $ir) { return $ir->getRole()->getCode() === Role::CODE_BDD;}); return $this->fetchEmailsByEtablissement($individuRoles, $these); } Loading
module/Application/src/Application/Service/ListeDiffusion/Address/ListeDiffusionAddressGenerator.php +9 −2 Original line number Diff line number Diff line Loading @@ -10,10 +10,17 @@ use Webmozart\Assert\Assert; class ListeDiffusionAddressGenerator { const CODE_ROLE_ALIAS_DOCTORANT = 'doctorants'; const CODE_ROLE_ALIAS_DIRECTEUR_THESE = 'dirtheses'; const CODE_ROLE_ALIAS_GEST_ED = 'gest-ed'; const CODE_ROLE_ALIAS_RESP_ED = 'resp-ed'; const SEPARATOR = '.'; const CODES_ROLES_ALIASES = [ Role::CODE_DOCTORANT => 'doctorants', Role::CODE_DIRECTEUR_THESE => 'dirtheses', Role::CODE_DOCTORANT => self::CODE_ROLE_ALIAS_DOCTORANT, Role::CODE_DIRECTEUR_THESE => self::CODE_ROLE_ALIAS_DIRECTEUR_THESE, Role::CODE_GEST_ED => self::CODE_ROLE_ALIAS_GEST_ED, Role::CODE_RESP_ED => self::CODE_ROLE_ALIAS_RESP_ED, ]; /** Loading
module/Application/src/Application/Service/ListeDiffusion/Handler/ListeDiffusionAbstractHandler.php +11 −11 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @var string[] */ protected $config = []; protected array $config = []; /** * @var ListeDiffusionAddressParser Loading Loading @@ -49,12 +49,12 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @var Individu[] */ protected $individusAvecAdresse = []; protected array $individusAvecAdresse = []; /** * @var Individu[] */ protected $individusSansAdresse = []; protected array $individusSansAdresse = []; /** * ListeDiffusionAbstractPlugin constructor. Loading @@ -76,7 +76,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * @param ListeDiffusion $listeDiffusion * @return self */ public function setListeDiffusion(ListeDiffusion $listeDiffusion) public function setListeDiffusion(ListeDiffusion $listeDiffusion): self { $this->listeDiffusion = $listeDiffusion; $this->parserResult = null; Loading @@ -100,7 +100,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return string[] [mail => nom individu] */ public function getIndividusAvecAdresse() public function getIndividusAvecAdresse(): array { return $this->individusAvecAdresse; } Loading @@ -108,7 +108,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return string[] [id individu => nom individu] */ public function getIndividusSansAdresse() public function getIndividusSansAdresse(): array { return $this->individusSansAdresse; } Loading @@ -116,7 +116,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return Individu[]|string[] */ public function fetchProprietaires() public function fetchProprietaires(): array { //return $this->individuService->getRepository()->findByRole(Role::CODE_ADMIN_TECH); return (array) $this->config['proprietaires'] ?? []; Loading @@ -125,7 +125,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt /** * @return string */ protected function createFileContent() protected function createFileContent(): string { $lines = []; foreach ($this->individusAvecAdresse as $adresse => $nom) { Loading @@ -143,7 +143,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * * @return string */ abstract public function createMemberIncludeFileContent(); abstract public function createMemberIncludeFileContent(): string; /** * Génération du contenu du fichier attendu par Sympa pour obtenir les PROPRIÉTAIRES d'une liste de diffusion. Loading @@ -152,7 +152,7 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * * @return string */ public function createOwnerIncludeFileContent() public function createOwnerIncludeFileContent(): string { $entities = $this->fetchProprietaires(); $this->extractEmailsFromEntities($entities); Loading Loading @@ -206,5 +206,5 @@ abstract class ListeDiffusionAbstractHandler implements ListeDiffusionHandlerInt * @param string $prefix * @return string */ abstract public function generateResultFileName(string $prefix); abstract public function generateResultFileName(string $prefix): string; } No newline at end of file
module/Application/src/Application/Service/ListeDiffusion/Handler/ListeDiffusionHandler.php +76 −11 Original line number Diff line number Diff line Loading @@ -3,12 +3,16 @@ namespace Application\Service\ListeDiffusion\Handler; use Application\Entity\Db\Acteur; use Application\Service\ListeDiffusion\Address\ListeDiffusionAddressGenerator; use Doctorant\Entity\Db\Doctorant; use Individu\Entity\Db\IndividuRole; use Structure\Entity\Db\EcoleDoctorale; use Structure\Entity\Db\Etablissement; use Individu\Entity\Db\Individu; use Application\Entity\Db\Role; use Application\Service\Acteur\ActeurServiceAwareTrait; use Doctorant\Service\DoctorantServiceAwareTrait; use Structure\Service\EcoleDoctorale\EcoleDoctoraleServiceAwareTrait; use Structure\Service\Etablissement\EtablissementServiceAwareTrait; use Application\Service\ListeDiffusion\Address\ListeDiffusionAddressParserResult; use Application\Service\ListeDiffusion\Address\ListeDiffusionAddressParserResultWithED; Loading @@ -20,6 +24,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler { use StructureServiceAwareTrait; use EtablissementServiceAwareTrait; use EcoleDoctoraleServiceAwareTrait; use ActeurServiceAwareTrait; use DoctorantServiceAwareTrait; use RoleServiceAwareTrait; Loading Loading @@ -57,7 +62,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @inheritDoc */ public function canHandleListeDiffusion() public function canHandleListeDiffusion(): bool { $this->parseAdresse(); Loading @@ -79,7 +84,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler * * @return string */ public function createMemberIncludeFileContent() public function createMemberIncludeFileContent(): string { $entities = $this->fetchMembers(); $this->extractEmailsFromEntities($entities); Loading @@ -90,28 +95,32 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @return Individu[] */ protected function fetchMembers() protected function fetchMembers(): array { switch ($this->role) { case 'dirtheses': case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_DIRECTEUR_THESE: $acteurs = $this->fetchActeursDirecteursTheses(); return array_map(function(Acteur $acteur) { return $acteur->getIndividu(); }, $acteurs); case 'doctorants': case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_DOCTORANT: $acteurs = $this->fetchDoctorants(); return array_map(function(Doctorant $doctorant) { return $doctorant->getIndividu(); }, $acteurs); case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_GEST_ED: return $this->fetchGestionnairesED(); case ListeDiffusionAddressGenerator::CODE_ROLE_ALIAS_RESP_ED: return $this->fetchResponsablesED(); default: return $this->fetchIndividusWithRole(); return $this->fetchIndividusWithRoleOnEtablissement(); } } /** * @return Acteur[] */ protected function fetchActeursDirecteursTheses() protected function fetchActeursDirecteursTheses(): array { $critereEd = $this->computeCritereED(); Loading @@ -125,7 +134,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @return Doctorant[] */ protected function fetchDoctorants() protected function fetchDoctorants(): array { $critereEd = $this->computeCritereED(); Loading @@ -135,10 +144,66 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler ); } /** * @return Individu[] */ protected function fetchGestionnairesED(): array { $code = Role::CODE_GEST_ED; $ed = $this->fetchED(); if ($ed === null) { $individuRoles = $this->roleService->findIndividuRolesByCodeRole($code); } else { $individuRoles = $this->roleService->findIndividuRolesByStructure($ed->getStructure(), $code); } return array_unique(array_map( function (IndividuRole $ir) { return $ir->getIndividu(); }, $individuRoles )); } /** * @return Individu[] */ protected function fetchResponsablesED(): array { $code = Role::CODE_RESP_ED; $ed = $this->fetchED(); if ($ed === null) { $individuRoles = $this->roleService->findIndividuRolesByCodeRole($code); } else { $individuRoles = $this->roleService->findIndividuRolesByStructure($ed->getStructure(), $code); } return array_unique(array_map( function (IndividuRole $ir) { return $ir->getIndividu(); }, $individuRoles )); } protected function fetchED(): ?EcoleDoctorale { if ($this->parserResult instanceof ListeDiffusionAddressParserResultWithED) { $sigleSansEspace = $this->parserResult->getEcoleDoctorale(); return $this->ecoleDoctoraleService->getRepository()->findOneBySigleSansEspace($sigleSansEspace); } elseif ($this->parserResult instanceof ListeDiffusionAddressParserResult) { return null; } else { throw new BadMethodCallException("Cas imprévu"); } } /** * @return array|null */ protected function computeCritereED() protected function computeCritereED(): ?array { if ($this->parserResult instanceof ListeDiffusionAddressParserResultWithED) { $sigleSansEspace = $this->parserResult->getEcoleDoctorale(); Loading @@ -153,7 +218,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler /** * @return Individu[] */ protected function fetchIndividusWithRole() protected function fetchIndividusWithRoleOnEtablissement(): array { $code = strtoupper($this->role); $structure = $this->etablissement->getStructure(); Loading @@ -167,7 +232,7 @@ class ListeDiffusionHandler extends ListeDiffusionAbstractHandler * @param string $prefix * @return string */ public function generateResultFileName(string $prefix) public function generateResultFileName(string $prefix): string { return sprintf('%sinclude_%s.inc', $prefix, Loading