<?php
// WebJaxe, Observatoire de Paris, licence GPL
// encodage : UTF-8

//--------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------- requetes SQL utilisateurs -------------------------------------------------------------
//--------------------------------------------------------------------------------------------------------------------------------------------

// Effectue une requête sur la table des utilisateurs
// Sélectionne les utilisateurs avec les champs id, login et motdepasse donnés en paramètres
// (sélectionne tous les utilisateurs si aucune valeur de champ n'est donnée)
function requete_lire_utilisateurs($id_utilisateur=false, $login_utilisateur=false, $motdepasse=false, $status=false)
{
    $requete = "SELECT * FROM utilisateurs";
    if ($id_utilisateur!=false || $login_utilisateur!=false || $motdepasse!=false || $status!=false)
        $requete .= " WHERE ";
    if ($id_utilisateur!=false)
        $requete .= "id='$id_utilisateur'";
    if ($login_utilisateur!=false) {
        if ($id_utilisateur!=false)
            $requete .= " AND ";
        $requete .= "login='$login_utilisateur'";
    }
    if ($motdepasse!=false) {
        if ($id_utilisateur!=false || $login_utilisateur!=false)
            $requete .= " AND ";
        $requete .= "motdepasse='$motdepasse'";
    }
    if ($status!=false) {
        if ($id_utilisateur!=false || $login_utilisateur!=false || $motdepasse!=false)
            $requete .= " AND ";
        $requete .= "status='$status'";
    }
    $requete .= " ORDER BY nom";
    $resultat = executer_requete($requete);
    return($resultat);
}

function requete_ajouter_utilisateur($prenom, $nom, $login, $status, $motdepasse, $langue, $email)
{
    if ($prenom!=false && $nom!=false && $login!=false && $motdepasse!=false && $status!=false && $langue!=false)
    {
        $requete = "INSERT INTO utilisateurs VALUES (\"\",'$prenom','$nom','$login','$status','$motdepasse','$langue','$email')";
        $resultat = executer_requete($requete);
        return($resultat);
    }
    return(false);
}

function requete_modifier_utilisateur($id, $prenom, $nom, $login, $status, $motdepasse, $langue, $email)
{
    $requete = "UPDATE utilisateurs SET ";
    $premier = true;
    foreach (array('prenom', 'nom', 'login', 'status', 'motdepasse', 'langue', 'email') as $champ) {
        if ($$champ != false) {
            if ($premier)
                $premier = false;
            else
                $requete .= ', ';
            $requete .= $champ."='".$$champ."'";
        }
    }
    $requete .= " WHERE id='$id'";
    $resultat = executer_requete($requete);
    return($resultat);
}

function requete_supprimer_utilisateur($id_utilisateur)
{
    if ($id_utilisateur == false)
        return(false);
    $requete = "DELETE FROM utilisateurs WHERE utilisateurs.id= '$id_utilisateur'";
    $resultat = executer_requete($requete);
    return($resultat);
}

//---------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------- requetes SQL demandes inscription ------------------------------------------------------
//---------------------------------------------------------------------------------------------------------------------------------------------

function requete_lire_inscription($id_demande=false, $login=false)
{
    $requete = "SELECT * FROM demandes_inscription";
    if ($id_demande!=false || $login!=false)
        $requete .= " WHERE ";
    if ($id_demande!=false)
        $requete .= "id = '$id_demande'";
    if ($login!=false) {
        if ($id_demande!=false)
            $requete .= " AND ";
        $requete .= "login = '$login'";
    }
    $resultat = executer_requete($requete);
    return($resultat);
}


function requete_ecrire_inscription($prenom, $nom, $login, $status, $motdepasse, $langue, $email)
{
    if ($prenom!=false && $nom!=false && $login!=false && $status!=false && $motdepasse!=false && $langue!=false)
    {
        $requete = "INSERT INTO demandes_inscription VALUES (\"\",\"$prenom\",\"$nom\",\"$login\",\"$status\",\"$motdepasse\",\"$langue\", \"$email\")";
    }
    $resultat = executer_requete($requete);
    return($resultat);
}


function requete_supprimer_inscription($id)
{
    $requete = "DELETE FROM demandes_inscription WHERE id = '$id'";
    $resultat = executer_requete( $requete);
    return($resultat);
}


//-------------------------------------------------------------------------------------------------------------------------------------------
//---------------------------------------------------- fonctions ----------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------------------------------------------

// retourne un tableau avec les champs de l'utilisateur
function utilisateur($id)
{
    $resultat_lire_utilisateurs = requete_lire_utilisateurs($id);
    if ( tester_resultat($resultat_lire_utilisateurs) == FALSE )
        erreur(ECHEC_DONNEES_UTILISATEURS);
    $utilisateur = lire_premier_resultat($resultat_lire_utilisateurs);
    return($utilisateur);
}


// retourne un tableau avec les champs de la demande d'inscription
function demande($id)
{
    $resultat_lire_inscription = requete_lire_inscription($id);
    if ( tester_resultat($resultat_lire_inscription) == FALSE )
        erreur(ECHEC_DONNEES_POSTULANT_UTILISATEURS);
    $utilisateur = lire_premier_resultat($resultat_lire_inscription);
    return($utilisateur);
}

// supprimer les liens avec les projets d'un utilisateur
// paramètre : un numero id de l'utilisateur
// sortie : la veleur booléenne true en cas de réussite
function supprimer_participations($id_utilisateur)
{
    $resultat_requete = requete_supprimer_participants(false, $id_utilisateur);
    if (!tester_resultat($resultat_requete))
        erreur(ECHEC_REQUETE.' supprimer_participations '.$id_utilisateur);
    return(true);
}

// Supprime l'utilisateur avec l'id en paramètre
// (tables modifiées : utilisateurs, participants)
function suprimer_utilisateur($id)
{
    supprimer_participations($id);
    $utilisateur = utilisateur($id);
    $resultat_suppression = requete_supprimer_utilisateur($id);
    if ( tester_resultat($resultat_suppression) == FALSE )
        erreur(ECHEC_SUPRIMER_UTILISATEUR);
    return(true);
}


// Renvoie un tableau de tous les utilisateurs, avec un tableau des champs pour chaque utilisateur,
// ou FALSE s'il n'y a pas d'utilisateur
function liste_des_utilisateurs()
{
    // Pour les utilisateurs déjà inscrits
   $resultat_requete = requete_lire_utilisateurs();
    if ( tester_resultat($resultat_requete) == FALSE )
        erreur(ECHEC_LISTE_UTILISATEUR);
    $liste = lire_le_resultat($resultat_requete);
    return($liste);
}


// Renvoie un tableau des utilisateurs administrateurs
function liste_administrateurs()
{
    // Trouver les utilisateurs avec un status administrateur
   $resultat_requete = requete_lire_utilisateurs(false, false, false, 'administrateur');
    if ( tester_resultat($resultat_requete) == FALSE )
        erreur(ECHEC_LISTE_UTILISATEUR);
    $liste = lire_le_resultat($resultat_requete);
    return($liste);
}


// Renvoie un tableau des demandes d'inscription, avec un tableau des champs pour chaque demande,
// ou FALSE s'il n'y a pas de demande d'inscription.
function liste_des_demandes()
{
    // Pour les utilsiateurs en attente de validation    
    $resultat_liste_des_demandes = requete_lire_inscription();
    if ( tester_resultat($resultat_liste_des_demandes) == FALSE )
        erreur(ECHEC_LISTE_DEMANDES);
    $liste_des_demandes = lire_le_resultat($resultat_liste_des_demandes);
    return $liste_des_demandes;
}



function valider_utilisateur($id)
{
    // On recupère les données de l'utilisateur
    $utilisateur = demande($id);
    $login = $utilisateur['login'];
    $prenom = $utilisateur['prenom'];
    $nom = $utilisateur['nom'];
    $motdepasse = $utilisateur['motdepasse'];
    $status = $utilisateur['status'];
    $langue = $utilisateur['langue'];
    $email = $utilisateur['email'];
    // On vérifie si l'utilisateur n'existe pas déjà
    $resultat_lire_utilisateur = requete_lire_utilisateurs(false, $login);
    if ( tester_resultat($resultat_lire_utilisateur) == FALSE )
        erreur(ECHEC_UTILISATEUR_EXISTANT);
    if ( nombre_de_lignes($resultat_lire_utilisateur) != 0 )
    {
        erreur(UTILISATEUR_EXISTANT);
    }
    else
    {  
        // Création de l'utilisateur
        $resultat_creer_utlisateur = requete_ajouter_utilisateur($prenom, $nom, $login, $status, $motdepasse, $langue, $email);
        // A-t-on réussi à créer un utilisateur?
        if ( ! tester_resultat($resultat_creer_utlisateur) )
            erreur(ECHEC_CREATION_UTILISATEUR);
            
        // Envoi de mail à l'utilisateur si email existe
        $from = $_SESSION['email_admin'];
        if ($from != '' && $email != '') {
            $to = $email;
            $subject = WJ_INSCRIPTION_VALIDEE;
            $message = BONJOUR." ".ucfirst($prenom)." ".strtoupper($nom).",\n\n".VOTRE_INSCRIPTION_VALIDEE."\n\n".VOTRE_LOGIN." ".$login;
            envoi_mail($from, $to, $subject, $message);
        }
        
        // On retire l'utilisateur de la liste des utilisateurs en attente d'inscription
        $resultat_suppression_inscription = requete_supprimer_inscription($id);
        if ( ! tester_resultat($resultat_suppression_inscription) )
            erreur(ECHEC_SUPPRESSION_UTILISATEUR);
    }
}


function modifier_utilisateur($id, $prenom, $nom, $login, $status, $motdepasse, $langue, $email)
{
    if ( $id == false || ($prenom == false && $nom == false && $login == false &&
            $status == false && $motdepasse == false && $langue == false && $email == false) )
        erreur(VARIABLES_VIDES);
    $resultat_requete = requete_modifier_utilisateur($id, $prenom, $nom, $login, $status, $motdepasse, $langue, $email);
    if ( tester_resultat($resultat_requete) == FALSE )
        erreur(ERREUR_MODIF_UTILISATEUR);
    else
        return(true);
}


function refuser_utilisateur($id)
{
    $resultat_suppression = requete_supprimer_inscription($id);
    if ( tester_resultat($resultat_suppression) == FALSE )
        erreur(ERREUR_REFUS);
    else
        return(true);
}



//paramètres : une chaine de caractère login, une chaine de caractere passwd
//sortie : tableau des champs de l'utilisateur correspondant, ou la valeur booléenne false
function se_loguer($login, $passwd)
{
    // On recupère le login et le mot de passe depuis le formulaire et on effectue la requête
    // pour trouver l'utilisateur correspondant
    $resultat_lire_utilisateurs = requete_lire_utilisateurs(false, $login, $passwd);
    if ( tester_resultat($resultat_lire_utilisateurs) == FALSE )
        erreur(ECHEC_LISTE_UTILISATEUR);
    return lire_premier_resultat($resultat_lire_utilisateurs);
}


// vérifie qu'un utilisateur a le droit d'éditer une contribution
// sortie : true si autorisé, sinon lance une erreur
function verifier_l_utilisateur($id_utilisateur, $id_contribution=false, $label_contrib=false)
{
    if ( isset($_SESSION['id_utilisateur']) == FALSE )
        erreur(PAS_AUTORISE);
    
    $id_utilisateur = $_SESSION['id_utilisateur'];
    if ($id_contribution == false && $label_contrib == false)
        erreur(PAS_AUTORISE);
    if ($id_contribution == false && $label_contrib != false)
        $id_contribution = id_contribution($label_contrib);
    $id_projet = id_projet_contribution($id_contribution);
    $projets_utilisateur = liste_des_projets_utilisateur($id_utilisateur, true); // avec les sous-projets
    foreach ($projets_utilisateur as $projet) {
        if ($projet['id'] == $id_projet)
            return(true);
    }
    erreur(PAS_AUTORISE);
}

function creation_compte_temporaire($prenom, $nom, $login, $status, $motdepasse, $langue, $email)
{
    lire_fichier_configuration("../site_config/site_config.xml");
    $resultat_lire_utilisateurs = requete_lire_utilisateurs(false, $login);
    if ( tester_resultat($resultat_lire_utilisateurs) == FALSE )
        erreur(ECHEC_REQUETE);
    $resultat_lire_inscriptions = requete_lire_inscription(false, $_POST['login']);
    if ( tester_resultat($resultat_lire_inscriptions) == FALSE )
        erreur(ECHEC_REQUETE);
    if ( nombre_de_lignes($resultat_lire_utilisateurs) != 0 || nombre_de_lignes($resultat_lire_inscriptions) != 0 )
    {
       erreur(ERREUR_LOGIN_EXISTANT);
    }
    else
    {          
        // Création de l'utilisateur
        $resultat_ecrire_inscription = requete_ecrire_inscription($prenom, $nom, $login, $status, $motdepasse, $langue, $email);
        // A-t-on réussi à créer un utilisateur?
        return tester_resultat($resultat_ecrire_inscription);
    }
}

// fusionne 2 ensembles d'utilisateurs en évitant les doublons
function fusion_utilisateurs($liste1, $liste2) {
    $liste = $liste1;
    foreach ($liste2 as $u2) {
        $id = $u2['id'];
        $trouve = false;
        foreach ($liste1 as $u1) {
            if ($u1['id'] == $id) {
                $trouve = true;
                break;
            }
        }
        if (!$trouve)
            array_push($liste, $u2);
    }
    return($liste);
}

?>
