<?php
/****************************************************************************************
 * SMI (Services Maintenance Interventions) est une gestion libre de maintenance et de SAV
 *
 * Version 1.0.0
 *
 * Copyright (C) 2006-2014  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");

include_once("../down/download.php");

/**
 * Vérifie l'extension d'un fichier
 *
 * @param $extension
 *
 * @return bool
 */
function ext_fic_ok($extension)
{
    global
    $extensions_ok;

    if (in_array("." . $extension, $extensions_ok))
        return true;
    else
        return false;
}

/**
 * Vérifie la date d'un fichier
 *
 * @param $fichier
 * @param $operande
 * @param $date
 *
 * @return bool
 */
function date_fic_ok($fichier, $operande, $date)
{
    $date_ok = FALSE;
    $daterech_time = strtotime(datetomysql($date));
    $datefile_time = strtotime(date("Y/m/d", filemtime($fichier)));

    switch ($operande) {
        case 0 :
            $date_ok = TRUE;
            break;
        case 1 :
            if ($datefile_time <= $daterech_time)
                $date_ok = TRUE;
            break;
        case 2 :
            if ($datefile_time >= $daterech_time)
                $date_ok = TRUE;
            break;
        case 3 :
            if ($daterech_time == $datefile_time)
                $date_ok = TRUE;
            break;
        case 4 :
            if ($daterech_time <> $datefile_time)
                $date_ok = TRUE;
            break;

        default:
            break;
    }

    return $date_ok;
}


/**
 * Retourne le code d'un client
 *
 * @param $dir
 * @param $nivutil
 *
 * @return string
 */
function give_codecli($dir, $nivutil)
{
    global
    $_SESSION;

    $codecli = "";

    switch ($nivutil) {
        case 1 :
            $codecli = $_SESSION["code_log"];
            break;
        default    :
            // On est dans le dossier des clients ?
            $pos = strripos($dir, "/clients/");
            if ($pos === false) {
            } else {
                // Oui : on récupère le nom du client
                $racine = substr($dir, 0, $pos + 9);
                $str_clean = str_replace($racine, "", $dir);
                $tab_chemin = explode("/", $str_clean);
                $codefound = strtoupper(trim($tab_chemin[0]));
                // On vérifie si le code trouvé est bien un client
                $db = open_database(DBUSER, DBPASS, DBNAME, DBHOST);
                $rech2 = "SELECT cli_code FROM `" . TBCLI . "` WHERE `cli_code` = '" . $db->escape($codefound) . "'";
                $row2 = $db->get_row($rech2, ARRAY_A);
                if ($row2) {
                    extract($row2);
                    $codecli = $cli_code;
                }
                $db->disconnect();
            }
            break;
    }

    return $codecli;
}

/**
 * Dit si fichier visualisable ou pas
 *
 * @param      $nomficcomplet
 * @param bool $test_lie
 *
 * @return bool
 */
function fic_visuok($nomficcomplet, $test_lie = FALSE)
{
    global
    $_SESSION;

    $visuok = TRUE;
    $row = lit_enr_fic($nomficcomplet);
    if (is_array($row)) {
        extract($row);
        // C'est privé : on contrôle donc juste le code et le niveau du connecté
        if ($fic_prive == 1) {
            switch ($_SESSION["niv_log"]) {
                // Client
                case 1 :
                    // Dans tous les cas, c'est 100% privé
                    $visuok = FALSE;
                    break;
                // Technicien agence
                case 3 :
                    if ($fic_minlevel == 0) {
                        // Si le technicien n'est pas le créateur du fichier, c'est 100% privé
                        if ($fic_codecrea <> $_SESSION["code_log"])
                            $visuok = FALSE;
                    } else
                        if ($fic_minlevel <> 3)
                            $visuok = FALSE;
                    break;
                // Agence
                case 4 :
                    if ($fic_minlevel == 0) {
                        // Si le code créateur n'est pas l'agence, on vérifie que c'est un technicien
                        // Si ce technicien appartient à l'agence, elle a le droit de voir le fichier
                        if ($fic_codecrea <> $_SESSION["code_log"]) {
                            $row2 = lit_enr_tec($fic_codecrea, TRUE);
                            if (is_array($row2)) {
                                $row2 = encode_str($row2);
                                extract($row2);
                                // Si c'est un technicien qui a créé le fichier, mais qu'il n'appartient pas à l'agence
                                // c'est 100% privé
                                if ($tec_codeage <> $_SESSION["code_log"])
                                    $visuok = FALSE;
                            } // Si ce n'est pas un technicien qui a créé le fichier, c'est 100% privé
                            else
                                $visuok = FALSE;
                        }
                    } else
                        if ($fic_minlevel > 4)
                            $visuok = FALSE;
                    break;
                // Centre de gestion
                case 5 :
                    if ($fic_minlevel == 0) {
                        if ($fic_codecrea <> $_SESSION["code_log"])
                            $visuok = FALSE;
                    } else
                        if ($fic_minlevel > 5)
                            $visuok = FALSE;
                    break;
                default :
                    break;
            }
        } else // Pas privé : on vérifie si on doit tester si le fichier est lié ou pas
        {
            if ($test_lie == TRUE) {
                switch ($_SESSION["niv_log"]) {
                    // Client
                    case 1 :
                        if (est_PJID($fic_id) == FALSE)
                            $visuok = FALSE;
                        break;
                    // Technicien agence
                    case 3 :
                        if ($fic_minlevel <> 3)
                            $visuok = FALSE;
                        break;
                    // Agence
                    case 4 :
                        if ($fic_minlevel > 4)
                            $visuok = FALSE;
                        break;
                    // Centre de gestion
                    case 5 :
                        if ($fic_minlevel > 5)
                            $visuok = FALSE;
                        break;
                    default :
                        break;
                }
            }
        }
    }

    return $visuok;
}

/**
 * Lit les fichiers et dossiers
 *
 * @param $DIR
 * @param $niv_util
 * @param $code_util
 *
 * @return array
 */
function lit_dir($DIR, $niv_util, $code_util)
{
    global
    $url_gfc,
    $_SESSION;

    $test_lie = FALSE;

    // Création du niveau maximum de dossier
    switch ($niv_util) {
        // Si on est client, le répertoire maximum est le répertoire du client
        case 1 :
            $rep_top = $url_gfc . "/clients/" . strtolower($code_util);
            $rep_pj = $rep_top . '/PJ';

            // On doit tester si on est dans un dossier de pièces jointes
            $pos = strpos($DIR, $rep_pj);

            if ($pos === FALSE) // On est pas dans le sous répertoire des PJ du client
                break;
            else // on y est
            {
                if ($DIR <> $rep_pj) // On est pas 'pile' dessus, donc dedans
                {
                    // $tab_chemin = explode("/", str_replace($rep_pj . '/', '', $DIR));
                    $test_lie = TRUE;
                }
            }
            break;
            break;
        // Si on est admin, siège, agence, ou technicien, le répertoire maximum est le répertoire de base
        case 3 :
        case 4 :
        case 5 :
        case 9 :
            $rep_top = $url_gfc;
            break;
        default :
            break;
    }

    if ($DIR == $rep_top) // on est dans la "racine"
        $rep_cour = "";
    else
        $rep_cour = str_replace($rep_top . "/", "", $DIR);

    // Répertoire balayé (hors racine principale)
    $dossier = opendir($DIR);

    while (false !== ($Fichier = readdir($dossier))) {
        if (($Fichier != ".") && ($Fichier != "..") && ($Fichier != ".htaccess")) {
            $nomficcomplet = $DIR . "/" . $Fichier;

            if (is_dir($nomficcomplet) == TRUE) // C'est un dossier
            {
                $recupok = TRUE;
                // Tests si  Agence ou Technicien agence
                switch ($niv_util) {
                    case 3 :
                    case 4 :
                        if ($rep_cour <> "")
                            $chemin_rep = $rep_cour . "/" . $Fichier;
                        else
                            $chemin_rep = $Fichier;

                        $tab_chemin = explode("/", $chemin_rep);
                        switch ($tab_chemin[0]) {
                            // On ne peut afficher que le répertoire de l'agence
                            case "agences" :
                                if (count($tab_chemin) > 1) {
                                    if ($tab_chemin[1] <> strtolower($code_util))
                                        $recupok = FALSE;
                                }
                                break;
                            // On ne peut afficher que les clients de l'agence
                            case "clients" :
                                if (count($tab_chemin) > 1)
                                    $recupok = client_age_ok($tab_chemin[1], $code_util, TRUE);
                                break;
                            // On ne peut pas afficher le chemin des imports (racine) pour les agences
                            case "imports" :
                                $recupok = FALSE;
                                break;
                            // On ne peut pas afficher le chemin des imports (racine) pour les agences
                            case "pj" :
                                $recupok = FALSE;
                                break;
                            default :
                                break;
                        }
                        break;
                    default :
                        break;
                }

                if ($recupok == TRUE) {
                    // On vérifie si c'est privé ou pas
                    if (fic_visuok($nomficcomplet, $test_lie) == TRUE)
                        $Arrayfic[] = ['nom' => $Fichier, 'fichier' => 0];
                }
            } else // C'est un fichier
            {
                // On vérifie si c'est privé ou pas
                if (fic_visuok($nomficcomplet, $test_lie) == TRUE) {
                    // On contrôle l'extension du fichier
                    $ext_fic = strtolower(substr(strrchr($Fichier, "."), 1));
                    if (ext_fic_ok($ext_fic) == TRUE)
                        $Arrayfic[] = ['nom' => $Fichier, 'fichier' => 1];
                }
            }
        }
    }
    closedir($dossier);

    return $Arrayfic;
}

/**
 * Tri par clef d'un tableau
 *
 * @param $array
 * @param $index
 *
 * @return array
 */
function sort_by_key($array, $index)
{
    $sort = [];
    //préparation d'un nouveau tableau basé sur la clé à trier
    foreach ($array as $key => $val) {
        $sort[$key] = $val[$index];
    }
    //tri par ordre naturel et insensible à la casse
    natcasesort($sort);
    //formation du nouveau tableau trié selon la clé
    $output = [];
    foreach ($sort as $key => $val) {
        $output[] = $array[$key];
    }
    return $output;
}

/**
 * Affichage d'un répertoire
 * rep : répertoire en partant de url_gfc
 *
 * @param $niv_util
 * @param $code_util
 * @param $code_age
 * @param $operande
 * @param $date
 */
function affiche_rep($niv_util, $code_util, $code_age, $operande, $date)
{
    global
    $_SESSION,
    $url_gfc,
    $fictec_minlev;

    // Récupération des paramètres
    fix_magic_quotes();
    $_GET = clean_str($_GET);
    $dir = "";
    if (isset($_GET['dir']))
        $dir = @$_GET['dir'];
    $tx = "";
    if (isset($_GET['tx']))
        $tx = strtolower(@$_GET['tx']);
    $ci = "";
    if (isset($_GET['ci']))
        $ci = @$_GET['ci'];
    $cc = "";
    if (isset($_GET['cc']))
        $cc = strtolower(@$_GET['cc']);
    $mode_pj = FALSE;
    $rep_pj = "";
    $erreur = FALSE;

    // URLs diverses
    $link_rep_clients = $url_gfc . "/clients";
    $link_rep_agences = $url_gfc . "/agences";
    $url_mkdir = "mdir.php?dir=" . $dir;

    // Variables en fonction du mode pièces jointes ou pas

    // URL de retour
    $racine_url_principale = "";
    // Affichage première colonne (sélection pour suppression, déplacement)
    $affcol1 = TRUE;
    // Affichage septième colonne (sélection attaché ou pas)
    $affcol7 = TRUE;


    // Vérification affichage colonnes
    switch ($tx) {
        case "int" :
            $row = lit_enr_int($ci);
            if (is_array($row)) {
                extract($row);

                $racine_url_principale = "fic_pj.php";
                $affcol1 = FALSE;
                $mode_pj = TRUE;

                // On crée l'URL de stockage
                $rep_pj = $url_gfc . "/clients/" . $cc . "/PJ/" . $ci;
            } else
                $erreur = TRUE;
            break;
        case "cli" :
            $racine_url_principale = "fic_pj.php";
            $affcol7 = FALSE;
            $mode_pj = TRUE;

            // On crée l'URL de stockage
            $rep_pj = $url_gfc . "/clients/" . $cc . "/PJ";

            break;
        case "rel" :
            $affcol1 = FALSE;
            break;
        default :
            $affcol7 = FALSE;
            $racine_url_principale = "fic_down.php";
            break;
    }

    if ($erreur == FALSE) {
        $link_icone .= "<a href=\"javascript:;\" onclick=\"init_new_window('".$url_mkdir."','rep_add',900,400,'yes')\")>";
        $link_icone .= '<img src="../img/rep_add.png" border="0" align="absmiddle" title="' . _("Ajout répertoire") . '"></a>';

        // $link_icone = "<a href=\"javascript:;\" onclick=\"fensaisie('" . $url_mkdir . "',900,400,'status=no,scrollbars=no,menubar=no,statusbar=no,location=no,locationbar=no');\")><img src=\"../img/rep_add.png\" title=\""._("Ajouter un répertoire")."\" border=\"0\" align=\"absmiddle\"></a>";

        // Variables poura affichage des boutons en bas de liste
        $mult_del = FALSE;
        $mult_mve = FALSE;

        // Création du niveau maximum de dossier
        switch ($niv_util) {
            // Si on est client, le répertoire maximum est le répertoire du client
            case 1 :
                if ($mode_pj == FALSE) {
                    $rep_top = $url_gfc . "/clients/" . strtolower($code_util);
                    if ($dir == "")
                        $dir = 'clients/' . strtolower($code_util);
                } else {
                    $rep_top = $rep_pj;
                    if ($dir == "")
                        $dir = 'clients/' . strtolower($code_util) . '/PJ';
                }
                break;
            // Si on est admin, siège, agence, ou technicien, le répertoire maximum est le répertoire de base
            case 3 :
            case 4 :
            case 5 :
            case 9 :
                if ($mode_pj == FALSE)
                    $rep_top = $url_gfc;
                else
                    $rep_top = $rep_pj;
                if ($dir == "") {
                    switch ($tx) {
                        case "int" :
                            $dir = 'clients/' . strtolower($code_util) . '/PJ/' . $ci;
                            break;
                        case "cli" :
                            $dir = 'clients/' . strtolower($code_util) . '/PJ';
                            break;
                        default :
                            break;
                    }
                }
                break;
            default :
                break;
        }

        if ($dir <> "")
            $rep_balaye = $url_gfc . "/" . $dir;
        else
            $rep_balaye = $rep_top;
        $_SESSION["rb"] = $rep_balaye;
        // On vérifie si le dossier est affichable
        $aff_dir = TRUE;

        /* contrôles des tentatives de Hacks */
        switch ($niv_util) {
            case 1 :
                // Les clients ne peuvent pas visualiser la colonne de choix suppression/déplacement, ni de liaison
                $affcol1 = FALSE;
                $affcol7 = FALSE;
                if ($tx == "cli") {
                    // Si c'est appel depuis la fiche client, on vérifie :
                    //   .Si dans le répertoire "clients/xxx", si on est bien dans celui du client
                    $rep_ce_client = $link_rep_clients . "/" . strtolower($code_util);
                    $pos = strpos($rep_balaye, $rep_ce_client);
                    if ($pos === FALSE)
                        $aff_dir = FALSE;
                }
                break;
            case 3 :
            case 4 :
                // Si c'est une agence ou un technicien, on vérifie :
                //   .Si dans le répertoire "agences/xxx", si on est bien dans celui de l'agence
                //   .Si dans le répertoire "clients/xxx", si le client est bien géré par l'agence

                // Contrôle si dans répertoire "agences/xxx"
                // On vérifie si rep_agences fait partie de DIR
                // (CaD si le répertoire à parcourir est dans le répertoire contenant toutes les agences)
                $pos = strpos($rep_balaye, $link_rep_agences);
                if ($pos === FALSE) // On est pas dans le sous-répertoire privatif des agences, on peut donc afficher...sauf les imports
                {
                    $pos2 = strpos($rep_balaye, "imports");
                    if ($pos2 == FALSE)
                        $aff_dir = TRUE;
                    else
                        $aff_dir = FALSE;
                } else // on y est
                {
                    // "Pile" dans le répertoire principal des répertoires privés des agences,
                    // On accepte le chemin à parcourir
                    if ($rep_balaye == $link_rep_agences)
                        $aff_dir = TRUE;
                    else // On est dans un sous-répertoire au répertoire privatif des agences
                    {
                        $rep_cette_agence = $link_rep_agences . "/" . strtolower($code_age);
                        // On vérifie si on est bien dans le répertoire de l'agence connectée
                        $pos2 = strpos($rep_balaye, $rep_cette_agence);
                        if ($pos2 === FALSE) // On est pas dans le sous-répertoire privatif de cette agence, on ne peut pas afficher
                            $aff_dir = FALSE;
                    }
                }

                // Contrôle si dans répertoire "clients/xxx" (uniquement si pas déjà un problème)
                if ($aff_dir == TRUE) {
                    // On vérifie si link_rep_clients fait partie de DIR
                    // (CaD si le répertoire à parcourir est dans le répertoire contenant tous les clients)
                    $pos = strpos($rep_balaye, $link_rep_clients);
                    if ($pos === FALSE) // On est pas dans le sous-répertoire privatif des clients, on peut donc afficher
                        $aff_dir = TRUE;
                    else // on y est
                    {
                        if ($dir <> "clients") // On est dans un sous-répertoire du répertoire "clients"
                        {
                            // Extraction du code client de l'URL
                            $tab_rep_get = explode("/", $dir);
                            $rep_get = $tab_rep_get[1];
                            // Contrôle du code client récupéré
                            if ($rep_get <> "") {
                                $row2 = lit_enr_cli($rep_get, TRUE);
                                if (is_array($row2)) // Ce code client existe, on vérifie donc le code agence "propriétaire" ou si non affecté
                                {
                                    $row2 = encode_str($row2);
                                    extract($row2);
                                    $row2 = lit_enr_age($code_age, TRUE); // On récupère informations sur l'agence
                                    if (is_array($row2)) {
                                        extract($row2);
                                        switch ($tx) {
                                            case "int" :
                                                if (($int_codeage <> $code_age) AND ($int_codeages <> $code_age))
                                                    $aff_dir = FALSE;
                                                break;
                                            default :
                                                // Vérifie si dans zone de chalandise
                                                $tab_depzc = tab_zcc_age_open($age_code, TRUE);
                                                if (count($tab_depzc) > 0) {
                                                    if (in_array($cli_dep . "_" . $cli_codepays, $tab_depzc) == TRUE) {
                                                        // Dans la zone mais affecté à une autre agence : refusé
                                                        if (($cli_prop <> $code_age) AND ($cli_prop <> NULL))
                                                            $aff_dir = FALSE;
                                                    } else // Pas dans la zone : refusé
                                                        $aff_dir = FALSE;
                                                } else // Pas de zone : refusé
                                                    $aff_dir = FALSE;
                                                break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                break;
            default :
                break;
        }

        if ($aff_dir == TRUE) {
            /* Affichage des icônes de création de répertoires */
            $aff_ico_addrep = FALSE;
            switch ($niv_util) {
                case 3 :
                case 4 :
                case 5 :
                case 9 :
                    // On vérifie si on est dans le répertoire clients
                    $pos1 = strpos($dir, "clients");
                    if ($pos1 === FALSE) {
                        // Non...On vérifie si on est dans le répertoire agences
                        $pos2 = strpos($dir, "agences");
                        if ($pos2 === FALSE) {
                            // On est pas non plus dans le répertoire agences, on peut ajouter un répertoire si on est siège ou admin
                            if (($dir == "") AND ($niv_util >= 5))
                                $aff_ico_addrep = TRUE;
                            break;
                        } else {
                            // On y est..si on est dans un sous répertoire de "agences" (donc dans son répertoire privé),
                            // on peut ajouter un répertoire
                            if ($dir <> "agences")
                                $aff_ico_addrep = TRUE;
                        }
                    } else {
                        // Oui...si on est pas pile le répertoire clients (donc dans un sous répertoire client autorisé)
                        // on peut ajouter un répertoire)
                        if ($dir <> "clients")
                            $aff_ico_addrep = TRUE;
                    }
                    break;
                default :
                    break;
            }

            if ($rep_balaye == $rep_top) // On est dans la "racine"
                $txtrep = _("Dossier racine");
            else
                $txtrep = donne_desc_fic($rep_balaye);
            if (trim($txtrep) == "")
                $txtrep = $dir;

            // Affichage du répertoire courant simplifié
            echo "<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">";
            echo "<td width=\"50%\">";
            if (($dir <> "") AND ($rep_balaye <> $rep_top)) {
                echo '<a href="javascript:history.back()">';
                echo "[" . _("Niveau précédent") . "]";
                echo "</a>";
                echo " ";
                $newdir = "";
                if ($url_gfc <> $rep_top)
                    $newdir = str_replace($url_gfc . "/", "", $rep_top);
                echo '<a href="' . $racine_url_principale;
                $url_variables = '?dir=' . $newdir . '&ope=' . $operande . '&date=' . $date;
                if ($cc <> "")
                    $url_variables .= '&cc=' . $cc;
                if ($ci <> "")
                    $url_variables .= '&ci=' . $ci;
                if ($tx <> "")
                    $url_variables .= '&tx=' . $tx;
                echo $url_variables;
                echo '">';
                echo "[" . _("Niveau principal") . "]";
                echo "</a>";
            } else
                echo "&nbsp;";
            echo "</td>";
            echo "<td width=\"50%\" align=\"right\">";
            echo "<span class=\"annot_petit_gras\">";
            echo _("Dossier actuel") . " : ";
            echo "</span>";
            echo "<span class=\"annot_petit_it\">";
            echo $txtrep;
            echo "</span>";
            if ($aff_ico_addrep == TRUE)
                echo " " . $link_icone;
            echo "</td>";
            echo "</table>";

            if (is_dir($rep_balaye)) {
                $Lst_Fic = lit_dir($rep_balaye, $niv_util, $code_util);
                if (count($Lst_Fic) == 0) {
                    echo "<br />";
                    echo '<span class="annot_gras_it">' . _("Aucun fichier trouvé") . '</span><br />';
                } else {
                    switch ($tx) {
                        case "int" :
                            echo '<form name="fic_maj" id="fic_maj"  method="post" action="fic_pj_enr.php">';
                            break;
                        default :
                            echo '<form name="fic_maj" id="fic_maj"  method="post" action="fddmm.php">';
                            break;
                    }
                    echo '<input name="dir" type="hidden" id="dir" value="' . $dir . '">';
                    echo '<input name="cc" type="hidden" id="cc" value="' . $cc . '">';
                    echo '<input name="ci" type="hidden" id="ci" value="' . $ci . '">';
                    echo '<input name="tx" type="hidden" id="tx" value="' . $tx . '">';
                    echo '<input name="txtrep" type="hidden" id="txrep" value="' . $txtrep . '">';
                    echo '<table class="Mtable" border="0" width="100%" cellpadding="0" cellspacing="0">';
                    if ($affcol1 == TRUE) {
                        echo "<th>";
                        echo _("Choisir");
                        echo "</th>";
                    }
                    echo "<th>";
                    echo _("Nom du fichier");
                    if ($niv_util == 9) {
                        echo '<span class="annot_petit_it">';
                        echo ' (' . _("propriétaire") . ')';
                        echo '</span>';
                    }
                    echo "</th>";
                    echo "<th>";
                    echo _("Taille");
                    echo "</th>";
                    echo "<th>";
                    echo _("Date et heure de modification");
                    echo "</th>";
                    echo "<th>";
                    echo _("Téléchargé");
                    echo "</th>";
                    if ($niv_util >= 3) {
                        echo "<th>";
                        echo _("Cliquer");
                        echo "</th>";
                        if ($affcol7 == TRUE) {
                            echo "<th>";
                            echo "Lié";
                            echo "</th>";
                        }
                    }

                    $Tab_Fic = sort_by_key($Lst_Fic, 'fichier');
                    $Tab_Fic = sort_by_key($Tab_Fic, 'nom');
                    $i = 0;

                    foreach ($Tab_Fic as $val) {
                        $Fichier = $val['nom'];

                        $txtrech = @$_GET['search'];
                        $txtrech_maj = str_majuscules($txtrech);

                        $chemin_fichier = $rep_balaye . "/" . $Fichier;

                        // Récupération des données MySQL
                        if ($val['fichier'] == 1)
                            $fic_nbtel = donne_nbtel_ficdir($dir . "/" . $Fichier);

                        $existe = FALSE;
                        $aff_fichier = TRUE;

                        $row = lit_enr_fic($chemin_fichier);

                        if (is_array($row)) {
                            $row = encode_str($row);
                            extract($row);
                            if ($fic_nom == $chemin_fichier) {
                                if ($fic_desc == "")
                                    $fic_desc = $Fichier;
                                $existe = TRUE;
                            } else
                                $fic_desc = $Fichier;
                        } else
                            $fic_desc = $Fichier;
                        if ($existe == TRUE)
                            $createur = donne_createur_ficdir($chemin_fichier);
                        if ($dir <> "")
                            $nfic = $dir . "/" . $Fichier;
                        else
                            $nfic = $Fichier;

                        // En mode pièce jointe, le client ne voit que ce qui est lié
                        if ($val['fichier'] == 1) //Test uniquement si c'est un fichier
                        {
                            if ($mode_pj == TRUE) {
                                switch ($niv_util) {
                                    case 1 :
                                        if (est_PJ_code($nfic, $ci, TRUE) == FALSE)
                                            $aff_fichier = FALSE;
                                        break;
                                    default :
                                        break;
                                }
                            }
                        }

                        // Test si recherche demandée
                        if ($txtrech <> "") {
                            $aff_fichier = FALSE;

                            if ($val['fichier'] == 1) // C'est un fichier, on teste sur son "vrai" nom ou le descriptif
                                $fichier_maj = str_majuscules($Fichier);
                            else // C'est un répertoire, on teste sur le nom affiché ou le descriptif
                            {
                                if ($dir <> "") // On est dans un sous répertoire
                                    $nom_rep = substr(str_replace($dir, "", $Fichier), 1);
                                else
                                    $nom_rep = substr($Fichier, 1);
                                $fichier_maj = str_majuscules($nom_rep);
                            }

                            // Le nom réel du fichier ou répertoire correspond à la recherche
                            // Ou le descriptif contient le(s) mot(s) recherché(s)
                            if ((strpos($fichier_maj, $txtrech_maj) !== false) OR (strpos(strtoupper($fic_desc), strtoupper($txtrech)) !== false) OR (strpos(strtoupper($fic_createur), strtoupper($txtrech))))
                                $aff_fichier = TRUE;
                        }

                        if ($aff_fichier == TRUE) // Filtre sur chaîne recherchée
                        {
                            if ($val['fichier'] == 1) // C'est un fichier
                            {
                                $urlfic = $rep_balaye . "/" . $Fichier;
                                if (date_fic_ok($urlfic, $operande, $date) == TRUE) // Filtre sur date
                                {
                                    // Création de l'entête de ligne (TR)
                                    creetrlst($i);

                                    if ($affcol1 == TRUE) {
                                        echo '<td align="center" width="30">';
                                        if ($i % 2 == 0)
                                            $classe_aff = "TRalter1";
                                        else
                                            $classe_aff = "TRalter2";
                                        if ($niv_util >= 3) {
                                            if (($createur == $code_util) OR ($niv_util == 9)) {
                                                $mult_del = TRUE;
                                                $mult_mve = TRUE;
                                                echo '<input type="checkbox" name="fic_choisi[]" value="' . $Fichier . '" class="' . $classe_aff . '"';
                                            } else
                                                echo "&nbsp;";
                                        }
                                        echo "</td>";
                                    }

                                    echo '<td width="50%" align="center">';
                                    echo '<a href="../down/download.php?' . $nfic . '">' . $fic_desc . '</a>';

                                    if ($niv_util == 9) {
                                        echo '<span class="annot_petit_it">';
                                        echo ' (' . $createur . ')';
                                        echo '</span>';
                                    }
                                    // $detfic=donne_det_fic($chemin_fichier);
                                    if ($fic_detail <> "")
                                        echo ' <a href="#" class="pop"><img src="../img/help.png" alt="' . _("Descriptif") . '" border="0" align="absmiddle"><span>' . formatetxtbr(stripslashes($fic_detail)) . '</span></a>';

                                    if ($fic_prive == TRUE)
                                        echo ' <a href="#" class="pop"><img src="../img/locked.png" alt="' . _("Privé") . '" border="0" align="absmiddle"><span>' . _("Privé") . ' (' . $fic_codecrea . ' - ' . $fictec_minlev[$fic_minlevel] . ')</span></a>';

                                    echo "</td>";
                                    echo "<td align=\"center\">";
                                    echo download_size($nfic);
                                    echo "</td>";
                                    echo "<td align=\"center\">" . date("d/m/Y H:i:s", filemtime($urlfic)) . "</td>";
                                    $nb_fois = $fic_nbtel . " " . _("fois");
                                    echo "<td align=\"center\">" . $nb_fois . "</td>";
                                    if ($niv_util >= 3) {
                                        echo "<td align=\"center\">";
                                        if (($createur == $code_util) OR ($niv_util == 9)) {
                                            $lst_name = TRUE;
                                            $url_ren = "fdren.php?td=1&name=" . $nfic;
                                            cre_falselnk_img('', 'fic_ren_'.$nfic, 'span', 'center', _("Nommer ou renommer"), 'lnkpop', $url_ren, '../img/edit.png',900,500);
                                        }
                                        if (($niv_util == 9) AND ($createur <> $code_util) AND ($existe == TRUE)) {
                                            $lst_grab = TRUE;
                                            $url_grab = "fdgrab.php?td=1&name=" . $nfic;
                                            cre_falselnk_img('', 'fic_app_'.$nfic, 'span', 'center', _("S'approprier le fichier"), 'lnkpop', $url_grab, '../img/get.png',700,300);
                                        }
                                        echo "</td>";

                                        if ($affcol7 == TRUE) {
                                            echo "<td align=\"center\" width=\"30\">";
                                            if ($i % 2 == 0)
                                                $classe_aff = "TRalter1";
                                            else
                                                $classe_aff = "TRalter2";
                                            if ($niv_util >= 3) {
                                                $checked = FALSE;
                                                switch ($tx) {
                                                    case "int" :
                                                        $checked = est_PJ_code($nfic, $ci);
                                                        break;
                                                }

                                                echo '<input type="checkbox" name="fic_lie[]" value="' . $nfic . '" class="' . $classe_aff . '"';
                                                if ($checked == TRUE)
                                                    echo ' checked';
                                                echo '>';
                                            }
                                            echo "</td>";
                                        }
                                    }

                                    echo "</tr>";
                                }
                            } else // C'est un répertoire
                            {
                                // Création de l'entête de ligne (TR)
                                creetrlst($i);

                                if ($affcol1 == TRUE) {
                                    echo '<td align="center" width="30">';
                                    if ($i % 2 == 0)
                                        $classe_aff = "TRalter1";
                                    else
                                        $classe_aff = "TRalter2";
                                    if ($niv_util >= 3) {
                                        if ((($createur == $code_util) OR ($niv_util == 9)) AND ($Fichier <> "agences") AND ($Fichier <> "clients") AND ($Fichier <> "imports")) {
                                            $mult_del = TRUE;
                                            $mult_mve = TRUE;
                                            echo '<input type="checkbox" name="fic_choisi[]" value="' . $Fichier . '" class="' . $classe_aff . '">';
                                        } else
                                            echo "&nbsp;";
                                    }
                                    echo "</td>";
                                }
                                echo "<td width=\"50%\" align=\"center\">";
                                echo '<a href="' . $racine_url_principale . '?dir=' . $nfic . '&ope=' . @$_GET["ope"] . '&date=' . @$_GET["date"] . '&cc=' . $cc . '&ci=' . $ci . '&tx=' . $tx . '"> ' . $fic_desc . ' </a>';
                                if ($niv_util == 9) {
                                    echo "<span class=\"annot_petit_it\">";
                                    echo " (" . $createur . ")";
                                    echo "</span>";
                                }

                                // $detfic=donne_det_fic($chemin_fichier);
                                if ($fic_detail <> "")
                                    echo ' <a href="#" class="pop"><img src="../img/help.png" alt="' . _("Descriptif") . '" border="0" align="absmiddle"><span>' . formatetxtbr($fic_detail) . '</span></a>';
                                if ($fic_prive == TRUE)
                                    echo ' <a href="#" class="pop"><img src="../img/locked.png" alt="' . _("Privé") . '" border="0" align="absmiddle"><span>' . _("Privé") . ' (' . $fic_codecrea . ' - ' . $fictec_minlev[$fic_minlevel] . ')</span></a>';
                                echo "</td>";
                                echo "<td>&nbsp;</td>";
                                echo "<td align=\"center\">";
                                echo "<span class=\"annot_std_it\">";
                                echo _("Répertoire");
                                echo "</span>";
                                echo "</td>";
                                echo "<td>&nbsp;</td>";
                                if ($niv_util >= 3) {
                                    echo '<td align="center">';
                                    if ((($createur == $code_util) OR ($niv_util == 9)) AND ($Fichier <> "agences") AND ($Fichier <> "clients") AND ($Fichier <> "imports")) {
                                        $lst_name = TRUE;
                                        $url_ren = "fdren.php?td=0&name=" . $nfic;
                                        cre_falselnk_img('', 'fic_ren_'.$nfic, 'span', 'center', _("Nommer ou renommer"), 'lnkpop', $url_ren, '../img/edit.png',900,500);
                                    }
                                    if (($niv_util == 9) AND ($createur <> $code_util) AND ($existe == TRUE)) {
                                        $lst_grab = TRUE;
                                        $url_grab = "fdgrab.php?td=0&name=" . $nfic;
                                        cre_falselnk_img('', 'fic_app_'.$nfic, 'span', 'center', _("S'approprier le fichier"), 'lnkpop', $url_grab, '../img/get.png',700,300);
                                    }
                                    echo "</td>";
                                    if ($affcol7 == TRUE) {
                                        echo '<td align="center" width="30">';
                                        echo "&nbsp;";
                                        echo "</td>";
                                    }
                                }
                                echo "</tr>";
                            }
                            $i++;
                        }
                    }

                    echo "</table>";
                    if ($affcol1 == TRUE) {
                        if (($mult_mve == TRUE) OR ($mult_del == TRUE)) {
                            echo "<table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">";
                            echo "<tr>";
                            echo "<td align=\"right\" width=\"50\">";
                            echo '<img src="../img/arrow_ltr.png" title="'._("Supprimer le répertoire").'" border="0" align="absmiddle"></a>';
                            echo "</td>";
                            echo "<td align=\"center\" width=\"80\">";
                            echo ' <input type="button" name="check" id="check" value="Tous" style="text-decoration: none; font-size: 11px; color:White ;font-weight:bold;background-color: #666666;">';
                            echo "</td>";
                            echo "<td>";
                            echo " / ";
                            echo "<span class=\"annot_std_gras\">";
                            echo _("Pour la sélection").' : ';
                            echo "</span>";
                            if ($mult_del == TRUE)
                                echo " <input type=\"submit\" name=\"multiple\" value=\"" . _("Supprimer") . "\" style=\"text-decoration: none; font-size: 11px; color:White ;font-weight:bold;background-color: #666666;\">";
                            if ($mult_mve == TRUE)
                                echo " <input type=\"submit\" name=\"multiple\" value=\"" . _("Déplacer") . "\" style=\"text-decoration: none; font-size: 11px; color:White ;font-weight:bold;background-color: #666666;\">";
                            echo "</td>";
                            echo "</tr>";
                            echo "</table>";
                        }
                    }

                    if ($mode_pj == TRUE) {
                        echo '<br />';
                        echo '<table border="0" width="100%" cellpadding="0" cellspacing="0">';
                        echo '<tr>';
                        echo '<td align="right" width="40%">';
                        if ($affcol7 == TRUE)
                            echo '<input type="submit" name="valider" value="' . _("Valider") . '" style="text-decoration: none; font-size: 11px; color:White ;font-weight:bold;background-color: #666666;">';
                        else
                            echo "&nbsp;";
                        echo '</td>';
                        echo '<td align="center" width="20%">';
                        echo '&nbsp;';
                        echo '</td>';
                        echo '<td align="left">';
                        echo '<input type="button" name="quit" value="' . _("Quitter") . '" style="text-decoration: none; font-size: 11px; color:White ;font-weight:bold;background-color: #666666;" onClick="javascript:; self.close(\'fscomp\');">';
                        echo '</td>';
                        echo '</tr>';
                        echo '</table>';
                    }

                    echo "</form>";

                    $taille_piedla = "";
                    include_once("piedla.inc.php");

                    switch ($niv_util) {
                        case 9 :
                            echo "<p align=\"center\">";
                            if (nbhacks_ficlog() > 0)
                                echo " <a href=\"flog_lst.php?search=hack&rech=Rechercher&ord=DES&tri=Date\">" . _("Hack(s) détecté(s)") . "</a>";
                            if (nbleechs_ficlog() > 0)
                                echo " <a href=\"flog_lst.php?search=leech&rech=Rechercher&ord=DES&tri=Date\">" . _("Leech(s) détecté(s)") . "</a>";
                            if (nbnfounds_ficlog() > 0)
                                echo " <a href=\"flog_lst.php?search=inconnu&rech=Rechercher&ord=DES&tri=Date\">" . _("Fichier(s) non touvé(s) détecté(s)") . "</a>";
                            echo "</p>";
                            break;

                        default :
                            break;
                    }
                }

                /* Affichage de la zone d'upload */
                $aff_upl = FALSE;
                switch ($niv_util) {
                    case 3 :
                    case 4 :
                        // On vérifie si on est dans le répertoire clients
                        $pos1 = strpos($dir, "clients");
                        if ($pos1 === FALSE) {
                            // Non...On vérifie si on est dans le répertoire agences
                            $pos2 = strpos($dir, "agences");
                            if ($pos2 === FALSE) {
                                // On est pas non plus dans le répertoire agences, on ne peut pas télécharger
                                break;
                            } else {
                                // On y est..si on est dans un sous répertoire de "agences" (donc dans son répertoire privé), on peut télécharger
                                if ($dir <> "agences")
                                    $aff_upl = TRUE;
                            }
                        } else {
                            // Oui...si on est pas pile le répertoire clients (donc dans un sous répertoire client autorisé), on peut télécharger)
                            if ($dir <> "clients")
                                $aff_upl = TRUE;
                        }
                        break;
                    case 5 :
                    case 9 :
                        // On vérifie si on est dans le répertoire clients
                        $pos1 = strpos($dir, "clients");
                        if ($pos1 === FALSE) {
                            // Non...On vérifie si on est dans le répertoire agences
                            $pos2 = strpos($dir, "agences");
                            if ($pos2 === FALSE) {
                                // On est pas non plus dans le répertoire agences, on peut télécharger
                                $aff_upl = TRUE;
                                break;
                            } else {
                                // On y est..si on est dans un sous répertoire de "agences" (donc dans son répertoire privé), on peut télécharger
                                if ($dir <> "agences")
                                    $aff_upl = TRUE;
                            }
                        } else {
                            // Oui...si on est pas pile le répertoire clients (donc dans un sous répertoire client autorisé), on peut télécharger)
                            if ($dir <> "clients")
                                $aff_upl = TRUE;
                        }
                        break;
                    default :
                        break;
                }
                if ($aff_upl == TRUE)
                    include_once("upl.inc.php");
            } else
                echo _("Le répertoire spécifié n'existe pas ou erreur d'ouverture");
        }
    } else {
        // Vérification affichage colonnes
        switch ($tx) {
            case "int" :
            case "cli" :
            case "rel" :
                close_fen_auto('', 'fscomp');
                break;
            default :
                pop_ret_auto('', '', $racine_url_principale);
                break;
        }
    }
}
?>