Loading module/Oscar/src/Oscar/Command/OscarActivitySearchReindexAllCommand.php 0 → 100644 +44 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: bouvry * Date: 04/10/19 * Time: 11:49 */ namespace Oscar\Command; use Exception; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class OscarActivitySearchReindexAllCommand extends OscarAdvancedCommandAbstract { protected static $defaultName = OscarCommandAbstract::COMMAND_ACTIVITY_SEARCH_REINDEX_ALL; protected function configure() { parent::configure(); $this ->setDescription("Reconstruction de l'index de recherche pour TOUTES les activités"); } protected function execute(InputInterface $input, OutputInterface $output): int { parent::execute($input, $output); try { if (!$this->ask("Réindexer toutes les activités ?")) { return 0; } $this->getProjectGrantService()->searchIndex_rebuild(); return $this->finalSuccess("Index de recherche mis à jour"); } catch (Exception $e) { return $this->finalFatalError($e); } } } No newline at end of file module/Oscar/src/Oscar/Command/OscarCommandAbstract.php +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ abstract class OscarCommandAbstract extends Command const COMMAND_ACTIVITY_SEARCH_REINDEX = 'activity:search:reindex'; const COMMAND_ACTIVITY_SEARCH_REINDEX_ALL = 'activity:search-rebuild'; const COMMAND_ACTIVITY_NOTIFICATION_UPDATE = 'activity:notification:update'; const COMMAND_NOTIFICATIONS_REBUILD = 'notifications:rebuild'; Loading module/Oscar/src/Oscar/Controller/EnrollController.php +55 −5 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ class EnrollController extends AbstractOscarController implements UsePersonServi break; case OrganizationPerson::class: $roles = $repo->getRolesAtOrganizationArray(); $roles = $repo->getRolesAvailableForPersonInOrganizationArray(); } return $roles; } Loading Loading @@ -823,10 +823,56 @@ class EnrollController extends AbstractOscarController implements UsePersonServi //////////////////////////////////////////////////////////////////////////// // Organization <> Person //////////////////////////////////////////////////////////////////////////// protected function getOrganizationPersonForm(Organization $enroller) { $form = new RoleForm( $this->getOscarUserContextService()->getAvailabledRolesPersonOrganization(), $this->getPersonService(), $enroller, [ 'label' => 'Personne', 'url' => $this->url()->fromRoute('person/search') ] ); return $form; } public function organizationPersonNewAction() { $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT, $this->getOrganizationEntity()); return $this->saveEnroll(OrganizationPerson::class); $organization = $this->getOrganizationEntity(); $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT, $organization); $organizationPerson = new OrganizationPerson(); $form = $this->getOrganizationPersonForm($organization); $form->bind($organizationPerson); if( $this->getRequest()->isPost() ){ $posted = $this->getRequest()->getPost(); $form->setData($posted); if( $form->isValid() ){ $this->getPersonService()->personOrganizationAdd($organization, $organizationPerson->getPerson(), $organizationPerson->getRoleObj(), $organizationPerson->getDateStart(), $organizationPerson->getDateEnd()); $this->redirect()->toRoute('organization/show', ['id' => $organization->getId()]); } } $view = new ViewModel( array( 'id' => null, 'title' => "Nouvelle personne dans $organization", 'form' => $form, 'labelEnrolled' => "Personne", 'enroller' => $organization, 'enrolled' => null ) ); if ($this->getRequest()->isXmlHttpRequest()) { $view->setTerminal(true); } $view->setTemplate('partials/role-form.phtml'); return $view; } public function organizationPersonDeleteAction() Loading @@ -836,11 +882,15 @@ class EnrollController extends AbstractOscarController implements UsePersonServi $this->params()->fromRoute('idenroll') ); $organization = $organizationPerson->getOrganization(); $this->getOscarUserContextService()->check( Privileges::ORGANIZATION_EDIT, $organizationPerson->getOrganization() $organization ); return $this->deleteEnroll(OrganizationPerson::class); $this->getPersonService()->personOrganizationRemove($organizationPerson); $this->redirect()->toRoute('organization/show', ['id' => $organization->getId()]); } //////////////////////////////////////////////////////////////////////////// Loading module/Oscar/src/Oscar/Entity/PersonRepository.php +1 −1 Original line number Diff line number Diff line Loading @@ -250,7 +250,7 @@ class PersonRepository extends EntityRepository implements IConnectedRepository public function getRolesOrganizationArray() { return $this->getEntityManager()->getRepository(Role::class)->getRolesAtOrganizationArray(); return $this->getEntityManager()->getRepository(Role::class)->getRolesAvailableForPersonInOrganizationArray(); } Loading module/Oscar/src/Oscar/Entity/RoleRepository.php +14 −4 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\NoResultException; use Doctrine\ORM\Query\ResultSetMapping; use Oscar\Exception\OscarException; use Oscar\Utils\OscarConstants; class RoleRepository extends EntityRepository { Loading Loading @@ -67,21 +68,30 @@ class RoleRepository extends EntityRepository /** * Retourne la liste des rôles d'une activité sous la forme d'un tableau * * @return \Doctrine\ORM\QueryBuilder * @return array */ public function getRolesAtOrganizationArray() public function getRolesAvailableForPersonInOrganizationArray() { static $rolesOrganization; if( $rolesOrganization === null ){ $rolesOrganization = []; /** @var Role $role */ foreach( $this->getRolesAtLevel(Role::LEVEL_ORGANIZATION)->getQuery()->getResult() as $role ){ foreach( $this->getRolesAvailableForPersonInOrganization() as $role ){ $rolesOrganization[$role->getId()] = $role->getRoleId(); } } return $rolesOrganization; } /** * Retourne la liste des rôles disponibles pour une personne dans une organisation. * * @return Role[] */ public function getRolesAvailableForPersonInOrganization() :array { return $this->getRolesAtLevel(Role::LEVEL_ORGANIZATION)->getQuery()->getResult(); } /** * Retourne la liste des rôles au niveau spécifié. * Loading Loading
module/Oscar/src/Oscar/Command/OscarActivitySearchReindexAllCommand.php 0 → 100644 +44 −0 Original line number Diff line number Diff line <?php /** * Created by PhpStorm. * User: bouvry * Date: 04/10/19 * Time: 11:49 */ namespace Oscar\Command; use Exception; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; class OscarActivitySearchReindexAllCommand extends OscarAdvancedCommandAbstract { protected static $defaultName = OscarCommandAbstract::COMMAND_ACTIVITY_SEARCH_REINDEX_ALL; protected function configure() { parent::configure(); $this ->setDescription("Reconstruction de l'index de recherche pour TOUTES les activités"); } protected function execute(InputInterface $input, OutputInterface $output): int { parent::execute($input, $output); try { if (!$this->ask("Réindexer toutes les activités ?")) { return 0; } $this->getProjectGrantService()->searchIndex_rebuild(); return $this->finalSuccess("Index de recherche mis à jour"); } catch (Exception $e) { return $this->finalFatalError($e); } } } No newline at end of file
module/Oscar/src/Oscar/Command/OscarCommandAbstract.php +2 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ abstract class OscarCommandAbstract extends Command const COMMAND_ACTIVITY_SEARCH_REINDEX = 'activity:search:reindex'; const COMMAND_ACTIVITY_SEARCH_REINDEX_ALL = 'activity:search-rebuild'; const COMMAND_ACTIVITY_NOTIFICATION_UPDATE = 'activity:notification:update'; const COMMAND_NOTIFICATIONS_REBUILD = 'notifications:rebuild'; Loading
module/Oscar/src/Oscar/Controller/EnrollController.php +55 −5 Original line number Diff line number Diff line Loading @@ -81,7 +81,7 @@ class EnrollController extends AbstractOscarController implements UsePersonServi break; case OrganizationPerson::class: $roles = $repo->getRolesAtOrganizationArray(); $roles = $repo->getRolesAvailableForPersonInOrganizationArray(); } return $roles; } Loading Loading @@ -823,10 +823,56 @@ class EnrollController extends AbstractOscarController implements UsePersonServi //////////////////////////////////////////////////////////////////////////// // Organization <> Person //////////////////////////////////////////////////////////////////////////// protected function getOrganizationPersonForm(Organization $enroller) { $form = new RoleForm( $this->getOscarUserContextService()->getAvailabledRolesPersonOrganization(), $this->getPersonService(), $enroller, [ 'label' => 'Personne', 'url' => $this->url()->fromRoute('person/search') ] ); return $form; } public function organizationPersonNewAction() { $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT, $this->getOrganizationEntity()); return $this->saveEnroll(OrganizationPerson::class); $organization = $this->getOrganizationEntity(); $this->getOscarUserContextService()->check(Privileges::ORGANIZATION_EDIT, $organization); $organizationPerson = new OrganizationPerson(); $form = $this->getOrganizationPersonForm($organization); $form->bind($organizationPerson); if( $this->getRequest()->isPost() ){ $posted = $this->getRequest()->getPost(); $form->setData($posted); if( $form->isValid() ){ $this->getPersonService()->personOrganizationAdd($organization, $organizationPerson->getPerson(), $organizationPerson->getRoleObj(), $organizationPerson->getDateStart(), $organizationPerson->getDateEnd()); $this->redirect()->toRoute('organization/show', ['id' => $organization->getId()]); } } $view = new ViewModel( array( 'id' => null, 'title' => "Nouvelle personne dans $organization", 'form' => $form, 'labelEnrolled' => "Personne", 'enroller' => $organization, 'enrolled' => null ) ); if ($this->getRequest()->isXmlHttpRequest()) { $view->setTerminal(true); } $view->setTemplate('partials/role-form.phtml'); return $view; } public function organizationPersonDeleteAction() Loading @@ -836,11 +882,15 @@ class EnrollController extends AbstractOscarController implements UsePersonServi $this->params()->fromRoute('idenroll') ); $organization = $organizationPerson->getOrganization(); $this->getOscarUserContextService()->check( Privileges::ORGANIZATION_EDIT, $organizationPerson->getOrganization() $organization ); return $this->deleteEnroll(OrganizationPerson::class); $this->getPersonService()->personOrganizationRemove($organizationPerson); $this->redirect()->toRoute('organization/show', ['id' => $organization->getId()]); } //////////////////////////////////////////////////////////////////////////// Loading
module/Oscar/src/Oscar/Entity/PersonRepository.php +1 −1 Original line number Diff line number Diff line Loading @@ -250,7 +250,7 @@ class PersonRepository extends EntityRepository implements IConnectedRepository public function getRolesOrganizationArray() { return $this->getEntityManager()->getRepository(Role::class)->getRolesAtOrganizationArray(); return $this->getEntityManager()->getRepository(Role::class)->getRolesAvailableForPersonInOrganizationArray(); } Loading
module/Oscar/src/Oscar/Entity/RoleRepository.php +14 −4 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ use Doctrine\ORM\EntityRepository; use Doctrine\ORM\NoResultException; use Doctrine\ORM\Query\ResultSetMapping; use Oscar\Exception\OscarException; use Oscar\Utils\OscarConstants; class RoleRepository extends EntityRepository { Loading Loading @@ -67,21 +68,30 @@ class RoleRepository extends EntityRepository /** * Retourne la liste des rôles d'une activité sous la forme d'un tableau * * @return \Doctrine\ORM\QueryBuilder * @return array */ public function getRolesAtOrganizationArray() public function getRolesAvailableForPersonInOrganizationArray() { static $rolesOrganization; if( $rolesOrganization === null ){ $rolesOrganization = []; /** @var Role $role */ foreach( $this->getRolesAtLevel(Role::LEVEL_ORGANIZATION)->getQuery()->getResult() as $role ){ foreach( $this->getRolesAvailableForPersonInOrganization() as $role ){ $rolesOrganization[$role->getId()] = $role->getRoleId(); } } return $rolesOrganization; } /** * Retourne la liste des rôles disponibles pour une personne dans une organisation. * * @return Role[] */ public function getRolesAvailableForPersonInOrganization() :array { return $this->getRolesAtLevel(Role::LEVEL_ORGANIZATION)->getQuery()->getResult(); } /** * Retourne la liste des rôles au niveau spécifié. * Loading