Commit 816741b1 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

FIX : Erreur d'enregistrement des rôles des organisations

parent 6aac346e
Loading
Loading
Loading
Loading

build-js.sh

deleted100644 → 0
+0 −0

Empty file deleted.

+32 −15
Original line number Diff line number Diff line
@@ -1254,24 +1254,41 @@ class AdministrationController extends AbstractOscarController implements UsePro
            }

            if ($this->getHttpXMethod() == 'PUT') {
                // Contrôle du Role
                $roleId = trim($request->getPost('label'));
                if ($roleId == "") {
                    return $this->getResponseBadRequest("Impossible d'enregistrer un rôle vide");



                try {
                    // Données du rôle à modifier
                    $id = (int) $request->getPost('id');
                    $label = trim($request->getPost('label'));
                    $description = trim($request->getPost('description'));
                    $principal = $request->getPost('principal') == "true";
                    $this->getLoggerService()->info("Modification du rôle d'organization $label");

                    if( $label == "" ){
                        throw new OscarException("Vous devez renseigner un intitulé");
                    }

                $exist = $this->getEntityManager()->getRepository(OrganizationRole::class)->find($roleId);
                if ($exist) {
                    return $this->getResponseBadRequest("Un rôle porte déja cette intitulé");
                    $roleObjEdited = $this->getOscarUserContextService()->getOrganizationRoleById($id, true);
                    $exist = $this->getOscarUserContextService()->getOrganizationRoleByRoleId($label);

                    if( $exist && $exist->getId() != $roleObjEdited->getId() ){
                        throw new OscarException("Un autre rôle d'organisation porte déjà cet intitulé : '$label'");
                    }

                $role->setLabel($request->getPost('label'))
                    ->setDescription($request->getPost('description'))
                    ->setPrincipal($request->getPost('principal') == 'true');
                $this->getEntityManager()->persist($role);
                    $roleObjEdited->setLabel($label)
                        ->setDescription($description)
                        ->setPrincipal($principal);

                    $this->getEntityManager()->flush();
                return $this->ajaxResponse($role->toArray());

                    return $this->ajaxResponse($roleObjEdited->toArray());

                } catch (\Exception $e) {
                    return $this->getResponseInternalError("Impossible de modifier le rôle : " . $e->getMessage());
                }
            }

            ////////////////////////////////////////////////////////////////////
            // POST : Nouveau rôle
            elseif ($this->getHttpXMethod() == 'DELETE') {
+39 −0
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ use Oscar\Entity\Organization;
use Oscar\Entity\OrganizationPerson;
use Oscar\Entity\OrganizationRepository;
use Oscar\Entity\OrganizationRole;
use Oscar\Entity\OrganizationRoleRepository;
use Oscar\Entity\Person;
use Oscar\Entity\PersonRepository;
use Oscar\Entity\Privilege;
@@ -127,6 +128,36 @@ class OscarUserContext implements UseOscarConfigurationService, UseLoggerService
        }
    }

    /**
     * @param int $id
     * @param bool $throw
     * @return object|null
     * @throws OscarException
     */
    public function getOrganizationRoleById( int $id, bool $throw = false)
    {
        $roleObj = $this->getOrganizationRoleRepository()->find($id);
        if( !$roleObj && $throw ){
            throw new OscarException("Impossible de charger le rôle d'organisation '$id'");
        }
        return $roleObj;
    }

    /**
     * @param string $roleId
     * @param bool $throw
     * @return OrganizationRole|null
     * @throws OscarException
     */
    public function getOrganizationRoleByRoleId( string $roleId, bool $throw = false)
    {
        $roleObj = $this->getOrganizationRoleRepository()->findOneBy(['label' => $roleId]);
        if( !$roleObj && $throw ){
            throw new OscarException("Impossible de charger le rôle d'organisation '$roleId'");
        }
        return $roleObj;
    }

    /**
     * @return RoleRepository
     */
@@ -135,6 +166,14 @@ class OscarUserContext implements UseOscarConfigurationService, UseLoggerService
        return $this->getEntityManager()->getRepository(Role::class);
    }

    /**
     * @return OrganizationRoleRepository
     */
    public function getOrganizationRoleRepository(): OrganizationRoleRepository
    {
        return $this->getEntityManager()->getRepository(OrganizationRole::class);
    }

    /**
     * @return array
     */