#!/bin/bash
DATELOG=$(/bin/date +%Y-%m-%d_%H-%M-%S)
LOGFILE=/var/log/envole/gepi/update-gepi.${DATELOG}.log
MUTE=$2

function log(){
    echo $1 >> $LOGFILE;
    if [ "$MUTE" != '--silent' ]
    then
        echo $1
    fi
}

function usage(){
    echo "Script de migration de gepi (en version 1.5.3 ou ultérieure) : ";
    echo " - Remplace (si besoin) la base 'gepi' par la base de données passées en paramètre";
    echo " - Lance la migration de la base grace au script fourni par l'application";
    echo " - Lance un script eole pour paufiner la migration";
    echo "";
    echo "  update-gepi [DATABASE] [OPTION]";
    echo "Le lancement de cette commande doit être suivi d'un reconfigure";
    echo "";
    echo "Lancer le script en passant le nom de la base de données à utiliser pour la migration.";
    echo "Option:";
    echo " --silent : Lance la commande en mode silencieux (pas de log dans la console)";
    echo "Cas d'utilisation:";
    echo "- Cas 1 : Si vous utilisez gepi 1.5.0, utilisez la commande suivante pour mettre à jour la base de données";
    echo "          update-gepi default";
    echo "";
    echo "- Cas 2 : Si vous utilisez une autre version de gepi, passez le nom de la base de données associées à votre installation de gepi";
    echo "          update-gepi gepi151";
    echo "          Ici la base de données est celle d'un gepi 1.5.1 dont la base de données se nomme gepi151.";
}

function dbtofile(){
    if [ ! -f $2 ]
    then
        mysqldump --defaults-file=/etc/mysql/debian.cnf $1 > $2
    fi
}

function filetodb(){
    if [ -f $2 ]
    then
        mysql --defaults-file=/etc/mysql/debian.cnf $1 < $2
    fi
}

function dbtodb(){
    mysqldump --defaults-file=/etc/mysql/debian.cnf $1 | mysql --defaults-file=/etc/mysql/debian.cnf $2
}

if [ ! $1 ]
then
    usage
else
    if [[ "$1" == '-h' ]] || [[ "$1" == '--help' ]]
    then
        usage
        exit 0
    fi
    if [ "$1" == 'default' ]
    then
        BDD='gepi'
    else
        BDD=$1
    fi
    # création du répertoire de logs
    mkdir -p /var/log/envole/gepi
    mkdir -p /root/.gepi/
    echo "" > $LOGFILE
    LOCKFILE=/var/lock/gepi-update-from-$BDD
    if [ -f $LOCKFILE ]
    then
        log "Un verrou existe ($LOCKFILE) : La mise à jour de la base de données $BDD a déjà été effectuée."
        exit 0
    fi
    if [ ! -d /var/lib/mysql/$BDD ]
    then
        log "Erreur : la base de données $BDD n'existe pas"
        exit 1
    fi
    # éxécution de la mise à jour
    DATE=`date +%s`
    log "# Sauvegarde de la base gepi d'origine dans /root/.gepi/save-gepi-$DATE.sql #"
    dbtofile gepi /root/.gepi/save-gepi-$DATE.sql
    if [ $? == 0 ]
    then
        log "OK"
        log "# Modification des mots de passe sql avant mise à jour #"
        if [ -x /usr/share/eole/mysql_pwd.py ]
        then
            /usr/share/eole/mysql_pwd.py $DATE >> $LOGFILE
        else
            /usr/share/eole/sbin/mysql_pwd.py $DATE >> $LOGFILE
        fi
        if [ $BDD != 'gepi' ]
        then
            log "Remplacement de la base gepi par la base $BDD"
            dbtodb $BDD gepi
            if [ $? == 0 ]
            then
                log " + OK"
            else
                log " - Erreur"
                exit 1
            fi
        fi
        # Lancement de la mise à jour
        log "# Mise à jour de la base de données gepi #"
        cd /var/www/html/gepi/utilitaires
        /usr/bin/php maj.sh forcer >> $LOGFILE
        if [ $? != 0 ]
        then
            log "- Une erreur s'est produite à la mise à jour de la base de données gepi"
            if [ $BDD == 'gepi' ]
            then
                log " - Restauration de la base de données sauvegardée depuis le fichier /root/.gepi/save-$BDD-$DATE.sql"
                filetodb $BDD /root/.gepi/save-$BDD-$DATE.sql
                if [ $? == 0 ]
                then
                    log "  + OK" >> /var/log/envole/gepi/update-gepi.log
                else
                    log "  - Erreur" >> /var/log/envole/gepi/update-gepi.log
                fi
            else
                log "- Vous pouvez essayer de relancer la procédure avec la même commande"
            fi
        else
            #Si la mise à jour a marchée, on insère des comptes et modifie 2-3 petites choses
            log ""
            log " # Mise a jour EOLE de la base de donnees #"
            filetodb gepi /etc/sysconfig/eole/maj-gepi.sql
            if [ $? == 0 ]
            then
                log "  + OK"
                if [ "$MUTE" != '--silent' ]
                then
                    log " + La mise à jour de la base de données gepi a été effectuée avec succès, lancez un reconfigure. + "
                fi
                touch $LOCKFILE
                if [ $BDD != 'gepi' ]
                then
                    # Si on passe ici c'est qu'on a fait la manip à la main et on ne veut pas que le reconfigure passe dessus
                    touch /var/lock/gepi-update-from-gepi
                fi
            else
                log "  - Erreur"
            fi
        fi
    fi
fi
