Commit 883a1a56 authored by Stephane Bouvry's avatar Stephane Bouvry
Browse files

Merge branch 'master' into ripley

parents ee57f807 8742eff6
Loading
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2,6 +2,10 @@

## Technique

### Fichiers de configuration
```
cp config/autoload/unicaen-signature.local.php.dist config/autoload/unicaen-signature.local.php
```

### Activer les éléments d'UI (Interface d'administration)
```bash
+9 −25
Original line number Diff line number Diff line
# Mise à Jour 2.13.2 "RIPLEY"

> Attention, version disponible sur la branche **"ripley"**
> Attention, version disponible sur la branche **"ripley" / "master"**

## Mise à jour et patch

@@ -127,10 +127,10 @@ Depuis https://git.unicaen.fr/open-source/oscar
   826e821d..a4996af6  spartan                -> origin/spartan
```

Basculer sur la branche **ripley** : 
Update mars 2025 : la version "Ripley" stable est sur la branche MASTER

```bash
git checkout ripley-laminas-php8
git checkout master
```

### Installation des librairies tiers 
@@ -188,7 +188,7 @@ php bin/oscar.php check:config
Puis MAJ de la BDD si tout est OK

```bash
php vendor/bin/doctrine-module orm:schema-tool:update --force
php vendor/bin/doctrine-module orm:schema-tool:update --force --complete
```

```bash
@@ -278,26 +278,10 @@ Mise à jour de la quête SIFAC pour le chargement des dépenses engagées. la m

```php
<?php

function migrate_implode(string $separator, ?array $array)
{
    if (is_null($array)) {
        return '';
    }
    return implode($separator, $array);
}

$param_postgresql_host = /*oscar_php8_postgresql*/ "localhost";
$param_gearman_host = /*"oscar_php8_gearman"*/"localhost";
$param_elastic_host = /*"'oscar_php8_elasticsearch:9200'"*/"localhost";


// config/autoload/local.php
//...
return array(
    'view_manager' => array(
        'display_not_found_reason' => getenv('APPLICATION_ENV') == 'development',
        'display_exceptions' => getenv('APPLICATION_ENV') == 'development',
    ),

    //...
    // Oscar
    'oscar' => [
         // Contenu...
@@ -346,11 +330,11 @@ Créer et donner les droits d'accès en écriture au dossier des signatures :

### Configuration des parapheurs

> Même si vous n'utilisez pas la signature numérique, copié quand même les fichiers de configurations

```
cp config/autoload/unicaen-signature.local.php.dist config/autoload/unicaen-signature.local.php
```

Se rendre dans l'administration des privilèges pour accorder les droits d'accès en fonction des rôles.

> En cours
+1 −1
Original line number Diff line number Diff line
@@ -317,7 +317,7 @@ class ConnectorPersonDB extends AbstractConnector
    {
        if ($this->personHydrator === null) {
            $this->personHydrator = new ConnectorPersonHydrator(
                $this->getServiceLocator()->get('Doctrine\ORM\EntityManager')
                $this->getServiceLocator()
            );
            $this->personHydrator->setPurge($this->getOptionPurge());
        }
+58 −23
Original line number Diff line number Diff line
@@ -8,8 +8,10 @@
namespace Oscar\Connector;

use Doctrine\ORM\EntityManager;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\NonUniqueResultException;
use Doctrine\ORM\NoResultException;
use Laminas\ServiceManager\ServiceManager;
use Oscar\Entity\Organization;
use Oscar\Entity\OrganizationPerson;
use Oscar\Entity\OrganizationRepository;
@@ -19,6 +21,7 @@ use Oscar\Entity\RoleRepository;
use Oscar\Exception\ConnectorException;
use Oscar\Exception\OscarException;
use Oscar\Factory\JsonToPersonFactory;
use Oscar\Service\PersonService;

/**
 * Cette classe centralise l'analyse des données d'un personne pour mettre à jour un objet Person avec.
@@ -28,12 +31,15 @@ use Oscar\Factory\JsonToPersonFactory;
 */
class ConnectorPersonHydrator
{

    private $serviceManager;

    /**
     * @return OrganizationRepository
     */
    public function getOrganizationRepository()
    {
        return $this->entityManager->getRepository(Organization::class);
        return $this->getEntityManager()->getRepository(Organization::class);
    }

    /**
@@ -41,15 +47,47 @@ class ConnectorPersonHydrator
     */
    public function getRoleRepository()
    {
        return $this->entityManager->getRepository(Role::class);
        return $this->getEntityManager()->getRepository(Role::class);
    }

    /**
     * @return ServiceManager
     */
    public function getServiceManager()
    {
        return $this->serviceManager;
    }

    /**
     * @return EntityRepository
     * @throws \Doctrine\ORM\Exception\NotSupported
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function getOrganizationPersonRepository() :EntityRepository
    {
        return $this->getEntityManager()->getRepository(OrganizationPerson::class);
    }


    /**
     * @return EntityManager
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function getEntityManager() :EntityManager
    {
        return $this->getServiceManager()->get('Doctrine\ORM\EntityManager');
    }

    /**
     * @return \Doctrine\ORM\EntityRepository
     * @return PersonService
     * @throws \Psr\Container\ContainerExceptionInterface
     * @throws \Psr\Container\NotFoundExceptionInterface
     */
    public function getOrganizationPersonRepository()
    public function getPersonService() :PersonService
    {
        return $this->entityManager->getRepository(OrganizationPerson::class);
        return $this->getServiceManager()->get(PersonService::class);
    }

    private $repport;
@@ -85,9 +123,9 @@ class ConnectorPersonHydrator
     * ConnectorPersonHydrator constructor.
     * @param EntityManager $entityManager
     */
    public function __construct(EntityManager $entityManager)
    public function __construct(ServiceManager $serviceManager)
    {
        $this->entityManager = $entityManager;
        $this->serviceManager = $serviceManager;
    }

    /**
@@ -160,15 +198,15 @@ 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();
        /** @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 (!in_array($organizationPerson->getRoleObj()->getRoleId(), $syncRoles[$organizationCode])) {
                    $syncRoles[$organizationCode][] = $organizationPerson->getRoleObj()->getRoleId();
                }
            }
        }
@@ -184,6 +222,7 @@ class ConnectorPersonHydrator
                        foreach ($roles as $roleId) {
                            if (array_key_exists($organizationCode, $syncRoles)) {
                                if (in_array($roleId, $syncRoles[$organizationCode])) {
                                    // Rôle déjà synchronisé
                                    array_splice(
                                        $syncRoles[$organizationCode],
                                        array_search($roleId, $syncRoles[$organizationCode]),
@@ -193,13 +232,9 @@ class ConnectorPersonHydrator
                            }
                            if (array_key_exists($roleId, $rolesOscar)) {
                                if (!$organization->hasPerson($personOscar, $roleId)) {
                                    $roleOscar = new OrganizationPerson();
                                    $this->entityManager->persist($roleOscar);
                                    $roleOscar->setPerson($personOscar)
                                        ->setOrganization($organization)
                                        ->setOrigin($connectorName)
                                        ->setRoleObj($rolesOscar[$roleId]);
                                    $personOscar->getOrganizations()->add($roleOscar);

                                    $this->getPersonService()->personOrganizationAdd($organization, $personOscar, $rolesOscar[$roleId],null,null, $connectorName);

                                    $this->repport->addupdated(
                                        sprintf(
                                            "Ajout du rôle '%s' dans '%s' pour '%s' ",
@@ -249,18 +284,18 @@ class ConnectorPersonHydrator

        // Purge des rôles supprimés
        foreach ($syncRoles as $code => $roles) {
            if (count($syncRoles[$code]) < 0) {
            if (count($roles) <= 0) {
                continue;
            }

            /** @var OrganizationPerson $organizationPerson */
            foreach ($personOscar->getOrganizations() as $organizationPerson) {
                $roleId = $organizationPerson->getRole();
                $codeOrg = $organizationPerson->getOrganization()->getCode();

                if ($codeOrg == $code) {
                    if (in_array($roleId, $syncRoles[$code])) {
                        if ($this->getPurge()) {
                            $this->entityManager->remove($organizationPerson);
                            $this->getPersonService()->personOrganizationRemove($organizationPerson);
                            $this->repport->addremoved(
                                sprintf(
                                    "Suppression du rôle %s pour %s dans %s.",
+1 −1
Original line number Diff line number Diff line
@@ -74,7 +74,7 @@ class ConnectorPersonJsonHttpAuthBasic extends AbstractConnectorOscar
    {
        if( $this->personHydrator === null ){
            $this->personHydrator = new ConnectorPersonHydrator(
                $this->getEntityManager()
                $this->getServiceManager()
            );
            $this->personHydrator->setPurge($this->getOptionPurge());
        }
Loading