Commit fa756948 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Premier commit.

parents
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+1 −0
Original line number Diff line number Diff line
.idea/

README.md

0 → 100644
+5 −0
Original line number Diff line number Diff line
# Documentation

- [Initialisation de la base de données](database/README.md)

- [Ligne de commande](cli.md)

bin/README.md

0 → 100644
+23 −0
Original line number Diff line number Diff line
# bin

## [generate-database-scripts.sh](generate-database-scripts.sh) 

Ce script doit être utilisé pour générer une partie des scripts SQL nécessaires à l'installation de 
la base de données de SyGAL *de zéro*. 

Les scripts générés dans le répertoire temporaire `/tmp/sygal-doc/database` sont les suivants :
- `00-oracle-clear-schema-SYGAL.sql`
- `00-oracle-generate-schema-SYGAL.sql`
- `02-inserts/oracle-data-insert-from-SYGAL.*-into-SYGAL.sql`
- `03-oracle-generate-ref-constraints-SYGAL.sql`

Les autres scripts gérés, eux, à la main sont : 
- [`01-bootstrap.sql`](../database/01-bootstrap.sql)
- [`04-crea-comue.sql`](../database/04-crea-comue.sql)
- [`05-init.sql`](../database/05-init.sql)

Usage :
```bash
./generate-database-scripts.sh
```
+102 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash

echo "
####################################################################################################
#
#  Génération d'une partie des scripts SQL permettant de créer de zéro la base de données de SyGAL
#
####################################################################################################"

THIS_DIR=$(cd `dirname $0` && pwd)

# répertoire de destination des résultats
OUTPUT_DIR=/tmp/sygal-doc/database
[[ -d ${OUTPUT_DIR} ]] && echo "Le répertoire de destination existe déjà : ${OUTPUT_DIR}" && exit 1
mkdir -p ${OUTPUT_DIR}

# fonction remplaçant 'SYGAL.' par '/*SYGAL.*/' et '"SYGAL".' par '/*"SYGAL".*/' dans le fichier spécifié
commentPrefixInFile() {
    sed -i 's/\(SYGAL\.\)/\/*\1*\//ig' $1
    sed -i 's/\("SYGAL"\.\)/\/*\1*\//ig' $1
}
# fonction remplaçant par exemple "/*HISTO::*/1234" par "$2/*SUBSTIT*/" dans le fichier spécifié en $1
replaceHistoIdInFile() {
    sed -i "s/\/\*HISTO::\*\/[0-9]\+/$2\/\*SUBSTIT\*\//ig" $1
}

echo
##########################################################################
# Script de vidage de la bdd existante
##########################################################################"
FROM_FILE_PATH="/tmp/oracle-clear-schema-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/00-oracle-clear-schema-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-schema-clearing \
        --connection=doctrine.connection.orm_default && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH} && \

echo
###########################################################################
# Script de création des objets de la bdd, sans les contraintes de réf
###########################################################################"
FROM_FILE_PATH="/tmp/oracle-generate-schema-SYGAL-from-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/00-oracle-generate-schema-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-schema-creation \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default \
        --ref-constraints-included=0 && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH} && \
sed -i 's/\(START WITH [0-9]\+\)/\/*\1*\//ig; s/\(CACHE [0-9]\+\)/\/*\1*\//ig' \
    ${TO_FILE_PATH}

echo
###########################################################################
# Scripts d'insertions de données
###########################################################################"
FROM_FILE_PATH="/tmp/inserts"
TO_FILE_PATH="${OUTPUT_DIR}/02-inserts"
TABLES="CATEGORIE_PRIVILEGE,DOMAINE_SCIENTIFIQUE,IMPORT_OBSERV,INFORMATION,NATURE_FICHIER,PRIVILEGE,PROFIL,PROFIL_PRIVILEGE,TYPE_STRUCTURE,TYPE_VALIDATION,VERSION_FICHIER,WF_ETAPE"
HISTO_ID_SUBSTIT=1 # valeur forcée pour les colonnes d'historique
echo "FROM=${FROM_FILE_PATH} TO=${TO_FILE_PATH}"
rm -rf ${TO_FILE_PATH} && mkdir -p ${TO_FILE_PATH} && \
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-scripts-for-data-inserts \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default \
        --tables=${TABLES} \
        --output-dir=${FROM_FILE_PATH} && \
docker cp sygal-container:${FROM_FILE_PATH}/. ${TO_FILE_PATH} && \
for f in ${TO_FILE_PATH}/*; do commentPrefixInFile ${f}; replaceHistoIdInFile ${f} ${HISTO_ID_SUBSTIT}; done

echo
###########################################################################
# Script de création des contraintes de références
###########################################################################"
FROM_FILE_PATH="/tmp/oracle-generate-ref-constraints-SYGAL-from-SYGAL.sql"
TO_FILE_PATH="${OUTPUT_DIR}/03-oracle-generate-ref-constraints-SYGAL.sql"
docker exec \
    -it \
    -w /app \
    sygal-container \
    php public/index.php generate-script-for-ref-constraints-creation \
        --src-connection=doctrine.connection.orm_default \
        --dst-connection=doctrine.connection.orm_default && \
docker cp sygal-container:${FROM_FILE_PATH} ${TO_FILE_PATH} && \
commentPrefixInFile ${TO_FILE_PATH}


echo
echo "> Terminé."
echo "> Résultat dans ${OUTPUT_DIR}."

cli.md

0 → 100644
+93 −0
Original line number Diff line number Diff line
# Ligne de commande de SyGAL

Pour afficher l'aide de toutes les commandes fournies par l'application, se placer à la racine du projet 
et faire :

    $ php public/index.php


## Import

En fait, on peut désigner par "import" l'enchainement des actions suivantes :
- "importer" les données d'un établissement, càd :
    - interroger le WS d'un établissement (projet "sygal-import-ws") ; 
    - enregistrer les données reçues dans des tables temporaires `TMP_*` ; 
- "synchroniser" les tables définitives à partir des tables temporaires (module "unicaen/import").


### Les services disponibles

Les données importées sont fractionnées en domaines ou "services", qui reflètent en réalité chacun une table dans 
la base de données de l'application.

Voici les codes des services existants :
- structure
- ecole-doctorale
- unite-recherche
- etablissement
- individu
- doctorant
- these
- role
- acteur
- variable
- financement
- titre-acces

Lorsqu'on importe les écoles doctorales, on référence le service dont le code est `ecole-doctorale`.
C'est ce code du service qui devra être spécifié via l'argument `--etablissement` des commandes présentées ici.


### Commandes d'import
 
L'import se fait pour *un seul établissement à la fois*. Les établissements dont on veut importer les données
doivent être déclarés dans la config PHP de l'appli : cf. [local.php.dist](../config/autoload/local.php.dist)

C'est le "code établissement" choisi dans la config qui devra être spécifié via l'argument `--etablissement` 
des commandes présentées ici.

#### `import`

On parle ici de lancer l'import d'un service précis.

Par exemple, pour lancer l'import des variables de l'UCN, mais sans lancer la synchro des tables définitives :
    
    $ php public/index.php import --service=variable --etablissement=UCN --synchronize=0

Pour lancer en plus la synchro après l'interrogation du WS, mettre `--synchronize=1`.

#### `import-all`

Cette commande lance l'import de tous les services.

Par exemple, pour lancer l'import complet des données de l'UCN, sans lancer la synchro des tables définitives :
    
    $ php public/index.php import-all --etablissement=UCN --synchronize=0

Pour que la synchro se fasse après l'interrogation du WS, mettre `--synchronize=1`.


### Commandes de synchro

On parle ici de synchroniser les données des tables définitives de l'application avec celles des tables 
temporaires `TMP_*`. 

Même s'il s'agit de tables, on raisonne tout de même en service. Par exemple, la synchronisation de la table des 
unités de recherches (`UNITE_RECH`) se fait en spécifiant le code de service `unite-recherche`.

Dans ces commandes, il n'est pas possible de spécifier un établissement précis.

#### `synchronize`

Cette commande lance la synchro d'une table définitive `TABLE` à partir de la table temporaire `TMP_TABLE`
correspondante.

Par exemple, pour lancer la synchro des variables :
    
    $ php public/index.php synchronize --service=variable

#### `synchronize-all`

Cette commande lance la synchro de toutes les tables définitives :

    $ php public/index.php synchronize-all
Loading