#            ScoDoc - Gestion de la scolarité - Version ScoDoc 8

(c) Emmanuel Viennet 1999 - 2021 (voir LICENCE.txt)


Installation: voir instructions à jour sur <https://scodoc.org>

Documentation utilisateur: <https://scodoc.org>

## Branche ScoDoc 8 expérimentale

N'utiliser que pour les développements et tests.

La version ScoDoc8 est basée sur Flask (au lieu de Zope) et sur **python 3.7+**.
Elle ne sera pas mise en production, c'est une version de développement pour le passage à Python 3.

De très nombreux changements sont susceptibles d'affecter l'API, mais on s'efforce à ce que rien 
ne soit visible des utilisateurs Web.

**Work in Progress (WIP)**: développement en cours, certaines pages fonctionnent, d'autres pas: 
merci de signaler les erreurs.

### État actuel (23 juillet 21)

 - serveur de développement fonctionnel (pas testé en mode "production" sous gunicorn+nginx).

 - logs à revoir

 - pas d'import/export excel.

 - pas de pages gestion utilisateurs.

**En cours:**
 
 - tests, formulaires utilisateurs, logging.
 

## Installation (sur Debian 10 / python3.7)

On peut installer à partir de zéro, ou sur une machine ayant déjà un ScoDoc 7 et migrer les données.

### Installation

#### Arrêter et renommer ScoDoc7
**Important**: si vous avez un ScoDoc7 installé sur ce serveur, le mettre à jour, l'arrêter et renommer son répertoire avant de commencer l'installation de ScoDoc 8:

 1. S'assurer que l'installation ScoDoc 7 est à jour

    sudo su
    cd /opt/scodoc/Products/ScoDoc/config
    ./upgrade.sh

 2. Arrêter le service ScoDoc 7

    systemctl stop scodoc

    S'assurer qu'il est bien stoppé (`ps auxw`, ...), sans qui la migration va échouer.

 3. Renommer le répertoire de ScoDoc 7:

    sudo su
    mv /opt/scodoc /opt/scodoc7

Les données pourront être migrées après installation la nouvelle evrsion, voir plus loin.

#### Installer ScoDoc
Sur un système Linux Debian 10, en tant que `root`:

 - Charger la dernière release depuis https://scodoc.org/git/viennet/ScoDoc/releases

 - Déplacer ou copier le fichier `ScoDoc-x.y.z.tgz` dans `/opt` et le décomprimer:

    sudo su
    cd /opt; tar xf - ScoDoc-x.y.z.tgz # remplacer x.y.z par votre version

 - Lancer le script d'installation: 

    cd /opt/scodoc/tools
    ./install_debian10.sh

ce script crée un compte utilisateur "scodoc".

Note: si vous installez sur une machine déjà configurée pour ScoDoc 7, il 
est inutile de reconfigurer la messagerie et le firewall.

### Bases de données
ScoDoc8 utilise les bases de département de ScoDoc7, mais une nouvelle base
utilisateurs nommée `SCO8USERS` (au lieu de `SCOUSERS`), qui est manipulée 
via `sqlalchemy`.

### Configuration de la base utilisateurs

Lancer le script:

    su postgres 
    cd /opt/scodoc/tools
    ./create_database.sh

Ce script crée une base nommée `SCO8USERS`, appartenant à l'utilisateur (role) postgres `scodoc`.
Cet utilisateur est automatiquement créé si nécessaire.

### Initialisation de la base utilisateur par Flask

En tant qu'utilisateur `scodoc`:

    su scodoc # si besoin
    flask db init
    flask db migrate -m "users and roles tables"
    flask db upgrade

Puis initialisation de l'appli:

    flask user-db-init

Et saisie du mot de passe `admin`:

    flask user-password admin

On peut ensuite créer des utilisateurs tests avec:

    flask user-create toto Ens RT
    flask user-create tata Ens Info

ou mieux, importer les utilisateurs de ScoDoc7 avec:

    flask user-db-import-scodoc7

(on peut le faire plus tard avec le script de migration décrit plus bas)
(Note: la base `SCOUSERS` de ScoDoc7 n'est pas affectée, ScoDoc8 utilise une base séparée, nommée `SCO8USERS`).

Pour créer un utilisateur "super admin", c'est à dire admin dans tous les départements:

    flask user-create admin1 SuperAdmin @all

## Migration d'une installation ScoDoc 7

Le script `migrate_from_scodoc7.sh` va déplacer les donneés et reconfigurer les bases de données
de votre installation ScoDoc 7 pour passer à ScoDoc 8 (*ne pas utiliser en production !*).
**Les modifications effectuées sont sans retour: ScoDoc 7 ne fonctionnera plus !**

 1. Lancer le script de migration
  ScoDoc 8 doit avoir été installé comme expliqué plus haut.

    sudo su
    cd /opt/scodoc/tools
    ./migrate_from_scodoc7.sh


## Lancement serveur (développement, sur VM Linux)

En tant qu'utilisateur `scodoc` (pour avoir accès aux bases départements de ScoDoc7):

Dans un terminal, lancer le serveur:
 
    export FLASK_APP=scodoc.py
    export FLASK_ENV=development
    flask run --host=0.0.0.0

## Organisation des fichiers

L'installation comporte les fichiers de l'application, sous `/opt/scodoc/`, et les fichiers locaux (archives, photos, configurations, logs) sous `/opt/scodoc-data`. Par ailleurs, il y a évidemment les bases de données postgresql et la configuration du système.

### Fichiers locaux
Sous `/opt/scodoc-data`, fichiers et répertoires appartienant à l'utilisateur `scodoc`. 
Ils ne doivent pas être modifiés à la main, sauf certains fichiers de configuration sous 
`/opt/scodoc-data/config`.

Le répertoire `/opt/scodoc-data` doit être régulièrement sauvegardé.

Principaux contenus:

    /opt/scodoc-data
    /opt/scodoc-data/log             # Fichiers de log ScoDoc
    /opt/scodoc-data/config          # Fichiers de configuration
                 .../config/logos    # Logos de l'établissement
                 .../config/depts    # un fichier par département
    /opt/scodoc-data/photos          # Photos des étudiants
    /opt/scodoc-data/archives        # Archives: PV de jury, maquettes Apogée, fichiers étudiants


## Tests unitaires

    pytest tests/unit

# TODO

 - page d'erreur ScoValueError
 - redirection pour authentification
 - import/export Excel