Commit 32f73720 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Interdiction d'avoir des colonnes d'historique dans une source.

parent f3014420
Loading
Loading
Loading
Loading
+2 −0
Changes for src/UnicaenDbImport/Domain/DestinationInterface.php: 2 added lines, 0 removed lines.
Original line number Diff line number Diff line
@@ -6,6 +6,8 @@ use Doctrine\DBAL\Connection;

interface DestinationInterface
{
    const HISTO_COLUMNS = ['CREATED_ON', 'UPDATED_ON', 'DELETED_ON'];

    /**
     * Retourne le petit nom de cette destination.
     *
+30 −8
Changes for src/UnicaenDbImport/Domain/Source.php: 30 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -111,25 +111,47 @@ class Source implements SourceInterface
    }

    public function setColumns(array $columns)
    {
        $this->columns = $this->normalizeColumns($columns);
    }

    /**
     * @param array $columns
     * @return array
     */
    private function normalizeColumns(array $columns)
    {
        $sourceCodeColumn = $this->getSourceCodeColumn();
        $columns = array_map('strtoupper', $columns);

        // recherche puis retrait de la colonne $this->getSourceCodeColumn()
        $key = array_search($sourceCodeColumn, $columns);

        if ($key === FALSE) {
        // recherche puis retrait de la "source code column"
        $index = array_search($sourceCodeColumn, $columns);
        if ($index === FALSE) {
            throw new RuntimeException(
                "La colonne de référence '$sourceCodeColumn' est introuvable dans les colonnes spécifiées");
        }
        unset($columns[$key]);
        unset($columns[$index]);

        // la source ne peut pas comporter de colonne nommée comme l'une des colonnes d'historique
        foreach (DestinationInterface::HISTO_COLUMNS as $col) {
            if ($found = in_array($col, $columns)) {
                throw new RuntimeException(sprintf(
                    "La source '%s' ne peut pas comporter de colonne nommée '%s'",
                    $this->getName(),
                    $col
                ));
            }
        }

        if (empty($columns)) {
            throw new RuntimeException(
                "Les données sources doivent comporter au moins une colonne *en plus* de la colonne de référence '$sourceCodeColumn'");
            throw new RuntimeException(sprintf(
                "La source '%s' doit comporter au moins une colonne *en plus* de la colonne de référence '%s'",
                $this->getName(),
                $sourceCodeColumn
            ));
        }

        $this->columns = $columns;
        return $columns;
    }

    public function getData()