<?php
/****************************************************************************************
 * SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV
 *
 * Version 1.0.2
 *
 * Copyright (C) 2006-2015  Sylvain FATOME
 * This program is free software; you can redistribute it and/or modify it under the terms
 * of the GNU General Public License as published by the Free Software Foundation;
 * either version 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along with this program
 * (in the directory docs);
 * if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA  02110-1301, USA.
 *
 * Contact : galawa@free.fr
 *
 * Web : http://smi.no-ip.org
 ****************************************************************************************/

// Vérification des tentatives de hack
$pos = strpos($_SERVER['PHP_SELF'], "inc.php");
if ($pos === FALSE)
    $ok_inc = TRUE;
else
    $ok_inc = FALSE;
if ($ok_inc == FALSE) header("Location: ../index.php");

/*****************************************/
/* Diverses fonctions utilisées dans SMI */
/*****************************************/

/********************************************************/
/* Stockage et récupérations diverses dans les fichiers */
/********************************************************/

/**
 * Fonction qui renvoie la civilité en fonction du code civilité
 *
 * @param $code
 * @param bool $open
 * @return string
 */
function Retournecivilite($code, $open = TRUE)
{
    global
    $db;
    $civilite = "";
    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech = "SELECT civ_desc FROM `" . TBCIV . "` WHERE civ_code='" . $db->escape($code) . "'";
    $row = $db->get_row($rech, ARRAY_A);
    if ($row) {
        $row = encode_str($row);
        extract($row);
        $civilite = str_majuscules($civ_desc);
    }
    if ($open == TRUE)
        $db->disconnect();

    return $civilite;
}

/**
 * Fonction qui renvoie un nom de créateur
 *
 * @param $code
 * @param $code_admin
 * @param bool $open
 * @return string
 */
function Retournecreateur($code, $code_admin, $open = TRUE)
{
    global
    $db;
    $createur = "";

    if ($code <> $code_admin) {
        if ($open == TRUE)
            $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

        // Récupération du niveau utilisateur
        $rexist = "SELECT * FROM `" . TBPW . "` WHERE `pw_code` = '" . $db->escape($code) . "'";
        $row2 = $db->get_row($rexist, ARRAY_A);

        if ($row2) // Il ne peut y avoir qu'un seul résultat
        {
            extract($row2);

            $rech3 = '';
            switch ($pw_level) {
                case 1 :
                    $rech3 = "SELECT * FROM `" . TBCLI . "` WHERE cli_code='" . $db->escape($code) . "'";
                    break;

                case 2 :
                    $rech3 = "SELECT * FROM `" . TBOPE . "` WHERE ope_code='" . $db->escape($code) . "'";
                    break;

                case 3 :
                case 7 :
                case 11 :
                    $rech3 = "SELECT * FROM `" . TBTEC . "` WHERE tec_code='" . $db->escape($code) . "'";
                    break;

                case 4 :
                    $rech3 = "SELECT * FROM `" . TBAGE . "` WHERE age_code='" . $db->escape($code) . "'";
                    break;

                case 5 :
                    break;

                case 6 :
                    $rech3 = "SELECT * FROM `" . TBDO . "` WHERE do_code='" . $db->escape($code) . "'";
                    break;

                case 10 :
                    $rech3 = "SELECT * FROM `" . TBDO . "` WHERE do_code='" . $db->escape($code) . "'";
                    break;
            }

            if ($rech3 <> '') {
                $row3 = $db->get_row($rech3, ARRAY_A);

                if ($row3) // Il ne peut y avoir qu'un seul résultat
                {
                    $row3 = encode_str($row3);
                    extract($row3);

                    switch ($pw_level) {
                        case 1 :
                            $createur = $cli_civilite . ' ' . $cli_prenom . ' ' . $cli_nom . ' ('._("Client").')';
                            break;
                        case 2 :
                            $createur = $ope_civilite . ' ' . $ope_prenom . ' ' . $ope_nom . ' ('._("Opérateur").')';
                            break;
                        case 3 :
                        case 7 :
                        case 11 :
                            $createur = $tec_civilite . ' ' . $tec_prenom . ' ' . $tec_nom . ' ('._("Technicien");
                            if ($pw_level == 7)
                                $createur .= ' '._("donneur d'ordres");
                            if ($pw_level == 11)
                                $createur .= ' '._("sous-traitant");
                            $createur .= ')';
                            break;
                        case 4 :
                            $createur = $age_nom . ' ('._("Agence").')';
                            break;
                        case 6 :
                            $createur = $do_nom . ' ('._("Donneur d'ordres").')';
                            break;
                        case 10 :
                            $createur = $st_nom . ' ('._("Sous-traitant").')';
                            break;
                    }
                } else
                    $createur = _("Centre de gestion");
            } else
                $createur = _("Centre de gestion");
        }
        if ($open == TRUE)
            $db->disconnect();
    } else
        $createur = _("Administrateur");

    return $createur;
}

/***************************************/
/* Gestion des codes et mots de passes */
/***************************************/

/**
 * Création d'un code pour les Clients, Interventions, Techniciens, Opérateurs, Contrats, Demandes, Relevés lors de l'enregistrement de la fiche
 *
 * @param $racine
 * @param bool $open
 * @return string
 */
function crecode($racine, $open = TRUE)
{
    global
    $db;
    $codecree = '';
    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech = "SELECT * FROM `" . TBCONS . "`";
    $row = $db->get_row($rech, ARRAY_A);
    if ($row) // Uniquement UN SEUL enregistrement !
    {
        $row = encode_str($row);
        // extract($row);
        $rcmaj = "";
        switch ($racine) {
            // Code Client
            case "C" :
                $rcli = clean_str($row["cons_rcli"]);
                $ncli = $row["cons_ncli"];
                $ncli++;
                settype($ncli, "string");
                $format = "%'07s";
                $nclif = sprintf($format, $ncli);
                $codecree = $rcli . $nclif;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_ncli`='" . $ncli . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Technicien
            case "T" :
                $rtec = clean_str($row["cons_rtec"]);
                $ntec = $row["cons_ntec"];
                $ntec++;
                settype($ntec, "string");
                $format = "%'07s";
                $ntecf = sprintf($format, $ntec);
                $codecree = $rtec . $ntecf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_ntec`='" . $ntec . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Intervention
            case "I" :
                $rint = clean_str($row["cons_rint"]);
                $nint = $row["cons_nint"];
                $nint++;
                settype($nint, "string");
                $format = "%'07s";
                $nintf = sprintf($format, $nint);
                $codecree = $rint . $nintf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nint`='" . $nint . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Opérateur
            case "O" :
                $rope = clean_str($row["cons_rope"]);
                $nope = $row["cons_nope"];
                $nope++;
                settype($nope, "string");
                $format = "%'07s";
                $nopef = sprintf($format, $nope);
                $codecree = $rope . $nopef;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nope`='" . $nope . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Contrat
            case "CO" :
                $rcon = clean_str($row["cons_rcon"]);
                $ncon = $row["cons_ncon"];
                $ncon++;
                settype($ncon, "string");
                $format = "%'07s";
                $nconf = sprintf($format, $ncon);
                $codecree = $rcon . $nconf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_ncon`='" . $ncon . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Certificat de destruction
            case "CD" :
                $rcer = clean_str($row["cons_rcer"]);
                $ncer = $row["cons_ncer"];
                $ncer++;
                settype($ncer, "string");
                $format = "%'07s";
                $ncerf = sprintf($format, $ncer);
                $codecree = $rcer . $ncerf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_ncer`='" . $ncer . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Demande
            case "D" :
                $rdde = clean_str($row["cons_rdde"]);
                $ndde = $row["cons_ndde"];
                $ndde++;
                settype($ndde, "string");
                $format = "%'07s";
                $nddef = sprintf($format, $ndde);
                $codecree = $rdde . $nddef;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_ndde`='" . $ndde . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Patrimoine
            case "P" :
                $rrpat = clean_str($row["cons_rrpat"]);
                $nrpat = $row["cons_nrpat"];
                $nrpat++;
                settype($nrpat, "string");
                $format = "%'07s";
                $nrpatf = sprintf($format, $nrpat);
                $codecree = $rrpat . $nrpatf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nrpat`='" . $nrpat . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;


            // Code Relevé
            case "R" :
                $rrel = clean_str($row["cons_rrel"]);
                $nrel = $row["cons_nrel"];
                $nrel++;
                settype($nrel, "string");
                $format = "%'07s";
                $nrelf = sprintf($format, $nrel);
                $codecree = $rrel . $nrelf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nrel`='" . $nrel . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Relevé de Licences
            case "RL" :
                $rrlic = clean_str($row["cons_rrlic"]);
                $nrlic = $row["cons_nrlic"];
                $nrlic++;
                settype($nrlic, "string");
                $format = "%'07s";
                $nrlicf = sprintf($format, $nrlic);
                $codecree = $rrlic . $nrlicf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nrlic`='" . $nrlic . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Relevé de Matériels
            case "RM" :
                $rrpdt = clean_str($row["cons_rrpdt"]);
                $nrpdt = $row["cons_nrpdt"];
                $nrpdt++;
                settype($nrpdt, "string");
                $format = "%'07s";
                $nrpdtf = sprintf($format, $nrpdt);
                $codecree = $rrpdt . $nrpdtf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nrpdt`='" . $nrpdt . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Ordre
            case "OR" :
                $rord = clean_str($row["cons_rord"]);
                $nord = $row["cons_nord"];
                $nord++;
                settype($nord, "string");
                $format = "%'07s";
                $nordf = sprintf($format, $nord);
                $codecree = $rord . $nordf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nord`='" . $nord . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Produit à Retourner
            case "PR" :
                $rretp = clean_str($row["cons_rretp"]);
                $nretp = $row["cons_nretp"];
                $nretp++;
                settype($nretp, "string");
                $format = "%'07s";
                $nretpf = sprintf($format, $nretp);
                $codecree = $rretp . $nretpf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nretp`='" . $nretp . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Envoi de retour
            case "ER" :
                $rrete = clean_str($row["cons_rrete"]);
                $nrete = $row["cons_nrete"];
                $nrete++;
                settype($nrete, "string");
                $format = "%'07s";
                $nretef = sprintf($format, $nrete);
                $codecree = $rrete . $nretef;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nrete`='" . $nrete . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Code Contrat de location
            case "LO" :
                $rloc = clean_str($row["cons_rloc"]);
                $nloc = $row["cons_nloc"];
                $nloc++;
                settype($nloc, "string");
                $format = "%'07s";
                $nlocf = sprintf($format, $nloc);
                $codecree = $rloc . $nlocf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_nloc`='" . $nloc . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Dossier de suivi
            case "DS" :
                $rdos = clean_str($row["cons_rdos"]);
                $ndos = $row["cons_ndos"];
                $ndos++;
                settype($ndos, "string");
                $format = "%'07s";
                $ndosf = sprintf($format, $ndos);
                $codecree = $rdos . $ndosf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_ndos`='" . $ndos . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;

            // Tâches
            case "TA" :
                $rtac = clean_str($row["cons_rtac"]);
                $ntac = $row["cons_ntac"];
                $ntac++;
                settype($tac, "string");
                $format = "%'07s";
                $ntacf = sprintf($format, $ntac);
                $codecree = $rtac . $ntacf;
                $rcmaj = "UPDATE `" . TBCONS . "` SET `cons_ntac`='" . $ntac . "'  WHERE `cons_id` = '" . $row["cons_id"] . "'";
                break;
        }
        if ($rcmaj <> "")
            $db->query($rcmaj);
    }
    if ($open == TRUE)
        $db->disconnect();

    return $codecree;
}

/**
 * Création d'un code session pour création de fiche Client ("C"), Technicien ("T"), Intervention ("I"), etc...
 * Fonction utilisée pendant la saisie d'un formulaire
 *
 * @param $racine
 * @return string
 */
function crecodesession($racine)
{
    $codecree = $racine . time();
    return $codecree;
}

/**
 * Création du mot de passe
 *
 * @param $aveccryptage
 * @return string
 */
function cremdp($aveccryptage)
{
    mt_srand();
    $longueur = mt_rand(8, 10);

    $mdpcree = "";
    for ($i = 0; $i < $longueur; $i++) {
        $quoi = mt_rand(1, 3);
        switch ($quoi) {
            case 1:
                $mdpcree .= mt_rand(0, 9);
                break;
            case 2:
                $mdpcree .= chr(mt_rand(65, 90));
                break;
            case 3:
                $mdpcree .= chr(mt_rand(97, 122));
                break;
        }
    }

    if ($aveccryptage == TRUE)
        $mdpcree = md5($mdpcree); // Cryptage du MDP

    return $mdpcree;
}

/***************************/
/* Gestion des impressions */
/***************************/

/**
 * Entête des impressions des contrats
 *
 * @param $titre
 */
function entimpcon($titre)
{
    echo '<p align="center"><span class="titre_impression">'.$titre.'</span></p>';
}

/**
 * Entête des impressions des fiches Agences, Clients, Techniciens
 *
 * @param $titre
 */
function entimpfic($titre)
{
    echo '<p align="center"><span class="titre_impression">'.$titre.'</span></p>';
    echo "<span class=\"annot_petit_it\">";
    echo _("Imprimée le").' : ';
    echo "</span>";
    echo "<span class=\"annot_gras_it\">";
    echo date("d-m-Y H:i:s") . "<br /><br />";
    echo "</span>";
}

/**
 * Entête des impressions complémentaires (contacts, articles, etc...) des fiches
 *
 * @param $titre
 */
function compimpfic($titre)
{
    echo '<p align="center"><span class="titre_gras_soul">'.$titre.'</span></p>';
}

/**
 * Affichage des images avec mise à l'échelle et lien éventuel
 *
 * @param $lnkimg
 * @param $lnkhref
 * @param $id
 * @param $title
 * @param $alt
 * @param $return
 */
function aff_img($lnkimg, $lnkhref, $id, $title, $alt, $return)
{
    if (trim($lnkimg) <> "") {
        if (file_exists(trim($lnkimg))) {
            $infos_img = @getimagesize($lnkimg);
            $largeur = $infos_img[0];
            $hauteur = $infos_img[1];
            $coeffl = 1;
            $coeffh = 1;
            if (LMAX_LOGO > 0) {
                if ($largeur > LMAX_LOGO)
                    $coeffl = ($largeur / LMAX_LOGO);
            }
            if (HMAX_LOGO > 0) {
                if ($hauteur > HMAX_LOGO)
                    $coeffh = ($hauteur / HMAX_LOGO);
            }
            if ($coeffl > $coeffh)
                $coeff = $coeffl;
            else
                $coeff = $coeffh;
            $hauteur = floor($hauteur / $coeff);
            $largeur = floor($largeur / $coeff);
            if (trim($lnkhref) <> "")
                echo '<a href="' . $lnkhref . '">';
            echo '<img src="' . $lnkimg . '"  title="' . $title . '" id="' . $id . '"" alt="' . $alt . '" width="' . $largeur . '" height="' . $hauteur . '" border="0" align="absmiddle">';
            if (trim($lnkhref) <> "")
                echo '</a>';
            echo "\n";
            if ($return == TRUE)
                echo "<br />";
        }
    }
}

/*************************/
/* génération Javascript */
/*************************/

/**
 * Message de retour MANUEL à l'index
 *
 * @param string $txt_func
 */
function exec_func_js($txt_func = '')
{
    if (trim($txt_func) <> "") {
        echo "<script type=\"text/javascript\">\n";
        echo "<!--\n";
        echo $txt_func . ";\n";
        echo "//-->\n";
        echo "\n</script>\n";
    }
}

/***************************/
/* Gestion des liens types */
/***************************/

/**
 * Message de retour MANUEL à l'index
 *
 * @param $td
 * @param $lnk
 * @param $txtlnk
 * @param $retsaisie
 */
function aff_ret_idx_man($td, $lnk, $txtlnk, $retsaisie)
{
    echo '<br />';
    // Cartouche d'erreur
    echo '<div align="center">';
    if ($retsaisie == TRUE) {
        if (($td == "add") OR ($td == "edit")) {
            echo '<p>';
            echo '<a href="javascript:history.back();">';
            echo '<img src="../img/rsaisie.png" border="0" align="absmiddle">';
            echo '<a href="javascript:history.back();">';
            echo ' ' . _("Retour à la saisie");
            echo '</a>';
            echo '</p>';
            echo '<br />';
        }
    }
    echo '<p>';
    if (trim($txtlnk) <> "") {
        echo '<a href="' . $lnk . '"><img src="../img/liste.png" border="0" align="absmiddle">';
        echo '<span class="annot_gras_it">';
        echo ' ' . $txtlnk . ' ';
        echo '</span>';
        echo '</a>';
        echo ' / ';
    }
    echo '<a href="index.php"><img src="../img/index.png" border="0" align="absmiddle">';
    echo '<span class="annot_gras_it">';
    echo ' ' . _("Retour à l'accueil");
    echo '</span>';
    echo '</a>';
    echo '</p>';
    echo '</div>';
}

/**
 *
 * Fonction d'affichage d'un popup (si texte) avec éventuelle redirection sur url
 *
 * @param string $txt
 * @param string $type_pop
 * @param string $url
 * @param int $tps
 */
function pop_ret_auto($txt = '' ,$type_pop = '',$url = '', $tps = 500)
{
    $timeout = $tps;
    if (trim($txt_pbm) <> "")
        $timeout += 1500;

    echo "<script type=\"text/javascript\">\n";
    echo "<!--\n";
    if (trim($txt) <> '')
        echo $type_pop."_txt('" . str_escape($txt) . "',".$timeout.");";
    if (trim($url) <> '')
        echo 'window.setTimeout("location=(\'' . $url . '\');",' . $timeout . ');';
    echo "//-->\n";
    echo "</script>\n";
}


/**
 * Message de fermeture automatique d'une fenêtre, sur un problème
 * $tps = temporisation en millisecondes
 *
 * @param $txt_pbm
 * @param $nomfen
 * @param string $reload_name_window
 * @param int $tps
 */
function close_fen_auto($txt_pbm, $nomfen, $reload_name_window = '', $tps = 500)
{
    $timeout = $tps;
    if (trim($txt_pbm) <> "")
        $timeout += 1500;
    /*
    if (trim($txt_pbm) <> "") {
        echo '<p align="center">';
        echo '<span class="alerte1">';
        echo $txt_pbm;
        echo '</span></p>';
    }
    */
    echo '<p align="center" class="annot_std_it">' . _("Merci de patienter") . '...</p>';
    echo "<script type=\"text/javascript\">\n";
    echo "<!--\n";
    if (trim($txt_pbm) <> "")
        echo "warn_txt('" . str_escape($txt_pbm) . "');";
    if (trim($reload_name_window) <> '')
        echo $reload_name_window . 'location.reload();';
    if (trim($nomfen) <> '') {
        if (intval($timeout) > 0)
            echo 'window.setTimeout("self.close(\'' . $nomfen . '\');",' . $timeout . ');';
        else
            echo 'self.close(\'' . $nomfen . '\');';
    } else {
        if (intval($timeout) > 0)
            echo 'window.setTimeout("self.close();",' . $timeout . ');';
        else
            echo 'self.close();';
    }
    echo "//-->\n";
    echo "</script>\n";
}

/**
 * Lien vers un flux RSS
 *
 * @param $codelog
 * @param $nivlog
 * @param $typlien
 * @param bool $open
 * @return string
 */
function lien_rss($codelog, $nivlog, $typlien, $open = TRUE)
{
    global
    $db,
    $rep_appli;

    $url_rss = "";
    $password = "";

    // Contrôle du login et du mot de passe
    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech = "SELECT pw_pass FROM `" . TBPW . "` WHERE `pw_code` = '" . $db->escape($codelog) . "'";
    $row = $db->get_row($rech, ARRAY_A);
    if ($row) {
        extract($row);
        $password = $pw_pass;
    }
    $db->disconnect();

    if ($password <> "") {
        switch ($typlien) {
            case "int" :
                if (($nivlog == 1) OR ($nivlog == 3) OR ($nivlog == 4) OR ($nivlog == 6) OR ($nivlog == 7) OR ($nivlog == 5) OR ($nivlog == 9))
                    $url_rss = $rep_appli . "/rss/rss.php?log=" . $codelog . "&pw=" . $password . "&trss=int";
                break;
            case "ot" :
                if (($nivlog == 3) OR ($nivlog == 4) OR ($nivlog == 10) OR ($nivlog == 11) OR ($nivlog == 5) OR ($nivlog == 9))
                    $url_rss = $rep_appli . "/rss/rss.php?log=" . $codelog . "&pw=" . $password . "&trss=ot";
                break;
            case "cocl" :
                if (($nivlog == 1) OR ($nivlog == 3) OR ($nivlog == 4) OR ($nivlog == 5) OR ($nivlog == 9))
                    $url_rss = $rep_appli . "/rss/rss.php?log=" . $codelog . "&pw=" . $password . "&trss=cocl";
                break;
            case "coloc" :
                if (($nivlog == 1) OR ($nivlog == 3) OR ($nivlog == 4) OR ($nivlog == 10) OR ($nivlog == 11) OR ($nivlog == 5) OR ($nivlog == 9))
                    $url_rss = $rep_appli . "/rss/rss.php?log=" . $codelog . "&pw=" . $password . "&trss=coloc";
                break;
            case "tac" :
                if (($nivlog == 3) OR ($nivlog == 4) OR ($nivlog == 10) OR ($nivlog == 11) OR ($nivlog == 5) OR ($nivlog == 9))
                    $url_rss = $rep_appli . "/rss/rss.php?log=" . $codelog . "&pw=" . $password . "&trss=tac";
                break;
            case "dos" :
                if (($nivlog == 3) OR ($nivlog == 4) OR ($nivlog == 5) OR ($nivlog == 9))
                    $url_rss = $rep_appli . "/rss/rss.php?log=" . $codelog . "&pw=" . $password . "&trss=dos";
                break;
            default :
                break;
        }
    }
    return $url_rss;
}

/**
 * Lien de retour à la liste (lien1) ou à la dernière recherche (lien2)
 *
 * @param $lien1
 * @param $txt_lien1
 * @param $lien2
 * @param $txt_lien2
 */
function aff_lnk_lst_rech($lien1, $txt_lien1, $lien2, $txt_lien2)
{
    global
    $_SESSION;

    if (trim($lien1) <> "")
        echo '<a href="' . $lien1 . '">' . $txt_lien1 . '</a>';
    if ((trim($lien1) <> "") AND (trim($lien2) <> ""))
        echo ' / ';
    if (trim($lien2) <> "")
        echo '<a href="' . $lien2 . '">' . $txt_lien2 . '</a>';
}

/************************/
/* Gestion des tableaux */
/************************/

/**
 * Retourne la clef d'un tableau en fonction d'une valeur
 *
 * @param $tab
 * @param $value
 * @return mixed|string
 */
function tab_key_value($tab, $value)
{
    $valkey = "";

    while ($current_value = current($tab)) {
        if ($current_value == $value)
            return key($tab);
        next($tab);
    }

    return $valkey;
}

/**************************/
/* Paramètres d'exécution */
/**************************/

/**
 * @param null $var
 * @param null $sybase
 * @return array|mixed|null|string
 */
function fix_magic_quotes($var = NULL, $sybase = NULL)
{
    // si $sybase n'est pas spécifié, on regarde la configuration ini
    if (!isset ($sybase)) {
        $sybase = @ini_get('magic_quotes_sybase');
    }

    // si $var n'est pas spécifié, on corrige toutes les variables superglobales

    if (!isset ($var)) {
        // si les magic_quotes sont activées
        if (get_magic_quotes_gpc()) {
            // tableaux superglobaux a corriger
            $array = ['_REQUEST', '_GET', '_POST', '_COOKIE'];
            if (substr(PHP_VERSION, 0, 1) <= 4) {
                // PHP5 semble ne pas changer _ENV et _SERVER
                array_push($array, '_ENV', '_SERVER');

                // les magic_quotes ne changent pas $_SERVER['argv']
                $argv = isset($_SERVER['argv']) ? $_SERVER['argv'] : NULL;
            }
            foreach ($array as $var) {
                $GLOBALS[$var] = fix_magic_quotes($GLOBALS[$var], $sybase);
            }

            if (isset ($argv)) {
                $_SERVER['argv'] = $argv;
            }

            // désactive les magic quotes dans ini_set pour que les

            // scripts qui y sont sensibles fonctionnent
            // ini_set ('magic_quotes_gpc', 0);
        }

        // idem, pour magic_quotes_sybase
        if ($sybase) {
            @ini_set('magic_quotes_sybase', 0);
        }

        // désactive magic_quotes_runtime
        // set_magic_quotes_runtime (0);
        return TRUE;
    }

    // si $var est un tableau, appel récursif pour corriger chaque élément
    if (is_array($var)) {
        foreach ($var as $key => $val) {
            $var[$key] = fix_magic_quotes($val, $sybase);
        }
        return $var;
    }

    // si $var est une chaine on utilise la fonction stripslashes,
    // sauf si les magic_quotes_sybase sont activées, dans ce cas on
    // remplace les doubles apostrophes par des simples apostrophes
    if (is_string($var)) {
        return $sybase ? str_replace('\'\'', '\'', $var) : stripslashes($var);
    }

    // sinon rien
    return $var;
}

/**
 * Nettoyage de chaînes
 */
function fix_magic_quotes2()
{
    if (get_magic_quotes_gpc()) {

        /**
         * Nettoyage de chaînes
         *
         * @param $value
         * @return array|string
         */
        function stripslashes_deep($value)
        {

            return (is_array($value))
                ? array_map('stripslashes_deep', $value)
                : stripslashes($value);

        } // end of 'stripslashes_deep()'

        $_GET = array_map('stripslashes_deep', $_GET);
        $_POST = array_map('stripslashes_deep', $_POST);
        $_COOKIE = array_map('stripslashes_deep', $_COOKIE);
    }
}


/****************************************************/
/* Fonctions pour les vérification de modules       */
/****************************************************/

/**
 * Vérifie si un module donné est bien présent
 *
 * @param $module
 * @return bool
 */
function check_module($module)
{
    global
    $mod_planning,
    $mod_signature,
    $mod_patrimoine,
    $root;

    $ok = FALSE;

    switch (strtolower($module)) {
        // Module des plannings
        case "planning"    :
            if (file_exists($root . REP . "/inc/plan_maj.inc.php")) {
                $ok = TRUE;
                $mod_planning = TRUE;
            }
            break;
        // Module des patrimoines
        case "patrimoine" :
            if (file_exists($root . REP . "/inc/rpat_maj.inc.php")) {
                $ok = TRUE;
                $mod_patrimoine = TRUE;
            }
            break;
        // Module des signatures
        case "signature" :
            if (file_exists($root . REP . "/inc/sig_maj.inc.php")) {
                $ok = TRUE;
                $mod_signature = TRUE;
            }
            break;
        default :
            break;
    }
    return $ok;
}

/**
 * Vérifie tous les modules optionnels
 *
 */
function check_modules()
{
    global
        $tab_modules;

    foreach ($tab_modules as $nom_module) {
        check_module($nom_module);
    }
}

/*****************************************************************************/
/* Diverses fonctions utilisées dans SMI pour la création de listes de choix */
/*****************************************************************************/

/**
 * Création d'un select
 * $tab : array simple
 *
 * @param $name
 * @param $id
 * @param $tab
 * @param $val_selected
 * @param string $val_choix
 * @param string $txt_choix
 * @param int $size
 * @param bool $multiple
 * @param string $val_unknown
 * @param string $txt_unknown
 * @param bool $oblig
 * @param bool $small
 * @param string $class
 */
function cre_select($name, $id, $tab, $val_selected, $val_choix = '', $txt_choix = '', $size = 1, $multiple = FALSE, $val_unknown = '', $txt_unknown = '', $oblig = TRUE, $small = FALSE, $class = '')
{

    if ($small == TRUE)
        echo '<span class="annot_petit">';
    else
    {
        if ($class <> '')
            echo '<span class="'.$class.'">';
    }
    echo '<select name="' . $name . '" id="' . $id . '"';
    if ($size > 1)
        echo ' size="' . $size . '"';
    if ($multiple == TRUE)
        echo ' multiple="multiple"';
    if ($small == TRUE)
        echo ' class="annot_petit"';
    else
    {
        if ($class <> '')
            echo ' class="'.$class.'"';
    }
    echo '>';
    if (trim($txt_choix) <> '') {
        // $vs = $val_selected;
        echo '<option value="' . $val_choix . '"';
        // settype($vs,gettype($val_choix));
        if ($small == TRUE)
            echo ' class="annot_petit"';
        else
        {
            if ($class <> '')
                echo ' class="'.$class.'"';
        }
        if ($val_selected == $val_choix)
            echo ' selected';
        echo '>' . $txt_choix . '</option>';
    }
    if (count($tab) > 0) {
        foreach ($tab as $key => $value) {
            // $vs = $val_selected;
            if (is_array($value)) {
                echo '<option value="' . $value[0] . '"';
                // settype($vs,gettype($value[0]));
                if ($val_selected == $value[0])
                    echo ' selected';
                if ($small == TRUE)
                    echo ' class="annot_petit"';
                echo '>';
                echo $value[1] . "</option>";
            } else {
                echo '<option value="' . $key . '"';
                // settype($vs,gettype($key));
                if ($val_selected == $key)
                    echo ' selected';
                if ($small == TRUE)
                    echo ' class="annot_petit"';
                echo '>';
                echo $value . "</option>";
            }
        }
    } else
        if (trim($txt_unknown) <> '') {
            echo '<option value="' . $val_unknown . '"';
            if ($small == TRUE)
                echo ' class="annot_petit"';
            echo '>' . $txt_unknown . "</option>";
        }
    echo '</select>';
    if (($small == TRUE) OR ($class <> ''))
        echo '</span>';
    if ($multiple == TRUE) {
        $txthelp = _("Vous faire plusieurs choix avec CTRL + clic gauche");
        echo ' <a href="#" class="pop"><img src="../img/help.png" alt="'._("Aide").'" border="0" align="absmiddle"><span>' . formatetxtbr($txthelp) . '</span></a>';
    }
    if ($oblig == TRUE)
        echo ' <img src="../img/oblig.png" align="absmiddle" alt="' . _("Champ obligatoire") . '">';
}

/**
 * Création d'un select
 * $tab : array de tableau
 * $list_detail : string "xx-xx-...-xx" kit contient les $value à écrire en détail
 * $majuscule : La valeur est convertie en majuscules
 *
 * @param string $name
 * @param string $id
 * @param $tab
 * @param $key
 * @param $value
 * @param string $liste_detail
 * @param $val_selected
 * @param string $val_choix
 * @param string $txt_choix
 * @param int $size
 * @param bool $multiple
 * @param string $val_unknown
 * @param string $txt_unknown
 * @param bool $oblig
 * @param bool $majuscule
 * @param bool $small
 * @param array $tab_first_options
 */
function cre_select_tab($name = '', $id = '', $tab, $key, $value, $liste_detail = '', $val_selected, $val_choix = '', $txt_choix = '', $size = 1, $multiple = FALSE, $val_unknown = '', $txt_unknown = '', $oblig = TRUE, $majuscule = TRUE, $small = FALSE, $tab_first_options = [])
{
    // Création du tableau des champs du détail de valeur
    $tab_chp_detail = [];
    if (trim($liste_detail) <> '') {
        $tab_chp_detail = explode('-', $liste_detail);
    }
    if ($small == TRUE)
        echo '<span class="annot_petit">';
    else
    {
        if ($class <> '')
            echo '<span class="'.$class.'">';
    }
    echo '<select name="' . $name . '" id="' . $id . '"';
    if ($size > 1)
        echo ' size="' . $size . '"';
    if ($multiple == TRUE)
        echo ' multiple="multiple"';
    if ($small == TRUE)
        echo ' class="annot_petit"';
    echo '>';
    if (trim($txt_choix) <> '') {
        echo '<option value="' . $val_choix . '"';
        if (is_array($val_selected)) {
            if (exist_in_array($val_choix, $val_selected, TRUE))
                echo ' selected';
        } else {
            if ($val_selected == $val_choix)
                echo ' selected';
        }
        if ($small == TRUE)
            echo ' class="annot_petit"';
        echo '>' . $txt_choix . '</option>';
    }
    if ($tab_first_options) {
        if (count($tab_first_options) > 0) {
            foreach ($tab_first_options as $key1 => $value1) {
                echo '<option value="' . $key1 . '"';
                if (is_array($val_selected)) {
                    if (exist_in_array($key1, $val_selected, TRUE))
                        echo ' selected';
                } else {
                    if ($val_selected == $key1)
                        echo ' selected';
                }
                if ($small == TRUE)
                    echo ' class="annot_petit"';
                echo '>' . $value1 . '</option>';

            }
        }
    }
    if ($tab) {
        if (count($tab) > 0) {
            foreach ($tab as $row) {
                $row = encode_str($row);
                echo '<option value="' . $row[$key] . '"';
                if (is_array($val_selected)) {
                    if (exist_in_array($row[$key], $val_selected, TRUE))
                        echo ' selected';
                } else {
                    if ($val_selected == $row[$key])
                        echo ' selected';
                }
                if ($small == TRUE)
                    echo ' class="annot_petit"';
                echo '>';
                $txt_value = $row[$value];
                if (count($tab_chp_detail) > 0) {
                    $txt_value .= ' (';
                    foreach ($tab_chp_detail as $key2) {
                        $txt_value .= $row[$key2] . ' - ';
                    }
                    // Suppression du dernier '-'
                    $txt_value = substr($txt_value, 0, strlen($txt_value) - 3);
                    $txt_value .= ')';
                }

                if ($majuscule == TRUE)
                    $txt_value = str_majuscules($txt_value);

                echo $txt_value . "</option>";
            }
        } else
            if (trim($txt_unknown) <> '') {
                echo '<option value="' . $val_unknown . '"';
                if ($small == TRUE)
                    echo ' class="annot_petit"';
                echo '>' . $txt_unknown . "</option>";
            }
    } else
        if (trim($txt_unknown) <> '') {
            echo '<option value="' . $val_unknown . '"';
            if ($small == TRUE)
                echo ' class="annot_petit"';
            echo '>' . $txt_unknown . "</option>";
        }
    echo '</select>';
    if (($small == TRUE) OR ($class <> ''))
        echo '</span>';
    if ($multiple == TRUE) {
        $txthelp = _("Vous faire plusieurs choix avec CTRL + clic gauche");
        echo ' <a href="#" class="pop"><img src="../img/help.png" alt="'._("Aide").'" border="0" align="absmiddle"><span>' . formatetxtbr($txthelp) . '</span></a>';
    }
    if ($oblig == TRUE)
        echo ' <img src="../img/oblig.png" align="absmiddle" alt="' . _("Champ obligatoire") . '">';
}

/**
 * Création d'un input numérique avec ou sans devise
 *
 * @param string $id : id à surveiller
 * @param int $value : valeur du champ à construire
 * @param bool $devise : on affiche ou pas la devise
 * @param bool $readonly : champ en lecture seulle ou pas
 * @param bool $oblig : saisie obligatoire
 * @param bool $help : icône d'aide ou pas
 * @param int $size : taille du champ
 * @param string $pays : code du pays
 * @param bool $open : on ouvre ou pas la base
 */
function cre_input_num($id = '', $value = 0, $devise = FALSE, $readonly = FALSE, $oblig = TRUE, $help = TRUE, $size = 10, $pays = '', $open = TRUE)
{
    global
    $db,
    $_SESSION;

    if (trim($pays) <> '')
        $codepays = $pays;
    else
        $codepays = $_SESSION["codepays"];

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    // On récupère le code devise du pays
    $rech = "SELECT pays_codeadev,pays_devpos FROM `" . TBPAYS . "` WHERE `pays_code` = '" . $db->escape($codepays) . "'";
    $row = $db->get_row($rech, ARRAY_A);
    if ($row) {
        extract($row);
        // On récupère le texte devise
        if ($pays_codeadev <> 'EUR') // Si 'EUR' (Euro), il faut coder en HTML car le symbole '€' n'est pas correctement géré en UTF-8
        {
            $rech2 = "SELECT dev_symtxt FROM `" . TBDEV . "` WHERE dev_codea = '" . $db->escape($pays_codeadev) . "'";
            echo $rech2 . "<br />";
            $row2 = $db->get_row($rech2, ARRAY_A);
            if ($row2) {
                extract($row2);
                if (trim($dev_symtxt) <> '')
                    $code_TXT = $dev_symtxt;
                else
                    $code_TXT = $pays_codeadev;
            }
        } else
            $code_TXT = '&euro;';
    }
    if ($open == TRUE)
        $db->disconnect();

    if ($devise == TRUE) {
        if ($pays_devpos == 'L')
            echo utf8_encode($code_TXT) . ' ';
    }
    echo '<input name="' . $id . '" id="' . $id . '" type="text"';
    echo ' style="text-align:right"';
    echo ' value="' . number_format(floatval($value), intval($_SESSION['num_nbdec']), '.', '') . '"';
    echo ' size="' . $size . '"';
    if ($readonly == TRUE)
        echo ' readonly = "1"';
    echo '>';
    if ($devise == TRUE) {
        if ($pays_devpos == 'R')
            echo ' ' . utf8_encode($code_TXT);
    }
    if ($readonly == FALSE) {
        if ($oblig == TRUE)
            echo ' <img src="../img/oblig.png" align="absmiddle" alt="' . _("Champ obligatoire") . '">';
        if ($help == TRUE) {
            $txthelp = _("La décimale doit être '.' et pas la virgule");
            echo ' <a href="#" class="pop"><img src="../img/help.png" alt="'._("Aide").'" border="0" align="absmiddle"><span>' . formatetxtbr($txthelp) . '</span></a>';
        }
    }
}

/**
 * Création d'un lien fictif, avec ou sans image
 *
 * @param string $name
 * @param string $id
 * @param string $tag
 * @param string $align
 * @param string $title
 * @param string $url
 * @param string $url_img
 * @param $texte
 * @param bool $sep
 */
function cre_falselnk($name = '', $id = '', $tag = '', $align = '', $title = '', $url = '', $url_img = '', $texte = '', $sep = FALSE)
{
    if ($sep == TRUE)
        echo ' / ';
    if ($name == '')
        $name = $id;
    echo '<' . $tag . ' id="' . $id . '" name="' . $name . '"';
    if ($url <> '')
        echo ' lnk="' . $url . '"';
    if ($align <> '')
        echo ' align="' . $align . '"';
    echo ' class="falselnk">';
    if ($url_img <> '')
        echo '<img src="' . $url_img . '" title="' . $title . '" border="0" align="absmiddle">';
    if ($texte <> '')
        echo ' ' . $texte;
    echo '</' . $tag . '>';
}

/**
 * Création d'un lien fictif, avec uniquement une image
 *
 * @param string $name
 * @param string $id
 * @param string $tag
 * @param string $align
 * @param string $title
 * @param string $nattr
 * @param string $url
 * @param string $url_img
 * @param int $hauteur
 * @param int $largeur
 * @param bool $return : si true renvoie une chaine au lieu d'afficher
 * @param bool $oc : si true ajout évènement onclick
 * @return bool|string
 */
function cre_falselnk_img($name = '', $id = '', $tag = '', $align = '', $title = '', $nattr = '', $url = '', $url_img = '', $largeur = 0 , $hauteur = 0, $return = false, $oc = false)
{
    $str_html = '';

    if ($name == '')
        $name = $id;
    if ($oc == TRUE)
        $str_html .= "<a href=\"javascript:;\" onclick=\"init_new_window('".$url."','".$id."',".$largeur.",".$hauteur.",'yes')\">";
    $str_html .= '<' . $tag . ' id="' . $id . '" name="' . $name . '"';
    if ($oc == FALSE)
    {
        if ($url <> '')
            $str_html .= ' '.$nattr.'="' . $url . '"';
        $str_html .= ' hauteur="' . $hauteur . '"';
        $str_html .= ' largeur="' . $largeur. '"';
    }
    if ($align <> '')
        $str_html .= ' align="' . $align . '"';
    $str_html .= ' class="falselnkimg">';
    if ($url_img <> '')
        $str_html .= '<img src="' . $url_img . '" title="' . $title . '" border="0" align="absmiddle">';
    if ($tag <> '')
        $str_html .= '</' . $tag . '>';
    if ($oc == TRUE)
        $str_html .= '</a>';
    if ($return == false)
    {
        echo $str_html;
        return false;
    }
    else
        return $str_html;
}

/**
 * Création d'un lien fictif, avec uniquement une image
 * $bool : si true renvoie une chaine au lieu d'afficher
 * $oc : si true ajout évènement onclick
 *
 * @param string $name
 * @param string $id
 * @param string $tag
 * @param string $align
 * @param string $title
 * @param string $nattr
 * @param string $url
 * @param string $url_img
 * @param int $hauteur
 * @param int $largeur
 * @param bool $return
 * @param bool $oc
 * @return bool|string
 */
function cre_falselnk_img_plan($name = '', $id = '', $tag = '', $align = '', $title = '', $nattr = '', $url = '', $url_img = '', $largeur = 0 , $hauteur = 0, $return = false, $oc = false)
{
    $str_html = '';

    if ($name == '')
        $name = $id;
    if ($oc == TRUE)
        $str_html .= "<a href=\"javascript:;\" onclick=\"init_new_window('".$url."','".$id."',".$largeur.",".$hauteur.",'yes')\">";
    $str_html .= '<' . $tag . ' id="' . $id . '" name="' . $name . '"';
    if ($oc == FALSE)
    {
        if ($url <> '')
            $str_html .= ' '.$nattr.'="' . $url . '"';
        $str_html .= ' hauteur="' . $hauteur . '"';
        $str_html .= ' largeur="' . $largeur. '"';
    }
    if ($align <> '')
        $str_html .= ' align="' . $align . '"';
    $str_html .= ' class="falselnkimgplan">';
    if ($url_img <> '')
        $str_html .= '<img src="' . $url_img . '" title="' . $title . '" border="0" align="absmiddle">';
    if ($tag <> '')
        $str_html .= '</' . $tag . '>';
    if ($oc == TRUE)
        $str_html .= '</a>';
    if ($return == false)
    {
        echo $str_html;
        return false;
    }
    else
        return $str_html;
}

/**
 * @param string $name
 * @param string $id
 * @param string $tag
 * @param string $align
 * @param string $title
 * @param string $nattr
 * @param string $url
 * @param string $url_img
 * @param int $largeur
 * @param int $hauteur
 * @param bool $return
 * @param bool $oc
 * @return bool|string
 */
function cre_falselnk_img_ajax($name = '', $id = '', $tag = '', $align = '', $title = '', $nattr = '', $url = '', $url_img = '', $largeur = 0 , $hauteur = 0, $return = false, $oc = false)
{
    $str_html = '';

    if ($name == '')
        $name = $id;
    if ($oc == TRUE)
        $str_html .= "<a href=\"javascript:;\" onclick=\"init_new_window('".$url."','".$id."',".$largeur.",".$hauteur.",'yes')\">";
    $str_html .= '<' . $tag . ' id="' . $id . '" name="' . $name . '"';
    if ($oc == FALSE)
    {
        if ($url <> '')
            $str_html .= ' '.$nattr.'="' . $url . '"';
        $str_html .= ' hauteur="' . $hauteur . '"';
        $str_html .= ' largeur="' . $largeur. '"';
    }
    if ($align <> '')
        $str_html .= ' align="' . $align . '"';
    $str_html .= ' class="falselnkimgajax">';
    if ($url_img <> '')
        $str_html .= '<img src="' . $url_img . '" title="' . $title . '" border="0" align="absmiddle">';
    if ($tag <> '')
        $str_html .= '</' . $tag . '>';
    if ($oc == TRUE)
        $str_html .= '</a>';
    if ($return == false)
    {
        echo $str_html;
        return false;
    }
    else
        return $str_html;
}

/**
 * @param string $titre
 * @param string $lnk_lst
 * @param string $lnk_pp
 * @param string $lnk_imprim
 */
function cre_ent_form($titre = '', $lnk_lst = '', $lnk_pp= '', $lnk_imprim = '')
{
    if ($titre <> '')
    {
        echo '<p align="center">';
        echo '<span class="titrepage">';
        echo $titre;
        echo '</span>';
        echo '</p>';
    }
    echo '<table width="100%" border="0">';
    echo '<tr>';
    echo '<td width="33%" class="annot_gras_it">';
    if (($lnk_lst <> '') OR ($lnk_pp <> ''))
        aff_lnk_lst_rech($lnk_lst, _("Retour à la liste"), $lnk_pp, _("Retour à la page précédente"));
    else
        echo '&nbsp;';
    echo '</td>';
    echo '<td width="33%" align="center" class="annot_petit_it">';
    echo '<div id="oblig">';
    echo '(';
    echo '<img src="../img/oblig.png" align="absmiddle" alt="'._("Champ obligatoire").'">';
    echo ' : ';
    echo _("Saisie obligatoire");
    echo ')';
    echo '</div>';
    echo '</td>';
    echo '<td width="33%">';
    if ($lnk_imprim <> '')
    {
        if (url_ok($lnk_imprim) == TRUE)
            cre_falselnk('imprim', 'imprim', 'div', 'right', _("Imprimer"), $lnk_imprim, '../img/print.png', _("Imprimer"));
    }
    else
        echo '&nbsp;';
    echo '</td>';
    echo'</tr>';
    echo '</table>';
}
