Commit 453ac8f0 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Merge branch 'release-1.2.5'

parents 9680e54a d21a7bc9
Pipeline #5694 passed with stage
in 18 seconds
#!/usr/bin/env bash
#
# Script d'install d'un serveur, inspiré du Dockerfile.
# Script d'install d'un serveur, traduction du Dockerfile.
#
DIR=$(cd `dirname $0` && pwd)
usage() {
cat << EOF
Script d'install d'un serveur, traduction du Dockerfile.
Usage: $0 <version de PHP>
EOF
exit 0;
}
[[ -z "$1" ]] && usage
################################################################################################################
PHP_VERSION="$1"
APP_DIR=$(cd `dirname $0` && pwd)
set -e
......@@ -18,21 +31,25 @@ apt-get install -y \
export UNICAEN_IMAGE_TMP_DIR=/tmp/docker-unicaen-image
git clone https://git.unicaen.fr/open-source/docker/unicaen-image.git ${UNICAEN_IMAGE_TMP_DIR}
cd ${UNICAEN_IMAGE_TMP_DIR}
source Dockerfile.sh
. Dockerfile.sh ${PHP_VERSION}
cd ${DIR}
cd ${APP_DIR}
# NB: Variables d'env positionnées par ${UNICAEN_IMAGE_TMP_DIR}/Dockerfile.sh
# APACHE_CONF_DIR=/etc/apache2 \
# PHP_CONF_DIR=/etc/php/7.0
# PHP_CONF_DIR=/etc/php/$1
# Configuration Apache et FPM
cp docker/apache-ports.conf ${APACHE_CONF_DIR}/ports.conf
cp docker/apache-site.conf ${APACHE_CONF_DIR}/sites-available/sygal-import-ws.conf
cp docker/apache-site-ssl.conf ${APACHE_CONF_DIR}/sites-available/sygal-import-ws-ssl.conf
cp docker/fpm/pool.d/app.conf ${PHP_CONF_DIR}/fpm/pool.d/sygal-import-ws.conf
cp docker/fpm/conf.d/app.ini ${PHP_CONF_DIR}/fpm/conf.d/
cp docker/apache-site.conf ${APACHE_CONF_DIR}/sites-available/app.conf
cp docker/apache-site-ssl.conf ${APACHE_CONF_DIR}/sites-available/app-ssl.conf
cp docker/fpm/pool.d/app.conf ${PHP_CONF_DIR}/fpm/pool.d/app.conf
cp docker/fpm/conf.d/app.ini ${PHP_CONF_DIR}/fpm/conf.d/90-app.ini
sed -i -re 's/SetEnv APPLICATION_ENV "(development|test)"/SetEnv APPLICATION_ENV "production"/' \
${APACHE_CONF_DIR}/sites-available/app-ssl.conf
a2ensite sygal-import-ws sygal-import-ws-ssl && \
service php7.0-fpm reload
a2ensite app app-ssl && \
service apache2 reload && \
service php${PHP_VERSION}-fpm reload
# Installation du web service `sygal-import-ws`
Installation du web service `sygal-import-ws`
=============================================
## Applicatif
Applicatif
----------
### Première obtention des sources et installation du serveur
Sur un serveur Debian Stretch, lancez les commandes suivantes pour obtenir les sources du WS :
*NB: la procédure proposée ici part d'un serveur *Debian Stretch* tout nu et couvre l'installation de tous les packages
requis.* Si ce n'était pas le cas, merci de le signaler.
En `root` sur votre serveur, pour obtenir les sources du WS, lancez l'une des commandes suivantes en fonction
du site sur lequel vous lisez la présente page :
```bash
git clone https://git.unicaen.fr/open-source/sygal-import-WS.git /var/www/sygal-import-WS
# Si vous êtes sur git.unicaen.fr :
git clone https://git.unicaen.fr/open-source/sygal-import-ws.git /app
# Si vous êtes sur github.com :
git clone https://github.com/EsupPortail/sygal-import-ws.git /app
```
*NB: merci de respecter dans un premier temps le choix de `/app` comme répertoire d'installation.
Libre à vous une fois que tout fonctionne de changer d'emplacement et de modifier en conséquence les configs
nécessaires.*
### Configuration du serveur
Ensuite, placez-vous dans le répertoire des sources et jetez un oeil au script `Dockerfile.sh`.
Ce script est en quelque sorte l'équivalent du `Dockerfile` du WS traduit en bash.
(Vous y verrez que le dépôt git d'une image Docker Unicaen est cloné pour lancer
son script `Dockerfile.sh` qui est lui aussi l'équivalent du `Dockerfile` de l'image
traduit en bash.)
Lancez le script `Dockerfile.sh` :
```bash
cd /var/www/sygal-import-WS
source Dockerfile.sh
cd /app
bash Dockerfile.sh 7.0
```
Ensuite, vérifiez et ajustez si besoin sur votre serveur les fichiers de configs suivants,
créés par le script `Dockerfile.sh` :
- ${APACHE_CONF_DIR}/ports.conf
- ${APACHE_CONF_DIR}/sites-available/sygal-import-ws.conf
- ${APACHE_CONF_DIR}/sites-available/sygal-import-ws-ssl.conf
- ${PHP_CONF_DIR}/fpm/pool.d/sygal-import-ws.conf
- ${PHP_CONF_DIR}/fpm/conf.d/
- ${APACHE_CONF_DIR}/sites-available/app.conf
- ${APACHE_CONF_DIR}/sites-available/app-ssl.conf
- ${PHP_CONF_DIR}/fpm/pool.d/app.conf
- ${PHP_CONF_DIR}/fpm/conf.d/90-app.ini
NB: Vérifiez dans le script `Dockerfile.sh` que vous venez de lancer mais normalement
`APACHE_CONF_DIR=/etc/apache2` et `PHP_CONF_DIR=/etc/php/7.0`.
......@@ -83,41 +99,24 @@ doivent être complétés puis renommés :
- **database.local.php.dist** : qui est utilisé pour la connection à la BDD.
- clés `host`, `dbname`, `port`, `user`, `password` : les infos d'accès à la BDD.
Une fois ces fichiers complétés, changez leur extension `.php.dist` en `.php`.
Une fois ces fichiers complétés, supprimez l'extension `.dist`, ex :
```bash
cp -n local.php.dist local.php
cp -n database.local.php.dist database.local.php
```
### Configuration PHP pour le WS
Créez/corrigez le fichier de config PHP `/etc/php/7.0/fpm/conf.d/99-sygal-import-WS.ini` comme suit :
Si vous êtes sur un serveur de PROD, corrigez les lignes suivantes du fichier de config PHP
`/etc/php/7.0/fpm/conf.d/90-app.ini` :
date.timezone = Europe/Paris
short_open_tag = Off
expose_php = Off
#display_startup_errors = On
#error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
display_errors = Off
# NB: ne peut-être supérieur au memory_limit du php.ini
memory_limit = 256M
;opcache.error_log=/var/log/php_opcache_error.log
...
error_reporting = 0
...
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 8
opcache.max_wasted_percentage = 5
opcache.max_accelerated_files = 16000
; http://php.net/manual/en/opcache.configuration.php#ini.opcache.revalidate-freq
; defaults to zend opcache checking every 180 seconds for PHP file changes
; set to zero to check every second if you are doing alot of frequent
; php file edits/developer work
; opcache.revalidate_freq=0
opcache.revalidate_freq = 180
opcache.fast_shutdown = 0
opcache.enable_cli = 0
opcache.save_comments = 1
opcache.enable_file_override = 1
opcache.validate_timestamps = 1
opcache.huge_code_pages = 0
...
xdebug.enable = 0
### Interface d'admin Apigility
......@@ -127,16 +126,13 @@ Assurez-vous de bien désactiver le mode développement :
composer development-disable
```
Pour passer en mode développement et ouvrir l'accès à cette interface de modification du WS :
```bash
composer development-enable
```
## Base de données
Base de données
---------------
Le WS interroge des vues que vous devez créer dans la base de données de votre logiciel de scolarité (Apogée, Physalis), ou autre part
si c'est possible, à vous de voir.
Le WS interroge des vues que vous devez créer dans la base de données de votre logiciel de scolarité (Apogée, Physalis),
ou autre part si c'est possible, à vous de voir.
En fonction du logiciel de scolarité que votre établissement utilise, intéressez-vous dans le répertoire [`data/sql`](data/sql)
à l'un des répertoires suivants :
......@@ -147,3 +143,20 @@ Chacun des répertoires contient :
- Un script pour créer les vues communes à tous les établissements ayant le logiciel de scolarité en question.
- Un script pour créer les vues propres à un établissement en particulier.
Si votre établissement ne figure pas dans la liste, il faudra écrire les vues adaptées à votre contexte.
Réseau
------
Vous devez autoriser le serveur sur lequel est installé le WS à être interrogé par le serveur sur lequel est installé
SyGAL.
Il est conseillé de restreindre cette autorisation à cette seule adresse IP d'origine.
Test
----
Reportez-vous au [README.md](README.md) pour tester l'appel du WS en ligne de commande depuis le serveur
sur lequel est installé SyGAL.
......@@ -19,12 +19,7 @@ return [
'authentication' => [
'adapters' => [
'basic' => [
'adapter' => \ZF\MvcAuth\Authentication\HttpAdapter::class,
'options' => [
'accept_schemes' => [
0 => 'basic',
],
'realm' => 'api',
'htpasswd' => __DIR__ . '/../users.htpasswd',
],
],
......
This diff is collapsed.
......@@ -6,17 +6,22 @@
-- Web Service d'import de données
-- -------------------------------
--
-- Vues Apogée UCN.
-- Vues Apogée propre à votre établissement, à personnaliser.
--
--
-- Vue fournissant les "variables d'environnement" requis par SyGAL :
-- - Adresse mail de l'assistance utilisateur
-- - Adresse mail de contact de la BU
-- - Adresse mail de contact du bureau des doctorats
--
create or replace view SYGAL_VARIABLE_MANU as
select
'apogee' as source_id,
'EMAIL_ASSISTANCE' as id,
'EMAIL_ASSISTANCE' as cod_vap,
'Adresse mail de l''assistance utilisateur' as lib_vap,
'assistance-sygal@unicaen.fr' as par_vap,
'assistance-sygal@univ.fr' as par_vap, -----------------------------> à personnaliser
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
......@@ -26,7 +31,7 @@ create or replace view SYGAL_VARIABLE_MANU as
'EMAIL_BU' as id,
'EMAIL_BU' as cod_vap,
'Adresse mail de contact de la BU' as lib_vap,
'scd.theses@unicaen.fr' as par_vap,
'bu@univ.fr' as par_vap, ------------------------------------------> à personnaliser
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
......@@ -36,19 +41,25 @@ create or replace view SYGAL_VARIABLE_MANU as
'EMAIL_BDD' as id,
'EMAIL_BDD' as cod_vap,
'Adresse mail de contact du bureau des doctorats' as lib_vap,
'recherche.doctorat@unicaen.fr' as par_vap,
'bdd@univ.fr' as par_vap, -----------------------------------------> à personnaliser
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
/
--
-- Vue traduisant les codes rôles en usage dans votre établissement vers les codes compris par SyGAL.
--
create or replace view SYGAL_ROLE_TR as
select 'A', 'A' from dual union
select 'B', 'B' from dual union
select 'C', 'C' from dual union
select 'D', 'D' from dual union
select 'K', 'K' from dual union
select 'M', 'M' from dual union
select 'P', 'P' from dual union
select 'R', 'R' from dual
with tmp(FROM_COD_ROJ, TO_COD_ROJ) as (
select 'A', 'A' from dual union -- A : Membre absent
select 'B', 'B' from dual union -- B : Co-encadrant
select 'C', 'C' from dual union -- C : Chef de laboratoire
select 'D', 'D' from dual union -- D : Directeur de thèse
select 'K', 'K' from dual union -- K : Co-directeur de thèse
select 'M', 'M' from dual union -- M : Membre du jury
select 'P', 'P' from dual union -- P : Président du jury
select 'R', 'R' from dual -- R : Rapporteur du jury
)
select * from tmp
/
--
--
-- SyGAL
-- =====
--
-- Web Service d'import de données
-- -------------------------------
--
-- Vues Apogée ULHN.
--
create or replace view SYGAL_VARIABLE_MANU as
select
'apogee' as source_id,
'EMAIL_ASSISTANCE' as id,
'EMAIL_ASSISTANCE' as cod_vap,
'Adresse mail de l''assistance utilisateur' as lib_vap,
'assistance-sygal@univ-lehavre.fr' as par_vap,
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
union all
select
'apogee' as source_id,
'EMAIL_BU' as id,
'EMAIL_BU' as cod_vap,
'Adresse mail de contact de la BU' as lib_vap,
'scd.theses@univ-lehavre.fr' as par_vap,
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
union all
select
'apogee' as source_id,
'EMAIL_BDD' as id,
'EMAIL_BDD' as cod_vap,
'Adresse mail de contact du bureau des doctorats' as lib_vap,
'recherche.doctorat@univ-lehavre.fr' as par_vap,
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
/
create or replace view SYGAL_ROLE_TR as
select 'A', 'A' from dual union
select 'B', 'B' from dual union
select 'C', 'C' from dual union
select 'D', 'D' from dual union
select 'K', 'K' from dual union
select 'M', 'M' from dual union
select 'P', 'P' from dual union
select 'R', 'R' from dual
/
--
--
-- SyGAL
-- =====
--
-- Web Service d'import de données
-- -------------------------------
--
-- Vues Apogée URN.
--
create or replace view SYGAL_VARIABLE_MANU as
select
'apogee' as source_id,
'EMAIL_ASSISTANCE' as id,
'EMAIL_ASSISTANCE' as cod_vap,
'Adresse mail de l''assistance utilisateur' as lib_vap,
'assistance-sygal@univ-rouen.fr' as par_vap,
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
union all
select
'apogee' as source_id,
'EMAIL_BU' as id,
'EMAIL_BU' as cod_vap,
'Adresse mail de contact de la BU' as lib_vap,
'scd.theses@univ-rouen.fr' as par_vap,
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
union all
select
'apogee' as source_id,
'EMAIL_BDD' as id,
'EMAIL_BDD' as cod_vap,
'Adresse mail de contact du bureau des doctorats' as lib_vap,
'recherche.doctorat@univ-rouen.fr' as par_vap,
to_date('2017-01-01', 'YYYY-MM-DD') as DATE_DEB_VALIDITE,
to_date('9999-12-31', 'YYYY-MM-DD') as DATE_FIN_VALIDITE
from dual
/
create or replace view SYGAL_ROLE_TR(FROM_COD_ROJ, TO_COD_ROJ) as
select 'A', 'R' from dual union -- rapporteur du jury
select 'C', 'K' from dual union -- co-dir
select 'D', 'D' from dual union -- dir
select 'E', 'M' from dual union -- examinateur => membre du jury (discutable)
select 'M', 'M' from dual union -- membre du jury
select 'N', 'B' from dual union -- co-encadrant
select 'P', 'P' from dual union -- président du jury
select 'R', 'R' from dual -- rapporteur du jury
/
--
--
-- SyGAL
-- =====
--
-- Web Service d'import de données
-- -------------------------------
--
-- Vue matérialisée interrogeant Apogée et l'annuaire LDAP (grâce au package UCBN_LDAP) pour obtenir
-- les adresses électroniques.
--
-- drop materialized view SYGAL_MV_EMAIL
--/
CREATE MATERIALIZED VIEW SYGAL_MV_EMAIL
refresh complete USING TRUSTED CONSTRAINTS
START WITH SYSDATE NEXT SYSDATE + 1/24/6 as
select sysdate as last_update, tmp.*
from (
select
-- doctorants
to_char(ind.cod_etu) as id,
-- Numero etudiant
ucbn_ldap.etu2mail(ind.cod_etu) as email -- Mail etudiant
from these_hdr_sout ths
join diplome dip on dip.cod_dip = ths.cod_dip
join typ_diplome tpd on tpd.cod_tpd_etb = dip.cod_tpd_etb
join individu ind
on ind.cod_ind = ths.cod_ind --and ind.cod_etu != 21009539 -- Exclusion du compte de test Aaron AAABA
where ths.cod_ths_trv = '1' -- Exclusion des travaux
and dip.cod_tpd_etb in ('39', '40')
and tpd.eta_ths_hdr_drt = 'T' -- Inscription en these
and tpd.tem_sante = 'N' -- Exclusion des theses d exercice
and ind.cod_etu is not null -- oui, oui, ça arrive
union
select *
from (
-- acteurs
with acteur as (
select
ths.cod_ths,
'D' as cod_roj,
ths.cod_per_dir as cod_per,
ths.cod_etb_dir as cod_etb,
ths.cod_cps_dir as cod_cps,
null as tem_rap_recu,
null as cod_roj_compl
from these_hdr_sout ths
where ths.cod_ths_trv = '1' and ths.cod_per_dir is not null
union
select
ths.cod_ths,
'D' as cod_roj,
ths.cod_per_cdr as cod_per,
ths.cod_etb_cdr as cod_etb,
ths.cod_cps_cdr as cod_cps,
null as tem_rap_recu,
null as cod_roj_compl
from these_hdr_sout ths
where ths.cod_ths_trv = '1' and ths.cod_per_cdr is not null
union
select
ths.cod_ths,
'D' as cod_roj,
ths.cod_per_cdr2 as cod_per,
ths.cod_etb_cdr2 as cod_etb,
ths.cod_cps_cdr2 as cod_cps,
null as tem_rap_recu,
null as cod_roj_compl
from these_hdr_sout ths
where ths.cod_ths_trv = '1' and ths.cod_per_cdr2 is not null
union
select
trs.cod_ths,
'R' as cod_roj,
trs.cod_per,
null as cod_etb,
null as cod_cps,
trs.tem_rap_recu,
null as cod_roj_compl
from ths_rap_sou trs
union
select
tjp.cod_ths,
'M' as cod_roj,
tjp.cod_per,
tjp.cod_etb,
tjp.cod_cps,
null as tem_rap_recu,
case when tjp.cod_roj in ('P', 'B', 'A')
then tjp.cod_roj
else null end as cod_roj_compl
from ths_jur_per tjp
)
select distinct
coalesce(regexp_replace(per.num_dos_har_per, '[^0-9]', ''), 'COD_PER_' || act.cod_per) as id,
-- Code Harpege ou Apogee de l acteur
case when per.num_dos_har_per is null
then null
else ucbn_ldap.uid2mail('p' || per.num_dos_har_per) end as email -- Mail acteur
from acteur act
join role_jury roj on roj.cod_roj = act.cod_roj
join personnel per on per.cod_per = act.cod_per
)
) tmp
where email is not null
/
\ No newline at end of file
......@@ -6,7 +6,7 @@
-- Web Service d'import de données
-- -------------------------------
--
-- Vues Physalis INSA.
-- Vues Physalis propre à votre établissement, à personnaliser.
--
/*
......
v1.2.5
======
Sources PHP
-----------
Sur le serveur, placez-vous dans le répertoire du web service (sans doute `/var/www/sygal-import-ws`)
puis lancez les commandes suivantes pour installer la nouvelle version :
```bash
git fetch && git fetch --tags && git checkout --force 1.2.5 && bash install.sh
```
Selon le moteur PHP que vous avez installé, rechargez le service, exemple :
- php7.0-fpm : `service php7.0-fpm reload`
- apache2-mod-php7.0 : `service apache2 reload`
Base de données
---------------
### Apogée
La vue `SYGAL_THESE` doit être mise à jour car la colonne `COD_ANU_PRM_IAE` est redondante du fait qu'une vue
`SYGAL_THESE_ANNEE_UNIV` dédiée existe. De plus, cette colonne remontait une année de 1ere inscription erronée en cas
de changement de discipline.
```sql
create view SYGAL_THESE as
with inscription_administrative as (
select distinct
ths.cod_ind,
iae.cod_dip,
iae.cod_vrs_vdi
from these_hdr_sout ths
join ins_adm_etp iae on iae.cod_ind = ths.cod_ind and ( iae.cod_dip, iae.cod_vrs_vdi ) in ( ( ths.cod_dip, ths.cod_vrs_vdi ), ( ths.cod_dip_anc, ths.cod_vrs_vdi_anc ) )
join diplome dip on dip.cod_dip = iae.cod_dip
join typ_diplome tpd on tpd.cod_tpd_etb = dip.cod_tpd_etb
where ths.cod_ths_trv = '1' -- Exclusion des travaux
and iae.eta_iae = 'E' -- Inscription administrative non annulee
and iae.eta_pmt_iae = 'P' -- Inscription administrative payee
and dip.cod_tpd_etb in ( '39', '40' )
and tpd.eta_ths_hdr_drt = 'T' -- Inscription en these
and tpd.tem_sante = 'N' -- Exclusion des theses d exercice
),
hierarchie_structures as (
select
cod_cmp_inf,
cod_cmp_sup
from cmp_cmp
where connect_by_isleaf = 1
connect by prior cod_cmp_sup = cod_cmp_inf
),
ancienne_these as (
select distinct
cod_ind,
cod_dip_anc,
cod_vrs_vdi_anc,
'A' eta_ths
from these_hdr_sout
where cod_ths_trv = '1'
and cod_dip_anc is not null
)
select
'apogee' as source_id, -- Id de la source
---------- Enregistrement de la these --------
ths.cod_ths as id, -- Identifiant de la these
case when ths.eta_ths = 'S' and nvl ( ths.dat_sou_ths, sysdate + 1 ) > sysdate
then 'E' else ths.eta_ths end eta_ths, -- Etat de la these (E=En cours, A=Abandonnee, S=Soutenue, U=Transferee)
ind.cod_etu as doctorant_id, -- Identifiant du doctorant
ths.cod_dis, -- Code discipline
dis.lib_int1_dis, -- Libellé discipline
ths.lib_ths, -- Titre de la these
ths.cod_lng, -- Code langue etrangere du titre
ths.dat_deb_ths, -- Date de 1ere inscription
edo.cod_nat_edo as ecole_doct_id, -- Identifiant de l'ecole doctorale
ths.cod_eqr as unite_rech_id, -- Identifiant de l'unité de recherche principale
----------- Cotutelle ----------
pay.lib_pay, -- Denomination pays de cotutelle
nvl ( etb.lib_web_etb, etb.lib_etb ) lib_etb_cot, -- Denomination etablissement de cotutelle
ths.tem_avenant, -- Avenant a la convention de cotutelle (O/N)