Commit fdb2e8b3 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Suppression des rôles des personnes à la synchro (en cours)

parent 54e7974b
Loading
Loading
Loading
Loading
+1 −1
Changes for install/demo/persons.json: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@
    "uid": "alberteinstein",
    "dateupdated": "2019-07-30",
    "roles": {
      "14": ["Responsable scientifique"]

    }
  },
  {
+45 −0
Changes for module/Oscar/src/Oscar/Connector/ConnectorPersonHydrator.php: 45 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -118,7 +118,32 @@ class ConnectorPersonHydrator
        }


        ///////////////////////////////////
        /// Récupération des rôles synchronisés par organisation
        $syncRoles = [];
        /** @var OrganizationPerson $organizationperson */
        foreach ($personOscar->getOrganizations() as $organizationperson) {
            if( $organizationperson->getOrigin() == $connectorName ){
                $organizationCode = $organizationperson->getOrganization()->getCode();
                if( !array_key_exists($organizationCode, $syncRoles) ){
                    $syncRoles[$organizationCode] = [];
                }
                if( !in_array($organizationperson->getRoleObj()->getRoleId(), $syncRoles[$organizationCode]) ){
                    $syncRoles[$organizationCode][] = $organizationperson->getRoleObj()->getRoleId();
                }
            }
        }
        if( $syncRoles ){
           // print_r($syncRoles);
            // Purge des rôles supprimés
            foreach ($syncRoles as $code=>$roles){
                echo " - $personOscar : ". implode(",", $roles) . " dans $code \n";
            }
        }


        if (property_exists($personData, 'roles')) {

            foreach ($personData->roles as $organizationCode => $roles) {

                try {
@@ -126,7 +151,13 @@ class ConnectorPersonHydrator
                    $organization = $this->getOrganisationByCode($organizationCode);

                    if ($organization) {

                        foreach ($roles as $roleId) {
                            if( array_key_exists($organizationCode, $syncRoles) ){
                                if( in_array($roleId, $syncRoles[$organizationCode]) ){
                                    array_splice($syncRoles[$organizationCode], array_search($roleId, $syncRoles[$organizationCode]), 1);
                                }
                            }
                            if (array_key_exists($roleId, $rolesOscar)) {
                                if (!$organization->hasPerson($personOscar,
                                    $roleId)) {
@@ -159,6 +190,20 @@ class ConnectorPersonHydrator
            }
        }

        // Purge des rôles supprimés
        foreach ($syncRoles as $code=>$roles){

            /** @var OrganizationPerson $organizationPerson */
            foreach ($personOscar->getOrganizations() as $organizationPerson) {
                if( $organizationPerson->getOrigin() == $connectorName &&
                    $organizationPerson->getOrganization()->getCode() == $code &&
                    in_array($organizationperson->getRoleObj()->getRoleId(), $roles)) {
                        $this->repport->addremoved(sprintf("Suppression du rôle %s de %s dans %s", $organizationPerson->getRole(), $organizationPerson->getPerson(), $organizationPerson->getOrganization()));
                        //$this->entityManager->remove($organizationPerson);
                    }
            }
        }

        return $personOscar;
    }

+1 −1
Changes for module/Oscar/src/Oscar/Connector/ConnectorPersonREST.php: 1 added line, 1 removed line.
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ class ConnectorPersonREST implements IConnectorPerson, ServiceLocatorAwareInterf
            foreach( $personsDatas as $personData ){

                if( ! property_exists($personData, 'uid') ){
                    $repport->addwarning(sprintf("Les donnèes %s n'ont pas d'UID.", print_r($personData->uid, true)));
                    $repport->addwarning(sprintf("Les donnèes %s n'ont pas d'UID.", print_r($personData, true)));
                    continue;
                }

+8 −1
Changes for module/Oscar/view/partials/person-enrolled-card.phtml: 8 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ $person = $enroll->getPerson();
                <div class="role"><?= $enroll->getRole() ?></div>
            <?php endif; ?>


            <?php if( $enroll->getDateStart() ): ?>
            <small>Depuis le <?= $this->moment($enroll->getDateStart()) ?></small>
            <?php endif; ?>
@@ -44,9 +43,17 @@ $person = $enroll->getPerson();
    <span class="email"><?= $person->getEmail() ?></span>
    <nav>
        <a href="<?= $this->url('person/show', ['id' => $person->getId()]) ?>" class="link-show"><i class="icon-zoom-in-outline"></i> Fiche</a>

        <?php if( $enroll->getOrigin() ): ?>
            <span class="cartouche primary" style="cursor: help" title="Ce rôle est issue de la synchronisation">
                <i class="icon-plug"></i>
                <?= $enroll->getOrigin() ?></span>
        <?php else: ?>
            <a href="<?= $urlDelete ?>" class="link-show"><i class="icon-trash"></i> Supprimer ce rôle</a>
            <?php if( isset($urlClose) ):?>
                <button data-enrollid="<?= $enroll->getId() ?>">Résilier</button>
            <?php endif; ?>
        <?php endif; ?>

    </nav>
</article>