Commit 95502245 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

transfert du code depuis OSE et adaptation

parent edf6e5bc
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -5,8 +5,6 @@ namespace UnicaenImport;
use Zend\ModuleManager\Feature\ConfigProviderInterface;
use Zend\Mvc\MvcEvent;

include_once 'Functions.php';

/**
 *
 *
+161 −3
Original line number Diff line number Diff line
<?php

namespace UnicaenImport;

use UnicaenAuth\Guard\PrivilegeController;
use UnicaenImport\Provider\Privilege\Privileges;

return [
    'unicaen-import' => [
    ]
    'controllers' => [
        'invokables' => [
            'Import\Controller\Import' => Controller\ImportController::class,
        ],
    ],

    'router' => [
        'routes' => [
            'import' => [
                'type'    => 'Segment',
                'options' => [
                    'route'    => '/import[/:action][/:table]',
                    'defaults' => [
                        '__NAMESPACE__' => 'Import\Controller',
                        'controller'    => 'Import',
                        'action'        => 'index',
                        'table'         => null,
                    ],
                ],
            ],
        ],
    ],

    'navigation' => [
        'default' => [
            'home' => [
                'pages' => [
                    'import' => [
                        'label'    => 'Import',
                        'order'    => 1,
                        'route'    => 'import',
                        'resource' => PrivilegeController::getResourceId('Import\Controller\Import', 'index'),
                        'pages'    => [
                            'showDiff'               => [
                                'label'       => "Écarts entre les données de l'application et ses sources",
                                'description' => "Affiche, table par table, la liste des données différentes entre l'application et ses sources de données",
                                'route'       => 'import',
                                'resource'    => PrivilegeController::getResourceId('Import\Controller\Import', 'showdiff'),
                                'params'      => [
                                    'action' => 'showDiff',
                                ],
                            ],
                            'updateTables'           => [
                                'label'       => "Mise à jour des données à partir de leurs sources",
                                'description' => "Met à jour l'ensemble des données partir de leurs sources respectives.",
                                'route'       => 'import',
                                'resource'    => PrivilegeController::getResourceId('Import\Controller\Import', 'updateTables'),
                                'params'      => [
                                    'action' => 'updateTables',
                                ],
                            ],
                            'show-import-tbl'        => [
                                'label'       => "Tableau de bord principal",
                                'description' => "Liste, table par table, les colonnes dont les données sont importables ou non, leur caractéristiques et l'état de l'import à leur niveau.",
                                'route'       => 'import',
                                'resource'    => PrivilegeController::getResourceId('Import\Controller\Import', 'show-import-tbl'),
                                'params'      => [
                                    'action' => 'show-import-tbl',
                                ],
                            ],
                            'updateViewsAndPackages' => [
                                'label'       => "Mise à jour des vues différentielles et des procédures de mise à jour",
                                'description' => "Réactualise les vues différentielles d'import. Ces dernières servent à déterminer quelles données ont changé,
        sont apparues ou ont disparues des sources de données.
        Met également à jour les procédures de mise à jour qui actualisent les données de l'application à partir des informations
        fournies par les vues différentielles.
        Cette réactualisation n'est utile que si les vues sources ont été modifiées.",
                                'route'       => 'import',
                                'resource'    => PrivilegeController::getResourceId('Import\Controller\Import', 'updateViewsAndPackages'),
                                'params'      => [
                                    'action' => 'updateViewsAndPackages',
                                ],
                            ],
                        ],
                    ],
                ],
            ],
        ],
    ],

    'bjyauthorize' => [
        'guards' => [
            PrivilegeController::class => [
                [
                    'controller' => 'Import\Controller\Import',
                    'action'     => ['index'],
                    'privileges' => [Privileges::IMPORT_ECARTS, Privileges::IMPORT_MAJ, Privileges::IMPORT_TBL, Privileges::IMPORT_VUES_PROCEDURES],
                ],
                [
                    'controller' => 'Import\Controller\Import',
                    'action'     => ['showDiff'],
                    'privileges' => [Privileges::IMPORT_ECARTS],
                ],
                [
                    'controller' => 'Import\Controller\Import',
                    'action'     => ['show-import-tbl'],
                    'privileges' => [Privileges::IMPORT_TBL],
                ],
                [
                    'controller' => 'Import\Controller\Import',
                    'action'     => ['update', 'updateTables'],
                    'privileges' => [Privileges::IMPORT_MAJ],
                ],
                [
                    'controller' => 'Import\Controller\Import',
                    'action'     => ['updateViewsAndPackages'],
                    'privileges' => [Privileges::IMPORT_VUES_PROCEDURES],
                ],
            ],
        ],
    ],

    'doctrine' => [
        'driver' => [
            'unicaen_import_driver' => [
                'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
                'cache' => 'array',
                'paths' => [
                    __DIR__ . '/../src/UnicaenImport/Entity/Db',
                ],
            ],
            'orm_default'           => [
                'class'   => 'Doctrine\ORM\Mapping\Driver\DriverChain',
                'drivers' => [
                    'UnicaenImport\Entity\Db' => 'unicaen_import_driver',
                ],
            ],
        ],
    ],

    'service_manager' => [
        'invokables' => [
            'UnicaenImport\Service\Schema'         => Service\SchemaService::class,
            'UnicaenImport\Service\QueryGenerator' => Service\QueryGeneratorService::class,
            'UnicaenImport\Service\Differentiel'   => Service\DifferentielService::class,
            'UnicaenImport\Processus\Import'       => Processus\ImportProcessus::class,
        ],
        'factories'  => [
            'UnicaenImport\Options\Module' => Options\ModuleOptionsFactory::class,
        ],
    ],

    'view_helpers' => [
        'invokables' => [
            'differentielListe' => View\Helper\DifferentielListe::class,
            'differentielLigne' => View\Helper\DifferentielLigne\DifferentielLigne::class,
        ],
    ],

    'view_manager' => [
        'template_path_stack' => [
            'import' => __DIR__ . '/../view',
        ],
    ],

];
 No newline at end of file
+9 −1
Original line number Diff line number Diff line
<?php

return [
    /* Configuration d'UnicaenImport */
    'unicaen-import' => [

        //Liste des aides de vues facilitant la lecture du différentiel (écarts de données entre l'appli et sa source)
        'differentiel_view_helpers' => [
            /* nom de la table (attention à la CASSE) => Nom de l'aide de vue (qui doit hériter de UnicaenImport\View\Helper\DifferentielLigne\DifferentielLigne) */
        ],
    ],
];
 No newline at end of file
+139 −0
Original line number Diff line number Diff line
<?php
namespace UnicaenImport\Controller;

use UnicaenImport\Processus\Traits\ImportProcessusAwareTrait;
use UnicaenImport\Service\Traits\DifferentielServiceAwareTrait;
use UnicaenImport\Service\Traits\QueryGeneratorServiceAwareTrait;
use UnicaenImport\Service\Traits\SchemaServiceAwareTrait;
use Zend\Mvc\Controller\AbstractActionController;
use UnicaenImport\Entity\Differentiel\Query;

/**
 *
 *
 * @author Laurent Lécluse <laurent.lecluse at unicaen.fr>
 */
class ImportController extends AbstractActionController
{
    use SchemaServiceAwareTrait;
    use QueryGeneratorServiceAwareTrait;
    use DifferentielServiceAwareTrait;
    use ImportProcessusAwareTrait;




    public function indexAction()
    {
    }



    public function updateViewsAndPackagesAction()
    {
        try {
            $this->getProcessusImport()->updateViewsAndPackages();
            $message = 'Mise à jour des vues différentielles et du paquetage d\'import terminés';
        } catch (\Exception $e) {
            $message = 'Une erreur a été rencontrée.';
            throw new \UnicaenApp\Exception\LogicException("import impossible", null, $e);
        }
        $title = "Résultat";

        return compact('message', 'title');
    }



    public function showImportTblAction()
    {
        $data = $this->getServiceSchema()->getSchema();

        return compact('data');
    }



    public function showDiffAction()
    {
        $tableName = $this->params()->fromRoute('table');

        $sc = $this->getServiceSchema();

        $mviews = $sc->getImportMviews();

        if ($tableName) {
            $tables = [$tableName];
        } else {
            $tables = $sc->getImportTables();
            sort($tables);
        }

        $data = [];
        foreach ($tables as $table) {
            $query = new Query($table);
            $query->setLimit(101);
            $data[$table] = $this->getServiceDifferentiel()->make($query)->fetchAll();
        }

        return compact('data', 'mviews');
    }



    public function updateAction()
    {
        $errors    = [];
        $tableName = $this->params()->fromRoute('table');
        $typeMaj   = $this->params()->fromPost('type-maj');

        $query = new Query($tableName);

        $sq = $this->getServiceQueryGenerator();

        /* Mise à jour des données et récupération des éventuelles erreurs */
        try {
            if ('vue-materialisee' == $typeMaj) {
                $sq->execMajVM($tableName);
            } else {
                $errors = $errors + $sq->syncTable($tableName);
                //$sq->execMaj($query);
            }
        } catch (\Exception $e) {
            $errors = [$e->getMessage()];
        }
        $query->setNotNull([]); // Aucune colonne ne doit être non nulle !!
        $query->setLimit(101);
        $lignes = $this->getServiceDifferentiel()->make($query)->fetchAll();

        return [
            'lignes' => $lignes,
            'table'  => $tableName,
            'errors' => $errors,
        ];
    }



    public function updateTablesAction()
    {
        $tables = $this->getServiceSchema()->getImportTables();
        sort($tables);

        $message = '';
        try {
            foreach ($tables as $table) {
                $message .= '<div>Table "' . $table . '" Mise à jour.</div>';
                $this->getServiceQueryGenerator()->execMaj(new Query($table));
            }
            $message .= 'Mise à jour des données terminée';
        } catch (\Exception $e) {
            $message = 'Une erreur a été rencontrée.';
            throw new \UnicaenApp\Exception\LogicException("mise à jour des données impossible", null, $e);
        }

        $title = "Résultat";

        return compact('message', 'title');
    }
}
 No newline at end of file
+42 −0
Original line number Diff line number Diff line
<?php

namespace UnicaenImport\Entity\Db\Interfaces;
use UnicaenImport\Entity\Db\Source;


/**
 * Interface des entités possédant une gestion de l'import
 *
 * @author Laurent LÉCLUSE <laurent.lecluse at unicaen.fr>
 */
interface ImportAwareInterface
{
    public function setSource(Source $source = null);



    /**
     * @return Source
     */
    public function getSource();



    /**
     * Set sourceCode
     *
     * @param string $sourceCode
     *
     * @return self
     */
    public function setSourceCode($sourceCode);



    /**
     * Get sourceCode
     *
     * @return string
     */
    public function getSourceCode();
}
 No newline at end of file
Loading