Commit 0e5fd367 authored by Stéphane Bouvry's avatar Stéphane Bouvry
Browse files

Modification de l'extraction des personnes depuis un CSV pour permettre de...

Modification de l'extraction des personnes depuis un CSV pour permettre de gérer les noms de familles contenant un espace
parent 3a153afd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -173,7 +173,7 @@ class ConnectorActivityCSVWithConf implements ConnectorInterface
     * @param $separator
     * @return array
     */
    private function extractArrayString( $value, $separator ){
    public function extractArrayString( $value, $separator ){
        $out = [];
        if( $separator === null ){
            $out = [trim($value)];
+0 −1
Original line number Diff line number Diff line
@@ -149,7 +149,6 @@ class ConnectorActivityJSON implements ConnectorInterface
                return $roleObj;
            } catch (\Exception $e ){
                throw new ConnectorException(sprintf("Impossible de créer le rôle '%s' : %s", $role, $e->getMessage()));
                throw new ConnectorException(sprintf("Impossible de créer le rôle '%s' : %s", $role, $e->getMessage()));
            }
        } catch (NonUniqueResultException $e){
            throw new ConnectorException(sprintf("ATTENTION ! Le rôle '%s' est présent plusieurs fois dans la base de données", $role));
+11 −5
Original line number Diff line number Diff line
@@ -21,11 +21,17 @@ class DataExtractorFullname extends AbstractDataExtractor
            return null;

        if( preg_match('/([\w-]*)( |\.)([\w- ]*)(<(.*@.*)>)?/ui', $data, $matches) ){

            $firstname = $matches[1];
            $lastname = trim($matches[3]);
            $fullname = sprintf('%s %s', $firstname, $lastname);
            $email = count($matches) == 6 ? $matches[5] : "";

            return [
                'firstname' => $matches[1],
                'lastname' => $matches[3],
                'fullname' => $matches[1].' '.$matches[3],
                'email' => count($matches) == 6 ? $matches[5] : ""
                'firstname' => $firstname,
                'lastname' => $lastname,
                'fullname' => $fullname,
                'email' => $email
            ];
        }
        return null;
+98 −0
Original line number Diff line number Diff line
<?php
/**
 * Created by PhpStorm.
 * User: jacksay
 * Date: 18/04/2018
 * Time: 13:42
 */

namespace tests\Oscar\Connector;


use Oscar\Connector\ConnectorActivityCSVWithConf;
use Oscar\Import\Data\DataExtractorFullname;
use PHPUnit\Framework\TestCase;

class DataExtractorFullnameTest extends TestCase
{

    /**
     * Prénom simple
     */
    public function testSimple()
    {
        $input = 'Stéphane Bouvry';
        $extractor = new DataExtractorFullname();

        $datas = $extractor->extract($input);

        $this->assertEquals('Stéphane', $datas['firstname']);
        $this->assertEquals('Bouvry', $datas['lastname']);
        $this->assertEquals('Stéphane Bouvry', $datas['fullname']);
        $this->assertEquals('', $datas['email']);
    }

    /**
     * Simple avec Email
     */
    public function testSimpleAvecEmail()
    {
        $input = 'Stéphane Bouvry <stephane.bouvry@unicaen.fr>';
        $extractor = new DataExtractorFullname();

        $datas = $extractor->extract($input);

        $this->assertEquals('Stéphane', $datas['firstname']);
        $this->assertEquals('Bouvry', $datas['lastname']);
        $this->assertEquals('Stéphane Bouvry', $datas['fullname']);
        $this->assertEquals('stephane.bouvry@unicaen.fr', $datas['email']);
    }

    /**
     * Prénom composé avec un tiret
     */
    public function testPrénomComposé()
    {
        $input = 'Jean-Claude Dus';
        $extractor = new DataExtractorFullname();

        $datas = $extractor->extract($input);

        $this->assertEquals('Jean-Claude', $datas['firstname']);
        $this->assertEquals('Dus', $datas['lastname']);
        $this->assertEquals('Jean-Claude Dus', $datas['fullname']);
        $this->assertEquals('', $datas['email']);
    }

    /**
     * Prénom composé avec un tiret
     */
    public function testPrénomComposéAvecEmail()
    {
        $input = 'Jean-Claude Dus <jean-claude.dus@unicaen.fr>';
        $extractor = new DataExtractorFullname();

        $datas = $extractor->extract($input);

        $this->assertEquals('Jean-Claude', $datas['firstname']);
        $this->assertEquals('Dus', $datas['lastname']);
        $this->assertEquals('Jean-Claude Dus', $datas['fullname']);
        $this->assertEquals('jean-claude.dus@unicaen.fr', $datas['email']);
    }

    /**
     * BUG : Identifié par Damien Rieu sur les nom de famille avec espace
     */
    public function testNomEspace()
    {
        $input = 'Julie Le Carpentier';
        $extractor = new DataExtractorFullname();

        $datas = $extractor->extract($input);

        $this->assertEquals('Julie', $datas['firstname']);
        $this->assertEquals('Le Carpentier', $datas['lastname']);
        $this->assertEquals('Julie Le Carpentier', $datas['fullname']);
        $this->assertEquals('', $datas['email']);
    }
}
 No newline at end of file