/**
 * - Cas Articles_ChoixAction :
 * . 
 *      Le cas (par défaut) Sites_ChoixAction détermine si l'action sera un ajout ou une modification ; en fonction, il ajoute les données du formulaire (wysiwyg) ou les modifie.
 */
function SiteDynamique_ChoixAction($data_in = array())
{
    Lib_myLog("action: " . $data_in['action']);
    foreach ($GLOBALS['tab_globals'] as $global) {
        global ${$global};
    }
    Lib_myLog("IN: ", $data_in);
    Lib_myLog("FILE: ", __FILE__);
    $F5 = Lib_checkF5($session, $data_in['timestamp']);
    $continue = $F5 ? false : true;
    // On intialise une pseudo-transaction qui nous va permettre de stocker tous les objets rajoutés à la base
    // pour pouvoir les supprimer si nécessaire
    $transaction = new Collection();
    // Cas de VIDAGE d'un article de la base
    if ($continue && isset($data_in['submit_clear'])) {
        /*=============*/
        Lib_myLog("Vidage de l'article");
        $article = Article_recuperer($data_in['id_article']);
        $article->contenu = '';
        $article->UPD();
        $data_out['message_ok'] = $MSG['fr']['%%UPD%%'];
        // On remet à 0 le fichier contenant le "cache" des articles pour l'affichage des blocs
        Lib_writeCache('', "ARTICLES");
        // On remet à 0 le fichier contenant le "cache" de l'arborescence
        Lib_writeCache('', "ARBO");
        $continue = false;
    }
    // Cas d'ANNULATION du brouillon si celui-ci existe
    if ($continue && isset($data_in['submit_cancel'])) {
        // On récupère tous les anciens articles correspondant au type d'article pour les supprimer
        $args_articles['id_article'] = $data_in['id_article'];
        $args_articles['etat'] = 'brouillon';
        $liste_articles = Articles_chercher($args_articles);
        foreach ($liste_articles as $art) {
            $article = Article_recuperer($art['id_article']);
            $article->DEL();
        }
        $continue = false;
    }
    // Cas de MODIFICATION d'article ou de PRE-VISUALISATION
    if ($continue) {
        /*=============*/
        Lib_myLog("Recuperation de la categorie dans laquelle se retrouvera l'article");
        if (isset($data_in['id_arbo_pere']) && $data_in['id_arbo_pere'] != 0) {
            $arbo = Arbo_recuperer($data_in['id_arbo_pere']);
            $args_arbos['famille'] = $arbo->famille . $arbo->id_arbo . '-';
            $args_arbo['id_arbo'] = $data_in['id_arbo_pere'];
            $id_categorie_pere = $data_in['id_arbo_pere'];
            $id_categorie = $data_in['id_arbo_pere'];
            // Si l'id_arbo_fils est positionné, il "surclasse" l'id_arbo_pere!
            if (isset($data_in['id_arbo_fils']) && $data_in['id_arbo_fils'] != 0) {
                $arbo = Arbo_recuperer($data_in['id_arbo_fils']);
                $args_arbos['famille'] = $arbo->famille . $arbo->id_arbo . '-';
                $args_arbo['id_arbo'] = $data_in['id_arbo_fils'];
                $id_categorie = $data_in['id_arbo_fils'];
            }
        }
        /*=============*/
        Lib_myLog("Recuperation et mise a jour de l'article");
        $article = Article_recuperer($data_in['id_article']);
        /*=============*/
        Lib_myLog("Mise a jour l'article");
        $article->id_article = $data_in['id_article'];
        $article->id_categorie = $id_categorie_pere;
        $article->titre_page = $data_in['titre_page'];
        $article->titre = $data_in['titre'];
        $article->meta_titre = $data_in['meta_titre'] != '' ? $data_in['meta_titre'] : $data_in['titre'];
        $article->meta_description = $data_in['meta_description'];
        $article->meta_mots_clefs = $data_in['meta_mots_clefs'];
        $article->meta_url = $data_in['meta_url'] != '' ? Lib_urlRewrite($data_in['meta_url']) : Lib_urlRewrite($data_in['titre']);
        $article->contenu = $data_in['text1'];
        if (isset($data_in['data1'])) {
            $article->data1 = $data_in['data1'];
        }
        if (isset($data_in['data2'])) {
            $article->data2 = $data_in['data2'];
        }
        if (isset($data_in['data3'])) {
            $article->data3 = $data_in['data3'];
        }
        if (isset($data_in['data4'])) {
            $article->data4 = $data_in['data4'];
        }
        if (isset($data_in['data5'])) {
            $article->data5 = $data_in['data5'];
        }
        if (isset($data_in['data6'])) {
            $article->data6 = $data_in['data6'];
        }
        if (isset($data_in['titre_data1'])) {
            $article->titre_data1 = $data_in['titre_data1'];
        }
        if (isset($data_in['titre_data2'])) {
            $article->titre_data2 = $data_in['titre_data2'];
        }
        if (isset($data_in['titre_data3'])) {
            $article->titre_data3 = $data_in['titre_data3'];
        }
        if (isset($data_in['titre_data4'])) {
            $article->titre_data4 = $data_in['titre_data4'];
        }
        if (isset($data_in['titre_data5'])) {
            $article->titre_data5 = $data_in['titre_data5'];
        }
        if (isset($data_in['titre_data6'])) {
            $article->titre_data6 = $data_in['titre_data6'];
        }
        if ($url_reel_vignette != '') {
            $article->url_vignette = $vignette;
        }
        if (isset($data_in['submit_valid']) && !isset($data_in['etat'])) {
            $article->etat = 'inactif';
        }
        if (isset($data_in['submit_valid']) && isset($data_in['etat'])) {
            $article->etat = 'actif';
        }
        if (!isset($data_in['submit_valid']) && !isset($data_in['submit_cancel']) && !isset($data_in['submit_clear'])) {
            $article->etat = 'brouillon';
        }
        if ($_FILES["url_vignette"]["name"] != '') {
            //$valid = Lib_isValidFile($_FILES["url_vignette"]["name"], array("jpg", "jpeg", "png", "gif"));
            if ($_FILES["url_vignette"]['error'] == 1) {
                /*=============*/
                Lib_myLog("Taille trop elevee");
                $val = ini_get('upload_max_filesize');
                $data_out['message_ko'] = $MSG['fr']['%%Erreur_Taille%%'] . " ({$val})";
                $new->url_vignette = '';
            } else {
                if ($valid == 1) {
                    /*=============*/
                    Lib_myLog("Fichier non autorise");
                    $data_out['message_ko'] = $MSG['fr']['%%Fichier_non_autorise%%'];
                } else {
                    /*=============*/
                    Lib_myLog("Telechargement de la vignette");
                    $url_vignette = Lib_nettoie($_FILES["url_vignette"]["name"]);
                    $url_vignette = $article->id_article . '_' . $url_vignette;
                    // Si la vignette existait déjà, on la remplace...
                    if (file_exists('../../img_ftp/' . $url_vignette)) {
                        unlink('../../img_ftp/' . $url_vignette);
                    }
                    if (is_uploaded_file($_FILES["url_vignette"]["tmp_name"])) {
                        $tmp_vignette = $_FILES["url_vignette"]["tmp_name"];
                        rename($tmp_vignette, '../../img_ftp/' . $url_vignette);
                        if (file_exists('../../img_ftp/' . $url_vignette) && $url_vignette != '') {
                            chmod("../../img_ftp/{$url_vignette}", 0644);
                        }
                        // Redimensionnement, w=483, priorite w
                        // Lib_redimImage("../../img_ftp/$file", 483, '', 'w');
                    }
                    $article->url_vignette = $url_vignette;
                }
            }
        }
        $article->UPD();
        if ($data_in['lang'] == 'fr') {
            $arbo = Arbo_recuperer_par_element($article->id_article, 'article', $data_in['code_arbo']);
            //					$famille_initiale = $arbo->famille;
            //					// Il faut d'abord vérifier si on ne travaille pas avec une catégorie et si l'article va changer de famille ou pas !
            //					if ($arbo->id_arbo_pere == 0 && !empty($args_arbos['famille']) && $famille_initiale != $args_arbos['famille']) {
            //						/*=============*/ Lib_myLog("Changement de categorie : {$famille_initiale} => {$args_arbos['famille']}");
            //						$old_pos = $arbo->ordre;
            //						$arbo->famille = $args_arbos['famille'];
            //						$arbo->code_arbo = $data_in['code_arbo'];
            //						$ordres = Arbos_chercher($args_arbos);
            //						$pos = 0;
            //						foreach ($ordres as $ordre)
            //							if ($ordre['ordre'] > $pos) $pos = $ordre['ordre'];
            //						$pos++;
            //						$arbo->ordre = $pos;
            //						$arbo->famille = $args_arbos['famille'];
            //						/*=============*/ Lib_myLog("Nouvelle position : {$pos}");
            //
            //						/*=============*/ Lib_myLog("Retablissement de l'ordre sans coupure dans l'arborescence initiale ({$famille_initiale})");
            //						$args_arbos = '';
            //						$args_arbos['famille'] = $famille_initiale;
            //						$args_arbos['code_arbo'] = $data_in['code_arbo'];
            //						$ordres = Arbos_chercher($args_arbos);
            //						foreach($ordres as $ordre) {
            //							// On ne prend en compte que les elements ayant un ordre supérieur à celui de l'élément !
            //							if ($ordre['ordre'] < $old_pos) continue;
            //							$arbo_upd = Arbo_recuperer($ordre['id_arbo']);
            //							$arbo_upd->ordre = $arbo_upd->ordre -1;
            //							$arbo_upd->UPD();
            //						}
            //					}
            $arbo->intitule = $data_in['titre'];
            $arbo->UPD();
        }
        if (empty($data_out['message_ko'])) {
            $data_out['message_ok'] = $MSG['fr']['%%UPD%%'];
        }
        // On remet à 0 le fichier contenant le "cache" de l'arborescence
        Lib_writeCache('', "ARBO");
        // On remet à 0 le fichier contenant le "cache" des articles pour l'affichage des blocs
        Lib_writeCache('', "ARTICLES");
    }
    if ($continue) {
        if (isset($data_in['submit_valid'])) {
            if (isset($data_in['code_arbo'])) {
                header("Location: http://" . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\') . "/actions.php?action=Arbo_Accueil&code_arbo={$data_in['code_arbo']}");
            } else {
                $data_in['action'] = 'SiteDynamique_Apercu';
                call_user_func('SiteDynamique_Apercu', $data_in);
            }
        }
        if (!isset($data_in['submit_valid']) && !isset($data_in['submit_cancel']) && !isset($data_in['submit_clear'])) {
            $data_in['action'] = 'SiteDynamique_Preview';
        }
        call_user_func('SiteDynamique_Preview', $data_in);
    } else {
        if ($F5) {
            /*=============*/
            Lib_myLog("Tentative de F5!");
            $data_out['message_ko'] = $MSG[$lang]['%%Erreur_Revalidation%%'];
            $data_in['action'] = 'SiteDynamique_Apercu';
            call_user_func('SiteDynamique_Apercu', $data_in);
        } else {
            $data_in['action'] = 'SiteDynamique_Apercu';
            call_user_func('SiteDynamique_Apercu', $data_in);
        }
    }
}
function Docs_Image_UPD($data_in = array())
{
    Lib_myLog("action: " . $data_in['action']);
    foreach ($GLOBALS['tab_globals'] as $global) {
        global ${$global};
    }
    Lib_myLog("IN: ", $data_in);
    Lib_myLog("FILE: ", __FILE__);
    //HQ 28/05/2014 : On vide le cache pour pouvoir le regénérer partie publique !
    Lib_writeCache('', 'GALERIES');
    $id_galerie = $data_in['id_galerie'];
    $galerie = Galerie_recuperer($data_in['id_galerie']);
    $galerie->versions = array();
    $langues = $GLOBALS['LANGUES'];
    $langues[] = 'fr';
    foreach ($langues as $langue) {
        /*=============*/
        Lib_myLog("Recuperation du commentaire de l'image dans la langue");
        $galerie->addLang($langue, $data_in['legende_' . $langue], $data_in['data1_' . $langue], $data_in['data2_' . $langue], $data_in['data3_' . $langue], $data_in['data4_' . $langue], $data_in['data5_' . $langue]);
        $galerie->UPD();
    }
    if ($_FILES["url_gde_image"]["name"] != '') {
        // $valid = Lib_isValidFile($_FILES["url_gde_image"]["name"], array("jpg", "jpeg", "png", "gif"));
        if ($_FILES["url_gde_image"]['error'] == 1) {
            /*=============*/
            Lib_myLog("Taille trop elevee");
            $val = ini_get('upload_max_filesize');
            $data_out['message_ko'] = $MSG['fr']['%%Erreur_Taille%%'] . " ({$val})";
            $new->url_gde_image = '';
        } else {
            if ($valid == 1) {
                /*=============*/
                Lib_myLog("Fichier non autorise");
                $data_out['message_ko'] = $MSG['fr']['%%Fichier_non_autorise%%'];
            } else {
                /*=============*/
                Lib_myLog("Telechargement de l'image");
                $url_image = Lib_nettoie($_FILES["url_gde_image"]["name"]);
                $url_image = $id_galerie . '_' . $url_image;
                $ext = strrchr($url_image, '.');
                // On positionne par défaut une vignette au cas où une vignette n'aurait pas été fournie
                $vignette = Lib_nettoie($_FILES["url_gde_image"]["name"]);
                $vignette = $id_galerie . '_min_' . $vignette;
                // Si la vignette existait déjà, on la remplace...
                if (file_exists('../../img_ftp/' . $url_image)) {
                    unlink('../../img_ftp/' . $url_image);
                }
                if (is_uploaded_file($_FILES["url_gde_image"]["tmp_name"])) {
                    $tmp_gde_image = $_FILES["url_gde_image"]["tmp_name"];
                    rename($tmp_gde_image, '../../img_ftp/' . $url_image);
                    if (file_exists('../../img_ftp/' . $url_image) && $url_image != '') {
                        chmod("../../img_ftp/" . $url_image, 0644);
                    }
                }
            }
        }
    }
    if (isset($url_image)) {
        $galerie->url_gde_image = $url_image;
    }
    if ($data_in['sup_fichier'] && file_exists("../../img_ftp/" . $galerie->url_gde_image)) {
        unlink('../../img_ftp/' . $galerie->url_gde_image);
        $galerie->url_gde_image = '';
    }
    $galerie->UPD();
}
function Adherents_Adherent_UPD($data_in = array())
{
    Lib_myLog("action: " . $data_in['action']);
    foreach ($GLOBALS['tab_globals'] as $global) {
        global ${$global};
    }
    Lib_myLog("IN: ", $data_in);
    Lib_myLog("FILE: ", __FILE__);
    $logo = '';
    if ($_FILES["logo"]["name"] != '') {
        /*=============*/
        Lib_myLog("Telechargement du logo");
        $logo = Lib_nettoie($_FILES["logo"]["name"]);
        $logo = $data_in['id_adherent'] . '_' . $logo;
        /*=============*/
        Lib_myLog("Nouveau nom pour le logo : {$logo}");
        $url_logo = '../../img_ftp/' . $logo;
        if ($_FILES['logo']['error']) {
            switch ($_FILES['logo']['error']) {
                case 1:
                    // UPLOAD_ERR_INI_SIZE
                    echo "Le fichier dépasse la limite autorisée par le serveur (fichier php.ini) !";
                    break;
                case 2:
                    // UPLOAD_ERR_FORM_SIZE
                    echo "Le fichier dépasse la limite autorisée dans le formulaire HTML !";
                    break;
                case 3:
                    // UPLOAD_ERR_PARTIAL
                    echo "L'envoi du fichier a été interrompu pendant le transfert !";
                    break;
                case 4:
                    // UPLOAD_ERR_NO_FILE
                    echo "Le fichier que vous avez envoyé a une taille nulle !";
                    break;
            }
        } else {
            // Si le logo existait déjà, on le remplace...
            if (file_exists($url_logo)) {
                unlink($url_logo);
            }
            if (is_uploaded_file($_FILES["logo"]["tmp_name"])) {
                $tmp_logo = $_FILES["logo"]["tmp_name"];
                rename($tmp_logo, $url_logo);
                /*=============*/
                Lib_myLog("Redimensionnement, w max=200, h max=220, priorite=h");
                Lib_redimImage($url_logo, 200, 220, 'w');
                chmod("{$url_logo}", 0644);
            }
        }
    }
    //			$categorie1 = '';
    //			foreach($GLOBALS['CONF']['CATEGORIE1'] as $id => $libelle)
    //				if ($data_in['chk_categorie1_'.$id])
    //					$categorie1 .= "|{$id}|";
    //			/*=============*/ Lib_myLog("Parametrage categorie1 : {$categorie1}");
    //
    //			$categorie2 = '';
    //			foreach($GLOBALS['CONF']['CATEGORIE2'] as $id => $libelle)
    //				if ($data_in['chk_categorie2_'.$id])
    //					$categorie2 .= "|{$id}|";
    //			/*=============*/ Lib_myLog("Parametrage categorie2 : {$categorie2}");
    //
    //			$categorie3 = '';
    //			foreach($GLOBALS['CONF']['CATEGORIE3'] as $id => $libelle)
    //				if ($data_in['chk_categorie3_'.$id])
    //					$categorie3 .= "|{$id}|";
    //			/*=============*/ Lib_myLog("Parametrage categorie1 : {$categorie3}");
    /*=============*/
    Lib_myLog("Mise a jour d'un adherent");
    $adh = Adherent_recuperer($data_in['id_adherent']);
    $adh->nom = $data_in['nom'];
    $adh->prenom = $data_in['prenom'];
    $adh->enseigne = $data_in['enseigne'];
    $adh->raison_sociale = $data_in['raison_sociale'];
    $adh->adresse1 = $data_in['adresse1'];
    $adh->adresse2 = $data_in['adresse2'];
    $adh->ville = $data_in['ville'];
    $adh->cp = $data_in['cp'];
    $adh->pays = $data_in['pays'];
    $adh->telephone = $data_in['telephone'];
    $adh->fax = $data_in['fax'];
    $adh->email = $data_in['email'];
    $adh->site_internet = $data_in['site_internet'];
    $adh->entreprise_qualifiee = $data_in['entreprise_qualifiee'];
    if ($logo != '') {
        $adh->logo = $logo;
    }
    if ($logo == '' && $data_in['supprimer_logo'] == 1) {
        $adh->logo = '';
    }
    $adh->categorie = $data_in['categorie'];
    $adh->nature_lien = $data_in['nature_lien'];
    $adh->info_publique = $data_in['info_publique'];
    $adh->categorie1 = $categorie1;
    $adh->categorie2 = $categorie2;
    $adh->categorie3 = $categorie3;
    $adh->latitude = $data_in['latitude'];
    $adh->longitude = $data_in['longitude'];
    if ($data_in['nom_utilisateur'] == '') {
        // On prend la 1ère et la dernière lette de la raison sociale, la première lettre de la ville et le code postal
        $nom_utilisateur = substr($data_in['raison_sociale'], 0, 1);
        $nom_utilisateur .= substr($data_in['raison_sociale'], -1);
        $nom_utilisateur .= substr($data_in['ville'], -1);
        $nom_utilisateur .= $data_in['cp'];
        $data_in['nom_utilisateur'] = strtoupper($nom_utilisateur);
    }
    $adh->nom_utilisateur = $data_in['nom_utilisateur'];
    if ($data_in['password'] == '') {
        // Génération d'un nombre aléatoire sur 3 chiffres n'existant pas déjà en base
        $data_in['password'] = mt_rand(100, 899);
    }
    $adh->password = $data_in['password'];
    $adh->UPD();
    $data_out['message_ok'] = $MSG['fr']['%%fiche_UPD%%'];
    // On force le filtre pour que le système aille chercher à nouveau toutes les données en base
    $data_in['filtrer'] = 1;
    $data_in['action'] = 'Adherents_Recherche';
    call_user_func('Adherents_Recherche', $data_in);
}
Esempio n. 4
0
function ExecActions($action)
{
    // On recupere tous les objet contenant les donnees
    global $data_in, $data_out;
    switch ($action) {
        case "Classe_Accueil":
            include 'class.php';
            break;
        case "Class_ADD":
            //*******************************************************************//
            //***************STOCKAGE DES CHAMPS DANS UN TABLEAU******************//
            //*******************************************************************//
            //Initialisation du tableau champ;
            $champ = array();
            //On commence par l'id
            $champ[0]['nom'] = 'id_' . $data_in['nom_table'];
            $champ[0]['type'] = 'INT';
            $champ[0]['taille'] = '11';
            $champ[0]['recherche'] = 'on';
            //On stocke les champs ajouter par l'utilisateur
            for ($i = 1, $j = 1; $i <= $data_in['nb_lignes']; $i++) {
                if (!isset($data_in['ligne_' . $i])) {
                    //Si le type est INT et la taille non spécifiée, la taille vaut 11
                    if ($data_in['type_' . $i] == 'INT' && $data_in['taille_' . $i] == '') {
                        $data_in['taille_' . $i] = '11';
                    } elseif ($data_in['type_' . $i] == 'VARCHAR' && $data_in['taille_' . $i] == '') {
                        $data_in['taille_' . $i] = '255';
                    } elseif ($data_in['type_' . $i] == 'DECIMAL' && $data_in['taille_' . $i] == '') {
                        $data_in['taille_' . $i] = '5,2';
                    }
                    //Récupération des champs et insertion dans le tableau
                    $champ[$j]['nom'] = Lib_nettoie($data_in['nom_' . $i]);
                    $champ[$j]['type'] = $data_in['type_' . $i];
                    $champ[$j]['taille'] = preg_replace('/ /', '', $data_in['taille_' . $i]);
                    $champ[$j]['recherche'] = isset($data_in['recherche_' . $i]) ? $data_in['recherche_' . $i] : '';
                    $champ[$j]['clef_secondaire_1'] = isset($data_in['clef_' . $i . '_1']) ? $data_in['clef_' . $i . '_1'] : '';
                    $champ[$j]['clef_secondaire_2'] = isset($data_in['clef_' . $i . '_2']) ? $data_in['clef_' . $i . '_2'] : '';
                    $champ[$j]['clef_secondaire_3'] = isset($data_in['clef_' . $i . '_3']) ? $data_in['clef_' . $i . '_3'] : '';
                    $j++;
                }
            }
            //On ajoute les champs etat, date_add, date_upd, et info_table
            $champ[$j]['nom'] = 'etat';
            $champ[$j]['type'] = 'ENUM';
            $champ[$j]['taille'] = "'actif', 'inactif', 'supprime'";
            $champ[$j]['recherche'] = 'on';
            $j++;
            $champ[$j]['nom'] = 'date_add';
            $champ[$j]['type'] = 'VARCHAR';
            $champ[$j]['taille'] = '255';
            $j++;
            $champ[$j]['nom'] = 'date_upd';
            $champ[$j]['type'] = 'VARCHAR';
            $champ[$j]['taille'] = '255';
            $j++;
            $champ[$j]['nom'] = 'info_' . $data_in['nom_table'];
            $champ[$j]['type'] = 'VARCHAR';
            $champ[$j]['taille'] = '255';
            //La variable j devient le nombre de champ
            $nb_champs = $j;
            //*******************************************************************//
            //*****************RECHERCHE DU RETRAIT MAXIMAL***********************//
            //*******************************************************************//
            //Permet d'aligner les signes = dans les parties où les lignes sont similaires, sauf le nom du champ
            $nb_caracteres_max = 0;
            $nb_caracteres_min = 0;
            for ($i = 0; $i <= $nb_champs; $i++) {
                if (strlen($champ[$i]['nom']) > $nb_caracteres_max) {
                    $nb_caracteres_max = strlen($champ[$i]['nom']);
                }
                if (strlen($champ[$i]['nom']) < $nb_caracteres_min) {
                    $nb_caracteres_min = strlen($champ[$i]['nom']);
                }
            }
            $nb_retraits_max = ceil(($nb_caracteres_max - $nb_caracteres_min) / 3);
            //*******************************************************************//
            //*********************RECHERCHE DU PLURIEL***************************//
            //*******************************************************************//
            //Le nom de la table est nettoyé : on enlève les accents et les espaces, on remplace les tirets par des "_"
            $nom_table = strtolower(Lib_nettoie($data_in['nom_table']));
            //Prennent un x :
            //Les noms terminés par "au" ou "eau" sauf landau et sarrau
            //Les noms terminés par "eau"
            //Les noms terminés par "eu" sauf pneu et bleu
            //Les noms bijou, caillou, chou,genou, hibou, joujou, pou prennent un
            if (substr($nom_table, -2) == 'au' && $nom_table != 'sarrau' && $nom_table != 'landau' || substr($nom_table, -3) == 'eau' || substr($nom_table, -2) == 'eu' && $nom_table != 'bleu' && $nom_table != 'pneu' || $nom_table == 'bijou' || $nom_table == 'caillou' || $nom_table == 'chou' || $nom_table == 'genou' || $nom_table == 'hibou' || $nom_table == 'joujou' || $nom_table == 'pou') {
                $nom_table_pluriel = $nom_table . 'x';
            } elseif (substr($nom_table, -2) == 'al' && $nom_table != 'bal' && $nom_table != 'bancal' && $nom_table != 'carnaval' && $nom_table != 'ceremonial' && $nom_table != 'chacal' && $nom_table != 'festival' && $nom_table != 'recital' && $nom_table != 'regal' && $nom_table != 'aval' && $nom_table != 'cal' && $nom_table != 'caracal' && $nom_table != 'cantal' && $nom_table != 'choral' && $nom_table != 'nopal' && $nom_table != 'pal' && $nom_table != 'santal' && $nom_table != 'sandal' && $nom_table != 'serval' && $nom_table != 'narval') {
                $coupure = strlen($nom_table) - 2;
                $nom_table_pluriel = substr($nom_table, 0, $coupure) . 'aux';
            } elseif ($nom_table == 'bail') {
                $nom_table_pluriel = 'baux';
            } elseif ($nom_table == 'corail') {
                $nom_table_pluriel = 'coraux';
            } elseif ($nom_table == 'email') {
                $nom_table_pluriel = 'emaux';
            } elseif ($nom_table == 'soupirail') {
                $nom_table_pluriel = 'soupiraux';
            } elseif ($nom_table == 'travail') {
                $nom_table_pluriel = 'travaux';
            } elseif ($nom_table == 'vantail') {
                $nom_table_pluriel = 'vantaux';
            } elseif ($nom_table == 'vitrail') {
                $nom_table_pluriel = 'vitraux';
            } elseif ($nom_table == 'ail') {
                $nom_table_pluriel = 'auxs';
            } elseif ($nom_table == 'oeil') {
                $nom_table_pluriel = 'yeux';
            } elseif ($nom_table == 'aieul') {
                $nom_table_pluriel = 'aieux';
            } elseif ($nom_table == 'ciel') {
                $nom_table_pluriel = 'cieux';
            } elseif (substr($nom_table, -1) != 's' && substr($nom_table, -1) != 'x') {
                $nom_table_pluriel = $nom_table . 's';
            } else {
                $nom_table_pluriel = $nom_table;
            }
            //Nom de la classe avec une majuscule (singulier)
            $nom_classe = ucwords($nom_table);
            //Nom de la classe avec une majuscule (pluriel)
            $nom_classe_pluriel = ucwords($nom_table_pluriel);
            //Nom de la classe en majuscule
            $nom_define = strtoupper($nom_table);
            //*******************************************************************//
            //************COMMENTAIRES EN TETE POUR DOXYGEN**********************//
            //*******************************************************************//
            $content = "";
            $content .= "<? // DEBUT DU BLOC PARAMETRAGE NE PAS MODIFIER\n";
            $content .= "/** @file\n";
            $content .= "*  @brief this file in " . $nom_classe_pluriel . "\n";
            $content .= "*/\n";
            $content .= "\n";
            $content .= "/**\n";
            $content .= " * Classe pour la gestion de " . $nom_table_pluriel . "\n";
            $content .= " *\n";
            $content .= " * @author dilas0ft & z3cN@\$\n";
            $content .= " * @version 1.0\n";
            $content .= " * @code\n\n";
            //*******************************************************************//
            //*****************************CODE SQL******************************//
            //*******************************************************************//
            /* SYNTHAXE SQL 
            			CREATE TABLE `table` (
            			`a` INT(11) NOT NULL, 
            			`b` VARCHAR(255) NOT NULL, 
            			`c` TEXT NOT NULL, 
            			`d` DECIMAL(5,2) NOT NULL, 
            			`e` DATE NOT NULL, 
            			`f` ENUM('oui', 'non') NOT NULL, 
            			`g` VARCHAR(1) NOT NULL, 
            			PRIMARY KEY (`a`)
            			); */
            $sql = "";
            $sql .= "CREATE TABLE `" . $data_in['nom_bdd'] . "_" . $nom_table . "` (\n";
            for ($i = 0; $i <= $nb_champs; $i++) {
                $sql .= "\t `" . $champ[$i]['nom'] . "` ";
                switch ($champ[$i]['type']) {
                    case 'INT':
                    case 'VARCHAR':
                    case 'DECIMAL':
                    case 'ENUM':
                        $sql .= $champ[$i]['type'] . "(" . $champ[$i]['taille'] . ") NOT NULL";
                        if ($i == 0) {
                            $sql .= " auto_increment";
                        }
                        $sql .= ",\n";
                        break;
                    case 'CHAR':
                    case 'TEXT':
                    case 'DATE':
                        $sql .= $champ[$i]['type'] . " NOT NULL,\n";
                        break;
                }
            }
            $sql .= "PRIMARY KEY(`" . $champ[0]['nom'] . "`));";
            $sql .= "\n";
            //Concaténation de la requête sql à la variable content
            $content .= $sql;
            $content .= "\n * @endcode\n";
            $content .= " *\n";
            $content .= " */\n\n";
            //*******************************************************************//
            //****************RECHERCHE DES CLEFS SECONDAIRES**********************//
            //*******************************************************************//
            //Déclaration du tableau de stockage des clefs
            $clef = array();
            //Initialisation : la premiere clef est la clef primaire
            $clef[0][0] = $champ[0]['nom'];
            $clef[1] = array();
            $clef[2] = array();
            $clef[3] = array();
            //Recherche des clefs secondaires
            for ($i = 0; $i <= $nb_champs; $i++) {
                //Récupération de la clef 1
                if (isset($champ[$i]['clef_secondaire_1']) && $champ[$i]['clef_secondaire_1'] == 'on') {
                    $clef[1][] = $champ[$i]['nom'];
                }
                //Récupération de la clef 2
                if (isset($champ[$i]['clef_secondaire_2']) && $champ[$i]['clef_secondaire_2'] == 'on') {
                    $clef[2][] = $champ[$i]['nom'];
                }
                //Récupération de la clef 3
                if (isset($champ[$i]['clef_secondaire_3']) && $champ[$i]['clef_secondaire_3'] == 'on') {
                    $clef[3][] = $champ[$i]['nom'];
                }
            }
            //*******************************************************************//
            //************NOTES POUR LES CLEFS SECONDAIRES ET DE RECHERCHE**********//
            //*******************************************************************//
            $content .= "// Clefs de recherche \n";
            for ($i = 1, $j = 1; $i <= $nb_champs; $i++) {
                if (isset($champ[$i]['recherche']) && $champ[$i]['recherche'] == 'on') {
                    $content .= "// Clef de recherche " . $j . " : " . $champ[$i]['nom'] . "\n";
                    $j++;
                }
            }
            $content .= "\n";
            $content .= "// Clefs secondaires\n";
            $content .= "//";
            for ($i = 0; $i < count($clef[1]); $i++) {
                $content .= " " . $clef[1][$i] . ',';
            }
            $content .= "\n";
            $content .= "//";
            for ($i = 0; $i < count($clef[2]); $i++) {
                $content .= " " . $clef[2][$i] . ',';
            }
            $content .= "\n";
            $content .= "//";
            for ($i = 0; $i < count($clef[3]); $i++) {
                $content .= " " . $clef[3][$i] . ',';
            }
            $content .= "\n// FIN DU BLOC PARAMETRAGE\n";
            //*******************************************************************//
            //*****************************DEFINE********************************//
            //*******************************************************************//
            $content .= "if (!defined('__" . $nom_define . "_INC__')){\n";
            $content .= "\tdefine('__" . $nom_define . "_INC__', 1);\n\n";
            //*******************************************************************//
            //********************DECLARATION DE LA CLASSE*************************//
            //*******************************************************************//
            $content .= "class " . $nom_classe . " extends Element {\n";
            //*******************************************************************//
            //********************DECLARATION DES CHAMPS**************************//
            //*******************************************************************//
            for ($i = 0; $i <= $nb_champs; $i++) {
                $content .= "\tvar \$" . $champ[$i]['nom'] . ";\n";
            }
            //*******************************************************************//
            //**************************CONSTRUCTEUR*****************************//
            //*******************************************************************//
            //Affichage du commentaires en tête
            $content .= "\n/** \n";
            $content .= "Constructeur de la classe.\n";
            $content .= "*/\n";
            //Signature de la fonction
            $content .= "function " . $nom_classe . "()\n";
            //Contenu
            $content .= "{\n";
            $content .= "\t\$this->type_moi = \"" . $nom_table_pluriel . "\";\n";
            $content .= "}\n\n";
            //*******************************************************************//
            //****************************GET_TAB********************************//
            //*******************************************************************//
            //Affichage du commentaires en tête
            $content .= "/**\n";
            $content .= "Cette fonction retourne un tableau correspondant aux différents attributs de " . $nom_classe . ".\n";
            $content .= "*/\n";
            $content .= "function getTab()\n";
            $content .= "{\n";
            for ($i = 0; $i <= $nb_champs; $i++) {
                //On calcule le nombre de retrait qu'il faut pour ce champ.
                $nb_retraits = $nb_retraits_max - ceil(strlen($champ[$i]['nom']) / 3);
                //Premiere partie de la ligne
                $content .= "\t\$tab['" . $champ[$i]['nom'] . "']";
                //On place autant de retrait que le nombre calculé
                for ($j = 0; $j <= $nb_retraits; $j++) {
                    $content .= "\t";
                }
                //Seconde partie de la ligne
                $content .= "= \$this->" . $champ[$i]['nom'] . ";\n";
            }
            $content .= "\treturn \$tab;\n";
            $content .= "}\n\n";
            //*******************************************************************//
            //********************************ADD********************************//
            //*******************************************************************//
            //Affichage du commentaires en tête
            $content .= "/**\n";
            $content .= "Cette fonction ajoute un element de la table " . $nom_table . " à la BDD. \n";
            $content .= "*/\n";
            $content .= "function ADD()\n";
            $content .= "{\n";
            for ($i = 1; $i <= $nb_champs; $i++) {
                //Premiere partie de la ligne
                //Le champ update n'est pas requis dans la requête INSERT
                if ($champ[$i]['nom'] != 'date_upd') {
                    $content .= "\t\$" . $champ[$i]['nom'] . " ";
                    //On place autant de retrait que le nombre calculé
                    //On calcule le nombre de retrait qu'il faut pour ce champ.
                    $nb_retraits = $nb_retraits_max - ceil(strlen($champ[$i]['nom'])) / 3;
                    for ($j = 0; $j <= $nb_retraits; $j++) {
                        $content .= "\t";
                    }
                    //Seconde partie de la ligne
                    //Suivant le type, on appelle une fonction de traitement de la chaîne différente
                    if ($champ[$i]['type'] == 'VARCHAR' || $champ[$i]['type'] == 'TEXT') {
                        if ($champ[$i]['nom'] != 'date_add' && $champ[$i]['nom'] != 'date_upd') {
                            $content .= "= Sql_prepareTexteStockage(\$this->{$champ[$i]['nom']});\n";
                        } elseif ($champ[$i]['nom'] == 'date_add') {
                            $content .= "= time();\n";
                        }
                    } elseif ($champ[$i]['type'] == 'DATE') {
                        $content .= "= Lib_frToEn(\$this->{$champ[$i]['nom']});\n";
                    } elseif ($champ[$i]['type'] == 'DECIMAL') {
                        $content .= "= strtr(\$this->{$champ[$i]['nom']}, \",\", \".\");\n";
                    } elseif ($champ[$i]['type'] == 'INT') {
                        $content .= "= is_numeric(\$this->{$champ[$i]['nom']}) ? \$this->{$champ[$i]['nom']} : 0;\n";
                    } elseif ($champ[$i]['type'] == 'ENUM' && $champ[$i]['nom'] == 'etat') {
                        $content .= "= \$this->etat != '' ? \$this->etat : 'actif';\n";
                    } else {
                        $content .= "= \$this->{$champ[$i]['nom']};\n";
                    }
                }
            }
            $content .= "\n";
            //Requête SQL INSERT
            $content .= "\t\$sql = \" INSERT INTO \".\$GLOBALS['prefix'].\"" . $nom_table . "\n";
            $content .= "\t\t\t\t\t(";
            for ($i = 1; $i <= $nb_champs; $i++) {
                //Le champ update n'est pas requis dans la requête INSERT
                if ($champ[$i]['nom'] != 'date_upd') {
                    //Contrôle pour le positionnement des virgules
                    if ($i != $nb_champs) {
                        $content .= $champ[$i]['nom'] . ", ";
                    } else {
                        $content .= $champ[$i]['nom'];
                    }
                    if ($i % 3 == 0) {
                        $content .= "\n\t\t\t\t\t";
                    }
                }
            }
            $content .= ")\n";
            $content .= "\t\t\t\tVALUES \n";
            $content .= "\t\t\t\t\t (";
            for ($i = 1; $i <= $nb_champs; $i++) {
                if ($champ[$i]['nom'] != 'date_upd') {
                    //Contrôle pour le positionnement des virgules
                    if ($i != $nb_champs) {
                        $content .= "'\$" . $champ[$i]['nom'] . "', ";
                    } else {
                        $content .= "'\$" . $champ[$i]['nom'] . "'";
                    }
                    if ($i % 3 == 0) {
                        $content .= "\n\t\t\t\t\t";
                    }
                }
            }
            $content .= ")\";\n\n";
            $content .= "\tif (!Sql_exec(\$sql)) \$this->setError(ERROR);\n\n";
            $content .= "\tif (!\$this->isError()) {\n";
            $content .= "\t\t\$" . $champ[0]['nom'] . " = Sql_lastInsertId(); \n";
            $content .= "\t\tLib_sqlLog(\$sql.\" -- \$" . $champ[0]['nom'] . "\");\n";
            $content .= "\t\t\$this->" . $champ[0]['nom'] . " = \$this->" . $champ[0]['nom'] . ";\n";
            $content .= "\t\treturn \$" . $champ[0]['nom'] . ";\n";
            $content .= "\t}\n";
            $content .= "\treturn;\n";
            $content .= "}\n\n";
            //*******************************************************************//
            //********************************UPD********************************//
            //*******************************************************************//
            //Affichage du commentaires en tête
            $content .= "/**\n";
            $content .= "Cette fonction modifie un élément de la table " . $nom_table . " dans la BDD. \n";
            $content .= "*/\n";
            $content .= "function UPD()\n";
            $content .= "{\n";
            for ($i = 0; $i <= $nb_champs; $i++) {
                //Premiere partie de la ligne
                //Le champ add n'est pas requis dans la requête UPDATE
                if ($champ[$i]['nom'] != 'date_add') {
                    $content .= "\t\$" . $champ[$i]['nom'] . " ";
                    //On place autant de retrait que le nombre calculé
                    //On calcule le nombre de retrait qu'il faut pour ce champ.
                    $nb_retraits = $nb_retraits_max - ceil(strlen($champ[$i]['nom'])) / 3;
                    for ($j = 0; $j <= $nb_retraits; $j++) {
                        $content .= "\t";
                    }
                    //Seconde partie de la ligne
                    //Suivant le type, on appelle une fonction de traitement de la chaîne différente
                    if ($champ[$i]['type'] == 'VARCHAR' || $champ[$i]['type'] == 'TEXT') {
                        if ($champ[$i]['nom'] != 'date_upd') {
                            $content .= "= Sql_prepareTexteStockage(\$this->{$champ[$i]['nom']});\n";
                        } elseif ($champ[$i]['nom'] == 'date_upd') {
                            $content .= "= time();\n";
                        }
                    } elseif ($champ[$i]['type'] == 'DATE') {
                        $content .= "= Lib_frToEn(\$this->{$champ[$i]['nom']});\n";
                    } elseif ($champ[$i]['type'] == 'DECIMAL') {
                        $content .= "= strtr(\$this->{$champ[$i]['nom']}, \",\", \".\");\n";
                    } elseif ($champ[$i]['type'] == 'INT') {
                        $content .= "= is_numeric(\$this->{$champ[$i]['nom']}) ? \$this->{$champ[$i]['nom']} : 0;\n";
                    } else {
                        $content .= "= \$this->" . $champ[$i]['nom'] . ";\n";
                    }
                }
            }
            $content .= "\n";
            //Requête SQL UPDATE
            $content .= "\t\$sql = \" UPDATE \".\$GLOBALS['prefix'].\"" . $nom_table . "\n";
            $content .= "\t\t\t\tSET ";
            for ($i = 1; $i <= $nb_champs; $i++) {
                if ($champ[$i]['nom'] != 'date_add') {
                    $content .= $champ[$i]['nom'] . " = ";
                    //Contrôle pour le positionnement des virgules
                    if ($i != $nb_champs) {
                        $content .= "'\$" . $champ[$i]['nom'] . "', ";
                    } else {
                        $content .= "'\$" . $champ[$i]['nom'] . "'";
                    }
                    if ($i % 3 == 0) {
                        $content .= "\n\t\t\t\t\t";
                    }
                }
            }
            $content .= "\n\t\t\t\tWHERE " . $champ[0]['nom'] . " = \$" . $champ[0]['nom'] . "\";\n\n";
            $content .= "\tif (!Sql_exec(\$sql)) \$this->setError(ERROR);\n";
            $content .= "\tif (!\$this->isError()) Lib_sqlLog(\$sql);\n";
            $content .= "\n";
            $content .= "\treturn;\n";
            $content .= "}\n\n";
            //*******************************************************************//
            //******************************DELETE*******************************//
            //*******************************************************************//
            $content .= "/**\n";
            $content .= "\tCette fonction supprime un chantier de la BDD.\n";
            $content .= "*/\n";
            $content .= "function DEL()\n";
            $content .= "{\n";
            $content .= "\tif (\$this->isError()) return;\n\n";
            $content .= "\t\$" . $champ[0]['nom'] . " = \$this->" . $champ[0]['nom'] . ";\n\n";
            $content .= "\t\$sql = \" DELETE FROM \".\$GLOBALS['prefix'].\"" . $nom_table . "\n";
            $content .= "\t\t\t\tWHERE " . $champ[0]['nom'] . " = \$" . $champ[0]['nom'] . "\";\n\n";
            $content .= "\tif (!Sql_exec(\$sql)) \$this->setError(ERROR);\n";
            $content .= "\tif (!\$this->isError()) Lib_sqlLog(\$sql);\n\n";
            $content .= "\treturn;\n";
            $content .= "}\n\n";
            //*******************************************************************//
            //*******************************TOSTR*******************************//
            //*******************************************************************//
            //Affichage du commentaires en tête
            $content .= "/** \n";
            $content .= "Cette fonction transforme les attributs en chaine de caractères.\n";
            $content .= "*/\n";
            $content .= "function toStr()\n";
            $content .= "{\n";
            $content .= "\t\$str = \"\";\n";
            for ($i = 0; $i <= $nb_champs; $i++) {
                $content .= "\t\$str = Lib_addElem(\$str, \$this->" . $champ[$i]['nom'] . ");\n";
            }
            $content .= "\t\$str = \"(\".\$str.\")\";\n";
            $content .= "\treturn \$str;\n";
            $content .= "}\n";
            $content .= "}\n\n";
            //*******************************************************************//
            //************************CLASSE_RECUPERER***************************//
            //*******************************************************************//
            //Pour chaque clef secondaire
            for ($i = 0; $i <= 3; $i++) {
                if (count($clef[$i]) >= 1) {
                    //Affichage du commentaires en tête
                    $content .= "/**\n";
                    if ($i == 0) {
                        $content .= "Recupère toutes les données relatives à un " . $nom_table . " suivant son identifiant\n";
                    } else {
                        $content .= "Recupère toutes les données relatives à un " . $nom_table . " suivant les attributs ";
                        foreach ($clef[$i] as $id => $key) {
                            $content .= $key . ", ";
                        }
                    }
                    $content .= "et retourne la coquille \"" . $nom_classe . "\" remplie avec les informations récupérées\n";
                    $content .= "de la base.\n";
                    foreach ($clef[$i] as $key) {
                        $content .= "@param " . $key . ".\n";
                    }
                    $content .= "*/\n";
                    //Signature de la fonction
                    //Pour la clef primaire, la fonction s'appelle nom_classe_recuperer
                    //Pour les clefs secondaires, la fonction s'appelle
                    if ($i == 0) {
                        $content .= "function " . $nom_classe . "_recuperer";
                    } else {
                        $content .= "function " . $nom_classe . "_recuperer_" . $clef[$i][0];
                    }
                    foreach ($clef[$i] as $id => $key) {
                        if ($id != 0) {
                            $content .= "_" . $key;
                        }
                    }
                    $content .= "(";
                    $content .= "\$" . $clef[$i][0];
                    foreach ($clef[$i] as $id => $key) {
                        if ($id != 0) {
                            $content .= ", \$" . $key;
                        }
                    }
                    $content .= ")\n";
                    $content .= "{\n";
                    //Création d'un nouvel élement
                    $content .= "\t\$" . $nom_table . " = new " . $nom_classe . "();\n\n";
                    //Génération de la requête SQL
                    $content .= "\t\$sql = \" SELECT *\n";
                    $content .= "\t\t\t\tFROM \".\$GLOBALS['prefix'].\"" . $nom_table . "\n";
                    $content .= "\t\t\t\tWHERE ";
                    $content .= $clef[$i][0] . " = '\$" . $clef[$i][0] . "'";
                    foreach ($clef[$i] as $id => $key) {
                        if ($id != 0) {
                            $content .= "\t\t\t\tAND " . $key . " = '\$" . $key . "'";
                        }
                        if (!empty($clef[$i][$id + 1])) {
                            $content .= "\n";
                        }
                    }
                    $content .= ";\";\n\n";
                    //Exécution de la requête
                    $content .= "\t\$result = Sql_query(\$sql);\n\n";
                    //Insertion du resultats dans l'objet
                    $content .= "\tif (\$result && Sql_errorCode(\$result) === \"00000\") {\n";
                    $content .= "\t\t\$row = Sql_fetch(\$result);\n";
                    for ($j = 0; $j <= $nb_champs; $j++) {
                        //Premiere partie de la ligne
                        $content .= "\t\t\$" . $nom_table . "->" . $champ[$j]['nom'] . "";
                        //On place autant de retrait que le nombre calculé
                        //On calcule le nombre de retrait qu'il faut pour ce champ.
                        $nb_retraits = $nb_retraits_max - ceil(strlen($champ[$j]['nom'])) / 3;
                        for ($k = 0; $k <= $nb_retraits; $k++) {
                            $content .= "\t";
                        }
                        //Seconde partie de la ligne
                        //Suivant le type, on appelle une fonction de traitement de la chaîne différente
                        if (($champ[$j]['type'] == 'VARCHAR' || $champ[$j]['type'] == 'TEXT') && ($champ[$j]['nom'] != 'date_add' && $champ[$j]['nom'] != 'date_upd')) {
                            $content .= "= Sql_prepareTexteAffichage(\$row['" . $champ[$j]['nom'] . "']);\n";
                        } elseif ($champ[$j]['type'] == 'DATE') {
                            $content .= "= Lib_enToFr(\$row['" . $champ[$j]['nom'] . "']);\n";
                        } else {
                            $content .= "= \$row['" . $champ[$j]['nom'] . "'];\n";
                        }
                    }
                    $content .= "\t}\n";
                    $content .= "\treturn \$" . $nom_table . ";\n";
                    $content .= "}\n\n";
                }
            }
            //*******************************************************************//
            //************************CLASSES_CHERCHER***************************//
            //*******************************************************************//
            //Affichage du commentaires en tête
            $content .= "/**\n";
            $content .= "Retourne un tableau de " . $nom_table_pluriel . " correspondant aux champs du tableau en argument.\n";
            $content .= "@param \$args\n";
            $content .= "*/\n";
            //Signature de la fonction
            $content .= "function " . $nom_classe_pluriel . "_chercher(\$args)\n";
            $content .= "{\n";
            //Déclaration du tableau de résultat
            $content .= "\t\$count = 0;\n\n";
            $content .= "\t\$tab_result = array();\n\n";
            //Génération de la requête SQL
            $content .= "\tif (isset(\$args['count'])) {\n";
            $content .= "\t\t\$sql = \" SELECT count(*) nb_enregistrements \n";
            $content .= "\t\t\t\t\tFROM \".\$GLOBALS['prefix'].\"" . $nom_table . "\n";
            $content .= "\t\t\t\t\tWHERE 1\";\n";
            $content .= "\t} else {\n";
            $content .= "\t\t\$sql = \" SELECT * \n";
            $content .= "\t\t\t\t\tFROM \".\$GLOBALS['prefix'].\"" . $nom_table . "\n";
            $content .= "\t\t\t\t\tWHERE 1\";\n";
            $content .= "\t}\n\n";
            //Le tableau est retourné vide si le tableau $args ne contient pas les champs nécessaires
            $content .= "\tif (!isset(\$args['" . $champ[0]['nom'] . "'])";
            for ($i = 1, $j = 1; $i <= $nb_champs; $i++) {
                if (isset($champ[$i]['recherche']) && $champ[$i]['recherche'] == 'on') {
                    $j++;
                    $content .= " && !isset(\$args['" . $champ[$i]['nom'] . "'])";
                    if ($j % 3 == 0) {
                        $content .= "\n\t\t";
                    }
                }
            }
            $content .= " && !isset(\$args['order_by']) && !isset(\$args['etat']) && !isset(\$args['tab_ids_" . $nom_table_pluriel . "'])";
            $content .= ")\n";
            $content .= "\t\treturn \$tab_result;\n\n";
            //Début de la condition du WHERE
            $content .= "\t\$condition=\"\";\n\n";
            for ($i = 0; $i <= $nb_champs; $i++) {
                if (isset($champ[$i]['recherche']) && $champ[$i]['recherche'] == 'on') {
                    $content .= "\tif (isset(\$args['" . $champ[$i]['nom'] . "']) && \$args['" . $champ[$i]['nom'] . "'] != \"*\")\n";
                    if ($champ[$i]['type'] == 'VARCHAR' || $champ[$i]['type'] == 'TEXT') {
                        $content .= "\t\t\$condition .= \" AND " . $champ[$i]['nom'] . " LIKE '\".Sql_prepareTexteStockage(\$args['" . $champ[$i]['nom'] . "']).\"' \";\n";
                    } elseif ($champ[$i]['type'] == 'DATE') {
                        $content .= "\t\t\$condition .= \" AND " . $champ[$i]['nom'] . " = '\".Lib_frToEn(\$args['" . $champ[$i]['nom'] . "']).\"' \";\n";
                    } elseif ($champ[$i]['type'] == 'DECIMAL') {
                        $content .= "\t\t\$condition .= \" AND " . $champ[$i]['nom'] . " = '\".strtr(\$this->" . $champ[$i]['nom'] . ", \",\", \".\").\"' \";\n";
                    } else {
                        $content .= "\t\t\$condition .= \" AND " . $champ[$i]['nom'] . " = '\".\$args['" . $champ[$i]['nom'] . "'].\"' \";\n";
                    }
                }
            }
            //Tableau avec IN
            $content .= "\n\tif (isset(\$args['tab_ids_" . $nom_table_pluriel . "']) && \$args['tab_ids_" . $nom_table_pluriel . "'] != \"*\") {\n";
            $content .= "\t\t\$ids = implode(\",\", \$args['tab_ids_" . $nom_table_pluriel . "']);\n";
            $content .= "\t\t\$condition .= \" AND " . $champ[0]['nom'] . " IN (0\".\$ids.\") \";\n";
            $content .= "\t}\n";
            //Concaténation de la requête formé avec un ORDER BY
            $content .= "\tif (!isset(\$args['etat']))\n";
            $content .= "\t\t\$condition .= \" AND etat != 'supprime' \";\n";
            $content .= "\n";
            $content .= "\t\$sql .= \$condition;\n\n";
            //Concaténation de la requête formé avec un ORDER BY
            $content .= "\tif (isset(\$args['order_by']) && !isset(\$args['asc_desc']))\n";
            $content .= "\t\t\$sql .= \" ORDER BY \".\$args['order_by'].\" ASC\";\n";
            $content .= "\tif (isset(\$args['order_by']) && isset(\$args['asc_desc']))\n";
            $content .= "\t\t\$sql .= \" ORDER BY \".\$args['order_by'].\" \".\$args['asc_desc'];\n\n";
            //Concaténation de la requête formé avec un LIMIT
            $content .= "\tif (isset(\$args['limit']) && !isset(\$args['start']))\n";
            $content .= "\t\t\$sql .= \" LIMIT \".\$args['limit'];\n\n";
            $content .= "\tif (isset(\$args['limit']) && isset(\$args['start']))\n";
            $content .= "\t\t\$sql .= \" LIMIT \".\$args['start'].\",\".\$args['limit'];\n\n";
            //Log et exécution
            $content .= "\t/*=============*/ Lib_myLog(\"SQL: \$sql\");\n";
            $content .= "\t\$result = Sql_query(\$sql);\n\n";
            $content .= "\tif (isset(\$args['count'])) {\n";
            $content .= "\t\tif (\$result && Sql_errorCode(\$result) === \"00000\") {\n";
            $content .= "\t\t\t\$row = Sql_fetch(\$result);\n";
            $content .= "\t\t\t\$count = \$row['nb_enregistrements'];\n";
            $content .= "\t\t}\n";
            $content .= "\t\treturn \$count;\n";
            $content .= "\t} else {\n";
            $content .= "\t\tif (\$result && Sql_errorCode(\$result) === \"00000\") {\n";
            $content .= "\t\t\twhile(\$row = Sql_fetch(\$result)) {\n";
            $content .= "\t\t\t\t\$id = \$row['" . $champ[0]['nom'] . "'];\n";
            for ($j = 0; $j <= $nb_champs; $j++) {
                //Premiere partie de la ligne
                $content .= "\t\t\t\t\$tab_result[\$id][\"" . $champ[$j]['nom'] . "\"]";
                //On place autant de retrait que le nombre calculé
                //On calcule le nombre de retrait qu'il faut pour ce champ.
                $nb_retraits = $nb_retraits_max - ceil(strlen($champ[$j]['nom'])) / 3;
                for ($k = 0; $k <= $nb_retraits; $k++) {
                    $content .= "\t";
                }
                //Seconde partie de la ligne
                //Suivant le type, on appelle une fonction de traitement de la chaîne différente
                if ($j == 0) {
                    $content .= "= \$id;\n";
                } else {
                    if (($champ[$j]['type'] == 'VARCHAR' || $champ[$j]['type'] == 'TEXT') && ($champ[$j]['nom'] != 'date_add' && $champ[$j]['nom'] != 'date_upd')) {
                        $content .= "= Sql_prepareTexteAffichage(\$row['" . $champ[$j]['nom'] . "']);\n";
                    } elseif ($champ[$j]['type'] == 'DATE') {
                        $content .= "= Lib_enToFr(\$row['" . $champ[$j]['nom'] . "']);\n";
                    } else {
                        $content .= "= \$row['" . $champ[$j]['nom'] . "'];\n";
                    }
                }
            }
            $content .= "\t\t\t}\n";
            $content .= "\t\t}\n\n";
            for ($i = 0; $i <= 3; $i++) {
                if (count($clef[$i]) >= 1) {
                    //Définition des array_pop sur le tableau final en fonction des clefs secondaires
                    $content .= "\t\tif (count(\$tab_result) == 1 && ";
                    $content .= "(\$args['" . $champ[0]['nom'] . "'] != '' && \$args['" . $champ[0]['nom'] . "'] != '*')";
                    foreach ($clef[$i] as $id => $key) {
                        if ($id != 0) {
                            $content .= " && (\$args['" . $key . "'] != '' && \$args['" . $key . "'] != '*')";
                        }
                    }
                    $content .= ")\n";
                    $content .= "\t\t\t\$tab_result = array_pop(\$tab_result);\n";
                }
            }
            $content .= "\t}\n";
            //Retour du tableau de résultat
            $content .= "\n";
            $content .= "\treturn \$tab_result;\n";
            $content .= "}\n";
            //*******************************************************************//
            //******************************FIN DEFINE****************************//
            //*******************************************************************//
            $content .= "} // Fin if (!defined('__" . $nom_define . "_INC__'))\n";
            $content .= "?>";
            //*******************************************************************//
            //********************CREATION DU FICHIER classe.inc.php*******************//
            //*******************************************************************//
            //Définition du fichier futur
            $path = $data_in['nom_bdd'] . '/' . $nom_table . ".inc.php";
            //Si aucun répertoire pour la base de données concernées, on crée le répertoire
            if (!is_dir($data_in['nom_bdd'])) {
                mkdir($data_in['nom_bdd'], 0777);
            }
            //On ouvre le fichier
            $file = fopen($path, "w");
            //On écrit le contenu dans le fichier
            fwrite($file, $content);
            //On ferme le fichier
            fclose($file);
            //*******************************************************************//
            //********************ENVOI VERS LA PAGE DE RESULTAT*******************//
            //*******************************************************************//
            //On envoie en data_out la requête sql de création de la table;
            $data_out['sql'] = $sql;
            $data_out['nom_bdd'] = $data_in['nom_bdd'];
            $data_out['nom_table'] = $nom_table;
            include 'resultat.php';
            break;
        case "Class_UPD":
            //Pour le moment, il n'y a pas d'erreur
            $error = 0;
            $clefs_recherche = array();
            $clef_1 = array();
            $clef_2 = array();
            $clef_3 = array();
            // Ouverture du fichier en lecture
            $fp = fopen($_FILES["path"]['tmp_name'], "r");
            if (substr($_FILES["path"]['name'], -8) != '.inc.php') {
                $error = 1;
            }
            // Tant que non fin du fichier
            $i = 1;
            $j = 1;
            while (!feof($fp)) {
                //On récupère chaque ligne de la classe
                $ligne = fgets($fp);
                $ind_clef_1 = $ind_clef_2 = $ind_clef_3 = 0;
                //On vérifie que la classe est une classe créé avec ce module
                //La ligne 9 doit être égal à  "* @author dilas0ft & z3cN@$ "
                if ($i == 9) {
                    if (!preg_match('/\\* \\@author dilas0ft \\& z3cN\\@\\$/', $ligne)) {
                        $error = 1;
                        break;
                    }
                } elseif ($i == 13) {
                    $split_ligne_1 = preg_split("/`/", $ligne);
                    $split_ligne_2 = preg_split("/_/", $split_ligne_1[1]);
                    //Le nom de la base de donnée est le mot après le premier '_'
                    $nom_bdd = $split_ligne_2[0];
                    //Le nom de la table est ce qu'il y a ensuite
                    for ($pass = 0, $k = 1; $k < count($split_ligne_2); $k++) {
                        if ($pass == 0) {
                            $nom_table = $split_ligne_2[$k];
                            $pass = 1;
                        } else {
                            $nom_table .= '_' . $split_ligne_2[$k];
                        }
                    }
                } elseif (preg_match('/\\t `*`/', $ligne) && $i != 14) {
                    //On ignore les champs date_add, date_upd, info_
                    if (preg_match('/date_add/', $ligne) || preg_match('/date_upd/', $ligne) || preg_match('/info_/', $ligne)) {
                        continue;
                    }
                    //Lorsqu'on arrive au champ date_add, on s'arrête : ce qui nous intéresse, ce ne sont que les champs saisis par l'utilisateur
                    //Les lignes récupérées sont de type : "	 `nom_champ` VARCHAR(64) NOT NULL, "
                    //On coupe la chaine au espace et on stocke le résultat dans un tableau
                    $split_ligne = preg_split("/ /", $ligne);
                    //Le nom du champ est la première case du tableau, à laquelle on enlève les "`" grâce à preg_replace
                    $champ[$j]['nom'] = preg_replace('/`/', '', $split_ligne[1]);
                    //La deuxième case du tableau coupé est de type "VARCHAR(64)";
                    //On coupe donc à la parenthèse ouvrante pour récupérer le type VARCHAR et la taille 64
                    $taille = preg_split("/\\(/", $split_ligne[2]);
                    $champ[$j]['type'] = $taille[0];
                    //On stocke la taille, avec la parenthèse fermante en moins supprimé avec preg_replace
                    $champ[$j]['taille'] = preg_replace('/\\)/', '', $taille[1]);
                    $j++;
                } elseif (preg_match('/Clef de recherche /', $ligne)) {
                    $split_ligne = array();
                    $split_ligne = preg_split("/\\ : /", $ligne);
                    $clefs_recherche[] = trim($split_ligne[1]);
                } elseif (preg_match('/Clefs secondaires/', $ligne)) {
                    $ind_clef_1 = $i + 1;
                    $ind_clef_2 = $i + 2;
                    $ind_clef_3 = $i + 3;
                } elseif ($i == $ind_clef_1) {
                    $split_ligne = $split_1 = $split_2 = $clef_1 = array();
                    $split_ligne = preg_split("/, /", $ligne);
                    //Pour le premier, on enlève les barres de commentaires
                    $split_1 = preg_split("/\\/\\/ /", $split_ligne[0]);
                    $clef_1[0] = $split_1[1];
                    //Pour la suite, on ne fait que stocker
                    for ($k = 1; $k < count($split_ligne) - 1; $k++) {
                        $clef_1[$k] = $split_ligne[$k];
                    }
                    //Pour le dernier, on enlève la virgule
                    $split_2 = preg_split("/,/", $split_ligne[$k]);
                    $clef_1[$k] = $split_2[0];
                } elseif ($i == $ind_clef_2) {
                    $split_ligne = $split_1 = $split_2 = $clef_2 = array();
                    $split_ligne = preg_split("/, /", $ligne);
                    //Pour le premier, on enlève les barres de commentaires
                    $split_1 = preg_split("/\\/\\//", $split_ligne[0]);
                    $clef_2[0] = $split_1[1];
                    //Pour la suite, on ne fait que stocker
                    for ($k = 1; $k < count($split_ligne) - 1; $k++) {
                        $clef_2[$k] = $split_ligne[$k];
                    }
                    //Pour le dernier, on enlève la virgule
                    $split_2 = preg_split("/,/", $split_ligne[$k]);
                    $clef_2[$k] = $split_2[0];
                } elseif ($i == $ind_clef_3) {
                    $split_ligne = $split_1 = $split_2 = $clef_3 = array();
                    $split_ligne = preg_split("/, /", $ligne);
                    //Pour le premier, on enlève les barres de commentaires
                    $split_1 = preg_split("/\\/\\//", $split_ligne[0]);
                    $clef_3[0] = $split_1[1];
                    //Pour la suite, on ne fait que stocker
                    for ($k = 1; $k < count($split_ligne) - 1; $k++) {
                        $clef_3[$k] = $split_ligne[$k];
                    }
                    //Pour le dernier, on enlève la virgule
                    $split_2 = preg_split("/,/", $split_ligne[$k]);
                    $clef_3[$k] = $split_2[0];
                    //Fin du traitement sur le fichier
                    break;
                }
                $i++;
            }
            //On stocke les champs dans un data_out
            $data_out['clefs_recherche'] = $clefs_recherche;
            $data_out['clef_1'] = $clef_1;
            $data_out['clef_2'] = $clef_2;
            $data_out['clef_3'] = $clef_3;
            $data_out['nom_bdd'] = $nom_bdd;
            $data_out['nom_table'] = $nom_table;
            $data_out['liste_champs'] = $champ;
            if ($error == 1) {
                $data_out['message'] = 'Le fichier n\'est pas une classe g&eacute;n&eacute;r&eacute;e par ce module.';
            }
            ExecActions('Classe_Accueil');
            break;
        default:
            ExecActions('Classe_Accueil');
            break;
    }
}
function News_ImageIntro_UPD($data_in = array())
{
    Lib_myLog("action: " . $data_in['action']);
    foreach ($GLOBALS['tab_globals'] as $global) {
        global ${$global};
    }
    Lib_myLog("IN: ", $data_in);
    Lib_myLog("FILE: ", __FILE__);
    $F5 = Lib_checkF5($session, $data_in['timestamp']);
    $continue = $F5 ? false : true;
    // On intialise une pseudo-transaction qui nous permettre de stocker tous les objets rajoutés à la base
    // pour pouvoir les supprimer si nécessaire
    $transaction = new Collection();
    // Cas de SUPPRESSION complète de l'new de la base
    if (isset($data_in['submit_clear'])) {
        /*=============*/
        Lib_myLog("Suppression de l'image d'intro");
        $args_news['code'] = 999999999;
        $args_news['code_news'] = $data_in['code_news'];
        $liste_news = Articles_chercher($args_news);
        foreach ($liste_news as $new) {
            $new = Article_recuperer($new['id_article']);
            $new->DEL();
        }
        // On remet à 0 le fichier contenant le "cache" des news pour l'affichage des blocs
        Lib_writeCache('', "ARTICLES");
        $data_out['message_ok'] = $MSG['fr']['%%imageIntro_DEL%%'];
        $continue = false;
    }
    // Cas de MODIFICATION d'new ou de PRE-VISUALISATION
    if ($continue) {
        $tab_langues = $GLOBALS['LANGUES'];
        $tab_langues[] = 'fr';
        foreach ($tab_langues as $langue) {
            /*=============*/
            Lib_myLog("Recherche de l'image d'intro");
            $args['code_news'] = $data_in['code_news'];
            $args['code'] = 999999999;
            $args['lang'] = $langue;
            $news_bdd = Articles_chercher($args);
            if (isset($news_bdd['id_article'])) {
                /*=============*/
                Lib_myLog("Image d'intro trouvee => recuperation");
                $new = Article_recuperer($news_bdd['id_article']);
                /*=============*/
                Lib_myLog("Coucou", $_FILES);
                if ($_FILES["image_intro_" . $langue]['name'] != '') {
                    $file = Lib_nettoie($_FILES["image_intro_" . $langue]['name']);
                    $file = $news_bdd['id_article'] . '_' . $file;
                    // Si le fichier existait déjà, on la supprime...
                    if (file_exists('../../img_ftp/' . $file)) {
                        unlink('../../img_ftp/' . $file);
                    }
                    if (is_uploaded_file($_FILES["image_intro_" . $langue]['tmp_name'])) {
                        /*=============*/
                        Lib_myLog("deplacement du fichier au bon endroit");
                        $tmp = $_FILES['image_intro_' . $langue]['tmp_name'];
                        rename($tmp, '../../img_ftp/' . $file);
                        if (file_exists('../../img_ftp/' . $file) && $file != '') {
                            chmod("../../img_ftp/{$file}", 0644);
                        }
                        // Redimensionnement, w=1000, priorite w
                        Lib_redimImage("../../img_ftp/{$file}", 105, 105, 'w');
                    }
                    $new->image_intro = $file;
                }
                $new->UPD();
                $data_out['message_ok'] = $MSG['fr']['%%imageIntro_UPD%%'];
            }
            if (!isset($news_bdd['id_article'])) {
                /*=============*/
                Lib_myLog("Intro non trouvee => ajout");
                $new = new Article();
                $new->code_news = $data_in['code_news'];
                $new->code = $data_in['code'];
                $new->lang = $langue;
                $new->etat = 'actif';
                $id_article = $new->ADD();
                $new = Article_recuperer($id_article);
                if ($_FILES['image_intro_' . $langue]['name'] != '') {
                    $file = Lib_nettoie($_FILES['image_intro_' . $langue]['name']);
                    $file = $id_article . '_' . $file;
                    if (file_exists('../../img_ftp/' . $file)) {
                        unlink('../../img_ftp/' . $file);
                    }
                    if (is_uploaded_file($_FILES['image_intro_' . $langue]['tmp_name'])) {
                        /*=============*/
                        Lib_myLog("deplacement du fichier au bon endroit");
                        $tmp = $_FILES['image_intro_' . $langue]['tmp_name'];
                        rename($tmp, '../../img_ftp/' . $file);
                        if (file_exists('../../img_ftp/' . $file) && $file != '') {
                            chmod("../../img_ftp/{$file}", 0644);
                        }
                        // Redimensionnement, w=1000, priorite w
                        Lib_redimImage("../../img_ftp/{$file}", 105, 105, 'w');
                    }
                    $new->image_intro = $file;
                    $new->id_article = $id_article;
                    $new->UPD();
                }
                $data_out['message_ok'] = $MSG['fr']['%%imageIntro_ADD%%'];
            }
        }
        // On remet à 0 le fichier contenant le "cache" des news pour l'affichage des blocs
        Lib_writeCache('', "ARTICLES");
    }
    if ($continue) {
        $data_in['action'] = 'News_Accueil';
        call_user_func('News_Accueil', $data_in);
    } else {
        if ($F5) {
            /*=============*/
            Lib_myLog("Tentative de F5!");
            $data_out['message_ko'] = $MSG[$lang]['%%Erreur_Revalidation%%'];
            $data_in['action'] = 'News_Accueil';
            call_user_func('News_Accueil', $data_in);
        } else {
            $data_in['action'] = 'News_Accueil';
            call_user_func('News_Accueil', $data_in);
        }
    }
}
function Images_Image_ADD($data_in = array())
{
    Lib_myLog("action: " . $data_in['action']);
    foreach ($GLOBALS['tab_globals'] as $global) {
        global ${$global};
    }
    Lib_myLog("IN: ", $data_in);
    Lib_myLog("FILE: ", __FILE__);
    Lib_writeData($data_srv, $session);
    /*=============*/
    Lib_myLog("Recherche de la position la plus elevee");
    $args_images['code_pere'] = $data_in['code_pere'];
    $args_images['type_pere'] = $data_in['type_pere'];
    $galerie = Galeries_chercher($args_images);
    $position = 0;
    foreach ($galerie as $image) {
        if ($image['position'] > $position) {
            $position = $image['position'];
        }
    }
    $position++;
    $timestamp = time();
    /*=============*/
    Lib_myLog("On rajoute l'image en base");
    $galerie = new Galerie($data_in['code_pere'], $data_in['type_pere']);
    $galerie->position = $position;
    $langues = $GLOBALS['LANGUES'];
    $langues[] = 'fr';
    $id_galerie = $galerie->ADD();
    $galerie = Galerie_recuperer($id_galerie);
    foreach ($langues as $langue) {
        $galerie->addLang($langue, $data_in['legende_' . $langue], $data_in['data1' . $langue], $data_in['data2' . $langue], $data_in['data3' . $langue], $data_in['data4' . $langue], $data_in['data5' . $langue]);
    }
    if ($_FILES["url_gde_image"]["name"] != '') {
        $valid = Lib_isValidFile($_FILES["url_gde_image"]["name"], array("jpg", "jpeg", "png", "gif"));
        if ($_FILES["url_gde_image"]['error'] == 1) {
            /*=============*/
            Lib_myLog("Taille trop elevee");
            $val = ini_get('upload_max_filesize');
            $data_out['message_ko'] = $MSG['fr']['%%Erreur_Taille%%'] . " ({$val})";
            $new->url_gde_image = '';
        } else {
            if ($valid == 1) {
                /*=============*/
                Lib_myLog("Fichier non autorise");
                $data_out['message_ko'] = $MSG['fr']['%%Fichier_non_autorise%%'];
            } else {
                /*=============*/
                Lib_myLog("Telechargement de l'image");
                $image = Lib_nettoie($_FILES["url_gde_image"]["name"]);
                $image = $id_galerie . '_' . $image;
                $ext = strrchr($image, '.');
                // On positionne par défaut une vignette au cas où une vignette n'aurait pas été fournie
                $vignette = Lib_nettoie($_FILES["url_gde_image"]["name"]);
                $vignette = $id_galerie . '_min_' . $vignette;
                // Si la vignette existait déjà, on la remplace...
                if (file_exists('../../img_ftp/' . $image)) {
                    unlink('../../img_ftp/' . $image);
                }
                if (is_uploaded_file($_FILES["url_gde_image"]["tmp_name"])) {
                    $tmp_gde_image = $_FILES["url_gde_image"]["tmp_name"];
                    rename($tmp_gde_image, '../../img_ftp/' . $image);
                    if (file_exists('../../img_ftp/' . $image) && $image != '') {
                        chmod("../../img_ftp/" . $image, 0644);
                    }
                    // Redimensionnement, w=483, priorite w
                    Lib_redimImage("../../img_ftp/{$image}", 483, '', 'w');
                }
            }
        }
    }
    /*=============*/
    Lib_myLog("On verifie si la vignette est fournie");
    if ($_FILES["url_vignette"]["name"] != '') {
        /*=============*/
        Lib_myLog("Telechargement de la vignette");
        $vignette = Lib_nettoie($_FILES["url_vignette"]["name"]);
        $vignette = $id_galerie . '_min_' . $vignette;
        $ext = strrchr($vignette, '.');
        if (is_uploaded_file($_FILES["url_vignette"]["tmp_name"])) {
            $tmp_vignette = $_FILES["url_vignette"]["tmp_name"];
            rename($tmp_vignette, '../../img_ftp/' . $vignette);
            if (file_exists('../../img_ftp/' . $vignette) && $vignette != '') {
                chmod("../../img_ftp/" . $vignette, 0644);
            }
            // Redimensionnement, h=65, priorite h
            Lib_redimImage("../../img_ftp/" . $vignette, '', '65', 'w');
        }
    }
    if ($_FILES["url_gde_image"]["name"] != '' && $_FILES["url_vignette"]["name"] == '') {
        /*=============*/
        Lib_myLog("Vignette non fournie => on utilise l'image");
        copy('../../img_ftp/' . $image, '../../img_ftp/' . $vignette);
        if (file_exists('../../img_ftp/' . $vignette) && $vignette != '') {
            chmod('../../img_ftp/' . $vignette, 0644);
        }
        // Redimensionnement, h=65, priorite h
        Lib_redimImage("../../img_ftp/{$vignette}", '', '65', 'w');
    }
    //Fin des ajouts
    if (isset($image)) {
        $galerie->url_gde_image = $image;
        $galerie->url_vignette = $vignette;
        $galerie->UPD();
    } else {
        $galerie->DEL();
    }
}
function Arbo_Element_UPD($data_in = array())
{
    Lib_myLog("action: " . $data_in['action']);
    foreach ($GLOBALS['tab_globals'] as $global) {
        global ${$global};
    }
    Lib_myLog("IN: ", $data_in);
    Lib_myLog("FILE: ", __FILE__);
    /*=============*/
    Lib_myLog("Modification de l'article");
    $article = Article_recuperer($data_in['id_article']);
    $article->titre_page = $data_in['titre_page'];
    // On met dans le titre le titre_page par défaut. Celui-ci sera changé à l'édition de l'article de toutes façons...
    $article->titre = $data_in['titre_page'];
    $article->lang = 'fr';
    $article->etat = 'actif';
    if ($_FILES["url_vignette"]["name"] != '') {
        //$valid = Lib_isValidFile($_FILES["url_vignette"]["name"], array("jpg", "jpeg", "png", "gif"));
        if ($_FILES["url_vignette"]['error'] == 1) {
            /*=============*/
            Lib_myLog("Taille trop elevee");
            $val = ini_get('upload_max_filesize');
            $data_out['message_ko'] = $MSG['fr']['%%Erreur_Taille%%'] . " ({$val})";
            $article->url_vignette = '';
        } else {
            if ($valid == 1) {
                /*=============*/
                Lib_myLog("Fichier non autorise");
                $data_out['message_ko'] = $MSG['fr']['%%Fichier_non_autorise%%'];
            } else {
                /*=============*/
                Lib_myLog("Telechargement de la vignette");
                $url_vignette = Lib_nettoie($_FILES["url_vignette"]["name"]);
                $url_vignette = $article->id_article . '_' . $url_vignette;
                // Si la vignette existait déjà, on la remplace...
                if (file_exists('../../img_ftp/' . $url_vignette)) {
                    unlink('../../img_ftp/' . $url_vignette);
                }
                if (is_uploaded_file($_FILES["url_vignette"]["tmp_name"])) {
                    $tmp_vignette = $_FILES["url_vignette"]["tmp_name"];
                    rename($tmp_vignette, '../../img_ftp/' . $url_vignette);
                    chmod("../../img_ftp/{$url_vignette}", 0644);
                    // Redimensionnement, w=483, priorite w
                    // Lib_redimImage("../../img_ftp/$file", 483, '', 'w');
                }
                $article->url_vignette = $url_vignette;
            }
        }
    }
    $article->UPD();
    // On remet à 0 le fichier contenant le "cache" des articles pour l'affichage des blocs
    Lib_writeCache('', "ARTICLES");
    // On remet à 0 le fichier contenant le "cache" de l'arborescence
    Lib_writeCache('', "ARBO");
    if (isset($data_in['code_arbo'])) {
        header("Location: http://" . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\') . "/actions.php?action=Arbo_Accueil&code_arbo={$data_in['code_arbo']}");
    }
}
function SiteStatique_Image_ADD($data_in = array())
{
    Lib_myLog("action: " . $data_in['action']);
    foreach ($GLOBALS['tab_globals'] as $global) {
        global ${$global};
    }
    Lib_myLog("IN: ", $data_in);
    Lib_myLog("FILE: ", __FILE__);
    /*=============*/
    Lib_myLog("Recherche de la position la plus elevee du code {$data_in['code']}");
    $args_images['id_pere'] = $data_in['id_pere'];
    $galerie = Galeries_chercher($args_images);
    $position = 0;
    foreach ($galerie as $image) {
        if ($image['position'] > $position) {
            $position = $image['position'];
        }
    }
    $position++;
    $timestamp = time();
    /*=============*/
    Lib_myLog("Renommage de l'image");
    $image = Lib_nettoie($_FILES["url_gde_image"]["name"]);
    $ext = strrchr($image, '.');
    $image = $data_in['id_pere'] . '_' . $image;
    $vignette = $data_in['id_pere'] . '_mini_' . $image;
    /*=============*/
    Lib_myLog("image : {$image}");
    // Si la vignette ou l'image existaient déjà, on les remplace...
    if (file_exists('../../img_ftp/' . $image)) {
        unlink('../../img_ftp/' . $image);
    }
    if (file_exists('../../img_ftp/' . $vignette)) {
        unlink('../../img_ftp/' . $vignette);
    }
    if (is_uploaded_file($_FILES["url_gde_image"]["tmp_name"])) {
        /*=============*/
        Lib_myLog("deplacement de l'image au bon endroit");
        $tmp_gde_image = $_FILES["url_gde_image"]["tmp_name"];
        rename($tmp_gde_image, '../../img_ftp/' . $image);
        if (file_exists('../../img_ftp/' . $image) && $image != '') {
            chmod("../../img_ftp/{$image}", 0644);
            copy('../../img_ftp/' . $image, '../../img_ftp/' . $vignette);
            if (file_exists('../../img_ftp/' . $vignette) && $vignette != '') {
                chmod("../../img_ftp/{$vignette}", 0644);
            }
        }
    }
    //Redimensionnement
    if ($_FILES["url_gde_image"]["name"] != '') {
        /*=============*/
        Lib_myLog("Redimensionnement de l'image");
        $size1 = GetImageSize('../../img_ftp/' . $image);
        $src_w = $size1[0];
        $src_h = $size1[1];
        /*=============*/
        Lib_myLog("Dimensions de l'image: w={$src_w} h={$src_h} ");
        $dst_h = "183";
        $size1 = GetImageSize("../../img_ftp/{$image}");
        $src_w = $size1[0];
        $src_h = $size1[1];
        if ($src_h > $dst_h) {
            $dst_w = round($src_w * ($dst_h / $src_h));
            $save_h = $dst_h;
            $save_w = $dst_w;
            $dst_img = ImageCreateTrueColor($dst_w, $dst_h);
            /*=============*/
            Lib_myLog("w : {$dst_w}, h : {$dst_h}");
            if (eregi("jpg", $ext) || eregi("jpeg", $ext)) {
                $src_img = imagecreatefromjpeg("../../img_ftp/{$image}");
            } elseif (eregi("gif", $ext)) {
                $src_img = imagecreatefromgif("../../img_ftp/{$image}");
            } elseif (eregi("png", $ext)) {
                $src_img = imagecreatefrompng("../../img_ftp/{$image}");
            }
            ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
            ImageJpeg($dst_img, "../../img_ftp/{$image}");
        } else {
            $save_h = $src_h;
            $save_w = $src_w;
        }
        $galerie = new Galerie();
        $galerie->largeur_image = $dst_w;
        $galerie->hauteur_image = $dst_h;
        /*=============*/
        Lib_myLog("Creation de la vignette");
        $dst_h = "100";
        $size1 = GetImageSize("../../img_ftp/{$image}");
        $src_w = $size1[0];
        $src_h = $size1[1];
        if ($src_h > $dst_h) {
            $dst_w = round($src_w * ($dst_h / $src_h));
            $dst_img = ImageCreateTrueColor($dst_w, $dst_h);
            /*=============*/
            Lib_myLog("w : {$dst_w}, h : {$dst_h}");
            if (eregi("jpg", $ext) || eregi("jpeg", $ext)) {
                $src_img = imagecreatefromjpeg("../../img_ftp/{$image}");
            } elseif (eregi("gif", $ext)) {
                $src_img = imagecreatefromgif("../../img_ftp/{$image}");
            } elseif (eregi("png", $ext)) {
                $src_img = imagecreatefrompng("../../img_ftp/{$image}");
            }
            ImageCopyResampled($dst_img, $src_img, 0, 0, 0, 0, $dst_w, $dst_h, $src_w, $src_h);
            ImageJpeg($dst_img, "../../img_ftp/{$vignette}");
        }
    }
    //Fin des ajouts
    //Le fait de rechercher par code permet de recuperer l'article dans toutes les langues.
    //Chaque version de l'article aura sa propre galerie.
    $args['code'] = $data_in['code'];
    $liste_articles = Articles_chercher($args);
    foreach ($liste_articles as $article) {
        $galerie->code = $data_in['code'];
        $galerie->id_pere = $article['id_article'];
        $galerie->type_pere = 'articles';
        $galerie->position = $position;
        $galerie->url_gde_image = $image;
        $galerie->url_vignette = $vignette;
        $galerie->largeur_vignette = $save_w;
        $galerie->hauteur_vignette = $save_h;
        $galerie->ADD();
    }
    // On remet à 0 le fichier contenant le "cache" des articles pour l'affichage des blocs
    Lib_writeCache('', "GALERIES");
    $data_in['action'] = 'Galerie_Iframe';
    call_user_func('Galerie_Iframe', $data_in);
}
Esempio n. 9
0
function ExecActions($action)
{
    /*=============*/
    Lib_myLog("action: ", $action);
    // On recupere la configuration issue de conf.php
    global $lang, $MSG, $secure;
    // On recupere tous les objet contenant les donnees
    global $data_in, $data_out, $data_srv, $session;
    // Initialization des variables
    global $message;
    switch ($action) {
        case "Admin_Utilisateurs":
            /*=============*/
            Lib_myLog("Recuperation de la liste des utilisateurs de la base");
            $data_out['tab_groupes'] = Groupes_chercher('*');
            $data_out['liste_utilisateurs'] = Utilisateurs_chercher('*');
            // On renseigne l'indicateur "code" pour piloter l'affichage du menu javascript
            $data_out['code'] = 'acces_client';
            $data_out['page'] = 'acces.php';
            break;
        case "Utilisateurs_ADD":
            $F5 = Lib_checkF5($session, $data_in['timestamp']);
            $continue = $F5 ? false : true;
            // On intialise une pseudo-transaction qui nous permettre de stocker tous les objets rajoutés à la base
            // pour pouvoir les supprimer si nécessaire
            $transaction = new Collection();
            if ($continue) {
                $utilisateur = Utilisateur_recuperer($data_in['nom_utilisateur']);
                if ($continue && $utilisateur->id_utilisateur) {
                    /*=============*/
                    Lib_myLog("Le code d'utilisateur existe deja");
                    $data_out['message_ko'] = 'Ce code utilisateur existe d&eacute;j&agrave';
                    $continue = false;
                }
                if ($continue) {
                    /*=============*/
                    Lib_myLog("Creation nouvel objet Utilisateur");
                    $utilisateur = new Utilisateur();
                    $utilisateur->societe = $data_in['societe'];
                    $utilisateur->nom_personne = $data_in['nom_personne'];
                    $utilisateur->prenom_personne = $data_in['prenom_personne'];
                    $utilisateur->email = $data_in['email'];
                    $utilisateur->nom_utilisateur = $data_in['nom_utilisateur'];
                    $utilisateur->nom_groupe = 'utilisateur';
                    $utilisateur->password = $data_in['password'];
                    $utilisateur->nb_connect = 10;
                    $utilisateur->etat = 'actif';
                    $id_utilisateur = $utilisateur->ADD();
                    /*=============*/
                    Lib_myLog("Creation d'un repertoire pour l'utilisateur");
                    mkdir("../../documents/{$id_utilisateur}");
                    chmod("../../documents/{$id_utilisateur}", 0705);
                    // On créé un fichier d'index pour que personne ne puisse voir directement le contenu du répertoire
                    $file = "../../documents/{$id_utilisateur}/index.php";
                    $index = fopen($file, "w");
                    fputs($index, "<?");
                    fputs($index, "header('HTTP/1.0 404 Not Found');");
                    fputs($index, "?>");
                    fclose($index);
                }
            }
            if ($continue) {
                $data_out['message_ok'] = "L'acc&eacute;s a bien &eacute;t&eacute; rajout&eacute;";
                ExecActions('Admin_Utilisateurs');
            } else {
                if ($F5) {
                    /*=============*/
                    Lib_myLog("Tentative de F5!");
                    $data_out['message_ko'] = $MSG[$lang]['%%Erreur_Revalidation%%'];
                    ExecActions('Admin_Utilisateurs');
                } else {
                    /*=============*/
                    Lib_myLog("Annulation de l'ajout suite a une erreur");
                    if (!isset($data_out['message_ko'])) {
                        $data_out['message_ko'] = $MSG[$lang]['%%Erreur_Mysql%%'];
                    }
                    // On ré-affiche les données dans la page de saisie...
                    $data_out = array_merge($data_out, $data_in);
                    ExecActions('Admin_Utilisateurs');
                }
            }
            break;
        case "Utilisateurs_UPD":
            /*=============*/
            Lib_myLog("Mise a jour de l'utilisateur");
            $utilisateur = Utilisateur_recuperer($data_in['id_utilisateur']);
            $utilisateur->societe = $data_in['societe'];
            $utilisateur->nom_personne = $data_in['nom_personne'];
            $utilisateur->prenom_personne = $data_in['prenom_personne'];
            $utilisateur->email = $data_in['email'];
            $utilisateur->nom_utilisateur = $data_in['nom_utilisateur'];
            $utilisateur->password = $data_in['password'];
            $utilisateur->UPD();
            $data_out['message_ok'] = "L'utilisateur a bien &eacute;t&eacute; mis &agrave; jour";
            ExecActions("Admin_Utilisateurs");
            break;
        case "Utilisateurs_DEL":
            /*=============*/
            Lib_myLog("Suppression de l'utilisateur avec l'identifiant " . $data_in['id_utilisateur'] . " de la base");
            $utilisateur = Utilisateur_recuperer($data_in['id_utilisateur']);
            $utilisateur->DEL();
            /*=============*/
            Lib_myLog("Suppression du repertoire de l'utilisateur");
            deldir("../../documents/" . $utilisateur->id_utilisateur);
            $data_out['message_ok'] = "L'utilisateur a bien &eacute;t&eacute; &eacute;t&eacute; supprim&eacute;";
            ExecActions("Admin_Utilisateurs");
            break;
        case "POPUP_Utilisateur_UPD":
            // Action utilisée pour la saisie semi-automatique et appelée par la fonction AJAX
            /*=============*/
            Lib_myLog("Recuperation de l'utilisateur");
            $data_out = Utilisateurs_chercher('', $data_in['id_utilisateur']);
            $data_out['tab_groupes'] = Groupes_chercher('*');
            $data_out['page'] = 'acces_popup_utilisateur_upd.php';
            break;
        case "Documents_Accueil":
            /*=============*/
            Lib_myLog("Recuperation de l'arborescence");
            $data_out['liste_fils'] = Docs_construire($data_in['id_utilisateur']);
            $utilisateur = Utilisateur_recuperer($data_in['id_utilisateur']);
            $data_out['nom_personne'] = $utilisateur->nom_personne;
            $data_out['prenom_personne'] = $utilisateur->prenom_personne;
            $data_out['id_utilisateur'] = $data_in['id_utilisateur'];
            // On positionne par défaut les id_pere et les id_grand_pere
            $data_out['id_pere'] = 0;
            $data_out['id_fils'] = 0;
            if (isset($data_in['id_doc'])) {
                /*=============*/
                Lib_myLog("Recuperation de l'ascendance");
                $doc = Doc_recuperer($data_in['id_doc']);
                /*=============*/
                Lib_myLog("Famille: " . $doc->famille);
                $tab_famille = explode('-', $doc->famille);
                /*=============*/
                Lib_myLog("Nb elements: " . count($tab_famille));
                if (count($tab_famille) == 2) {
                    $data_out['id_pere'] = $tab_famille[0];
                }
                if (count($tab_famille) == 3) {
                    $data_out['id_pere'] = $tab_famille[0];
                    $data_out['id_fils'] = $tab_famille[1];
                }
            }
            // On renseigne l'indicateur "code" pour piloter l'affichage du menu javascript
            $data_out['code'] = 'acces_client';
            $data_out['page'] = 'documents.php';
            break;
        case "Element_Bouger":
            $tab_positions = explode("|", $data_in['tab_list']);
            $i = 1;
            foreach ($tab_positions as $position) {
                $projet = Doc_recuperer($position);
                $projet->ordre = $i;
                $projet->UPD();
                $i++;
            }
            $data_out['message_ok'] = $MSG['fr']['%%arbo_UPD%%'];
            ExecActions('Documents_Accueil');
            break;
        case "Element_DEL":
            /*=============*/
            Lib_myLog("Recuperation de l'element");
            $obj_element_initial = Doc_recuperer($data_in['id_doc']);
            $id_utilisateur = $obj_element_initial->id_utilisateur;
            $data_out['message_ok'] = "Le dossier a bien &eacute;t&eacute; supprim&eacute;";
            if ($obj_element_initial->type_pere == 'document') {
                $url = $obj_element_initial->intitule_canonize;
                /*=============*/
                Lib_myLog("Suppression physique du document");
                unlink("../../documents/{$id_utilisateur}/{$url}");
                $data_out['message_ok'] = "Le document a bien &eacute;t&eacute supprim&eacute";
            }
            /*=============*/
            Lib_myLog("Retablissement de l'ordre sans coupure");
            $args_elements['famille'] = $obj_element_initial->famille;
            $args_elements['sup_ordre'] = $obj_element_initial->ordre;
            $args_elements['id_utilisateur'] = $obj_element_initial->id_utilisateur;
            $elements = Docs_chercher($args_elements);
            foreach ($elements as $element) {
                $obj_element = Doc_recuperer($element['id_doc']);
                $obj_element->ordre--;
                $obj_element->UPD();
            }
            $obj_element_initial->DEL();
            $data_in['id_utilisateur'] = $id_utilisateur;
            ExecActions('Documents_Accueil');
            break;
        case "Categorie_ADD":
            $args_arbos['famille'] = '';
            if ($data_in['id_pere'] != '') {
                /*=============*/
                Lib_myLog("Il s'agit d'un ajout de sous-element !");
                $arbo_pere = Doc_recuperer($data_in['id_pere']);
                $args_arbos['famille'] = $arbo_pere->famille . $arbo_pere->id_pere . '-';
            }
            /*=============*/
            Lib_myLog("On determine le nouvel ordre a attribuer au nouvel element");
            $arbos = Docs_chercher($args_arbos);
            $ordre = count($arbos);
            $ordre++;
            /*=============*/
            Lib_myLog("Rajout d'un nouvel element");
            $arbo = new Doc();
            $arbo->id_utilisateur = $data_in['id_utilisateur'];
            if ($data_in['id_pere'] != '') {
                $arbo->famille .= $arbo_pere->famille . $arbo_pere->id_pere . '-';
            }
            $arbo->type_pere = 'arbo';
            $arbo->ordre = $ordre;
            $arbo->etat = 'actif';
            $arbo->intitule = $data_in['intitule'];
            $id_doc = $arbo->ADD();
            // On positionne dans le "data_in" "id_doc" pour piloter l'affichage dans "Documents_Accueil"
            $data_in['id_doc'] = $id_doc;
            $data_out['message_ok'] = "Le dossier a bien &eacute;t&eacute; rajout&eacute;";
            $arbo->id_pere = $id_doc;
            $arbo->UPD();
            ExecActions('Documents_Accueil');
            break;
        case "Categorie_UPD":
            /*=============*/
            Lib_myLog("Modification de l'intitule d'un element");
            $arbo = Doc_recuperer($data_in['id_doc']);
            $arbo->intitule = $data_in['intitule'];
            $arbo->UPD();
            $data_out['message_ok'] = "Le nom du dossier a bien &eacute;t&eacute; modifi&eacute;";
            ExecActions('Documents_Accueil');
            break;
        case "AJAX_RechercherSousCategories":
            $data_out['liste_sous_categories'] = array();
            /*=============*/
            Lib_myLog("Recuperation du pere");
            $arbo_pere = Doc_recuperer($data_in['id_pere']);
            $args_sous['type_pere'] = 'arbo';
            $args_sous['famille'] = $arbo_pere->famille . $arbo_pere->id_pere . '-';
            $data_out['liste_sous_categories'] = Docs_chercher($args_sous);
            $cle = 'ordre';
            $val = usort($data_out['liste_sous_categories'], "Lib_compareUp");
            $data_out['page'] = 'ajax_sous_categories.php';
            break;
        case "Fichier_ADD":
            // DEBUT UBR
            // Je déclare en global les variables suivante intialisées lors du chargement des bibliothèques UBR
            global $TEMP_DIR, $_INI;
            //Declare local values
            $_XML_DATA = array();
            // Array of xml data read from the upload_id.redirect file
            $_CONFIG_DATA = array();
            // Array of config data read from the $_XML_DATA array
            $_POST_DATA = array();
            // Array of posted data read from the $_XML_DATA array
            $_FILE_DATA = array();
            // Array of 'FileInfo' objects read from the $_XML_DATA array
            $_FILE_DATA_TABLE = '';
            // String used to store file info results nested between <tr> tags
            $_FILE_DATA_EMAIL = '';
            // String used to store file info results
            $xml_parser = new XML_Parser();
            // XML parser
            $xml_parser->setXMLFile($TEMP_DIR, $_GET['upload_id']);
            // Set upload_id.redirect file
            $xml_parser->setXMLFileDelete($_INI['delete_redirect_file']);
            // Delete upload_id.redirect file when finished parsing
            $xml_parser->parseFeed();
            // Parse upload_id.redirect file
            // Display message if the XML parser encountered an error
            if ($xml_parser->getError()) {
                kak($xml_parser->getErrorMsg(), 1, __LINE__, $_INI['path_to_css_file']);
            }
            $_XML_DATA = $xml_parser->getXMLData();
            // Get xml data from the xml parser
            $_CONFIG_DATA = getConfigData($_XML_DATA);
            // Get config data from the xml data
            $_POST_DATA = getPostData($_XML_DATA);
            // Get post data from the xml data
            $_FILE_DATA = getFileData($_XML_DATA);
            // Get file data from the xml data
            /*=============*/
            Lib_myLog("UBR POST DATA :", $_POST_DATA);
            // On remet dans data_in les valeurs transmises par UBR
            foreach ($_POST_DATA as $key => $value) {
                $data_in[$key] = $value;
            }
            // On récupère les fichiers téléchargés
            for ($i = 0; $i < count($_FILE_DATA); $i++) {
                $file_slot = $_FILE_DATA[$i]->getFileInfo('slot');
                $file_name = $_FILE_DATA[$i]->getFileInfo('name');
                $file_size = $_FILE_DATA[$i]->getFileInfo('size');
                $file_type = $_FILE_DATA[$i]->getFileInfo('type');
                $file_status = $_FILE_DATA[$i]->getFileInfo('status');
                $file_status_desc = $_FILE_DATA[$i]->getFileInfo('status_desc');
                /*=============*/
                Lib_myLog("UBR Fichier telecharge : file_slot: {$file_slot}, file_name: {$file_name}, file_size: {$file_size}, file_type: {$file_type}, file_status: {$file_status}, file_status_desc: {$file_status_desc}");
            }
            // FIN UBR
            $F5 = Lib_checkF5($session, $data_in['timestamp']);
            $continue = $F5 ? false : true;
            if ($continue) {
                $args_arbos['famille'] = '';
                if ($data_in['id_pere'] != 0) {
                    $arbo = Doc_recuperer($data_in['id_pere']);
                    $args_arbos['famille'] = $arbo->famille . $arbo->id_pere . '-';
                    $args_arbo['id_doc'] = $data_in['id_pere'];
                    $id_categorie = $data_in['id_pere'];
                }
                // Si l'id_fils est positionné, il "surclasse" l'id_pere!
                if (isset($data_in['id_fils']) && $data_in['id_fils'] != 0) {
                    $arbo = Doc_recuperer($data_in['id_fils']);
                    $args_arbos['famille'] = $arbo->famille . $arbo->id_pere . '-';
                    $args_arbo['id_doc'] = $data_in['id_fils'];
                }
                /*=============*/
                Lib_myLog("On determine le nouvel ordre a attribuer au nouvel element dans l'arbo");
                $arbos = Docs_chercher($args_arbos);
                $ordre = count($arbos);
                $ordre++;
                /*=============*/
                Lib_myLog("On recupere le dossier dont va dependre le document");
                $arbo = Docs_chercher($args_arbo);
                if ($continue && $file_name != '') {
                    /*=============*/
                    Lib_myLog("Recuperation du fichier");
                    $nom_fichier = Lib_nettoie($file_name);
                    /*=============*/
                    Lib_myLog("Nom du fichier : {$nom_fichier}");
                    // On rajoute le document à ce niveau pour disposer de l'id_doc et le mettre dans le nom du document
                    /*=============*/
                    Lib_myLog("Rajout du document dans l'arbo");
                    $new_arbo = new Doc();
                    $new_arbo->id_utilisateur = $data_in['id_utilisateur'];
                    $new_arbo->famille .= $arbo['famille'] . $arbo['id_pere'] . '-';
                    $new_arbo->type_pere = 'document';
                    $new_arbo->ordre = $ordre;
                    $new_arbo->etat = 'actif';
                    $new_arbo->intitule = $data_in['intitule'];
                    $new_arbo->intitule_canonize = $nom_fichier;
                    $id_doc = $new_arbo->ADD();
                    $data_in['id_doc'] = $id_doc;
                    $nom_fichier = $id_doc . '_' . $nom_fichier;
                    $doc = Doc_recuperer($id_doc);
                    $doc->intitule_canonize = $nom_fichier;
                    $doc->UPD();
                    // On met le fichier récupéré avec UBR au bon endroit
                    rename("../ubr/ubr_uploads/{$file_name}", "../../documents/{$data_in['id_utilisateur']}/{$nom_fichier}");
                    $data_out['message_ok'] = "Le document a bien &eacute;t&eacute; rajout&eacute;";
                }
            }
            if ($continue) {
                ExecActions('Documents_Accueil');
            } else {
                if ($F5) {
                    /*=============*/
                    Lib_myLog("Tentative de F5!");
                    $data_out['message_ko'] = $MSG[$lang]['%%Erreur_Revalidation%%'];
                    ExecActions('Documents_Accueil');
                } else {
                    ExecActions('Documents_Accueil');
                }
            }
            break;
        case "Fichier_UPD":
            /*=============*/
            Lib_myLog("Modification de l'intitule du fichier");
            $arbo = Doc_recuperer($data_in['id_doc']);
            $arbo->intitule = $data_in['intitule'];
            $arbo->UPD();
            $data_out['message_ok'] = "La description du document a bien &eacute;t&eacute; modifi&eacute;e";
            ExecActions('Documents_Accueil');
            break;
        case "Fichier_Download":
            $doc = Doc_recuperer($data_in['id_doc']);
            $nom_fichier = $doc->intitule_canonize;
            $file = "../../documents/" . $doc->id_utilisateur . "/" . $doc->intitule_canonize;
            $size = filesize($file);
            header("Content-Type: application/octet-stream");
            header("Content-Length: {$size}");
            header("Content-Disposition: attachment; filename={$nom_fichier}");
            header("Content-Transfer-Encoding: binary");
            $fh = fopen("{$file}", "r");
            fpassthru($fh);
            break;
        default:
            ExecActions('Admin_Utilisateurs');
            break;
    }
}
Esempio n. 10
0
/**
 Cette fonction est un grand switch qui sert à renvoyer vers une action donnée en paramètre. 
 @param Action : Action à accomplir…
*/
function ExecActions($action)
{
    /*=============*/
    Lib_myLog("action: ", $action);
    // On recupere la configuration issue de conf.php
    global $lang, $taille_ecran, $MSG, $secure, $cle, $config;
    // On recupere tous les objet contenant les donnees
    global $data_in, $data_out, $data_srv, $session;
    // Initialization des variables
    global $message, $tache;
    switch ($action) {
        /**
         * - Cas Site_Accueil :
         * . 
         *      Le cas (par défaut) Site_Accueil recherche tous les taches, s'occupent des critères de tri, et renvoie vers la vue (page) Site_Accueil.php....
         */
        case "Accueil":
            /*=============*/
            Lib_myLog("Recuperation de l'arborescence");
            $data_in['code_arbo'] = 'suivi';
            $data_out['liste_fils'] = Arbo_construire($data_in['code_arbo'], 'tache');
            if (isset($data_in['id_arbo_pere'])) {
                $data_out['id_arbo_pere'] = $data_in['id_arbo_pere'];
            }
            if (!isset($data_in['type_affichage'])) {
                $data_in['type_affichage'] = 'toutes';
            }
            $data_out['type_affichage'] = $data_in['type_affichage'];
            $data_out['code_arbo'] = $data_in['code_arbo'];
            $data_out['menu_gauche'] = 'arbo';
            $data_out['page'] = 'suivi.php';
            break;
        case "Element_Etat":
            $arbo = Arbo_recuperer($data_in['id_arbo']);
            $arbo->etat = $arbo->etat == 'actif' ? $arbo->etat = 'inactif' : ($arbo->etat = 'actif');
            $arbo->UPD();
            $data_out['message_ok'] = $MSG['fr']['%%arbo_UPD%%'];
            // On met à jour l'état de l'tache associé à l'élément de l'arbo sélectionné
            if ($arbo->id_pere != 0 && $arbo->type_pere == 'tache') {
                $tache = Tache_recuperer($arbo->id_pere);
                $tache->etat = $arbo->etat;
                $tache->UPD();
            }
            // On remet à 0 le fichier contenant le "cache" des taches pour l'affichage des blocs
            Lib_writeData('', "ARBO");
            //Enregistrement d'un zip par dossier racine contenant les fichiers
            $tab_ids_arbos = array($data_in['id_arbo'] => $data_in['id_arbo']);
            //			Arbo_zipDocuments('arbo_docs', $tab_ids_arbos);
            ExecActions('Accueil');
            break;
        case "Element_Bouger":
            $tab_positions = explode("|", $data_in['tab_list']);
            $i = 1;
            $tab_ids_arbos = array();
            foreach ($tab_positions as $position) {
                $projet = Arbo_recuperer($position);
                if ($projet->ordre != $i) {
                    $tab_ids_arbos[$projet->id_arbo] = $projet->id_arbo;
                }
                $projet->ordre = $i;
                $projet->UPD();
                $i++;
            }
            $data_out['message_ok'] = $MSG['fr']['%%arbo_UPD%%'];
            // On remet à 0 le fichier contenant le "cache" de l'arborescence
            Lib_writeData('', "ARBO");
            //Enregistrement d'un zip par dossier racine contenant les fichiers
            //			Arbo_zipDocuments('arbo_docs', $tab_ids_arbos);
            ExecActions('Accueil');
            break;
        case "Element_DEL":
            /*=============*/
            Lib_myLog("Recuperation de l'element");
            if ($data_in['id_arbo_pere'] != 0) {
                /*=============*/
                Lib_myLog("Suppression de de l'objet de type arbo");
                $obj_element_initial = Arbo_recuperer($data_in['id_arbo']);
                $data_out['message_ok'] = $MSG['fr']['%%arbo_DEL%%'];
            }
            if ($data_in['id_arbo_pere'] == 0) {
                /*=============*/
                Lib_myLog("Suppression des taches dans toutes les langues");
                $obj_element_initial = Arbo_recuperer_par_element($data_in['id_pere'], $data_in['type_pere'], $data_in['code_arbo']);
                // Le même tache peut être en pluisieurs langues. On les regroupe grâce au code tache
                $args_taches['code'] = 'tache-' . $obj_element_initial->id_pere;
                $liste_taches = Taches_chercher($args_taches);
                foreach ($liste_taches as $art) {
                    $tache = Tache_recuperer($art['id_tache']);
                    $tache->DEL();
                }
                $data_out['message_ok'] = $MSG['fr']['%%page_DEL%%'];
            }
            /*=============*/
            Lib_myLog("Retablissement de l'ordre sans coupure");
            $args_elements['famille'] = $obj_element_initial->famille;
            $args_elements['sup_ordre'] = $obj_element_initial->ordre;
            $args_elements['code_arbo'] = $data_in['code_arbo'];
            $elements = Arbos_chercher($args_elements);
            foreach ($elements as $element) {
                $obj_element = Arbo_recuperer($element['id_arbo']);
                $obj_element->ordre--;
                $obj_element->UPD();
            }
            $obj_element_initial->DEL();
            // On remet à 0 le fichier contenant le "cache" de l'arborescence
            Lib_writeData('', "ARBO");
            //Enregistrement d'un zip par dossier racine contenant les fichiers
            $tab_ids_arbos = array($data_in['id_arbo'] => $data_in['id_arbo']);
            //			Arbo_zipDocuments('arbo_docs',$tab_ids_arbos);
            ExecActions('Accueil');
            break;
        case "Categorie_ADD":
            $args_arbos['code_arbo'] = $data_in['code_arbo'];
            $args_arbos['famille'] = '';
            if ($data_in['id_arbo_pere'] != '') {
                /*=============*/
                Lib_myLog("Il s'agit d'un ajout de sous-element !");
                $arbo_pere = Arbo_recuperer($data_in['id_arbo_pere']);
                $args_arbos['famille'] = $arbo_pere->famille . $arbo_pere->id_arbo . '-';
            }
            /*=============*/
            Lib_myLog("On determine le nouvel ordre a attribuer au nouvel element");
            $arbos = Arbos_chercher($args_arbos);
            $ordre = count($arbos);
            $ordre++;
            /*=============*/
            Lib_myLog("Rajout d'un nouvel element");
            $arbo = new Arbo();
            if ($data_in['id_arbo_pere'] != '') {
                $arbo->famille .= $arbo_pere->famille . $arbo_pere->id_arbo . '-';
            }
            $arbo->code_arbo = $data_in['code_arbo'];
            $arbo->type_pere = 'arbo';
            $arbo->ordre = $ordre;
            $arbo->etat = 'inactif';
            $arbo->intitule = $data_in['intitule'];
            $id_arbo = $arbo->ADD();
            $data_out['message_ok'] = $MSG['fr']['%%arbo_ADD%%'];
            $arbo->id_arbo_pere = $data_in['id_arbo_pere'] != '' ? $data_in['id_arbo_pere'] : $id_arbo;
            /*=============*/
            Lib_myLog("Creation du nouvel tache associe a la categorie");
            $tache = new Tache();
            $tache->titre_page = $data_in['intitule'];
            $tache->titre = $data_in['intitule'];
            $tache->lang = 'fr';
            $tache->etat = 'actif';
            $id_tache = $tache->ADD();
            $tache = Tache_recuperer($id_tache);
            // On définit un code pour pouvoir retrouver le même tache en plusieurs langues
            $tache->code = 'tache-' . $id_tache;
            $tache->UPD();
            foreach ($GLOBALS['LANGUES'] as $langue) {
                /*=============*/
                Lib_myLog("Ajout de l'tache en {$langue}");
                $tache->lang = $langue;
                $tache->ADD();
            }
            $arbo->id_pere = $id_tache;
            $arbo->type_pere = 'tache';
            $arbo->UPD();
            // On remet à 0 le fichier contenant le "cache" de l'arborescence
            Lib_writeData('', "ARBO");
            //Enregistrement d'un zip par dossier racine contenant les fichiers
            $tab_ids_arbos = array($id_arbo => $id_arbo);
            //			Arbo_zipDocuments('arbo_docs', $tab_ids_arbos);
            ExecActions('Accueil');
            break;
        case "Categorie_UPD":
            /*=============*/
            Lib_myLog("Modification de l'intitule d'un element");
            $arbo = Arbo_recuperer($data_in['id_arbo']);
            $arbo->intitule = $data_in['intitule'];
            $arbo->UPD();
            /*=============*/
            Lib_myLog("Modification de l'tache lie a l'element");
            if ($arbo->id_pere) {
                $tache = Tache_recuperer($arbo->id_pere);
                $tache->titre = $data_in['intitule'];
                $tache->UPD();
            }
            // On remet à 0 le fichier contenant le "cache" de l'arborescence
            Lib_writeData('', "ARBO");
            //Enregistrement d'un zip par dossier racine contenant les fichiers
            $tab_ids_arbos = array($data_in['id_arbo'] => $data_in['id_arbo']);
            //			Arbo_zipDocuments('arbo_docs',$tab_ids_arbos);
            $data_out['message_ok'] = $MSG['fr']['%%arbo_UPD%%'];
            ExecActions('Accueil');
            break;
        case "SELECT_SsCategories":
            $data_out['liste_sous_categories'] = array();
            /*=============*/
            Lib_myLog("Recuperation du pere");
            $arbo_pere = Arbo_recuperer($data_in['id_arbo']);
            $args_sous['not_id_arbo_pere'] = 0;
            $args_sous['famille'] = $arbo_pere->famille . $arbo_pere->id_arbo . '-';
            $data_out['liste_sous_categories'] = Arbos_chercher($args_sous);
            $cle = 'ordre';
            $val = usort($data_out['liste_sous_categories'], "Lib_compareUp");
            $data_out['page'] = 'arbo_select_ss_categories.php';
            break;
        case "SELECT_SsSsCategories":
            $data_out['liste_sous_categories'] = array();
            /*=============*/
            Lib_myLog("Recuperation du pere");
            $arbo_pere = Arbo_recuperer($data_in['id_arbo']);
            $args_sous['not_id_arbo_pere'] = 0;
            $args_sous['famille'] = $arbo_pere->famille . $arbo_pere->id_arbo . '-';
            $data_out['liste_sous_categories'] = Arbos_chercher($args_sous);
            $cle = 'ordre';
            $val = usort($data_out['liste_sous_categories'], "Lib_compareUp");
            $data_out['page'] = 'arbo_select_ss_ss_categories.php';
            break;
        case "AJAX_ArboUPD":
            $tab_arbo = json_decode($data_in['arbo_json'], true);
            /*=============*/
            Lib_myLog("Arbo recuperee");
            Arbo_recalcul($tab_arbo);
            break;
        case "Tache_ADD":
            $F5 = Lib_checkF5($session, $data_in['timestamp']);
            $continue = $F5 ? false : true;
            if ($continue) {
                $args_arbos['code_arbo'] = $data_in['code_arbo'];
                $args_arbos['famille'] = '';
                if ($data_in['id_arbo_pere'] != 0) {
                    $arbo = Arbo_recuperer($data_in['id_arbo_pere']);
                    $args_arbos['famille'] = $arbo->famille . $arbo->id_arbo . '-';
                    $args_arbo['id_arbo'] = $data_in['id_arbo_pere'];
                    $id_categorie = $data_in['id_arbo_pere'];
                }
                // Si un id_arbo_fils est positionné, il "surclasse" l'id_pere!
                if (isset($data_in['id_arbo_fils']) && $data_in['id_arbo_fils'] != 0) {
                    $arbo = Arbo_recuperer($data_in['id_arbo_fils']);
                    $args_arbos['famille'] = $arbo->famille . $arbo->id_arbo . '-';
                    $args_arbo['id_arbo'] = $data_in['id_arbo_fils'];
                }
                if (isset($data_in['id_arbo_petit_fils']) && $data_in['id_arbo_petit_fils'] != 0) {
                    $arbo = Arbo_recuperer($data_in['id_arbo_petit_fils']);
                    $args_arbos['famille'] = $arbo->famille . $arbo->id_arbo . '-';
                    $args_arbo['id_arbo'] = $data_in['id_arbo_petit_fils'];
                }
                /*=============*/
                Lib_myLog("On determine le nouvel ordre a attribuer au nouvel element dans l'arbo");
                $arbos = Arbos_chercher($args_arbos);
                $ordre = count($arbos);
                $ordre++;
                /*=============*/
                Lib_myLog("On recupere la categorie dont va dependre l'tache");
                $arbo = Arbos_chercher($args_arbo);
                /*=============*/
                Lib_myLog("Creation du nouvel tache");
                $tache = new Tache();
                $tache->categorie = $data_in['categorie'];
                $tache->titre_page = $data_in['titre_page'];
                // On met dans le titre le titre_page par défaut. Celui-ci sera changé à l'édition de l'tache de toutes façons...
                $tache->titre = $data_in['titre_page'];
                for ($i = 1; $i <= 20; $i++) {
                    $tache->{'data' . $i} = $data_in['data' . $i];
                }
                $tache->date = $data_in['date'];
                $tache->texte = $data_in['texte'];
                $tache->lang = 'fr';
                $tache->etat = 'inactif';
                $id_tache = $tache->ADD();
                $tache = Tache_recuperer($id_tache);
                for ($i = 1; $i <= 5; $i++) {
                    if ($_FILES["fichier" . $i]["name"] != '') {
                        if ($_FILES["fichier" . $i]['error'] == 1) {
                            /*=============*/
                            Lib_myLog("Taille trop elevee");
                            $val = ini_get('upload_max_filesize');
                            $data_out['message_ko'] = $MSG['fr']['%%Erreur_Taille%%'] . " ({$val})";
                            $tache->{'fichier' . $i} = '';
                        } else {
                            if ($valid == 1) {
                                /*=============*/
                                Lib_myLog("Fichier non autorise");
                                $data_out['message_ko'] = $MSG['fr']['%%Fichier_non_autorise%%'];
                            } else {
                                /*=============*/
                                Lib_myLog("Telechargement du fichier");
                                $fichier = Lib_nettoie($_FILES["fichier" . $i]["name"]);
                                $fichier = $tache->id_tache . '_' . $fichier;
                                if (file_exists('../file_ftp/documents_suivi/' . $fichier)) {
                                    unlink('../file_ftp/documents_suivi/' . $fichier);
                                }
                                if (is_uploaded_file($_FILES["fichier" . $i]["tmp_name"])) {
                                    $tmp_fichier = $_FILES["fichier" . $i]["tmp_name"];
                                    rename($tmp_fichier, '../file_ftp/documents_suivi/' . $fichier);
                                    chmod("../file_ftp/documents_suivi/{$fichier}", 0644);
                                }
                                $tache->{'fichier' . $i} = $fichier;
                            }
                        }
                    }
                }
                // On définit un code pour pouvoir retrouver le même tache en plusieurs langues
                $tache->code = 'tache-' . $id_tache;
                $tache->UPD();
                foreach ($GLOBALS['LANGUES'] as $langue) {
                    /*=============*/
                    Lib_myLog("Ajout de l'tache en {$langue}");
                    $tache->lang = $langue;
                    $tache->ADD();
                }
                /*=============*/
                Lib_myLog("Rajout du nouvel tache dans l'arbo");
                $new_arbo = new Arbo();
                $new_arbo->code_arbo = $data_in['code_arbo'];
                $new_arbo->id_pere = $id_tache;
                $new_arbo->famille .= $arbo['famille'] . $arbo['id_arbo'] . '-';
                $new_arbo->type_pere = 'tache';
                $new_arbo->ordre = $ordre;
                $new_arbo->intitule = $data_in['titre_page'];
                $new_arbo->etat = 'inactif';
                $id_arbo = $new_arbo->ADD();
                // On remet à 0 le fichier contenant le "cache" des taches pour l'affichage des blocs
                Lib_writeData('', "TACHES");
                // On remet à 0 le fichier contenant le "cache" de l'arborescence
                Lib_writeData('', "ARBO");
                //Enregistrement d'un zip par dossier racine contenant les fichiers
                $tab_ids_arbos = array($id_arbo => $id_arbo);
                //				Arbo_zipDocuments('arbo_docs',$tab_ids_arbos);
            }
            if ($continue) {
                $data_in['id_tache'] = $id_tache;
                if (isset($data_in['code_arbo'])) {
                    header("Location: http://" . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\') . "/actions.php?action=Accueil&code_arbo={$data_in['code_arbo']}");
                } else {
                    ExecActions('Site_Apercu');
                }
            } else {
                if ($F5) {
                    /*=============*/
                    Lib_myLog("Tentative de F5!");
                    $data_out['message_ko'] = $MSG[$lang]['%%Erreur_Revalidation%%'];
                    ExecActions('Site_Apercu');
                } else {
                    ExecActions('Site_Apercu');
                }
            }
            break;
        case "POPUP_TacheUPD":
            $data_out['tache'] = Taches_chercher(array('id_tache' => $data_in['id_tache']));
            $data_out['code_arbo'] = $data_in['code_arbo'];
            $data_out['page'] = 'popup_tache_upd.php';
            break;
        case "POPUP_CategorieUPD":
            $data_out = Arbos_chercher(array('id_arbo' => $data_in['id_arbo']));
            $data_out['code_arbo'] = $data_in['code_arbo'];
            $data_out['page'] = 'popup_arbo_categorie_upd.php';
            break;
        case "Tache_UPD":
            /*=============*/
            Lib_myLog("Modification de l'tache");
            $tache = Tache_recuperer($data_in['id_tache']);
            $tache->categorie = $data_in['categorie'];
            $tache->titre_page = $data_in['titre_page'];
            // On met dans le titre le titre_page par défaut. Celui-ci sera changé à l'édition de l'tache de toutes façons...
            $tache->titre = $data_in['titre_page'];
            for ($i = 1; $i <= 20; $i++) {
                $tache->{'data' . $i} = $data_in['data' . $i];
            }
            $tache->date = $data_in['date'];
            $tache->texte = $data_in['texte'];
            $tache->lang = 'fr';
            $tache->etat = 'inactif';
            //Si la date de mise en production est positionnee, alors la tâche est terminée
            if ($tache->data4 != '') {
                $tache->etat = 'actif';
            }
            for ($i = 1; $i <= 5; $i++) {
                if ($data_in['sup_fichier' . $i] == 1) {
                    if (file_exists('../file_ftp/documents_suivi/' . $tache->{'fichier' . $i})) {
                        unlink('../file_ftp/documents_suivi/' . $tache->{'fichier' . $i});
                    }
                    $tache->{'fichier' . $i} = '';
                }
                if ($_FILES["fichier" . $i]["name"] != '') {
                    if ($_FILES["fichier" . $i]['error'] == 1) {
                        /*=============*/
                        Lib_myLog("Taille trop elevee");
                        $val = ini_get('upload_max_filesize');
                        $data_out['message_ko'] = $MSG['fr']['%%Erreur_Taille%%'] . " ({$val})";
                        $tache->{'fichier' . $i} = '';
                    } else {
                        if ($valid == 1) {
                            /*=============*/
                            Lib_myLog("Fichier non autorise");
                            $data_out['message_ko'] = $MSG['fr']['%%Fichier_non_autorise%%'];
                        } else {
                            /*=============*/
                            Lib_myLog("Telechargement du fichier");
                            $fichier = Lib_nettoie($_FILES["fichier" . $i]["name"]);
                            $fichier = $tache->id_tache . '_' . $fichier;
                            if (file_exists('../file_ftp/documents_suivi/' . $fichier)) {
                                unlink('../file_ftp/documents_suivi/' . $fichier);
                            }
                            if (is_uploaded_file($_FILES["fichier" . $i]["tmp_name"])) {
                                $tmp_fichier = $_FILES["fichier" . $i]["tmp_name"];
                                rename($tmp_fichier, '../file_ftp/documents_suivi/' . $fichier);
                                chmod("../file_ftp/documents_suivi/{$fichier}", 0644);
                            }
                            $tache->{'fichier' . $i} = $fichier;
                        }
                    }
                }
            }
            $tache->UPD();
            // On remet à 0 le fichier contenant le "cache" des taches pour l'affichage des blocs
            Lib_writeData('', "TACHES");
            // On remet à 0 le fichier contenant le "cache" de l'arborescence
            Lib_writeData('', "ARBO");
            //Enregistrement d'un zip par dossier racine contenant les fichiers
            $arbo = Arbo_recuperer_par_element($data_in['id_tache'], 'tache', 'arbo_docs');
            $tab_ids_arbos = array($arbo->id_arbo => $arbo->id_arbo);
            //			Arbo_zipDocuments('arbo_docs',$tab_ids_arbos);
            if (isset($data_in['code_arbo'])) {
                header("Location: http://" . $_SERVER['HTTP_HOST'] . rtrim(dirname($_SERVER['PHP_SELF']), '/\\') . "/actions.php?action=Accueil&code_arbo={$data_in['code_arbo']}");
            }
            break;
        default:
            ExecActions('Accueil');
            break;
    }
}