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

UP : Ajout d'une méthode ConnectorLocalCommand pour les connectors (Appel d'un...

UP : Ajout d'une méthode ConnectorLocalCommand pour les connectors (Appel d'un script local pour l'obtention des donnèes JSON)
parent e7670b06
Loading
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -175,6 +175,22 @@ method: POST
force_unsecure_http: false
```

#### Commande locale

Obtention des données via l'exécution d'une commande système locale (Ex : avec **Oscar Bridge**)

```yml
# Commande pour obtenir sortie le JSON complet (toutes les personnes) - En une seule ligne
url_persons: '/usr/bin/php /var/OscarBridge/bin/console json:persons-get-all'

# Commande pour synchroniser une seule personne
url_person: '/usr/bin/php /var/OscarBridge/bin/console json:person-get-one-by-uid %s'

access_strategy: Oscar\Connector\Access\ConnectorLocalCommand
```

> Plus d'information sur Oscar bridge : https://git.unicaen.fr/certic/oscar-bridge

#### Tester la configuration du connecteur

Vous pouvez utiliser la commande `php bin/oscar.php check:config` pour vérifier que votre connecteur est correctement configuré (la commande va executer une requête d'accès HTTP automatiquement sur l'URL "liste").
+61 −0
Original line number Diff line number Diff line
<?php


namespace Oscar\Connector\Access;


use Oscar\Connector\IConnector;
use Oscar\Exception\OscarException;
use Oscar\Utils\PhpPolyfill;

class ConnectorLocalCommand implements IConnectorAccess
{
    /** @var IConnector */
    private $connector;

    /**
     * ConnectorAccessCurlHttp constructor.
     * @param IConnector $connector Connector qui va consommer l'accès aux données.
     */
    public function __construct(IConnector $connector)
    {
        $this->connector = $connector;
    }

    public function getDatas($url)
    {
        $output = null;
        $outputCode = null;
        $success = exec($url, $output, $outputCode);

        if( $success && $outputCode == 0 ){
            if( count($output) == 1 ){
                $jsonString = $output[0];
                try {
                    return PhpPolyfill::jsonDecode($jsonString);
                } catch (\Exception $e) {
                    throw new OscarException("Impossible de convertir la chaîne en donnèes JSON");
                }
            } else {
                throw new OscarException("problème avec le retour JSON depuis '$url', le résultat attendu doit être d'une seule ligne");
            }
        } else {
            throw new OscarException("La commande '$url' a retournée un code d'erreur $outputCode");
        }
    }

    public function getConnector(): IConnector
    {
        return $this->connector;
    }

    public function getDataSingle($remoteId, $params = null)
    {
        return $this->getDatas($this->getConnector()->getPathSingle($remoteId));
    }

    public function getDataAll($params = null)
    {
        return $this->getDatas($this->getConnector()->getPathAll());
    }
}
 No newline at end of file
+22 −18
Original line number Diff line number Diff line
@@ -31,8 +31,11 @@ class JsonToOrganization extends JsonToObject implements IJsonToOrganisation
    {
        $organization = new Organization();

        return $this->hydrateWithDatas($organization, $jsonData,
            $connectorName);
        return $this->hydrateWithDatas(
            $organization,
            $jsonData,
            $connectorName
        );
    }

    /**
@@ -42,8 +45,10 @@ class JsonToOrganization extends JsonToObject implements IJsonToOrganisation
    function hydrateWithDatas($object, $jsonData, $connectorName = null)
    {
        if ($connectorName !== null) {
            $object->setConnectorID($connectorName,
                $this->getFieldValue($jsonData, 'uid'));
            $object->setConnectorID(
                $connectorName,
                $this->getFieldValue($jsonData, 'uid')
            );
        }

        $object
@@ -62,11 +67,11 @@ class JsonToOrganization extends JsonToObject implements IJsonToOrganisation
            // Ajout de champs
            ->setDuns($this->getFieldValue($jsonData, 'duns'))
            ->setTvaintra($this->getFieldValue($jsonData, 'tvaintra'))
            ->setRnsr($this->getFieldValue($jsonData, 'rnsr'))
        ;
            ->setRnsr($this->getFieldValue($jsonData, 'rnsr'));

        if (property_exists($jsonData, 'address')) {
            $address = $jsonData->address;
            if (is_object($address)) {
                $object
                    ->setStreet1(property_exists($address, 'address1') ? $address->address1 : null)
                    ->setStreet2(property_exists($address, 'address2') ? $address->address2 : null)
@@ -75,8 +80,7 @@ class JsonToOrganization extends JsonToObject implements IJsonToOrganisation
                    ->setCountry(property_exists($address, 'country') ? $address->country : null)
                    ->setBp(property_exists($address, 'address3') ? $address->address3 : null);
            }


        }


        return $object;