/** baz_gestion_listes() affiche le listing des listes et permet de les modifier
 *   @return  string    le code HTML
 */
function baz_gestion_listes()
{
    $res = '';
    // affichage de la liste des templates a modifier ou supprimer (dans le cas ou il n'y a pas d'action selectionnee)
    if (!isset($_GET['action'])) {
        // il y a des listes à importer
        if (isset($_POST['imported-list'])) {
            foreach ($_POST['imported-list'] as $nomwikiliste => $value) {
                // on sauve les valeurs d'une liste dans une PageWiki, pour garder l'historique
                $GLOBALS['wiki']->SavePage($nomwikiliste, $value);
                // on cree un triple pour specifier que la PageWiki creee est une liste
                $GLOBALS['wiki']->InsertTriple($nomwikiliste, 'http://outils-reseaux.org/_vocabulary/type', 'liste', '', '');
            }
            $res .= '<div class="alert alert-success">' . _t('BAZ_LIST_IMPORT_SUCCESSFULL') . '.</div>' . "\n";
        }
        // requete pour obtenir l'id et le label des types d'annonces
        $requete = 'SELECT resource FROM ' . $GLOBALS['wiki']->config['table_prefix'] . 'triples ' . 'WHERE property="http://outils-reseaux.org/_vocabulary/type" AND value="liste" ORDER BY resource';
        $resultat = $GLOBALS['wiki']->LoadAll($requete);
        $tab_lists = array('lists' => array());
        foreach ($resultat as $ligne) {
            $valeursliste = baz_valeurs_liste($ligne['resource']);
            $tab_lists['lists'][$ligne['resource']]['titre_liste'] = $valeursliste['titre_liste'];
            $tab_lists['lists'][$ligne['resource']]['can_edit'] = $GLOBALS['wiki']->HasAccess('write', $ligne['resource']);
            $tab_lists['lists'][$ligne['resource']]['can_delete'] = $GLOBALS['wiki']->UserIsAdmin() || $GLOBALS['wiki']->UserIsOwner($ligne['resource']);
            $elements_liste = '';
            foreach ($valeursliste['label'] as $val) {
                $elements_liste .= '<option>' . $val . '</option>' . "\n";
            }
            if ($elements_liste != '') {
                $tab_lists['lists'][$ligne['resource']]['values'] = '<select class="form-control input-sm" id="liste_' . $ligne['resource'] . '">' . "\n" . '<option>' . _t('BAZ_CHOISIR') . '</option>' . "\n" . $elements_liste . '</select>' . "\n";
            } else {
                $tab_lists['lists'][$ligne['resource']]['values'] = '';
            }
        }
        // on rajoute les bibliothèques js nécéssaires
        $GLOBALS['wiki']->addJavascriptFile('tools/bazar/libs/bazar.edit_lists.js');
        // On cherche un template personnalise dans le repertoire themes/tools/bazar/templates
        $templatetoload = 'themes/tools/bazar/templates/lists_table.tpl.html';
        if (!is_file($templatetoload)) {
            $templatetoload = 'tools/bazar/presentation/templates/lists_table.tpl.html';
        }
        include_once 'tools/bazar/libs/squelettephp.class.php';
        $templatelists = new SquelettePhp($templatetoload);
        $templatelists->set($tab_lists);
        $res .= $templatelists->analyser();
    } elseif ($_GET['action'] == BAZ_ACTION_MODIFIER_LISTE) {
        // il y a une liste a modifier, recuperation des informations
        $valeursliste = baz_valeurs_liste($_GET['idliste']);
        $res .= baz_formulaire_des_listes(BAZ_ACTION_MODIFIER_LISTE_V, $valeursliste);
    } elseif ($_GET['action'] == BAZ_ACTION_NOUVELLE_LISTE) {
        //il y a une nouvelle liste a saisir
        $res .= baz_formulaire_des_listes(BAZ_ACTION_NOUVELLE_LISTE_V);
    } elseif ($_GET['action'] == BAZ_ACTION_NOUVELLE_LISTE_V) {
        //il y a des donnees pour ajouter une nouvelle liste
        unset($_POST['valider']);
        $nomwikiliste = genere_nom_wiki('Liste ' . $_POST['titre_liste']);
        //on supprime les valeurs vides et on encode en utf-8 pour reussir a encoder en json
        $i = 1;
        $valeur['label'] = array();
        foreach ($_POST['label'] as $label) {
            if (($label != null || $label != '') && ($_POST['id'][$i] != null || $_POST['id'][$i] != '')) {
                $valeur['label'][$_POST['id'][$i]] = $label;
                $i++;
            }
        }
        if (TEMPLATES_DEFAULT_CHARSET != 'UTF-8') {
            $valeur['label'] = array_map('utf8_encode', $valeur['label']);
            $valeur['titre_liste'] = utf8_encode($_POST['titre_liste']);
        } else {
            $valeur['titre_liste'] = $_POST['titre_liste'];
        }
        //on sauve les valeurs d'une liste dans une PageWiki, pour garder l'historique
        $GLOBALS['wiki']->SavePage($nomwikiliste, json_encode($valeur));
        //on cree un triple pour specifier que la PageWiki creee est une liste
        $GLOBALS['wiki']->InsertTriple($nomwikiliste, 'http://outils-reseaux.org/_vocabulary/type', 'liste', '', '');
        //on redirige vers la page contenant toutes les listes, et on confirme par message la bonne saisie de la liste
        $GLOBALS['wiki']->SetMessage(_t('BAZ_NOUVELLE_LISTE_ENREGISTREE'));
        $GLOBALS['wiki']->Redirect($GLOBALS['wiki']->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES, false));
    } elseif ($_GET['action'] == BAZ_ACTION_MODIFIER_LISTE_V && $GLOBALS['wiki']->HasAccess('write', $_POST['NomWiki'])) {
        //il y a des donnees pour modifier une liste
        unset($_POST['valider']);
        //on supprime les valeurs vides et on encode en utf-8 pour reussir a encoder en json
        $i = 1;
        $valeur['label'] = array();
        foreach ($_POST['label'] as $label) {
            if (($label != null || $label != '') && ($_POST['id'][$i] != null || $_POST['id'][$i] != '')) {
                $valeur['label'][$_POST['id'][$i]] = $label;
                $i++;
            }
        }
        if (TEMPLATES_DEFAULT_CHARSET != 'UTF-8') {
            $valeur['label'] = array_map('utf8_encode', $valeur['label']);
            $valeur['titre_liste'] = utf8_encode($_POST['titre_liste']);
        } else {
            $valeur['titre_liste'] = $_POST['titre_liste'];
        }
        /* ----------------- TODO: suppressions de valeurs dans les fiches pour l'integrite des donnees
                //on verifie si les valeurs des listes ont changees afin de garder de l'integrite de la base des fiches
                foreach ($_POST["ancienlabel"] as $key => $value) {
                //si la valeur de la liste a ete changee, on repercute les changements pour les fiches contenant cette valeur
                if ( isset($_POST["label"][$key]) && $value != $_POST["label"][$key] ) {
                //TODO: fonction baz_modifier_metas_liste($_POST['NomWiki'], $value, $_POST['label'][$key]);
                }
                }
        
                //on supprime les valeurs des listes supprimees des fiches possedants ces valeurs
                foreach ($_POST["a_effacer_ancienlabel"] as $key => $value) {
                //TODO: fonction baz_effacer_metas_liste($_POST['NomWiki'], $value);
                }
                --------------------- */
        //on sauve les valeurs d'une liste dans une PageWiki, pour garder l'historique
        $GLOBALS['wiki']->SavePage($_POST['NomWiki'], json_encode($valeur));
        //on redirige vers la page contenant toutes les listes, et on confirme par message la modification de la liste
        $GLOBALS['wiki']->SetMessage(_t('BAZ_LISTE_MODIFIEE'));
        $GLOBALS['wiki']->Redirect($GLOBALS['wiki']->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES, false));
    } elseif ($_GET['action'] == BAZ_ACTION_SUPPRIMER_LISTE && isset($_GET['idliste']) && $_GET['idliste'] != '' && ($GLOBALS['wiki']->UserIsAdmin() || $GLOBALS['wiki']->UserIsOwner($_GET['idliste']))) {
        // il y a un id de liste a supprimer
        $GLOBALS['wiki']->DeleteOrphanedPage($_GET['idliste']);
        $sql = 'DELETE FROM ' . $GLOBALS['wiki']->config['table_prefix'] . 'triples ' . 'WHERE resource = "' . htmlspecialchars($_GET['idliste'], ENT_COMPAT | ENT_HTML401, TEMPLATES_DEFAULT_CHARSET) . '" ';
        $GLOBALS['wiki']->Query($sql);
        // Envoie d un mail aux administrateurs
        if (BAZ_ENVOI_MAIL_ADMIN) {
            include_once 'tools/contact/libs/contact.functions.php';
            $lien = str_replace('/wakka.php?wiki=', '', $GLOBALS['wiki']->config['base_url']);
            $sujet = remove_accents('[' . str_replace('http://', '', $lien) . '] liste supprimee : ' . $_GET['idliste']);
            $text = 'IP utilisee : ' . $_SERVER['REMOTE_ADDR'] . ' (' . $GLOBALS['wiki']->GetUserName() . ')';
            $texthtml = $text;
            $fichier = 'tools/bazar/presentation/styles/bazar.css';
            $style = file_get_contents($fichier);
            $style = str_replace('url(', 'url(' . $lien . '/tools/bazar/presentation/', $style);
            $html = '<html><head><style type="text/css">' . $style . '</style></head><body>' . $texthtml . '</body></html>';
            //on va chercher les admins
            $requeteadmins = 'SELECT value FROM ' . $GLOBALS['wiki']->config['table_prefix'] . 'triples WHERE resource="ThisWikiGroup:admins" AND property="http://www.wikini.net/_vocabulary/acls" LIMIT 1';
            $ligne = $GLOBALS['wiki']->LoadSingle($requeteadmins);
            $tabadmin = explode("\n", $ligne['value']);
            foreach ($tabadmin as $line) {
                $admin = $GLOBALS['wiki']->LoadUser(trim($line));
                send_mail(BAZ_ADRESSE_MAIL_ADMIN, BAZ_ADRESSE_MAIL_ADMIN, $admin['email'], $sujet, $text, $html);
            }
        }
        //on redirige vers la page contenant toutes les listes, avec un message de confirmation
        $GLOBALS['wiki']->SetMessage(_t('BAZ_LISTES_SUPPRIMEES'));
        $GLOBALS['wiki']->Redirect($GLOBALS['wiki']->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES, false));
    }
    return $res;
}
/** baz_gestion_listes() affiche le listing des listes et permet de les modifier
*
*   @return  string    le code HTML
*/
function baz_gestion_listes()
{
    $res = '';
    //titre
    if ($GLOBALS['_BAZAR_']['affiche_menu'] == "0") {
        $res .= '<h2 class="titre_gestion_liste">' . BAZ_GESTION_LISTES . '</h2>' . "\n";
    }
    // affichage de la liste des templates a modifier ou supprimer (dans le cas ou il n'y a pas d'action selectionnee)
    if (!isset($_GET['action'])) {
        //requete pour obtenir l'id et le label des types d'annonces
        $requete = 'SELECT resource FROM ' . $GLOBALS['wiki']->config['table_prefix'] . 'triples WHERE property="http://outils-reseaux.org/_vocabulary/type" AND value="liste" ORDER BY resource';
        $resultat = $GLOBALS['wiki']->LoadAll($requete);
        $liste = array();
        foreach ($resultat as $ligne) {
            $valeursliste = baz_valeurs_liste($ligne['resource']);
            $liste[$valeursliste['titre_liste']] = '<li>';
            if (baz_a_le_droit('saisie_liste')) {
                $liste[$valeursliste['titre_liste']] .= '<a class="BAZ_lien_supprimer" href="' . $GLOBALS['wiki']->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES . '&amp;' . BAZ_VARIABLE_ACTION . '=' . BAZ_ACTION_SUPPRIMER_LISTE . '&amp;idliste=' . $ligne['resource']) . '"  onclick="javascript:return confirm(\'' . BAZ_CONFIRM_SUPPRIMER_LISTE . ' ?\');"></a>' . "\n";
            }
            $elements_liste = '';
            foreach ($valeursliste['label'] as $val) {
                $elements_liste .= '<option>' . $val . '</option>';
            }
            if ($elements_liste != '') {
                $affichage_liste = '&nbsp;- ' . BAZ_VALEURS_LISTE . ' :&nbsp;<select id="liste_' . $ligne['resource'] . '">' . "\n" . '<option>' . BAZ_CHOISIR . '</option>' . "\n" . $elements_liste . "\n" . '</select>' . "\n";
            } else {
                $affichage_liste = '';
            }
            if (baz_a_le_droit('saisie_liste')) {
                $liste[$valeursliste['titre_liste']] .= '<a class="BAZ_lien_modifier" href="' . $GLOBALS['wiki']->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES . '&amp;' . BAZ_VARIABLE_ACTION . '=' . BAZ_ACTION_MODIFIER_LISTE . '&amp;idliste=' . $ligne['resource']) . '">' . $valeursliste['titre_liste'] . '</a>' . $affichage_liste . "\n";
            } else {
                $liste[$valeursliste['titre_liste']] .= $valeursliste['titre_liste'] . $affichage_liste . "\n";
            }
            $liste[$valeursliste['titre_liste']] .= '</li>' . "\n";
        }
        if (count($liste > 0)) {
            ksort($liste);
            $res .= '<div class="info_box">' . BAZ_INTRO_MODIFIER_LISTE . '</div>' . "\n";
            $res .= '<ul class="BAZ_liste">' . "\n";
            foreach ($liste as $listederoulante) {
                $res .= $listederoulante;
            }
            $res .= '</ul>' . "\n";
        } else {
            $res .= '<div class="info_box">' . BAZ_PAS_DE_LISTES . '</div>' . "\n";
        }
        //ajout du lien pour creer un nouveau formulaire
        if (baz_a_le_droit('saisie_liste')) {
            $lien_formulaire = $GLOBALS['wiki']->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES . '&amp;' . BAZ_VARIABLE_ACTION . '=' . BAZ_ACTION_NOUVELLE_LISTE);
            $res .= '<a class="BAZ_lien_nouveau" href="' . $lien_formulaire . '">' . BAZ_NOUVELLE_LISTE . '</a>' . "\n";
        }
    } elseif ($_GET['action'] == BAZ_ACTION_MODIFIER_LISTE) {
        //recuperation des informations de la liste
        $valeursliste = baz_valeurs_liste($_GET['idliste']);
        $res .= baz_formulaire_des_listes(BAZ_ACTION_MODIFIER_LISTE_V, $valeursliste);
    } elseif ($_GET['action'] == BAZ_ACTION_NOUVELLE_LISTE) {
        $res .= baz_formulaire_des_listes(BAZ_ACTION_NOUVELLE_LISTE_V);
    } elseif ($_GET['action'] == BAZ_ACTION_NOUVELLE_LISTE_V) {
        unset($_POST["valider"]);
        $nomwikiliste = genere_nom_wiki('Liste ' . $_POST['titre_liste']);
        //on supprime les valeurs vides et on encode en utf-8 pour reussir a encoder en json
        $i = 1;
        $valeur["label"] = array();
        foreach ($_POST["label"] as $label) {
            if (($label != NULL || $label != '') && ($_POST["id"][$i] != NULL || $_POST["id"][$i] != '')) {
                $valeur["label"][$_POST["id"][$i]] = $label;
                $i++;
            }
        }
        $valeur["label"] = array_map("utf8_encode", $valeur["label"]);
        $valeur["titre_liste"] = utf8_encode($_POST["titre_liste"]);
        //on sauve les valeurs d'une liste dans une PageWiki, pour garder l'historique
        $GLOBALS["wiki"]->SavePage($nomwikiliste, json_encode($valeur));
        //on cree un triple pour specifier que la PageWiki creee est une liste
        $GLOBALS["wiki"]->InsertTriple($nomwikiliste, 'http://outils-reseaux.org/_vocabulary/type', 'liste', '', '');
        //on redirige vers la page contenant toutes les listes, et on confirme par message la bonne saisie de la liste
        $GLOBALS["wiki"]->SetMessage(BAZ_NOUVELLE_LISTE_ENREGISTREE);
        $GLOBALS["wiki"]->Redirect($GLOBALS["wiki"]->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES, false));
    } elseif ($_GET['action'] == BAZ_ACTION_MODIFIER_LISTE_V && baz_a_le_droit(BAZ_ACTION_MODIFIER_LISTE_V)) {
        unset($_POST["valider"]);
        //on supprime les valeurs vides et on encode en utf-8 pour reussir a encoder en json
        $i = 1;
        $valeur["label"] = array();
        foreach ($_POST["label"] as $label) {
            if (($label != NULL || $label != '') && ($_POST["id"][$i] != NULL || $_POST["id"][$i] != '')) {
                $valeur["label"][$_POST["id"][$i]] = $label;
                $i++;
            }
        }
        $valeur["label"] = array_map("utf8_encode", $valeur["label"]);
        $valeur["titre_liste"] = utf8_encode($_POST["titre_liste"]);
        /* ----------------- TODO: gerer les suppressions de valeurs dans les fiches associees pour garantir l'integrite des donnees
        		//on verifie si les valeurs des listes ont changees afin de garder de l'integrite de la base des fiches
        		foreach ($_POST["ancienlabel"] as $key => $value) {
        			//si la valeur de la liste a ete changee, on repercute les changements pour les fiches contenant cette valeur
        			if ( isset($_POST["label"][$key]) && $value != $_POST["label"][$key] ) {
        				//TODO: fonction baz_modifier_metas_liste($_POST['NomWiki'], $value, $_POST['label'][$key]);
        			}
        		}
        
        		//on supprime les valeurs des listes supprimees des fiches possedants ces valeurs
        		foreach ($_POST["a_effacer_ancienlabel"] as $key => $value) {
        			//TODO: fonction baz_effacer_metas_liste($_POST['NomWiki'], $value);
        		}
        		--------------------- */
        //on sauve les valeurs d'une liste dans une PageWiki, pour garder l'historique
        $GLOBALS["wiki"]->SavePage($_POST['NomWiki'], json_encode($valeur));
        //on redirige vers la page contenant toutes les listes, et on confirme par message la bonne modification de la liste
        $GLOBALS["wiki"]->SetMessage(BAZ_LISTE_MODIFIEE);
        $GLOBALS["wiki"]->Redirect($GLOBALS["wiki"]->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES, false));
    } elseif ($_GET['action'] == BAZ_ACTION_SUPPRIMER_LISTE && baz_a_le_droit(BAZ_ACTION_SUPPRIMER_LISTE)) {
        $GLOBALS["wiki"]->DeleteOrphanedPage($_GET['idliste']);
        $sql = 'DELETE FROM ' . $GLOBALS['wiki']->config["table_prefix"] . 'triples ' . 'WHERE resource = "' . addslashes($_GET['idliste']) . '" ';
        $GLOBALS["wiki"]->Query($sql);
        //on redirige vers la page contenant toutes les listes, et on confirme par message la bonne suppression de la liste
        $GLOBALS["wiki"]->SetMessage(BAZ_LISTES_SUPPRIMEES);
        $GLOBALS["wiki"]->Redirect($GLOBALS["wiki"]->href('', $GLOBALS['wiki']->GetPageTag(), BAZ_VARIABLE_VOIR . '=' . BAZ_VOIR_LISTES, false));
    }
    return $res;
}