<?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");

/********************************************/
/* Fonctions pour les accès aux droits      */
/********************************************/

/**
 * Lecture d'un enregistrement droits (modèle)
 *
 * @param $code
 * @param bool $open
 * @return array|null
 */
function lit_enr_droitsm($code, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBDROITSM . "` WHERE `droitsm_code` = '" . $db->escape($code) . "'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Lecture d'un enregistrement droits (type) selon id
 *
 * @param $id
 * @param bool $open
 * @return array|null
 */
function lit_enr_droitst($id, $open = TRUE)
{
    global
    $db;

    if ($open == TRUE)
        $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
    $rech2 = "SELECT * FROM `" . TBDROITST . "` WHERE `droitst_id` = '$id'";
    $row2 = $db->get_row($rech2, ARRAY_A);
    if ($open == TRUE)
        $db->disconnect();

    return $row2;
}

/**
 * Vérification quel droit pour quelle opération
 *
 * @param $nomfic
 * @param $td
 * @param $codeutil
 * @param bool $open
 * @return bool
 */
function droit_ok($nomfic, $td, $codeutil, $open = TRUE)
{
    global
    $db,
    $_SESSION;

    $droitok = TRUE;

    $nivlog = $_SESSION["niv_log"];

    // L'administrateur n'est pas contrôlé
    if ($nivlog <> 9) {
        if (trim($nomfic) <> "") {
            if ($open == TRUE)
                $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);

            // On récupère le code profil affecté à l'utilisateur
            $rech2 = "SELECT pw_modele FROM `" . TBPW . "` WHERE `pw_code` = '" . $db->escape($codeutil) . "' AND `pw_level` = '$nivlog'";
            $row2 = $db->get_row($rech2, ARRAY_A);
            if ($row2) {
                extract($row2);

                // On vérifie le droit d'exécution de l'utilisateur sur le nom de fichier
                if (trim($pw_modele) <> "") {
                    if (trim($td) <> "")
                        $rech3 = "SELECT droitsmd_auto FROM `" . TBDROITSMD . "` WHERE `droitsmd_nomfic` = '$nomfic' AND `droitsmd_td` = '$td' AND `droitsmd_modele` = '$pw_modele'";
                    else
                        $rech3 = "SELECT droitsmd_auto FROM `" . TBDROITSMD . "` WHERE `droitsmd_nomfic` = '$nomfic' AND `droitsmd_modele` = '$pw_modele'";
                    $row3 = $db->get_row($rech3, ARRAY_A);
                    if ($row3) {
                        extract($row3);

                        $droitok = $droitsmd_auto;
                        settype($droitok, "boolean");
                    }
                }
            }

            if ($open == TRUE)
                $db->disconnect();
        }
    }
    return $droitok;
}

/**
 * Génération d'un élément du menu Javascript
 *
 * @param $code
 * @param $maitre
 * @param $libelle
 * @param $lien
 * @param string $cible
 * @param int $largeur
 */
function gen_menu($code, $maitre, $libelle, $lien, $cible = '', $largeur = 0)
{
    global
    $_SESSION;

    $droitok = TRUE;

    // L'administrateur n'est pas contrôlé
    if ($_SESSION["niv_log"] <> 9) {
        $nomfic = '';
        $td = '';

        // On analyse le lien
        if (trim($lien) <> "") {
            $pos = strpos($lien, '?');
            if ($pos !== FALSE) {
                $tab_lien = explode('?', trim($lien));
                // On récupère le nom du fichier
                $nomfic = $tab_lien[0];
                // On vérifie si "td=" existe et si oui, on affecte $td
                $tab_arg = explode('&', $tab_lien[1]);
                foreach ($tab_arg as $value) {
                    $pos = strpos($value, 'td=');
                    if ($pos !== FALSE) {
                        if ($pos == 0) {
                            $tab_td = explode('=', $value);
                            $td = $tab_td[1];
                        }
                    }
                }
            } else
                $nomfic = trim($lien);
        }
        $droitok = droit_ok($nomfic, $td, $_SESSION["code_log"]);
    }
    if ($droitok == TRUE) {
        if ($largeur <> 0)
            echo "oCMenu.makeMenu('" . trim($code) . "','" . trim($maitre) . "',' " . addslashes(trim($libelle)) . "','" . trim($lien) . "','" . trim($cible) . "','" . $largeur . "');";
        else
            echo "oCMenu.makeMenu('" . trim($code) . "','" . trim($maitre) . "',' " . addslashes(trim($libelle)) . "','" . trim($lien) . "','" . trim($cible) . "');";
    }
}

/**
 * Vérification de la possibilité d'affichage d'une URL en fonction des droits définis
 *
 * @param $url
 * @param bool $open
 * @return bool
 */
function url_ok($url, $open = TRUE)
{
    global
    $_SESSION;

    $urlok = TRUE;

    // L'administrateur n'est pas contrôlé
    if ($_SESSION["niv_log"] <> 9) {
        $nomfic = '';
        $td = '';

        // On analyse le lien
        if (trim($url) <> "") {
            $pos = strpos($url, '?');
            if ($pos !== FALSE) {
                $tab_url = explode('?', trim($url));
                // On récupère le nom du fichier
                $nomfic = $tab_url[0];
                // On vérifie si "td=" existe et si oui, on affecte $td
                $tab_arg = explode('&', $tab_url[1]);
                foreach ($tab_arg as $value) {
                    $pos = strpos($value, 'td=');
                    if ($pos !== FALSE) {
                        if ($pos == 0) {
                            $tab_td = explode('=', $value);
                            $td = $tab_td[1];
                        }
                    }
                }
            } else
                $nomfic = trim($url);
        }
        $urlok = droit_ok($nomfic, $td, $_SESSION["code_log"], $open);
    }

    return $urlok;
}
