Subversion Repositories Applications.bazar

Compare Revisions

No changes between revisions

Ignore whitespace Rev 467 → Rev 470

/tags/v3.1-blanche-neige/bazar.admin.php
New file
0,0 → 1,172
<?php
//vim: set expandtab tabstop=4 shiftwidth=4:
 
// Copyright (C) 1999-2004 Tela Botanica (accueil@tela-botanica.org)
//
// Ce logiciel est un programme informatique servant à gérer du contenu et des
// applications web.
// Ce logiciel est régi par la licence CeCILL soumise au droit français et
// respectant les principes de diffusion des logiciels libres. Vous pouvez
// utiliser, modifier et/ou redistribuer ce programme sous les conditions
// de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
// sur le site "http://www.cecill.info".
 
// En contrepartie de l'accessibilité au code source et des droits de copie,
// de modification et de redistribution accordés par cette licence, il n'est
// offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
// seule une responsabilité restreinte pèse sur l'auteur du programme, le
// titulaire des droits patrimoniaux et les concédants successifs.
 
// A cet égard l'attention de l'utilisateur est attirée sur les risques
// associés au chargement, à l'utilisation, à la modification et/ou au
// développement et à la reproduction du logiciel par l'utilisateur étant
// donné sa spécificité de logiciel libre, qui peut le rendre complexe à
// manipuler et qui le réserve donc à des développeurs et des professionnels
// avertis possédant des connaissances informatiques approfondies. Les
// utilisateurs sont donc invités à charger et tester l'adéquation du
// logiciel à leurs besoins dans des conditions permettant d'assurer la
// sécurité de leurs systèmes et ou de leurs données et, plus généralement,
// à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
 
// Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
// pris connaissance de la licence CeCILL, et que vous en avez accepté les
// termes.
// ----
// CVS : $Id: bazar.admin.php,v 1.2 2007/04/20 09:57:21 florian Exp $
 
/**
* Papyrus : Programme d'administration du bazar
*
* La page contient l'appel aux fonctions de l'application de vérification de l'installation puis
* l'appel du fichier réalisant l'initialisation. Enfin, l'appel du fichier réalisant le rendu et
* retournant la page au navigateur client.
*
*@package Bazar
//Auteur original :
*@author Florian SCHMITT <florian.schmitt@laposte.net>
*@copyright Tela-Botanica 2000-2007
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
// +------------------------------------------------------------------------------------------------------+
// | ENTÊTE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
include_once 'configuration/baz_config.inc.php'; //fichier de configuration de Bazar
//appel du fichier de constantes des langues
include_once 'langues/baz_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
 
 
// +------------------------------------------------------------------------------------------------------+
// | CLASSE |
// +------------------------------------------------------------------------------------------------------+
 
class Bazar_Admin {
var $objet_pear_auth;
var $objet_pear_db;
var $objet_pear_url;
var $sortie_xhtml;
/** Fonction redigerContenu() - Affiche le formulaire de r?action
*
*
* @return string Le HTML
*/
function afficherContenuCorps()
{
//-------------------------------------------------------------------------------------------------------------------
// Initialisation des attributs
$this->objet_pear_auth = $GLOBALS['_GEN_commun']['pear_auth'];
$this->objet_pear_db = $GLOBALS['_GEN_commun']['pear_db'];
$this->objet_pear_url = $GLOBALS['_GEN_commun']['url'];
$this->sortie_xhtml = '<h1>'.BAZ_CONFIG.'</h1>'."\n";
//-------------------------------------------------------------------------------------------------------------------
// Gestion des boutons de l'interface
if (isset($_POST['afficheur_annuler'])) {
return false;
} else if (isset($_POST['afficheur_enregistrer_quitter'])) {
$requete = 'UPDATE gen_menu SET gm_application_arguments="num_questionnaire='.$_POST['num_questionnaire'].
'||mail_questionnaire='.$_POST['mail_questionnaire'].'||texte_questionnaire_envoye='.$_POST['texte_questionnaire_envoye'].'" WHERE gm_id_menu='.$_GET['adme_menu_id'];
$resultat = $this->objet_pear_db->query($requete) ;
if (DB::isError($resultat)) {
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
}
return false;
}
//--------------------------------------------------------------------------------------------------------------
// Gestion des valeurs par defauts, en fonctions des donnees sauvees dans le menu
$requete = 'SELECT gm_application_arguments FROM gen_menu WHERE gm_id_menu='.$_GET['adme_menu_id'];
$resultat = $this->objet_pear_db->query($requete) ;
//echo $requete;
if (DB::isError($resultat)) {
die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
}
$valeurs_par_defaut = array();
if ($resultat->numRows()>0) {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$arguments = explode('||', $ligne->gm_application_arguments);
for ($i = 0; $i < count($arguments); $i++) {
$attr = explode('=', $arguments[$i], 2);
if ($attr[0] != '') {
$info_application->$attr[0] = (isset($attr[1]) ? $attr[1] : '');
}
}
}
//valeurs par defaut enregistrees dans la table
if (isset($info_application)) {
$valeurs_par_defaut['num_questionnaire']=$info_application->num_questionnaire;
$valeurs_par_defaut['mail_questionnaire']=$info_application->mail_questionnaire;
$valeurs_par_defaut['texte_questionnaire_envoye']=$info_application->texte_questionnaire_envoye;
}
} else {
//valeurs par defaut pour afficher une carto des structures
$valeurs_par_defaut['num_questionnaire']='';
$valeurs_par_defaut['mail_questionnaire']='';
$valeurs_par_defaut['texte_questionnaire_envoye']='';
}
//--------------------------------------------------------------------------------------------------------------
// Gestion du questionnaire
$this->objet_pear_url->addQueryString('adme_site_id', $_GET['adme_site_id']);
$this->objet_pear_url->addQueryString('adme_menu_id', $_GET['adme_menu_id']);
$this->objet_pear_url->addQueryString('adme_action', 'administrer');
$form =& new HTML_QuickForm('form_param_bazar', 'post', str_replace('&amp;', '&', $this->objet_pear_url->getUrl()));
$squelette =& $form->defaultRenderer();
$squelette->setFormTemplate("\n".'<form {attributes}>'."\n".'{content}'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<p>'."\n".
'<label style="width:100px;padding:5px;text-align:right;">{label}'.
'<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
' : </label>'."\n".'{element}'."\n".
'</p>'."\n" );
$form->addElement('text', 'mail_questionnaire', QUESTIONNAIRE_MAIL);
$liste_bouton_debut = '<ul class="liste_bouton">'."\n";
$form->addElement('html', $liste_bouton_debut);
$form->addElement('submit', 'afficheur_enregistrer_quitter', BAZ_ENREGISTRER_ET_QUITTER);
$form->addElement('submit', 'afficheur_annuler', BAZ_ANNULER);
$liste_bouton_fin = '</ul>'."\n";
$form->addElement('html', $liste_bouton_fin);
$form->setDefaults($valeurs_par_defaut);
$this->sortie_xhtml .= $form->toHTML()."\n";
return $this->sortie_xhtml;
}
 
}// Fin de la classe
 
// +------------------------------------------------------------------------------------------------------+
// | PIED du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
/* +--Fin du code ---------------------------------------------------------------------------------------+
* $Log: bazar.admin.php,v $
* Revision 1.2 2007/04/20 09:57:21 florian
* correction bugs suite au merge
*
* Revision 1.1 2007/02/02 14:02:08 alexandre_tb
* version initiale vide pour le moment
*
* +--Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/bazar.fonct.formulaire.php
New file
0,0 → 1,566
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.fonct.formulaire.php,v 1.26 2007-06-04 15:24:31 alexandre_tb Exp $
/**
* Formulaire
*
* Les fonctions de mise en page des formulaire
*
*@package bazar
//Auteur original :
*@author Florian SCHMITT <florian@ecole-et-nature.org>
//Autres auteurs :
*@author Aleandre GRANIER <alexandre@tela-botanica.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.26 $ $Date: 2007-06-04 15:24:31 $
// +------------------------------------------------------------------------------------------------------+
*/
 
require_once 'bazar.fonct.formulaire.controles.php';
 
//-------------------FONCTIONS DE MISE EN PAGE DES FORMULAIRES
 
/** liste() - Ajoute un élément de type liste au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param int identifiant de la liste sur bazar_liste
* @param string label à afficher dans le formulaire
* @param string première restriction de la taille des champs du formulaire
* @param string deuxième restriction de la taille des champs du formulaire
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs de la liste
* @param string ce champs est il obligatoire? (required)
* @param boolean sommes nous dans le moteur de recherche?
* @return void
*/
function liste(&$formtemplate, $id_liste , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
$requete = 'SELECT * FROM bazar_liste_valeurs WHERE blv_ce_liste='.$id_liste.' AND blv_ce_i18n="'.$GLOBALS['_BAZAR_']['langue'].'"';
$resultat = & $GLOBALS['_BAZAR_']['db'] -> query($requete) ;
if (DB::isError ($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
if ($dans_moteur_de_recherche==0) {
$select[0]=BAZ_CHOISIR;
}
else {
$select[0]=BAZ_INDIFFERENT;
}
while ($ligne = $resultat->fetchRow()) {
$select[$ligne[1]] = $ligne[2] ;
}
$option=array('style'=>'width: '.$limite1.'px;', 'id' => 'liste'.$id_liste);
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/select.php';
$select= new HTML_QuickForm_select('liste'.$id_liste, $label, $select, $option);
$select->setSize($limite2);
$select->setMultiple(0);
$select->setSelected($defaut);
$formtemplate->addElement($select) ;
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addRule('liste'.$id_liste, BAZ_CHOISIR_OBLIGATOIRE.' '.$label , 'nonzero', '', 'client') ;
$formtemplate->addRule('liste'.$id_liste, $label.' obligatoire', 'required', '', 'client') ;}
}
 
 
/** checkbox() - Ajoute un élément de type checkbox au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param int identifiant de la liste sur bazar_liste
* @param string label à afficher dans le formulaire
* @param string première restriction de la taille des champs du formulaire
* @param string deuxième restriction de la taille des champs du formulaire
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs de la liste
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function checkbox(&$formtemplate, $id_liste , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
$requete = 'SELECT * FROM bazar_liste_valeurs WHERE blv_ce_liste='.$id_liste.' AND blv_ce_i18n="'.$GLOBALS['_BAZAR_']['langue'].'" ORDER BY blv_label';
$resultat = & $GLOBALS['_BAZAR_']['db'] -> query($requete) ;
if (DB::isError ($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/checkbox.php' ;
$i=0;
if (isset($defaut)) $tab=split(', ', $defaut);
while ($ligne = $resultat->fetchRow()) {
if ($i==0) $labelchkbox=$label ; else $labelchkbox='&nbsp;';
$checkbox[$i]= & HTML_Quickform::createElement('checkbox', $ligne[1], $labelchkbox, $ligne[2],
array ('style'=>'display:inline;margin:2px;')) ;
foreach ($tab as $val) {
if ($ligne[1]==$val) $checkbox[$i]->setChecked(1);
}
$i++;
}
$squelette_checkbox =& $formtemplate->defaultRenderer();
$squelette_checkbox->setElementTemplate( '<tr><td colspan="2" style="text-align:left;">'."\n".'<fieldset class="bazar_fieldset">'."\n".'<legend>{label}'.
'<!-- BEGIN required --><span class="symbole_obligatoire">&nbsp;*</span><!-- END required -->'."\n".
'</legend>'."\n".'{element}'."\n".'</fieldset> '."\n".'</td></tr>'."\n", 'checkbox'.$id_liste);
$squelette_checkbox->setGroupElementTemplate( "\n".'<div class="bazar_checkbox">'."\n".'{element}'."\n".'</div>'."\n", 'checkbox'.$id_liste);
$formtemplate->addGroup($checkbox, 'checkbox'.$id_liste, $label, "\n");
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addGroupRule('checkbox'.$id_liste, $label.' obligatoire', 'required', null, 1, 'client');
}
}
 
 
/** listedatedeb() - Ajoute un élément de type date sous forme de liste au formulaire pour designer une date de début
*
* @param mixed L'objet QuickForm du formulaire
* @param string nom de la table dans la base de donnée
* @param string label à afficher dans le formulaire
* @param string première restriction de la taille des champs du formulaire
* @param string deuxième restriction de la taille des champs du formulaire
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs de la date
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function listedatedeb(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
$optiondate = array('language' => BAZ_LANGUE_PAR_DEFAUT,
'minYear' => date('Y')-4,
'maxYear'=> (date('Y')+10),
'format' => 'd m Y',
'addEmptyOption' => BAZ_DATE_VIDE,
);
$formtemplate->addElement('date', $nom_bdd, $label, $optiondate) ;
//gestion des valeurs par défaut (date du jour)
if (isset($defaut) && $defaut!='') {
$tableau_date = explode ('-', $defaut);
$formtemplate->setDefaults(array($nom_bdd => array ('d'=> $tableau_date[2], 'm'=> $tableau_date[1], 'Y'=> $tableau_date[0])));
}
else {
$defauts=array($nom_bdd => array ('d'=>date('d'), 'm'=>date('m'), 'Y'=>date('Y')));
$formtemplate->setDefaults($defauts);
}
//gestion du champs obligatoire
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addRule($nom_bdd, $label.' obligatoire', 'required', '', 'client') ;
}
}
 
/** listedatefin() - Ajoute un élément de type date sous forme de liste au formulaire pour designer une date de fin
*
* @param mixed L'objet QuickForm du formulaire
* @param string nom de la table dans la base de donnée
* @param string label à afficher dans le formulaire
* @param string première restriction de la taille des champs du formulaire
* @param string deuxième restriction de la taille des champs du formulaire
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs de la date
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function listedatefin(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
listedatedeb($formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche);
}
 
 
/** texte() - Ajoute un élément de type texte au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string nom de la table dans la base de donnée
* @param string label à afficher dans le formulaire
* @param string première restriction de la taille des champs du formulaire
* @param string deuxième restriction de la taille des champs du formulaire
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs du texte (inutile)
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function texte(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
$option=array('size'=>$limite1,'maxlength'=>$limite2, 'id' => $nom_bdd);
$formtemplate->addElement('text', $nom_bdd, $label, $option) ;
//gestion des valeurs par défaut
$defauts=array($nom_bdd=>$defaut);
$formtemplate->setDefaults($defauts);
$formtemplate->applyFilter($nom_bdd, 'addslashes') ;
//gestion du champs obligatoire
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addRule($nom_bdd, $label.' obligatoire', 'required', '', 'client') ;
}
}
 
 
/** textelong() - Ajoute un élément de type textearea au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string nom de la table dans la base de donnée
* @param string label à afficher dans le formulaire
* @param string taille des colonnes de l'élément
* @param string taille des lignes de l'élément
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs du texte (inutile)
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function textelong(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
$formtexte= new HTML_QuickForm_textarea($nom_bdd, $label, array('style'=>'white-space: normal;', 'id' => $nom_bdd));
$formtexte->setCols($limite1);
$formtexte->setRows($limite2);
$formtemplate->addElement($formtexte) ;
//gestion des valeurs par défaut
$defauts=array($nom_bdd=>$defaut);
$formtemplate->setDefaults($defauts);
$formtemplate->applyFilter($nom_bdd, 'addslashes') ;
//gestion du champs obligatoire
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addRule($nom_bdd, $label.' obligatoire', 'required', '', 'client') ;
}
}
 
/** url() - Ajoute un élément de type url internet au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string numero du champs input du formulaire (pour le différencier d'autres champs du meme type dans ce formulaire)
* @param string label à afficher dans le formulaire
* @param string taille des colonnes de l'élément
* @param string taille des lignes de l'élément
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs du texte (inutile)
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function url(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
//recherche des URLs deja entrees dans la base
$html_url= '';
if (isset($GLOBALS['_BAZAR_']["id_fiche"])) {
$requete = 'SELECT bu_id_url, bu_url, bu_descriptif_url FROM bazar_url WHERE bu_ce_fiche='.$GLOBALS['_BAZAR_']["id_fiche"];
$resultat = & $GLOBALS['_BAZAR_']['db'] -> query($requete) ;
if (DB::isError ($resultat)) {
die ($GLOBALS['_BAZAR_']['db']->getMessage().$GLOBALS['_BAZAR_']['db']->getDebugInfo()) ;
}
if ($resultat->numRows()>0) {
$html_url= '<tr>'."\n".'<td colspan="2">'."\n".'<strong>'.BAZ_LISTE_URL.'</strong>'."\n";
$tableAttr = array("class" => "bazar_table") ;
$table = new HTML_Table($tableAttr) ;
$entete = array (BAZ_LIEN , BAZ_SUPPRIMER) ;
$table->addRow($entete) ;
$table->setRowType(0, "th") ;
$lien_supprimer=$GLOBALS['_BAZAR_']['url'];
$lien_supprimer->addQueryString('action', $_GET['action']);
$lien_supprimer->addQueryString('id_fiche', $GLOBALS['_BAZAR_']["id_fiche"]);
$lien_supprimer->addQueryString('typeannonce', $_REQUEST['typeannonce']);
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$lien_supprimer->addQueryString('id_url', $ligne->bu_id_url);
$table->addRow (array(
'<a href="'.$ligne->bu_url.'" target="_blank"> '.$ligne->bu_descriptif_url.'</a>', // col 1 : le lien
'<a href="'.$lien_supprimer->getURL().'" onclick="javascript:return confirm(\''.BAZ_CONFIRMATION_SUPPRESSION_LIEN.'\');" >'.BAZ_SUPPRIMER.'</a>'."\n")) ; // col 2 : supprimer
$lien_supprimer->removeQueryString('id_url');
}
 
// Nettoyage de l'url
$lien_supprimer->removeQueryString('action');
$lien_supprimer->removeQueryString('id_fiche');
$lien_supprimer->removeQueryString('typeannonce');
$table->altRowAttributes(1, array("class" => "ligne_impaire"), array("class" => "ligne_paire"));
$table->updateColAttributes(1, array("align" => "center"));
$html_url.= $table->toHTML()."\n".'</td>'."\n".'</tr>'."\n" ;
}
}
$html ='<tr>'."\n".'<td colspan="2">'."\n".'<h4>'.$label.'</h4>'."\n".'</td>'."\n".'</tr>'."\n";
$formtemplate->addElement('html', $html) ;
if ($html_url!='') $formtemplate->addElement('html', $html_url) ;
$formtemplate->addElement('text', 'url_lien'.$nom_bdd, BAZ_URL_LIEN) ;
$formtemplate->addElement('text', 'url_texte'.$nom_bdd, BAZ_URL_TEXTE) ;
//gestion du champs obligatoire
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addRule('url_lien'.$nom_bdd, BAZ_URL_LIEN_REQUIS, 'required', '', 'client') ;
$formtemplate->addRule('url_texte'.$nom_bdd, BAZ_URL_TEXTE_REQUIS, 'required', '', 'client') ;
}
}
 
/** fichier() - Ajoute un élément de type fichier au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string numero du champs input du formulaire (pour le différencier d'autres champs du meme type dans ce formulaire)
* @param string label à afficher dans le formulaire
* @param string taille des colonnes de l'élément
* @param string taille des lignes de l'élément
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs du texte (inutile)
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function fichier(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
//AJOUTER DES FICHIERS JOINTS
$html_fichier= '';
if (isset($GLOBALS['_BAZAR_']["id_fiche"])) {
$requete = 'SELECT * FROM bazar_fichier_joint WHERE bfj_ce_fiche='.$GLOBALS['_BAZAR_']["id_fiche"];
$resultat = & $GLOBALS['_BAZAR_']['db'] -> query($requete) ;
if (DB::isError ($resultat)) {
die ($GLOBALS['_BAZAR_']['db']->getMessage().$GLOBALS['_BAZAR_']['db']->getDebugInfo()) ;
}
if ($resultat->numRows()>0) {
$html_fichier = '<tr>'."\n".'<td colspan="2">'."\n".'<strong>'.BAZ_LISTE_FICHIERS_JOINTS.'</strong>'."\n";
$tableAttr = array("class" => "bazar_table") ;
$table = new HTML_Table($tableAttr) ;
$entete = array (BAZ_FICHIER , BAZ_SUPPRIMER) ;
$table->addRow($entete) ;
$table->setRowType(0, "th") ;
$lien_supprimer=$GLOBALS['_BAZAR_']['url'];
$lien_supprimer->addQueryString('action', $_GET['action']);
$lien_supprimer->addQueryString('id_fiche', $GLOBALS['_BAZAR_']["id_fiche"]);
$lien_supprimer->addQueryString('typeannonce', $_REQUEST['typeannonce']);
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$lien_supprimer->addQueryString('id_fichier', $ligne->bfj_id_fichier);
$table->addRow(array('<a href="client/bazar/upload/'.$ligne->bfj_fichier.'"> '.$ligne->bfj_description.'</a>', // col 1 : le fichier et sa description
'<a href="'.$lien_supprimer->getURL().'" onclick="javascript:return confirm(\''.BAZ_CONFIRMATION_SUPPRESSION_FICHIER.'\');" >'.BAZ_SUPPRIMER.'</a>'."\n")) ; // col 2 : supprimer
$lien_supprimer->removeQueryString('id_fichier');
}
$table->altRowAttributes(1, array("class" => "ligne_impaire"), array("class" => "ligne_paire"));
$table->updateColAttributes(1, array("align" => "center"));
$html_fichier .= $table->toHTML()."\n".'</td>'."\n".'</tr>'."\n" ;
}
}
$html ='<tr>'."\n".'<td colspan="2">'."\n".'<h4>'.$label.'</h4>'."\n".'</td>'."\n".'</tr>'."\n";
$formtemplate->addElement('html', $html) ;
if ($html_fichier!='') $formtemplate->addElement('html', $html_fichier) ;
$formtemplate->addElement('text', 'texte_fichier'.$nom_bdd, BAZ_FICHIER_DESCRIPTION) ;
$formtemplate->addElement('file', 'fichier'.$nom_bdd, BAZ_FICHIER_JOINT) ;
$formtemplate->addRule('image', BAZ_IMAGE_VALIDE_REQUIS, '', '', 'client') ; //a completer pour checker l'image
$formtemplate->setMaxFileSize($limite1);
//gestion du champs obligatoire
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addRule('texte_fichier'.$nom_bdd, BAZ_FICHIER_LABEL_REQUIS, 'required', '', 'client') ;
$formtemplate->addRule('fichier'.$nom_bdd, BAZ_FICHIER_JOINT_REQUIS, 'required', '', 'client') ;
}
}
 
/** image() - Ajoute un élément de type image au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string numero du champs input du formulaire (pour le différencier d'autres champs du meme type dans ce formulaire)
* @param string label à afficher dans le formulaire
* @param string taille maximum du fichier colonnes de l'élément
* @param string taille des lignes de l'élément
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs du texte (inutile)
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function image(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
//AJOUTER UNE IMAGE
$html_image= '';
if (isset($GLOBALS['_BAZAR_']["id_fiche"])) {
$requete = 'SELECT bf_url_image FROM bazar_fiche WHERE bf_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'];
$resultat = & $GLOBALS['_BAZAR_']['db'] -> query($requete) ;
if (DB::isError ($resultat)) {
die ($GLOBALS['_BAZAR_']['db']->getMessage().$GLOBALS['_BAZAR_']['db']->getDebugInfo()) ;
}
if ($resultat->numRows()>0) {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$image=$ligne->bf_url_image;
}
if ($image!=NULL) {
$lien_supprimer=$GLOBALS['_BAZAR_']['url'];
$lien_supprimer->addQueryString('action', $_GET['action']);
$lien_supprimer->addQueryString('id_fiche', $GLOBALS['_BAZAR_']["id_fiche"]);
$lien_supprimer->addQueryString('typeannonce', $_REQUEST['typeannonce']);
$lien_supprimer->addQueryString('image', 1);
$html_image = '<tr>'."\n".
'<td>'."\n".'<img src="client/bazar/upload/'.$image.'" alt="'.BAZ_TEXTE_IMG_ALTERNATIF.'" width="130" height="130" />'."\n".'</td>'."\n".
'<td>'."\n".'<a href="'.$lien_supprimer->getURL().'" onclick="javascript:return confirm(\''.BAZ_CONFIRMATION_SUPPRESSION_IMAGE.'\');" >'.BAZ_SUPPRIMER.'</a><br /><br />'."\n".
'<strong>'.BAZ_POUR_CHANGER_IMAGE.'</strong><br />'."\n".'</td>'."\n".'</tr>'."\n";
}
}
}
$html ='<tr>'."\n".'<td colspan="2">'."\n".'<h4>'.$label.'</h4>'."\n".'</td>'."\n".'</tr>'."\n";
$formtemplate->addElement('html', $html) ;
if ($html_image!='') $formtemplate->addElement('html', $html_image) ;
$formtemplate->addElement('file', 'image', BAZ_IMAGE) ;
//TODO: controler si c'est une image
$formtemplate->setMaxFileSize($limite1);
//gestion du champs obligatoire
if (($dans_moteur_de_recherche==0) && isset($obligatoire) && ($obligatoire==1)) {
$formtemplate->addRule('image', BAZ_IMAGE_VALIDE_REQUIS, 'required', '', 'client') ;
}
}
 
/** wikini() - Ajoute un wikini au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string numero du champs input du formulaire (pour le différencier d'autres champs du meme type dans ce formulaire)
* @param string label à afficher dans le formulaire
* @param string taille maximum du fichier colonnes de l'élément
* @param string taille des lignes de l'élément
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs du texte (inutile)
* @param string ce champs est il obligatoire? (required)
* @return void
*/
function wikini(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
return;
}
 
/** labelhtml() - Ajoute un élément de type textearea au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string nom de la table dans la base de donnée (pas utilisé)
* @param string label à afficher dans le formulaire
* @param string taille des colonnes de l'élément (pas utilisé)
* @param string taille des lignes de l'élément (pas utilisé)
* @param string valeur par défaut du formulaire (pas utilisé)
* @param string table source pour les valeurs du texte (pas utilisé)
* @param string ce champs est il obligatoire? (required) (pas utilisé)
* @return void
*/
function labelhtml(&$formtemplate, $nom_bdd , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/html.php';
$formhtml= new HTML_QuickForm_html('<tr>'."\n".'<td colspan="2" style="text-align:left;">'."\n".$label."\n".'</td>'."\n".'</tr>'."\n");
$formtemplate->addElement($formhtml) ;
}
 
/** carte_google() - Ajoute un élément de carte google au formulaire
*
* @param mixed L'objet QuickForm du formulaire
* @param string l url vers la script google
* @param string label à afficher dans le formulaire
* @param string première restriction de la taille des champs du formulaire
* @param string deuxième restriction de la taille des champs du formulaire
* @param string valeur par défaut du formulaire
* @param string table source pour les valeurs de la liste
* @param string ce champs est il obligatoire? (required)
* @param boolean sommes nous dans le moteur de recherche?
* @return void
*/
function carte_google(&$formtemplate, $url_google_script , $label, $limite1, $limite2, $defaut, $source, $obligatoire, $dans_moteur_de_recherche=0) {
if (is_array ($defaut)) {
$formtemplate->setDefaults(array('latitude' => $defaut['latitude'], 'longitude' => $defaut['longitude']));
}
GEN_stockerFichierScript('googleMapScript', $url_google_script);
$formtemplate->addElement('button', 'chercher_sur_carte', 'Vérifier mon adresse avec la carte', array("onclick" => "showAddress();"));
$formtemplate->addElement('text', 'latitude', 'Latitude', array('id' => 'latitude', 'size' => 6, 'readonly' => 'readonly'));
$formtemplate->addElement('text', 'longitude', 'longitude', array('id' => 'longitude', 'size' => 6, 'readonly' => 'readonly'));
$formtemplate->addElement('html', '<tr><td colspan="2" ><div id="map" style="width: 600px; height: 450px"></div></td></tr>');
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazar.fonct.google.php';
GEN_stockerCodeScript($script);
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: bazar.fonct.formulaire.php,v $
* Revision 1.26 2007-06-04 15:24:31 alexandre_tb
* ajout du type carte_google
*
* Revision 1.25 2007/04/11 08:30:12 neiluj
* remise en état du CVS...
*
* Revision 1.22.2.3 2007/03/16 14:48:32 alexandre_tb
* on peut maintenant saisir une date par défaut
* et 0000-00-00 pour des champs vide
*
* Revision 1.22.2.2 2007/03/07 17:20:19 jp_milcent
* Ajout du nettoyage systématique des URLs.
*
* Revision 1.22.2.1 2007/01/17 16:01:37 alexandre_tb
* les dates ne s'affichent pas si elles sont vides.
* les champs dates propose 4 années avant l'année actuelle
*
* Revision 1.22 2006/06/02 09:29:07 florian
* debut d'integration de wikini
*
* Revision 1.21 2006/05/19 13:54:11 florian
* stabilisation du moteur de recherche, corrections bugs, lien recherche avancee
*
* Revision 1.20 2006/04/28 12:46:14 florian
* integration des liens vers annuaire
*
* Revision 1.19 2006/03/02 20:36:52 florian
* les entrees du formulaire de saisir ne sont plus dans les constantes mias dans des tables qui gerent le multilinguisme.
*
* Revision 1.18 2006/03/01 16:01:46 florian
* correction bug déclaration variable $html
*
* Revision 1.17 2006/01/30 10:27:03 florian
* - ajout des entrées de formulaire fichier, url, et image
* - correction bug d'affichage du mode de saisie
*
* Revision 1.16 2006/01/24 14:11:44 alexandre_tb
* ajout du paramètre emptyOptionValue dans les champs de date
*
* Revision 1.15 2006/01/23 16:57:03 alexandre_tb
* correction d'un notice
*
* Revision 1.14 2006/01/19 17:42:11 florian
* ajout des cases à cocher pré-cochées pour les maj
*
* Revision 1.13 2006/01/13 14:12:51 florian
* utilisation des temlates dans la table bazar_nature
*
* Revision 1.12 2006/01/05 16:28:24 alexandre_tb
* prise en chage des checkbox, reste la mise à jour à gérer
*
* Revision 1.11 2006/01/02 13:24:07 alexandre_tb
* correction de bug d'un mauvais retour en erreur
*
* Revision 1.10 2005/12/01 16:05:41 florian
* changement des chemins pour appli Pear
*
* Revision 1.9 2005/11/24 16:17:13 florian
* corrections bugs, ajout des cases à cocher
*
* Revision 1.8 2005/11/18 16:03:23 florian
* correction bug html entites
*
* Revision 1.7 2005/11/07 17:51:06 florian
* correction bug liste
*
* Revision 1.6 2005/11/07 17:30:36 florian
* ajout controle sur les listes pour la saisie
*
* Revision 1.5 2005/11/07 17:05:45 florian
* amélioration validation conditions de saisie, ajout des règles spécifiques de saisie des formulaires
*
* Revision 1.4 2005/10/25 13:53:02 alexandre_tb
* ajout d'un filtre dans les formulaire texte et textelong
*
* Revision 1.3 2005/07/21 19:03:12 florian
* nouveautés bazar: templates fiches, correction de bugs, ...
*
* Revision 1.1.1.1 2005/02/17 18:05:11 florian
* Import initial de Bazar
*
* Revision 1.1.1.1 2005/02/17 11:09:50 florian
* Import initial
*
* Revision 1.1.1.1 2005/02/16 18:06:35 florian
* import de la nouvelle version
*
* Revision 1.4 2004/07/08 11:17:59 alex
* ajout de commentaires et d'entete
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/bazar.abonnement.inc.php
New file
0,0 → 1,71
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id$
/**
* Fonctions d'abonnement a afficher dans la fiche du bottin
*
*
*@package inscription
//Auteur original :
*@author Florian Schmitt <florian@ecole-et-nature.org>
//Autres auteurs :
*
*@copyright Outils-Reseaux 2006-2010
*@version $Revision$ $Date$
*@version $Revision$ $Date$
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
include_once PAP_CHEMIN_RACINE.'client/bazar/configuration/baz_config.inc.php' ;
include_once PAP_CHEMIN_RACINE.'client/bazar/bibliotheque/bazar.fonct.php' ;
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
$GLOBALS['id_user']=$id;
if (isset($_GET[BAZ_VARIABLE_ACTION]) && $_GET[BAZ_VARIABLE_ACTION]==BAZ_VOIR_FLUX_RSS) {
header('Content-type: text/xml; charset=ISO-8859-1');
include(PAP_CHEMIN_RACINE.'client/bazar/bazarRSS.php');exit(0);break;
} else {
$abonnement = baz_s_inscrire();
}
 
//-- Fin du code source ------------------------------------------------------------
/*
* $Log$
* Revision 1.3 2008-09-17 14:08:45 alexandre_tb
* merge depuis aha
*
* Revision 1.2 2006-10-05 08:53:50 florian
* amelioration moteur de recherche, correction de bugs
*
* Revision 1.1 2006/04/28 12:46:14 florian
* integration des liens vers annuaire
*
*
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/bazar.fonct.rss.php
New file
0,0 → 1,1723
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.fonct.rss.php,v 1.99.2.14 2008-11-19 09:30:18 aperonnet Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Florian Schmitt <florian@ecole-et-nature.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2006
*@version $Revision: 1.99.2.14 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
require_once BAZ_CHEMIN_APPLI.'bibliotheque/bazar.class.php';
require_once BAZ_CHEMIN_APPLI.'bibliotheque/bazar.fonct.php';
 
 
/** baz_valeur_template() - Renvoi des valeurs inscrite dans le fichier de template
*
* @param string valeur du template de bazar_nature
*
* @return mixed tableau contenant les champs du fichier template
*/
function baz_valeurs_template($valeur_template) {
 
//Parcours du fichier de templates, pour mettre les champs specifiques
$tableau= array();
$nblignes=0;
$chaine = explode ("\n", $valeur_template);
//array_pop($chaine);
foreach ($chaine as $ligne) {
$souschaine = explode ("***", $ligne) ;
$tableau[$nblignes]['type'] = trim($souschaine[0]) ;
if (isset($souschaine[1])) {$tableau[$nblignes]['nom_bdd'] = trim($souschaine[1]);}
else {$tableau[$nblignes]['nom_bdd'] ='';}
if (isset($souschaine[2])) $tableau[$nblignes]['label'] = trim($souschaine[2]);
else {$tableau[$nblignes]['label'] ='';}
if (isset($souschaine[3])) $tableau[$nblignes]['limite1'] = trim($souschaine[3]);
else {$tableau[$nblignes]['limite1'] ='';}
if (isset($souschaine[4])) $tableau[$nblignes]['limite2'] = trim($souschaine[4]);
else {$tableau[$nblignes]['limite2'] ='';}
if (isset($souschaine[5])) $tableau[$nblignes]['defaut'] = trim($souschaine[5]);
else {$tableau[$nblignes]['defaut'] ='';}
if (isset($souschaine[6])) $tableau[$nblignes]['table_source'] = trim($souschaine[6]);
else {$tableau[$nblignes]['table_source'] ='';}
if (isset($souschaine[7])) $tableau[$nblignes]['id_source'] = trim($souschaine[7]);
else {$tableau[$nblignes]['id_source'] ='';}
if (isset($souschaine[8])) $tableau[$nblignes]['obligatoire'] = trim($souschaine[8]);
else {$tableau[$nblignes]['obligatoire'] ='';}
if (isset($souschaine[9])) $tableau[$nblignes]['recherche'] = trim($souschaine[9]);
else {$tableau[$nblignes]['recherche'] ='';}
 
 
// traitement des cases à cocher, dans ce cas la, on a une table de jointure entre la table
// de liste et la table bazar_fiche (elle porte un nom du genre bazar_ont_***)
// dans le template, à la place d'un nom de champs dans 'nom_bdd', on a un nom de table
// et 2 noms de champs séparés par un virgule ex : bazar_ont_theme,bot_id_theme,bot_id_fiche
 
if (isset($tableau[$nblignes]['nom_bdd']) && preg_match('/,/', $tableau[$nblignes]['nom_bdd'])) {
$tableau_info_jointe = explode (',', $tableau[$nblignes]['nom_bdd']) ;
$tableau[$nblignes]['table_jointe'] = $tableau_info_jointe[0] ;
$tableau[$nblignes]['champs_id_fiche'] = $tableau_info_jointe[1] ;
$tableau[$nblignes]['champs_id_table_jointe'] = $tableau_info_jointe[2] ;
}
$nblignes++;
}
 
return $tableau;
}
 
/** baz_voir_fiches() - Permet de visualiser en detail une liste de fiche au format XHTML
*
* @global boolean Rajoute des informations internes a l'application (date de modification, lien vers la page de départ de l'appli)
* @global integer Tableau d(Identifiant des fiches a afficher
*
* @return string HTML
*/
function baz_voir_fiches($danslappli, $idfiches=array()) {
 
$res='';
foreach($idfiches as $idfiche) {
$res.=baz_voir_fiche($danslappli, $idfiche);
}
 
return $res;
}
 
 
/** baz_voir_fiche() - Permet de visualiser en detail une fiche au format XHTML
*
* @global boolean Rajoute des informations internes a l'application (date de modification, lien vers la page de depart de l'appli) si a 1
* @global integer Identifiant de la fiche a afficher
*
* @return string HTML
*/
function baz_voir_fiche($danslappli, $idfiche='') {
 
$res='';
if (isset($_GET['id_fiche'])) $GLOBALS['_BAZAR_']['id_fiche'] = $_GET['id_fiche'];
if ($idfiche != '') $GLOBALS['_BAZAR_']['id_fiche'] = $idfiche;
$url = $GLOBALS['_BAZAR_']['url'];
$url->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$url->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
$url = preg_replace ('/&amp;/', '&', $url->getURL()) ;
 
//cas ou la fiche a ete validee
if (isset($_GET['publiee'])) {
publier_fiche($_GET['publiee']);
}
 
//cas on une structure s'approprie une ressource
if (isset($_GET['appropriation'])) {
if ($_GET['appropriation']==1) {
$requete = 'INSERT INTO bazar_appropriation VALUES ('.$GLOBALS['_BAZAR_']['id_fiche'].', '.$GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_ID).')';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
}
elseif ($_GET['appropriation']==0) {
$requete = 'DELETE FROM bazar_appropriation WHERE ba_ce_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'].' AND ba_ce_id_structure='.$GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_ID);
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
}
}
 
//cas ou un commentaire a ete entre
if (isset($_POST['Nom'])) {
$requete = 'INSERT INTO bazar_commentaires VALUES ('.
baz_nextid('bazar_commentaires', 'bc_id_commentaire', $GLOBALS['_BAZAR_']['db']).
', '.$GLOBALS['_BAZAR_']['id_fiche'].', "'.$_POST['Nom'].'", "'.$_POST['Commentaire'].
'", NOW() )';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
}
//cas ou un commentaire va etre supprime
elseif (isset($_GET['id_commentaire'])) {
$requete = 'DELETE FROM bazar_commentaires WHERE bc_id_commentaire='.$_GET['id_commentaire'].' LIMIT 1';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
}
else {
if (isset($_GET[BAZ_VARIABLE_ACTION])) {
if ($_GET[BAZ_VARIABLE_ACTION]==BAZ_VOIR_FICHE) {
//sinon on met a jour le nb de visites pour la fiche, puisque c'est une simple consultation
$requete = 'UPDATE bazar_fiche SET bf_nb_consultations=bf_nb_consultations+1 WHERE bf_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
}
}
}
 
$requete = 'SELECT * FROM bazar_fiche,bazar_nature WHERE bf_ce_nature=bn_id_nature and bf_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'];
 
if (isset($GLOBALS['_BAZAR_']['langue'])) $requete .= ' and bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
$res = '<div class="'.BAZ_classe_erreur.'">'.BAZ_FICHE_INEXISTANTE.'</div> \n' ;
return res ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
$GLOBALS['_BAZAR_']['ligne_resultat'] = $ligne;
if (!isset($GLOBALS['_BAZAR_']['typeannonce'])) $GLOBALS['_BAZAR_']['typeannonce'] = $ligne['bf_ce_nature'];
if (!isset($GLOBALS['_BAZAR_']['fiche_valide'])) $GLOBALS['_BAZAR_']['fiche_valide'] = $ligne['bf_statut_fiche'];
//on verifie si l'utilisateur est administrateur
$est_admin=0;
 
// Si on vient de l applette calendrier, $GLOBALS['_BAZAR_']['id_typeannonce'] est vide ...
// mais on dispose de la constante BAZ_NUM_ANNONCE_CALENDRIER
if (!isset($GLOBALS['_BAZAR_']['id_typeannonce']) && defined('BAZ_NUM_ANNONCE_CALENDRIER')) $GLOBALS['_BAZAR_']['id_typeannonce'] = BAZ_NUM_ANNONCE_CALENDRIER;
 
if (!isset($GLOBALS['_BAZAR_']['template'])) $GLOBALS['_BAZAR_']['template'] = $ligne['bn_template'];
if (!isset($GLOBALS['_BAZAR_']['commentaire'])) $GLOBALS['_BAZAR_']['commentaire'] = $ligne['bn_commentaire'];
if (!isset($GLOBALS['_BAZAR_']['class'])) $GLOBALS['_BAZAR_']['class'] = $ligne['bn_label_class'];
 
$utilisateur = new Administrateur_bazar ($GLOBALS['AUTH']);
if ($utilisateur->isAdmin($ligne['bn_id_nature']) || $utilisateur->isSuperAdmin()) {
$est_admin=1;
}
 
//debut de la fiche
$res .= '<div class="BAZ_cadre_fiche BAZ_cadre_fiche_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
//affiche le titre sous forme d'image
if (isset ($GLOBALS['_BAZAR_']['image_titre']) && $GLOBALS['_BAZAR_']['image_titre']!='') {
$res .= '<img class="BAZ_img_titre" src="client/bazar/images/'.$GLOBALS['_BAZAR_']['image_titre'].'" alt="'.$ligne['bn_label_nature'].'" />'.'<br />'."\n";
}
//affiche le texte sinon
else {
$res .= '<h1 class="BAZ_titre BAZ_titre_'.$GLOBALS['_BAZAR_']['class'].'">'.$ligne['bn_label_nature'].'</h1>'."\n";
}
$GLOBALS['_BAZAR_']['annonceur'] = $ligne['bf_ce_utilisateur'] ;
//si le template existe, on genere le template
if ((file_exists(BAZ_CHEMIN_APPLI.'templates/'.$GLOBALS['_BAZAR_']['typeannonce'].'-fiche.php'))) {
include_once(BAZ_CHEMIN_APPLI.'templates/'.$GLOBALS['_BAZAR_']['typeannonce'].'-fiche.php');
$res .=genere_fiche($ligne);
}
//on affiche ligne par ligne sinon
else {
// Le titre
$res .= '<h1 class="BAZ_fiche_titre BAZ_fiche_titre_'.$GLOBALS['_BAZAR_']['class'].'">'.$ligne['bf_titre'].'</h1>'."\n";
// cas d'une image personalisee
if (isset($ligne['bf_url_image'])) {
$res .= '<div class="BAZ_fiche_image BAZ_fiche_image_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<img class="BAZ_image" src="client/bazar/upload/'.$ligne['bf_url_image'].'" border=0 alt="'.BAZ_TEXTE_IMG_ALTERNATIF.'" />'."\n";
$res .= '</div>'."\n";
}
//cas d'une image par defaut
elseif (isset ($GLOBALS['_BAZAR_']['image_logo']) && $GLOBALS['_BAZAR_']['image_logo']!='') {
$res .= '<div class="BAZ_fiche_image BAZ_fiche_image_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<img class="BAZ_image" src="client/bazar/images/'.$GLOBALS['_BAZAR_']['image_logo'].'" border=0 alt="'.BAZ_TEXTE_IMG_ALTERNATIF.'" width="130" height="130" />'."\n";
$res .= '</div>'."\n";
}
 
//$res .= '<div class="BAZ_description BAZ_description_'.$GLOBALS['_BAZAR_']['class'].'">'.nl2br($ligne['bf_description']).'</div>'."\n";
$tableau=baz_valeurs_template($GLOBALS['_BAZAR_']['template']);
 
/** Boucle d affichage des resultats
*
*/
 
// Le parametre pas_de_carte permet a l element de type cartegoogle
// de ne pas renvoyer la carte lors de l affichage d une fiche (par exemple dans les fiches du calendrier)
$danslappli == 1 ? $GLOBALS['pas_de_carte'] = 0 : $GLOBALS['pas_de_carte'] = 1;
for ($i=0; $i < count($tableau); $i++) {
if (isset($ligne[$tableau[$i]['nom_bdd']])) {
$type = $tableau[$i]['type'];
$valeur = $ligne[$tableau[$i]['nom_bdd']];
 
} else {
$type = $tableau[$i]['type'];
$valeur = '';
}
 
$element = Bazar_element::factory($type, $tableau[$i]);
if (!PEAR::isError($element)) {
$res .= $element->toHTML($valeur);
} else {
 
}
if ( $tableau[$i]['type']=='wikini' ) {
$res .= '<div class="BAZ_lien_wikini BAZ_lien_wikini_'.$GLOBALS['_BAZAR_']['class'].'"><a href="wikini/'.genere_nom_wiki2($ligne["bf_titre"], TRUE).'">'.BAZ_ENTRER_PROJET.'</a></div>'."\n";
}
}
//afficher les liens pour l'annonce
$requete = 'SELECT bu_url, bu_descriptif_url FROM bazar_url WHERE bu_ce_fiche='.$GLOBALS['_BAZAR_']['id_fiche'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
if ($resultat->numRows()>0) {
$res .= '<span class="BAZ_label BAZ_label_'.$GLOBALS['_BAZAR_']['class'].'">'.BAZ_LIEN_INTERNET.':</span>'."\n";
$res .= '<span class="BAZ_description BAZ_description_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<ul class="BAZ_liste BAZ_liste_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
while ($ligne1 = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$res .= '<li class="BAZ_liste_lien BAZ_liste_lien_'.$GLOBALS['_BAZAR_']['class'].'"><a href="'.$ligne1['bu_url'].'" class="BAZ_lien" target="_blank">'.$ligne1['bu_descriptif_url'].'</a></li>'."\n";
}
$res .= '</ul></span>'."\n";
}
 
//afficher les fichiers pour l'annonce
$requete = 'SELECT bfj_description, bfj_fichier FROM bazar_fichier_joint WHERE bfj_ce_fiche='.$GLOBALS['_BAZAR_']['id_fiche'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
if ($resultat->numRows()>0) {
$res .= '<span class="BAZ_label BAZ_label_'.$GLOBALS['_BAZAR_']['class'].'">'.BAZ_LISTE_FICHIERS_JOINTS.':</span>'."\n";
$res .= '<span class="BAZ_description BAZ_description_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<ul class="BAZ_liste BAZ_liste_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
while ($ligne2 = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$res .= '<li class="BAZ_liste_fichier BAZ_liste_fichier_'.$GLOBALS['_BAZAR_']['class'].'"><a href="client/bazar/upload/'.$ligne2['bfj_fichier'].'">'.$ligne2['bfj_description'].'</a></li>'."\n";
}
$res .= '</ul></span>'."\n";
}
$res .= '<div class="BAZ_bulle_corps BAZ_bulle_corps_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<div class="BAZ_infos_fiche BAZ_infos_fiche_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<span class="BAZ_nb_vues BAZ_nb_vues_'.$GLOBALS['_BAZAR_']['class'].'">'.BAZ_NB_VUS.$ligne['bf_nb_consultations'].BAZ_FOIS.'</span><br />'."\n";
 
//affichage du redacteur de la fiche
$requete = 'SELECT '.BAZ_CHAMPS_NOM.', '.BAZ_CHAMPS_PRENOM.', '.BAZ_CHAMPS_EMAIL.
' FROM '.BAZ_ANNUAIRE.' WHERE '.BAZ_CHAMPS_ID.'='.$ligne['bf_ce_utilisateur'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
if (DB::isError($resultat)) {
$res = '<div class="'.BAZ_classe_erreur.'">'.BAZ_FICHE_INEXISTANTE.'</div>' ;
return $res ;
}
}
while ($redacteur = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$res .= '<span class="BAZ_fiche_ecrite">'.BAZ_FICHE_NUMERO.$GLOBALS['_BAZAR_']['id_fiche'].BAZ_ECRITE;
if (!defined('BAZ_FICHE_REDACTEUR_MAIL') || BAZ_FICHE_REDACTEUR_MAIL) {
$res .= '<a href="mailto:'.$redacteur[BAZ_CHAMPS_EMAIL].'">'.$redacteur[BAZ_CHAMPS_PRENOM].' '.$redacteur[BAZ_CHAMPS_NOM].'</a>';
} else {
$res .= $redacteur[BAZ_CHAMPS_PRENOM].' '.$redacteur[BAZ_CHAMPS_NOM];
}
$res .= '<br /></span>'."\n";
}
 
//informations complementaires (id fiche, etat publication,... )
if ($danslappli==1) {
if ($GLOBALS['_BAZAR_']['fiche_valide']==1 && $GLOBALS['_BAZAR_']['appropriation']!=1) {
if ($ligne['bf_date_debut_validite_fiche'] != '0000-00-00' && $ligne['bf_date_fin_validite_fiche'] != '0000-00-00') {
$res .= '<span class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'.BAZ_PUBLIEE.':</span> '.BAZ_DU.
' '.strftime('%d.%m.%Y',strtotime($ligne['bf_date_debut_validite_fiche'])).' '.
BAZ_AU.' '.strftime('%d.%m.%Y',strtotime($ligne['bf_date_fin_validite_fiche'])).'<br />'."\n";
}
}
elseif ($GLOBALS['_BAZAR_']['appropriation']!=1 || $GLOBALS['_BAZAR_']['fiche_valide']!=1) {
$res .= '<span class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'.BAZ_PUBLIEE.':</span> '.BAZ_NON.'<br />'."\n";
}
//affichage des infos et du lien pour la mise a jour de la fiche
if ( $est_admin || $GLOBALS['_BAZAR_']['annonceur']==$GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_ID) ) {
$res .= '<span class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'" id="date_creation">'.BAZ_DATE_CREATION.'</span> '.strftime('%d.%m.%Y %H:%M',strtotime($ligne['bf_date_creation_fiche']))."\n";
$res .= '<span class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'" id="date_mise_a_jour">'.BAZ_DATE_MAJ.'</span> '.strftime('%d.%m.%Y %H:%M',strtotime($ligne['bf_date_maj_fiche']))."\n";
}
$res .= '</div>'."\n";
 
if ( $est_admin || $GLOBALS['_BAZAR_']['annonceur']==$GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_ID) ) {
$res .= '<div class="BAZ_actions_fiche BAZ_actions_fiche_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<ul>'."\n";
if ( $est_admin ) {
$lien_publie = &$GLOBALS['_BAZAR_']['url'];
$lien_publie->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_publie->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
$lien_publie->addQueryString('typeannonce', $ligne['bf_ce_nature']);
 
if ($GLOBALS['_BAZAR_']['fiche_valide']==0||$GLOBALS['_BAZAR_']['fiche_valide']==2) {
$lien_publie->addQueryString('publiee', 1);
$label_publie=BAZ_VALIDER_LA_FICHE;
$class_publie='_valider';
$res .= '<form method="post" action="'.$lien_publie->getURL().'" ><li><label class="BAZ_label" id="label_validite" for="date_validite"> Date de validité :</label><input id="date_validite" name="date_validite" type="text" value="'.$ligne['bf_date_debut_validite_fiche'].'" /></li> <li><input class="bouton_valider" type="submit" value="Valider la fiche" /></li></form>';
} elseif ($GLOBALS['_BAZAR_']['fiche_valide']==1) {
$lien_publie->addQueryString('publiee', 1);
$res .= '<form method="post" action="'.$lien_publie->getURL().'" ><li><label class="BAZ_label" id="label_validite" for="date_validite"> Date de validité :</label><input id="date_validite" name="date_validite" type="text" value="'.$ligne['bf_date_debut_validite_fiche'].'" /> <input type="submit" class="bouton_valider" value="Modifier" /></form>';
$lien_publie->removeQueryString('publiee');
$lien_publie->addQueryString('publiee', 0);
$label_publie=BAZ_INVALIDER_LA_FICHE;
$class_publie='_invalider';
$res .= '<li class="BAZ_liste'.$class_publie.'"><a href="'.$lien_publie->getURL().'">'.$label_publie.'</a></li>'."\n";
}
}
$lien_modifier=$GLOBALS['_BAZAR_']['url'];
$lien_modifier->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_MODIFIER);
$lien_modifier->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
$lien_modifier->addQueryString('typeannonce', $ligne['bf_ce_nature']);
$res .= '<li class="BAZ_liste_modifier"><a href="'.$lien_modifier->getURL().'" id="modifier_fiche">'.BAZ_MODIFIER_LA_FICHE.'</a></li>'."\n";
$lien_supprimer=$GLOBALS['_BAZAR_']['url'];
$lien_supprimer->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_SUPPRESSION);
$lien_supprimer->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
$lien_supprimer->addQueryString('typeannonce', $ligne['bf_ce_nature']);
$res .= '<li class="BAZ_liste_supprimer"><a href="'.$lien_supprimer->getURL().'" id="supprimer_fiche">'.BAZ_SUPPRIMER_LA_FICHE.'</a></li>'."\n";
$res .= '</ul>'."\n";
$res .= '</div>'."\n";
}
}
$res .= '</div>'."\n";
$res .= '</div>'."\n";
 
}
 
// Nous vérifions comment est appelé la fonction
if ($danslappli == 0) {
$lien_voir=$GLOBALS['_BAZAR_']['url'];
$lien_voir->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_CONSULTER);
$lien_voir->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
$lien_voir->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
 
$res .= '<div class="BAZ_lien_fiche"><a href="'.str_replace('carte_','',$lien_voir->getURL()).'" class="BAZ_lien">'.BAZ_VOIR_LA_FICHE.'</a></div>'."\n";
$res .= '</div>'."\n";
} else if ($danslappli == 1 ) {
 
// Ajout des appropriations, s'il le faut
if ($GLOBALS['_BAZAR_']['appropriation'] == 1) {
$res .= '<br />'."\n".'<div class="BAZ_cadre_fiche BAZ_cadre_fiche_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<h2 class="BAZ_titre BAZ_titre_'.$GLOBALS['_BAZAR_']['class'].'">'.BAZ_LES_STRUCTURES_POSSEDANT_UNE_RESSOURCE.'</h2>'."\n";
$requete = 'SELECT '.BAZ_CHAMPS_ID.', '.BAZ_CHAMPS_NOM.' FROM bazar_appropriation,'.BAZ_ANNUAIRE.' WHERE ba_ce_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'].' AND ba_ce_id_structure='.BAZ_CHAMPS_ID.' ORDER BY '.BAZ_CHAMPS_NOM.' ASC';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete . ' -- ' . __FILE__ . ':' . __LINE__) ;
if (DB::isError ($resultat)) {
return $resultat->getMessage().'<br />'.$resultat->getDebugInfo();
}
$possede_ressource=0;
if ($resultat->numRows()>0) {
$res .= BAZ_IL_Y_A.$resultat->numRows().' ';
if ($resultat->numRows()==1) $res .= BAZ_STRUCTURE_POSSEDANT.'<br />'."\n";
else $res .= BAZ_STRUCTURES_POSSEDANT.'<br />'."\n";
$res .= '<ul>'."\n";
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$res .= '<li><a href="'.BAZ_URL_ANNUAIRE.'&amp;voir_fiche='.$ligne[BAZ_CHAMPS_ID].'" onclick="javascript:window.open(this.href);return false;">'.$ligne[BAZ_CHAMPS_NOM].'</a></li>'."\n";
if ($GLOBALS['AUTH']->getAuth() && $GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_ID)==$ligne[BAZ_CHAMPS_ID]) $possede_ressource=1;
}
$res .= '</ul><br />'."\n";
}
else $res .= BAZ_PAS_D_APPROPRIATION.'<br /><br />'."\n";
$res .='<p class="BAZ_bulle_corps BAZ_bulle_corps_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$lien_appropriation = $GLOBALS['_BAZAR_']['url'];
$lien_appropriation->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_appropriation->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
if ($possede_ressource) {
$lien_appropriation->addQueryString('appropriation', 0);
$res .= BAZ_POSSEDE_DEJA_RESSOURCE.'<br />'."\n".'<a href="'.$lien_appropriation->getURL().'">'.BAZ_CLIQUER_POUR_VOUS_ENLEVER.'</a>'."\n";
$lien_appropriation->removeQueryString('appropriation');
}
elseif ($GLOBALS['AUTH']->getAuth() && $GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_EST_STRUCTURE)) {
$lien_appropriation->addQueryString('appropriation', 1);
$res .= BAZ_SI_POSSEDE_RESSOURCE.'<br />'."\n".'<a href="'.$lien_appropriation->getURL().'">'.BAZ_CLIQUER_POUR_APPARAITRE.'</a>'."\n";
$lien_appropriation->removeQueryString('appropriation');
}
elseif ($GLOBALS['AUTH']->getAuth() && !$GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_EST_STRUCTURE)) {
$res .= BAZ_IL_FAUT_ETRE_STRUCTURE."\n";
}
elseif (!$GLOBALS['AUTH']->getAuth()) {
$res .= BAZ_IL_FAUT_ETRE_IDENTIFIE_STRUCTURE."\n";
}
$res .='</p>'."\n";
$res .= '</div>'."\n";
}
 
// Ajout des commentaires, s'il le faut
//if ($GLOBALS['_BAZAR_']['commentaire'] == 1) {
$res .= '<br />'."\n".'<div class="BAZ_cadre_fiche BAZ_cadre_fiche_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
$res .= '<h2 class="BAZ_titre BAZ_titre_'.$GLOBALS['_BAZAR_']['class'].'">'.BAZ_LES_COMMENTAIRES.'</h2>'."\n";
$requete = 'SELECT * FROM bazar_commentaires WHERE bc_ce_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'].' ORDER BY bc_date ASC';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError ($resultat)) {
return $resultat->getMessage().'<br />'.$resultat->getDebugInfo();
}
if ($resultat->numRows() > 0) {
// Titre avec nombre de commentaires
$res .= '<p>'.BAZ_IL_Y_A.$resultat->numRows().' ';
// Ajout du "s" ou pas
$res .= ($resultat->numRows() == 1) ? BAZ_COMMENTAIRE : BAZ_COMMENTAIRES;
$res .= '</p>'."\n";
 
// Info pour ajotuer ces commentaires si on n'est pas identifié
if (!$GLOBALS['AUTH']->getAuth()) {
$res .= '<p class="information">'.BAZ_COMMENTAIRE_AUTH.'</p>';
}
 
// Affichages des commentaires
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$res .= '<p class="BAZ_bulle_corps BAZ_bulle_corps_'.$GLOBALS['_BAZAR_']['class'].'">'."\n";
// Affichage du commentaire
$res .= $ligne['bc_commentaire'].'<br />'."\n";
$res .= '<span class="BAZ_commentaire_admin">'.BAZ_PAR.' : <strong>'.$ligne['bc_nom'].'</strong>'.BAZ_ECRIT_LE.strftime('%d.%m.%Y %H:%M',strtotime($ligne['bc_date']));
// Pour les identifies seulement, administrateurs de la rubrique ou superadmins
if ($est_admin == 1) {
$url_comment= $GLOBALS['_BAZAR_']['url'];
$url_comment->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$url_comment->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
$url_comment->addQueryString('id_commentaire', $ligne['bc_id_commentaire']);
$res .= '&nbsp;&nbsp;<a href="'.$url_comment->getURL().'">'.BAZ_SUPPRIMER.'</a>'."\n";
}
$res .= '</span>'."\n";
$res .= '</p>'."\n";
}
} else {
$res .= BAZ_PAS_DE_COMMENTAIRES.'<br /><br />'."\n";
}
//}
 
//formulaire des commentaires
if ($GLOBALS['AUTH']->getAuth()) {
$form_commentaire = new HTML_QuickForm('bazar_commentaire', 'post', $url);
$squelette =& $form_commentaire->defaultRenderer();
$squelette->setFormTemplate("\n".'<form {attributes}>'."\n".'{content}'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<label style="width:200px;">{label}'.
'<!-- BEGIN required --><span class="symbole_obligatoire">&nbsp;*</span><!-- END required -->'."\n".
'</label><br />'."\n".'{element}<br />'."\n");
$squelette->setRequiredNoteTemplate("\n".'<span class="symbole_obligatoire"> *{requiredNote}</span>'."\n");
$option=array('style'=>'width:300px;border:1px solid #000;', 'maxlength'=>100);
$form_commentaire->addElement('text', 'Nom', BAZ_ENTREZ_VOTRE_NOM, $option);
$option=array('style'=>'width:95%;height:100px;white-space: pre;padding:3px;border:1px solid #000;');
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/textarea.php';
$formtexte= new HTML_QuickForm_textarea('Commentaire', BAZ_ENTREZ_VOTRE_COMMENTAIRE, $option);
$form_commentaire->addElement($formtexte) ;
$option=array('style'=>'border:1px solid #000;');
$form_commentaire->addElement('submit', 'Envoyer', BAZ_ENVOYER, $option);
$form_commentaire->addRule('Nom', BAZ_NOM_REQUIS, 'required', '', 'client') ;
$form_commentaire->addRule('Commentaire', BAZ_COMMENTAIRE_REQUIS, 'required', '', 'client') ;
$form_commentaire->setRequiredNote(BAZ_CHAMPS_REQUIS) ;
$res .= $form_commentaire->toHTML();
}
$res .= '</div>'."\n";
}
 
// Nettoyage de l'url avant les return : apparement inutile sinon pose pb dans Papyrus (url applette deconnexion et moteur de recherche) [jpm le 17 mars 2008]
//$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
//$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_commentaire');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
 
return $res ;
}
 
// merci PHP 5 ...
function mb_str_split2($str, $length = 1) {
 
if ($length < 1) return FALSE;
 
$result = array();
 
for ($i = 0; $i < strlen($str); $i += $length) {
$result[] = substr($str, $i, $length);
}
 
return $result;
}
 
function remove_accents2( $string )
{
$string = htmlentities($string);
return preg_replace("/&([a-z])[a-z]+;/i","$1",$string);
}
 
function genere_nom_wiki2($nom, $spaces = FALSE)
{
// traitement des accents
$nom = remove_accents2($nom);
 
$temp = mb_str_split2($nom);
 
$count = 0;
$final = NULL;
foreach($temp as $letter)
{
if(preg_match('/([[:space:]]|[[:punct:]])/', $letter))
{
$final .= ($spaces ? '_' : '');
} elseif(preg_match ('/[a-zA-Z0-9]/', $letter)) {
$final .= (($count == 0 || $count == (strlen($nom) - 1)) ? strtoupper($letter) : strtolower($letter));
}
$count++;
}
 
// vérifions que le retour n'est pas uniquement un underscore
if(preg_match('/^[[:punct:]]+$/', $final)) return FALSE;
 
// sinon retour du nom formaté
return($final);
}
 
 
/** RSSversHTML () transforme un flux RSS (en XML) en page HTML
*
* On passe en paramètre le contenu du flux RSS, on affiche ou non la description,
* et on choisit de format de la date à l'affichage. On a en sortie du code HTML à afficher
*
* @param string le contenu du flux RSS
* @param boolean afficher ou non la description
* @param string choisir le format de date: jmah (12/02/2004 12h34) jmh (12/02 12h34) jma (12/02/2004) jm (12/02) ou rien
*
* @return string le code HTML
*/
function RSSversHTML($rss, $voirdesc, $formatdate, $affichenb) {
 
if ($rss!='') {
$rawitems='';$title='';$url='';$cat='';$date='';
$res='';
if( eregi('<item>(.*)</item>', $rss, $rawitems ) ) {
$items = explode('<item>', $rawitems[0]);
$res.='<ul id="BAZ_liste_fiche">'."\n";
for( $i = 0; $i < count($items)-1; $i++ ) {
eregi('<title>(.*)</title>',$items[$i+1], $title );
eregi('<link>(.*)</link>',$items[$i+1], $url );
eregi('<description>(.*)</description>',$items[$i+1], $cat);
eregi('<pubDate>(.*)</pubDate>',$items[$i+1], $date);
$res.='<li>';
if ($formatdate=='jm') {$res.=strftime('%d.%m',strtotime($date[1])).': ';}
if ($formatdate=='jma') {$res.=strftime('%d.%m.%Y',strtotime($date[1])).': ';}
if ($formatdate=='jmh') {$res.=strftime('%d.%m %H:%M',strtotime($date[1])).': ';}
if ($formatdate=='jmah') {$res.=strftime('%d.%m.%Y %H:%M',strtotime($date[1])).': ';}
$res.='<a href="'.preg_replace ('/&amp;/', '&', $url[1]).'">'.$title[1].'</a>';
if ($voirdesc) {$res.=$cat[1];}
// Ajout du bouton supprimer pour les superadministrateur
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
if (($GLOBALS['AUTH']->getAuth() && $utilisateur->isSuperAdmin())and($url[1]!='#')) {
$mon_url = preg_replace ('/&amp;/', '&', $url[1]) ;
$url_suppr = new Net_URL(preg_replace ('/&amp;/', '&', $mon_url)) ;
$url_suppr->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_SUPPRESSION) ;
$res .= ' ( <a href="'.$url_suppr->getURL().
'" onclick="javascript:return confirm(\''.BAZ_SUPPRIMER.' ?\');">'.
BAZ_SUPPRIMER.'</a> )'."\n" ;
}
$res.='</li>'."\n";
}
$res.='</ul>'."\n";
if ($affichenb==1) {
//une annonce trouvee, on accorde au singulier
if (((count($items)-1)==1)and($title!=BAZ_PAS_D_ANNONCES)) {
$res = '<br /><h4>'.BAZ_IL_Y_A.' 1 '.BAZ_FICHE_CORRESPONDANTE.'</h4><br />'."\n".$res;
}
//plusieures annonces trouvees, on accorde au pluriel
else {
$res = '<br /><h4>'.BAZ_IL_Y_A.(count($items)-1).' '.BAZ_FICHES_CORRESPONDANTES.'</h4><br />'."\n".$res;
}
}
//cas des fiches pas trouvées
if (((count($items)-1)==1)and($title[1]==BAZ_PAS_D_ANNONCES)) {
$res = '<br /><h4>'.BAZ_PAS_D_ANNONCES.'</h4><br />'."\n";
}
}
}
else $res = BAZ_PAS_D_ANNONCES;
 
// Nettoyage de l'url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
 
return $res;
}
 
/** gen_RSS() - generer un fichier de flux RSS par type d'annonce
*
* @param string Le type de l'annonce (laisser vide pour tout type d'annonce)
* @param integer Le nombre d'annonces a regrouper dans le fichier XML (laisser vide pour toutes)
* @param integer L'identifiant de l'emetteur (laisser vide pour tous)
* @param integer L'etat de validation de l'annonce (laisser 1 pour les annonces validees, 0 pour les non-validees)
* @param string La requete SQL personnalisee
* @param integer La categorie des fiches bazar
*
* @return string Le code du flux RSS
*/
function gen_RSS($typeannonce='', $nbitem='', $emetteur='', $valide=1, $requeteSQL='', $requeteSQLFrom = '', $requeteWhereListe = '', $categorie_nature='', $order = '') {
// generation de la requete MySQL personnalisee
 
$requete = 'SELECT DISTINCT bf_id_fiche, bf_titre, bf_date_debut_validite_fiche, bf_description,bf_date_debut_evenement, bn_label_nature, bf_date_creation_fiche, bf_ce_utilisateur '.
'FROM bazar_fiche, bazar_nature '.$requeteSQLFrom.' WHERE '.$requeteWhereListe;
 
$where_cond = array();
if ($valide!=2) {
$where_cond[] = 'bf_statut_fiche='.$valide;
}
$nomflux=html_entity_decode(BAZ_DERNIERE_ACTU);
if (!is_array ($typeannonce) && $typeannonce!='' and $typeannonce!='toutes') {
$where_cond[] = 'bf_ce_nature='.$typeannonce;
$where_cond[] = ' bf_ce_nature=bn_id_nature';
//le nom du flux devient le type d'annonce
$requete_nom_flux = 'select bn_label_nature from bazar_nature where bn_id_nature = '.$typeannonce;
$nomflux = $GLOBALS['_BAZAR_']['db']->getOne($requete_nom_flux) ;
}
 
// cas où on veut toutes les annonces
if ($typeannonce == 'toutes') {
$where_cond[] = 'bf_ce_nature IN (1,2,3,4)';
$where_cond[] = 'bf_ce_nature=bn_id_nature';
}
 
// Cas ou il y plusieurs type d annonce demande
if (is_array($typeannonce) && ! empty($typeannonce)) {
$where_cond[] = 'bf_ce_nature IN (' . '"' . implode('","', $typeannonce) . '"' . ')';
$where_cond[] = 'bf_ce_nature=bn_id_nature';
}
 
// useless ?
// $utilisateur = new Administrateur_bazar ($GLOBALS['AUTH']) ;
 
$where_cond[] = 'bf_date_debut_evenement >= NOW()';
$where_cond[] = 'bn_id_nature=bf_ce_nature';
 
if ($emetteur!='' && $emetteur!='tous') {
$where_cond[] = 'bf_ce_utilisateur='.$emetteur;
//requete pour afficher le nom de la structure
$requetenom = 'SELECT '.BAZ_CHAMPS_NOM.', '.BAZ_CHAMPS_PRENOM.' FROM '.
BAZ_ANNUAIRE.' WHERE '.BAZ_CHAMPS_ID.'='.$emetteur;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requetenom) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$nomflux .= ' ('.$ligne[BAZ_CHAMPS_NOM].' '.$ligne[BAZ_CHAMPS_PRENOM].')';
}
if ($requeteSQL) {
$where_cond[] = $requeteSQL;
}
 
if ($categorie_nature!='') {
$where_cond[] = 'bn_ce_id_menu IN ('.$categorie_nature.')';
$where_cond[] = 'bf_ce_nature=bn_id_nature';
}
 
if (isset($_REQUEST['departement'])) {
$where_cond[] = 'bf_cp_lieu_evenement LIKE "'.$_REQUEST['departement'].'%"';
}
 
 
$requete .= implode(' AND ', $where_cond);
$requete .= ' ORDER BY bf_date_debut_evenement ASC ';
 
if ($nbitem!='') {$requete .= ' LIMIT 0,'.$nbitem;}
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete . ' -- ' . __FILE__ . ':' . __LINE__) ;
 
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
 
include_once PAP_CHEMIN_API_PEAR . 'XML/Util.php' ;
 
// passage en utf-8 --julien
// --
 
// setlocale() pour avoir les formats de date valides (w3c) --julien
setlocale(LC_TIME, "C");
 
$xml = XML_Util::getXMLDeclaration('1.0', 'UTF-8', 'yes') ;
$xml .= "\r\n ";
$xml .= XML_Util::createStartElement ('rss', array('version' => '2.0')) ;
$xml .= "\r\n ";
$xml .= XML_Util::createStartElement ('channel');
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('title', null, utf8_encode(html_entity_decode($nomflux)));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('link', null, utf8_encode(html_entity_decode(BAZ_RSS_ADRESSESITE)));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('description', null, utf8_encode(html_entity_decode(BAZ_RSS_DESCRIPTIONSITE)));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('language', null, 'fr-FR');
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('copyright', null, 'Copyright (c) '. date('Y') .' '. BAZ_RSS_NOMSITE);
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('lastBuildDate', null, strftime('%a, %d %b %Y %H:%M:%S GMT'));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('docs', null, 'http://www.stervinou.com/projets/rss/');
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('category', null, BAZ_RSS_CATEGORIE);
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('managingEditor', null, BAZ_RSS_MANAGINGEDITOR);
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('webMaster', null, BAZ_RSS_WEBMASTER);
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('ttl', null, '60');
$xml .= "\r\n ";
$xml .= XML_Util::createStartElement ('image');
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('title', null, BAZ_RSS_NOMSITE);
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('url', null, BAZ_RSS_LOGOSITE);
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('link', null, BAZ_RSS_ADRESSESITE);
$xml .= "\r\n ";
$xml .= XML_Util::createEndElement ('image');
if ($resultat->numRows() > 0) {
// Creation des items : titre + lien + description + date de publication
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
 
$requetenom = 'SELECT '.BAZ_CHAMPS_NOM.', '.BAZ_CHAMPS_PRENOM.' FROM '.
BAZ_ANNUAIRE.' WHERE '.BAZ_CHAMPS_ID.'='.$ligne['bf_ce_utilisateur'];
$res = $GLOBALS['_BAZAR_']['db']->query($requetenom) ;
if (DB::isError($res)) {
die ($res->getMessage().$res->getDebugInfo()) ;
}
 
$nomprenom = $res->fetchRow(DB_FETCHMODE_ASSOC);
 
$xml .= "\r\n ";
$xml .= XML_Util::createStartElement ('item');
$xml .= "\r\n ";
$xml .= XML_Util::createTag('title', null, transformerTxtPourRss($ligne['bf_titre']));
$xml .= "\r\n ";
$lien=$GLOBALS['_BAZAR_']['url'];
$lien->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$xml .= XML_Util::createTag ('link', null, $lien->getURL());
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('guid', null, $lien->getURL());
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('category', null, transformerTxtPourRss($ligne['bn_label_nature']));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('author', null, transformerTxtPourRss($nomprenom[BAZ_CHAMPS_NOM].' '.$nomprenom[BAZ_CHAMPS_PRENOM]));
$xml .= "\r\n ";
$xml .= XML_Util::createStartElement ('description');
$xml .= "\r\n ";
if ($_GET[BAZ_VARIABLE_ACTION] != BAZ_VOIR_TOUTES_ANNONCES) {
$xml .= XML_Util::createCDataSection(transformerTxtPourRss($ligne['bf_description']));
}
$xml .= "\r\n ";
$xml .= XML_Util::createEndElement ('description');
$xml .= "\r\n ";
/*if ($ligne['bf_date_debut_validite_fiche'] != '0000-00-00' &&
$ligne['bf_date_debut_validite_fiche']>$ligne['bf_date_creation_fiche']) {
$date_pub = $ligne['bf_date_debut_validite_fiche'];
} else $date_pub = $ligne['bf_date_creation_fiche'] ;*/
$date_pub = $ligne['bf_date_debut_evenement'] ;
$xml .= XML_Util::createTag ('pubDate', null, strftime('%a, %d %b %Y %H:%M:%S GMT',strtotime($date_pub)));
$xml .= "\r\n ";
$xml .= XML_Util::createEndElement ('item');
}
}
else {//pas d'annonces
$xml .= "\r\n ";
$xml .= XML_Util::createStartElement ('item');
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('title', null, utf8_encode(html_entity_decode(BAZ_PAS_D_ANNONCES)));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('link', null, utf8_encode(html_entity_decode($GLOBALS['_BAZAR_']['url']->getUrl())));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('guid', null, utf8_encode(html_entity_decode($GLOBALS['_BAZAR_']['url']->getUrl())));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('description', null, utf8_encode(html_entity_decode(BAZ_PAS_D_ANNONCES)));
$xml .= "\r\n ";
$xml .= XML_Util::createTag ('pubDate', null, strftime('%a, %d %b %Y %H:%M:%S GMT',time()));
$xml .= "\r\n ";
$xml .= XML_Util::createEndElement ('item');
}
$xml .= "\r\n ";
$xml .= XML_Util::createEndElement ('channel');
$xml .= "\r\n ";
$xml .= XML_Util::createEndElement('rss') ;
// Truc copiédepuis l'applette syndication de Papyrus qui semble empêcher les flux de foirer dans Foudroiseau
$xml = supprimerXmlDangereux($xml);
 
// Nettoyage de l'url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
 
return $xml;
}
 
function supprimerXmlDangereux($xml)
{
$ret = "";
$encours;
if (empty($xml))
{
return $ret;
}
 
$lg = strlen($xml);
for ($i=0; $i < $lg; $i++)
{
$encours = ord($xml{$i});
if (($encours == 0x9) ||
($encours == 0xA) ||
($encours == 0xD) ||
(($encours >= 0x20) && ($encours <= 0xD7FF)) ||
(($encours >= 0xE000) && ($encours <= 0xFFFD)) ||
(($encours >= 0x10000) && ($encours <= 0x10FFFF)))
{
$ret .= chr($encours);
}
else
{
$ret .= " ";
}
}
return $ret;
}
 
/** baz_liste() Formate la liste de toutes les annonces actuelles
*
* @return string le code HTML a afficher
*/
function baz_liste($typeannonce='toutes') {
 
if(isset($_REQUEST['liste31']) && !empty($_REQUEST['liste31'])) {
 
if($_REQUEST['liste31'] != "0")
{
$GLOBALS['_BAZAR_']['categorie_nature'] = $_REQUEST['liste31'] ;
}
else
{
$GLOBALS['_BAZAR_']['categorie_nature'] = 'toutes' ;
}
}
 
//pour les super-administrateurs, on peut voir les annonces non validees
//on verifie si l'utilisateur est administrateur
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']) ;
 
//creation du lien pour le formulaire de recherche
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_TOUTES_ANNONCES);
if (isset($_REQUEST['recherche_avancee'])) $GLOBALS['_BAZAR_']['url']->addQueryString ('recherche_avancee', $_REQUEST['recherche_avancee']);
$lien_formulaire = preg_replace ('/&amp;/', '&', $GLOBALS['_BAZAR_']['url']->getURL()) ;
$formtemplate = new HTML_QuickForm('formulaire', 'post', $lien_formulaire) ;
$squelette =& $formtemplate->defaultRenderer();
$squelette->setFormTemplate("\n".'<form {attributes}>'."\n".'<table>'."\n".'{content}'."\n".'</table>'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<tr>'."\n".'<td>'."\n".'{label}'.
'<!-- BEGIN required --><span class="symbole_obligatoire">&nbsp;*</span><!-- END required -->'."\n".
' :</td>'."\n".'<td style="text-align:left;padding:5px;"> '."\n".'{element}'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</td>'."\n".'</tr>'."\n");
$squelette->setElementTemplate( '<tr>'."\n".'<td colspan="2" class="liste_a_cocher"><strong>{label}&nbsp;{element}</strong>'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">&nbsp;*</span><!-- END required -->'."\n".'</td>'."\n".'</tr>'."\n", 'accept_condition');
$squelette->setElementTemplate( '<tr><td colspan="2">{label}{element}</td></tr>'."\n", 'rechercher');
 
$squelette->setRequiredNoteTemplate("\n".'<tr>'."\n".'<td colspan="2" class="symbole_obligatoire">* {requiredNote}</td></tr>'."\n");
//Traduction de champs requis
$formtemplate->setRequiredNote(BAZ_CHAMPS_REQUIS) ;
$formtemplate->setJsWarnings(BAZ_ERREUR_SAISIE,BAZ_VEUILLEZ_CORRIGER);
//GEN_stockerFichierScript('jquery', 'http://code.jquery.com/jquery-latest.js');
GEN_stockerFichierScript('jquery_date_picker', 'api/js/jquery/ui.datepicker.js');
GEN_stockerFichierScript('jquery_date_picker_fr', 'api/js/jquery/ui.datepicker-fr.js');
GEN_stockerStyleExterne( 'jquery_date_picker_style', 'api/js/jquery/ui.datepicker.css');
$formtemplate->addElement('html', '<tr><td>Dates: &nbsp;</td><td>'.bazar::getFiltrePlageDeDate().'</td></tr>');
 
//cas du formulaire de recherche proposant de chercher parmis tous les types d'annonces
//requete pour obtenir l'id et le label des types d'annonces
$requete = 'SELECT bn_id_nature, bn_label_nature '.
'FROM bazar_nature' ;
 
$suite = false;
 
if(isset($GLOBALS['_BAZAR_']['categorie_nature']) && !empty($GLOBALS['_BAZAR_']['categorie_nature']) && $GLOBALS['_BAZAR_']['categorie_nature'] != 'toutes') {
$requete .= ' WHERE bn_ce_id_menu IN ('.$GLOBALS['_BAZAR_']['categorie_nature'].') ';
$suite = true;
}
 
if (isset($GLOBALS['_BAZAR_']['langue'])) {
if($suite) {
$requete .= 'AND';
} else {
$requete .= ' WHERE';
}
$requete .= ' bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%" ';
//'ORDER BY bn_label_nature ASC';
}
 
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
//on recupere le nb de types de fiches, pour plus tard
$nb_type_de_fiches=$resultat->numRows();
$type_annonce_select['toutes']=BAZ_TOUS_TYPES_FICHES;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$type_annonce_select[$ligne['bn_id_nature']] = $ligne['bn_label_nature'];
$tableau_typeannonces[] = $ligne['bn_id_nature'] ;
}
if ($nb_type_de_fiches>1 && $GLOBALS['_BAZAR_']['typeannonce']=='toutes' && BAZ_AFFICHER_FILTRE_MOTEUR) {
$res= '';
$option=array('onchange' => 'javascript:this.form.submit();');
$formtemplate->addElement ('select', 'nature', BAZ_TYPEANNONCE, $type_annonce_select, $option) ;
if (isset($_REQUEST['nature'])) {
$defauts=array('nature'=>$_REQUEST['nature']);
$formtemplate->setDefaults($defauts);
}
}
//cas du type d'annonces predefini
else {
if ($nb_type_de_fiches==1 && key($type_annonce_select) != 'toutes') {
$GLOBALS['_BAZAR_']['typeannonce']=end($type_annonce_select);
$GLOBALS['_BAZAR_']['id_typeannonce']=key($type_annonce_select);
}
 
$res = '<h2 class="bazar_titre2">'.BAZ_RECHERCHE_FICHE.'</h2>'."\n";
}
 
//requete pour obtenir l'id, le nom et prenom de toutes les personnes ayant depose une fiche
// dans le but de construire l'element de formulaire select avec les noms des emetteurs de fiche
if (BAZ_RECHERCHE_PAR_EMETTEUR && ($utilisateur->isAdmin(1) || $utilisateur->isSuperAdmin())) {
$requete = 'SELECT DISTINCT '.BAZ_CHAMPS_ID.', '.BAZ_CHAMPS_NOM.', '.BAZ_CHAMPS_PRENOM.' '.
'FROM bazar_fiche,'.BAZ_ANNUAIRE.' WHERE ' ;
 
$requete .= ' bf_date_debut_validite_fiche<=NOW() AND';
$requete .= ' bf_ce_utilisateur='.BAZ_CHAMPS_ID.' ';
 
if (!isset($_REQUEST['nature'])) {
if (isset($GLOBALS['_BAZAR_']['id_typeannonce']) && $GLOBALS['_BAZAR_']['id_typeannonce'] != 'toutes') {
$requete .= 'AND bf_ce_nature="'.$GLOBALS['_BAZAR_']['id_typeannonce'].'" ';
}
}
else {
if ($_REQUEST['nature']!='toutes') {
$requete .= 'AND bf_ce_nature='.$_REQUEST['nature'].' ';
}
}
 
$requete .= 'ORDER BY '.BAZ_CHAMPS_NOM.' ASC';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
 
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
$personnes_select['tous']=BAZ_TOUS_LES_EMETTEURS;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$personnes_select[$ligne[BAZ_CHAMPS_ID]] = $ligne[BAZ_CHAMPS_NOM]." ".$ligne[BAZ_CHAMPS_PRENOM] ;
}
$option=array('style'=>'border:1px solid #000;width: 200px;font:12px Myriad, Arial, sans-serif;');
$formtemplate->addElement ('select', 'personnes', BAZ_EMETTEUR, $personnes_select, $option) ;
} else {
$formtemplate->addElement ('hidden', 'personnes', 'tous') ;
}
 
if ($utilisateur->isSuperAdmin()) {
$option=array('style'=>'border:1px solid #000;width: 200px;font:12px Myriad, Arial, sans-serif;');
$valide_select[0] = BAZ_FICHES_VALIDEES;
$valide_select[1] = BAZ_FICHES_PAS_VALIDEES;
$valide_select[2] = BAZ_LES_DEUX;
$formtemplate->addElement ('select', 'valides', BAZ_VALIDE, $valide_select, $option) ;
$defauts=array('valides'=>0);
$formtemplate->setDefaults($defauts);
 
}
 
//champs texte pour entrer les mots cles
$option=array('maxlength'=>60,'style'=>'border:1px solid #000;width:200px;font:12px Myriad, Arial, sans-serif;');
$formtemplate->addElement('text', 'recherche_mots_cles', BAZ_MOT_CLE, $option) ;
 
//option cachee pour savoir si le formulaire a ete appele deja
$formtemplate->addElement('hidden', 'recherche_effectuee', 1) ;
 
// Ajout des options si un type de fiche a ete choisie
if ( (isset($_REQUEST['nature']) && $_REQUEST['nature'] != 'toutes') || (isset($GLOBALS['_BAZAR_']['categorie_nature']) && $nb_type_de_fiches==1)) {
if ( BAZ_MOTEUR_RECHERCHE_AVANCEE || ( isset($_REQUEST['recherche_avancee'])&&$_REQUEST['recherche_avancee']==1) ) {
if ($GLOBALS['_BAZAR_']['categorie_nature'] != '') {
$champs_requete = '' ;
if (!isset($_REQUEST['nature']) || $_REQUEST['nature'] == '') {
$_REQUEST['nature'] = $tableau_typeannonces[0];
}
}
// Recuperation du template
$requete = 'SELECT bn_template FROM bazar_nature WHERE bn_id_nature = '.$_REQUEST['nature'];
$resultat = $GLOBALS['_BAZAR_']['db']->getOne($requete) ;
if (DB::isError($resultat)) {
return ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
 
if (isset($_REQUEST['recherche_avancee']) && $_REQUEST['recherche_avancee']==1) {
foreach(array_merge($_POST, $_GET) as $cle => $valeur) $GLOBALS['_BAZAR_']['url']->addQueryString($cle, $valeur);
$GLOBALS['_BAZAR_']['url']->addQueryString('recherche_avancee', '0');
$lien_recherche_de_base = '<a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.BAZ_RECHERCHE_DE_BASE.'</a><br />';
//lien recherche de base
labelhtml($formtemplate,'',$lien_recherche_de_base,'','','','','');
}
 
$tableau = baz_valeurs_template($resultat) ;
for ($i=0; $i<count($tableau); $i++) {
if (($tableau[$i]['type'] == 'liste' || $tableau[$i]['type'] == 'checkbox' || $tableau[$i]['type'] == 'labelhtml') && $tableau[$i]['recherche'] == 1) {
$tableau[$i]['type']($formtemplate, $tableau[$i]['nom_bdd'], $tableau[$i]['label'], $tableau[$i]['limite1'],
$tableau[$i]['limite2'], $tableau[$i]['defaut'], $tableau[$i]['table_source'], $tableau[$i]['obligatoire'], 1, 'bazar') ;
}
}
}
else {
$url_rech_avance = $GLOBALS['_BAZAR_']['url'];
foreach(array_merge($_POST, $_GET) as $cle => $valeur) $url_rech_avance->addQueryString($cle, $valeur);
$url_rech_avance->addQueryString('recherche_avancee', '1');
$lien_recherche_avancee = '<a href="'.$url_rech_avance->getURL().'">'.BAZ_RECHERCHE_AVANCEE.'</a><br />';
unset ($url_rech_avance);
}
}
 
//lien recherche avancee
if (isset($lien_recherche_avancee)) {
labelhtml($formtemplate,'',$lien_recherche_avancee,'','','','','');
}
 
//Bouton de validation du formulaire
$option=array('style'=>'border:1px solid #000;width:100px;font:12px Myriad, Arial, sans-serif;','class'=>'baz_rech');
$formtemplate->addElement('submit', 'rechercher', BAZ_RECHERCHER, $option);
 
//affichage du formulaire
//$res.=$formtemplate->toHTML()."\n";
 
 
// Ajout de la table bazar_fiche_liste_valeur dans le from de la requete
$case_coche = false ;
$nb_jointures=0;
$requeteFrom = '' ;
$requeteWhere = '';
if ($GLOBALS['_BAZAR_']['id_typeannonce'] != 'toutes') {
$requeteWhere .= 'bn_id_nature='.$GLOBALS['_BAZAR_']['id_typeannonce'].' AND ' ;
}
$requeteWhere .= ' bn_id_nature=bf_ce_nature AND ' ;
if (isset($GLOBALS['_BAZAR_']['langue'])) {
$requeteWhere .= ' bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%" and ';
}
$requeteWhereListe = '' ;
 
if ( isset($tableau) ) {
for ($i = 0; $i < count ($tableau); $i++) {
if ($tableau[$i]['type'] == 'checkbox' || $tableau[$i]['type'] == 'liste') {
$nb_jointures++;
$nom_liste = $tableau[$i]['type'].$tableau[$i]['nom_bdd'] ;
if (isset($_REQUEST[$nom_liste]) && is_array($_REQUEST[$nom_liste])) {
$case_coche = true;
$requeteFrom .= ', bazar_fiche_valeur_liste as bfvl'.($nb_jointures) ;
$requeteWhereListe .= ' bfvl'.$nb_jointures.'.bfvl_ce_liste='.$tableau[$i]['nom_bdd'].' AND ' ; // Numéro de la liste
$requeteWhere .= ' bfvl'.($nb_jointures).'.bfvl_ce_fiche=bf_id_fiche AND ';
$requeteWhereListe .= ' bfvl'.$nb_jointures.'.bfvl_valeur IN (' ;
$chaine = '';
//var_dump($_REQUEST[$nom_liste]);
foreach ($_REQUEST[$nom_liste] as $cle =>$valeur) {
if ($valeur == 1) {
$chaine .= '"'.$cle.'",' ;
}
}
$requeteWhereListe .= substr ($chaine, 0, strlen ($chaine)-1) ;
$requeteWhereListe .= ') AND ';
} else {
if (isset ($_REQUEST[$nom_liste]) && $_REQUEST[$nom_liste]!=0) {
$requeteFrom .= ', bazar_fiche_valeur_liste as bfvl'.($nb_jointures) ;
$requeteWhereListe .= ' bfvl'.$nb_jointures.'.bfvl_ce_liste='.$tableau[$i]['nom_bdd'].' AND ' ; // Numéro de la liste
$requeteWhereListe .= ' bfvl'.$nb_jointures.'.bfvl_valeur='.$_REQUEST[$nom_liste].' AND ';
$requeteWhere .= ' bfvl'.($nb_jointures).'.bfvl_ce_fiche=bf_id_fiche AND ';
$case_coche = true;
}
}
}
}
}
if ($case_coche) {
$requeteWhere .= $requeteWhereListe;
}
if (isset($_REQUEST['liste31']) && $_REQUEST['liste31'] != '0' && $_REQUEST['nature']!='toutes') {
$requeteWhere = 'bf_ce_nature="'.$_REQUEST['nature'].'" AND '.$requeteWhere;
}
 
/*if (BAZ_UTILISE_TEMPLATE) {
// Appel du template n 1
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php' ;
 
$template = new bazarTemplate ($GLOBALS['_BAZAR_']['db']) ;
$chaine = $template->getTemplate(1, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['categorie_nature']);
if (bazarTemplate::isError ($chaine)) return $chaine->getMessage() ;
ob_start();
eval ($chaine) ;
$res .= ob_get_contents();
ob_end_clean() ;
 
} else {*/
$res .= $formtemplate->toHTML();
if (!isset($_REQUEST['recherche_effectuee'])) {
$res .= '<p class="zone_info">'.BAZ_ENTRER_VOS_CRITERES_DE_RECHERCHE.'</p>'."\n";
 
$requete = 'SELECT DISTINCT bf_id_fiche, '.BAZ_CHAMPS_PRENOM.', '.BAZ_CHAMPS_NOM.', bf_titre, bf_date_debut_validite_fiche, bf_date_debut_evenement, bf_description, bn_label_nature, bf_date_creation_fiche
FROM bazar_fiche, bazar_nature, '.BAZ_ANNUAIRE.'
WHERE bn_id_nature=bn_id_nature
AND bf_ce_utilisateur = '.BAZ_CHAMPS_ID.'
AND bf_statut_fiche = 1
AND bf_date_debut_evenement >= NOW()
GROUP BY bf_titre
ORDER BY bf_date_debut_evenement ASC
LIMIT 0 , 12';
 
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete);
if (DB::isError($resultat)) {
return ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
if($resultat->numRows() != 0) {
$res .= '<h2>'.BAZ_PROCHAINS_EVENEMENTS.'</h2>';
 
$res .= '<ul class="liste_rss">';
while($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$GLOBALS['_BAZAR_']['url']->addQueryString('id_fiche', $ligne['bf_id_fiche']);
 
$res .= '<div class="menu_titre">
<h1 class="intituler_rubrique"><a class="lien_rss" href="'.$GLOBALS['_BAZAR_']['url']->getURL() .'" alt="lire la fiche"> '.$ligne['bf_titre'].'</a></h1>
<p class="date">'.baz_valeur_champs(31,$ligne['bf_id_fiche']).' début le '.$GLOBALS['jours'][date ('w', strtotime ($ligne['bf_date_debut_evenement']))].' '.date('d', strtotime($ligne['bf_date_debut_evenement'])).
' '.$GLOBALS['mois'][date('n', strtotime ($ligne['bf_date_debut_evenement']))].' '.date ('Y', strtotime ($ligne['bf_date_debut_evenement'])).' par '.$ligne[BAZ_CHAMPS_PRENOM].' '.$ligne[BAZ_CHAMPS_NOM].' </p>
<p class="descriptif_contenu">'.substr($ligne['bf_description'], 0, 400).'</p>
</div>
<hr />';
 
}
$res .= '</ul>';
}
}
//}
 
//affichage des resultats de la recherche si le formulaire a ete envoye
$requeteSQL='';
if (isset($_REQUEST['recherche_effectuee'])) {
//preparation de la requete pour trouver les mots cles
if (($_REQUEST['recherche_mots_cles']!='')and($_REQUEST['recherche_mots_cles']!=BAZ_MOT_CLE)) {
//decoupage des mots cles
$recherche = split(' ', $_REQUEST['recherche_mots_cles']) ;
$nbmots=count($recherche);
 
$requeteSQL='';
if (isset($GLOBALS['_BAZAR_']['categorie_nature']))
{
$tableau=baz_valeurs_template($GLOBALS['_BAZAR_']['template']);
}
for ($i=0; $i<$nbmots; $i++) {
for ($j=0; $j<count($tableau); $j++) {
if ( $tableau[$j]['type']=='texte' || $tableau[$j]['type']=='textelong') {
//if ($i>0) $requeteSQL.=' OR ';
$requeteSQL.= $tableau[$j]['nom_bdd'].' LIKE "%'.$recherche[$i].'%" or ';
}
}
}
$requeteSQL = substr($requeteSQL, 0, count($requeteSQL) - 4);
 
}
if (!isset($_REQUEST['nature'])) {
if (!isset ($GLOBALS['_BAZAR_']['id_nature'])) $typedefiches = $tableau_typeannonces;
else $typedefiches = $GLOBALS['_BAZAR_']['id_nature'] ;
} else {
$typedefiches = $_REQUEST['nature'] ;
if ($typedefiches == 'toutes') $typedefiches = $tableau_typeannonces ;
}
 
$valides = 1 ;
 
if ($typeannonce!='toutes') $typedefiches=$typeannonce;
if (isset($_REQUEST['valides'])) {$valides=$_REQUEST['valides'];}
else {$valides=1;}
//generation de la liste de flux a afficher
if (!isset($_REQUEST['personnes'])) {
$_REQUEST['personnes']='tous';
}
 
if($_SERVER['REMOTE_ADDR'] == '162.38.234.9') {
if (isset($_REQUEST['departement'])) {
$requeteWhere = ' bf_cp_lieu_evenement LIKE "'.$_REQUEST['departement'].'%" AND ';
}
}
 
if ((isset($_REQUEST['date_debut']) && $_REQUEST['date_debut'] != '') || (isset($_REQUEST['date_fin']) && $_REQUEST['date_fin'] != '')) {
 
if (isset($_REQUEST['date_debut']) && $_REQUEST['date_debut'] != '' && isset($_REQUEST['date_fin']) && $_REQUEST['date_fin'] != '') {
$requeteWhere .= ' (bf_date_debut_evenement >="'.date('Y-m-d', strtotime($_REQUEST['date_debut'])).'"
and bf_date_fin_evenement <="'.date('Y-m-d', strtotime($_REQUEST['date_fin'])).'") AND ';
}
else {
if (isset($_REQUEST['date_debut']) && $_REQUEST['date_debut'] != '') {
$requeteWhere .= ' (bf_date_debut_evenement >="'.date('Y-m-d', strtotime($_REQUEST['date_debut'])).'"
) AND ';
}
 
if(isset($_REQUEST['date_fin']) && $_REQUEST['date_fin'] != '') {
$requeteWhere .= ' (bf_date_fin_evenement >="'.date('Y-m-d', strtotime($_REQUEST['date_fin'])).'"
) AND ';
}
}
}
else {
$requeteWhere .= '(bf_date_fin_evenement >= NOW() AND (bf_date_fin_evenement >= NOW() OR bf_date_fin_evenement="0000-00-00")) AND ' ;
}
 
$res .= baz_liste_pagine_HTML($typedefiches, '', $_REQUEST['personnes'], $valides, $requeteSQL, $requeteFrom, $requeteWhere);
}
 
// Nettoyage de l'url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('annonce');
$GLOBALS['_BAZAR_']['url']->removeQueryString('categorie_nature');
$GLOBALS['_BAZAR_']['url']->removeQueryString('recherche_avancee');
 
return $res;
}
 
/**
* Cette fonction renvoie du HTML
*/
function baz_liste_pagine_HTML($typeannonce, $nbitem, $emetteur, $valide, $requeteSQL = '', $requeteFrom = '', $requeteWhere = '') {
 
$utilisateur = new Administrateur_bazar ($GLOBALS['AUTH']) ;
// generation de la requete MySQL personnalisee
$req_where=0;
$requete = 'SELECT * '.
'FROM bazar_fiche, bazar_nature '.$requeteFrom.' WHERE '.$requeteWhere;
 
if($utilisateur->isSuperAdmin()) {
if ($valide!=2) {
if ($req_where==1) {$requete .= ' AND ';}
if($valide == 0) {
$req_where=1;
$requete .= 'bf_statut_fiche=1';
}
else {
$req_where=1;
$requete .= 'bf_statut_fiche=0';
}
 
} else {
$requete .= '1 ' ;
}
}
else
{
if($requeteWhere == 1) {
$requete = ' AND ' ;
}
 
$requete .= 'bf_statut_fiche=1';
}
 
$requete .= ' AND bn_id_nature=bf_ce_nature ';
 
if ($emetteur!='' && $emetteur!='tous') {
if ($req_where==1) {$requete .= ' AND ';}
$requete .= 'bf_ce_utilisateur='.$emetteur;
$req_where=1;
}
if ($requeteSQL!='') {
$requete .= ' AND ';
$requete .= '('.$requeteSQL.')';
$req_where=1;
}
$requete .= ' ORDER BY bf_date_debut_evenement DESC, bf_date_debut_validite_fiche DESC, bf_date_fin_validite_fiche DESC, bf_date_maj_fiche DESC';
if ($nbitem!='') {$requete .= ' LIMIT 0,'.$nbitem;}
 
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return $resultat->getMessage().'<br /><br />'.$resultat->getDebugInfo() ;
}
 
$res = '<br /><h4>'.BAZ_IL_Y_A.($resultat->numRows()).' '.BAZ_FICHES_CORRESPONDANTES.'</h4><br />'."\n";
//$res .= 'requete: '. $requete. '<br />';
 
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
 
$donnees = array();
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$GLOBALS['_BAZAR_']['url']->addQueryString('id_fiche', $ligne['bf_id_fiche']) ;
array_push ($donnees, $ligne);
}
 
// Mise en place du Pager
include_once PAP_CHEMIN_API_PEAR.'Pager/Pager.php';
$params = array(
'mode' => BAZ_MODE_DIVISION,
'perPage' => BAZ_NOMBRE_RES_PAR_PAGE,
'delta' => BAZ_DELTA,
'httpMethod' => 'GET',
'extraVars' => array_merge($_POST, $_GET),
'altNext' => BAZ_SUIVANT,
'altPrev' => BAZ_PRECEDENT,
'nextImg' => BAZ_SUIVANT,
'prevImg' => BAZ_PRECEDENT,
'itemData' => $donnees
);
$pager = & Pager::factory($params);
$data = $pager->getPageData();
$links = $pager->getLinks();
 
if (BAZ_UTILISE_TEMPLATE) {
//Appel du template n 2
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php' ;
$template = new bazarTemplate ($GLOBALS['_BAZAR_']['db']) ;
$chaine = $template->getTemplate(2, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['categorie_nature']);
if (bazarTemplate::isError ($chaine)) return $chaine->getMessage() ;
ob_start();
eval ($chaine) ;
$res .= ob_get_contents();
ob_end_clean() ;
} else {
$res .= '<ul>' ;
$res .= '<div class="bazar_numero">'.$pager->links.'</div>'."\n";
foreach ($data as $valeur) {
$res .='<li class="BAZ_'.$valeur['bn_label_class'].'">'."\n";
$GLOBALS['_BAZAR_']['url']->addQueryString('id_fiche', $valeur['bf_id_fiche']) ;
if ($utilisateur->isSuperAdmin() || $GLOBALS['id_user']==$valeur['bf_ce_utilisateur']) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_MODIFIER);
$GLOBALS['_BAZAR_']['url']->addQueryString('typeannonce', $valeur['bf_ce_nature']);
$GLOBALS['_BAZAR_']['url']->removeQueryString('personnes');
$GLOBALS['_BAZAR_']['url']->removeQueryString('recherche_effectuee');
$res .= '<a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">('.BAZ_MODIFIER.')</a>&nbsp;'."\n";
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_SUPPRESSION);
$res .='<a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'" onclick="javascript:return confirm(\''.BAZ_SUPPRIMER.'\');">('.BAZ_SUPPRIMER.')</a>&nbsp;'."\n";
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
}
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE) ;
$res .= '<a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.$valeur['bf_titre'].'</a>'."\n";
$res .='</li>'."\n";
}
$res .= '</ul>'."\n".'<div class="bazar_numero">'.$pager->links.'</div>'."\n";
}
 
 
// Nettoyage de l'url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
$GLOBALS['_BAZAR_']['url']->removeQueryString('recherche_avancee');
 
return $res ;
}
 
function transformerTxtPourRss($txt) {
$txt_utf8 = encoderEnUtf8($txt);
$txt_utf8 = remplacerEsperluettesIsoleesParEntiteHtml($txt_utf8);
$txt_utf8 = remplacerCaracteresAsciiInvisibles($txt_utf8);
$txt_utf8 = remplacerCaracteresCp1252Problematiques($txt_utf8);
return $txt_utf8;
 
}
 
function encoderEnUtf8($txtEnIso88591) {
$txtEnUtf8 = utf8_encode($txtEnIso88591);
return $txtEnUtf8;
}
 
function remplacerEsperluettesIsoleesParEntiteHtml($txtEnUtf8) {
$txtEnUtf8 = preg_replace('/ \x{0026} /u', ' &#38; ', $txtEnUtf8);// Remplacement des & isolés
return $txtEnUtf8;
}
 
function remplacerCaracteresAsciiInvisibles($txtEnUtf8) {
$ascii_remplacements = array (
'\x00' => '', // NUL : Null (nul)
'\x01' => '', // SOH : Start of Header (début d'en-tête)
'\x02' => '', // STX : Start of Text (début du texte)
'\x03' => '', // ETX : End of Text (fin du texte)
'\x04' => '', // EOT : End of Transmission (fin de transmission)
'\x05' => '', // ENQ : Enquiry (End of Line) (demande, fin de ligne)
'\x06' => '', // ACK : Acknowledge (accusé de réception)
'\x07' => '', // BEL : Bell (caractère d'appel)
'\x08' => '', // BS : Backspace (espacement arrière)
'\x09' => ' ', // HT : Horizontal Tab (tabulation horizontale)
'\x0A' => '', // LF : Line Feed (saut de ligne)
'\x0B' => '', // VT : Vertical Tab (tabulation verticale)
'\x0C' => '', // FF : Form Feed (saut de page)
'\x0D' => '', // CR : Carriage Return (retour chariot)
'\x0E' => '', // SO : Shift Out (fin d'extension)
'\x0F' => '', // SI : Shift In (démarrage d'extension)
'\x10' => '', // DLE : Data Link Escape
'\x11' => '', // DC1 : Device Control 1 à 4 (DC1 et DC3 sont généralement utilisés pour coder XON et XOFF dans un canal de communication duplex)
'\x12' => '', // DC2 :
'\x13' => '', // DC3 :
'\x14' => '', // DC4 :
'\x15' => '', // NAK : Negative Acknowledge (accusé de réception négatif)
'\x16' => '', // SYN : Synchronous Idle
'\x17' => '', // ETB : End of Transmission Block (fin du bloc de transmission)
'\x18' => '', // CAN : Cancel (annulation)
'\x19' => '', // EM : End of Medium (fin de support)
'\x1A' => '', // SUB : Substitute (substitution)
'\x1B' => '', // ESC : Escape (échappement)
'\x1C' => '', // FS : File Separator (séparateur de fichier)
'\x1D' => '', // GS : Group Separator (séparateur de groupe)
'\x1E' => '', // RS : Record Separator (séparateur d'enregistrement)
'\x1F' => '', // US : Unit Separator (séparateur d'unité)
'\x92' => '', // Apostrophes de Windows qui puduk
'\x20' => ' '); // SP : Espace (Space en anglais)
$txtEnUtf8 = strtr($txtEnUtf8, $ascii_remplacements);
return $txtEnUtf8;
}
 
function remplacerCaracteresCp1252Problematiques($txtEnUtf8) {
$cp1252_remplacements = array (
'\xc2\x80' => '\xe2\x82\xac', // EURO SIGN
'\xc2\x82' => '\xe2\x80\x9a', // SINGLE LOW-9 QUOTATION MARK
'\xc2\x83' => '\xc6\x92', // LATIN SMALL LETTER F WITH HOOK
'\xc2\x84' => '\xe2\x80\x9e', // DOUBLE LOW-9 QUOTATION MARK
'\xc2\x85' => '\xe2\x80\xa6', // HORIZONTAL ELLIPSIS
'\xc2\x86' => '\xe2\x80\xa0', // DAGGER
'\xc2\x87' => '\xe2\x80\xa1', // DOUBLE DAGGER
'\xc2\x88' => '\xcb\x86', // MODIFIER LETTER CIRCUMFLEX ACCENT
'\xc2\x89' => '\xe2\x80\xb0', // PER MILLE SIGN
'\xc2\x8a' => '\xc5\xa0', // LATIN CAPITAL LETTER S WITH CARON
'\xc2\x8b' => '\xe2\x80\xb9', // SINGLE LEFT-POINTING ANGLE QUOTATION
'\xc2\x8c' => '\xc5\x92', // LATIN CAPITAL LIGATURE OE
'\xc2\x8e' => '\xc5\xbd', // LATIN CAPITAL LETTER Z WITH CARON
'\xc2\x91' => '\xe2\x80\x98', // LEFT SINGLE QUOTATION MARK
'\xc2\x92' => '\xe2\x80\x99', // RIGHT SINGLE QUOTATION MARK
'\xc2\x93' => '\xe2\x80\x9c', // LEFT DOUBLE QUOTATION MARK
'\xc2\x94' => '\xe2\x80\x9d', // RIGHT DOUBLE QUOTATION MARK
'\xc2\x95' => '\xe2\x80\xa2', // BULLET
'\xc2\x96' => '\xe2\x80\x93', // EN DASH
'\xc2\x97' => '\xe2\x80\x94', // EM DASH
'\xc2\x98' => '\xcb\x9c', // SMALL TILDE
'\xc2\x99' => '\xe2\x84\xa2', // TRADE MARK SIGN
'\xc2\x9a' => '\xc5\xa1', // LATIN SMALL LETTER S WITH CARON
'\xc2\x9b' => '\xe2\x80\xba', // SINGLE RIGHT-POINTING ANGLE QUOTATION*/
'\xc2\x9c' => '\xc5\x93', // LATIN SMALL LIGATURE OE
'\xc2\x9e' => '\xc5\xbe', // LATIN SMALL LETTER Z WITH CARON
'\xc2\x9f' => '\xc5\xb8'); // LATIN CAPITAL LETTER Y WITH DIAERESIS*/
$txtEnUtf8 = strtr($txtEnUtf8, $cp1252_remplacements);
return $txtEnUtf8;
}
 
function subtext($text, $offset = 500) {
preg_match('!.{0,'.$offset.'}\s!si', $text, $match);
return $match[0].'...';
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.99.2.13 2008-04-16 12:39:56 alexandre_tb
* simplification du code en utilisant la classe Bazar_element
*
* Revision 1.99.2.12 2008-03-17 14:02:53 jp_milcent
* Ajout d'un message demandant de s'identifiez pour poser des commentaires.
* Amélioration du XHTML (me prévenir en cas de pb).
*
* Revision 1.99.2.11 2008-03-17 11:03:02 jp_milcent
* Ajout de l'authentification nécessaire pour déposer des commentaires.
* Corrections sur la gestion des paramêtres dans les urls (compatibilité applette Identification et Moteur de Recherche).
*
* Revision 1.99.2.10 2008-02-04 13:03:09 alexandre_tb
* ajout d un class css dans les h2
*
* Revision 1.99.2.9 2008-02-01 16:24:10 florian
* ajout champs_mail, décommenter les traductions des javascripts
*
* Revision 1.99.2.8 2008-01-29 09:35:37 alexandre_tb
* remplacement des variables action par une constante
* Utilisation d un redirection pour eviter que les formulaires soient valides 2 fois
* simplification de la suppression d un lien associe a une liste
*
* Revision 1.99.2.7 2008-01-11 14:09:17 alexandre_tb
* Remplacement de la variable action ecrite en dur par la constante BAZ_VARIABLE_ACTION
*
* Revision 1.99.2.6 2007-12-14 15:55:38 alexandre_tb
* les commentaires peuvent maintenant apparaitre dans le moteur de recherche et dans les fiches, il faut mettre a 1 respectivement le champs recherche et obligatoire
*
* Revision 1.99.2.5 2007-12-10 12:57:34 jp_milcent
* Correction du problèmes des & non remplacées par des &amp;
*
* Revision 1.99.2.4 2007-12-04 08:58:26 alexandre_tb
* modification de styles dans les formulaires
*
* Revision 1.99.2.3 2007-12-03 15:16:21 jp_milcent
* Correction problème de la div mystère!
*
* Revision 1.99.2.2 2007-11-30 15:02:50 alexandre_tb
* simplification du code et correction du bug (les fiches de la carto n affichent pas la bonne nature
*
* Revision 1.99.2.1 2007-11-30 14:14:36 jp_milcent
* Ajout d'un décodage des apostrophes de type RIGHT SINGLE QUOTATION MARK.
*
* Revision 1.99 2007-11-05 10:17:19 alexandre_tb
* correction bug: retrait inorportun de la variable menu dans la globale URL
*
* Revision 1.98 2007-10-24 13:27:45 alexandre_tb
* bug d'affichage multiple lorsqu'il y a +sieurs langues
*
* Revision 1.97 2007-10-24 08:56:27 alexandre_tb
* bug d'affichage multiple lorsqu'il y a +sieurs langues
*
* Revision 1.96 2007-10-22 10:09:21 florian
* correction template
*
* Revision 1.95 2007-10-22 09:22:02 alexandre_tb
* prise en compte de la langue dans les requetes sur bazar_nature
*
* Revision 1.94 2007-10-10 13:26:00 alexandre_tb
* utilisation de la classe Administrateur_bazar a la place de niveau_droit
*
* Revision 1.93 2007-10-01 11:59:51 alexandre_tb
* cosmetique d affichage de la date de l evenement
*
* Revision 1.92 2007-09-28 15:02:43 jp_milcent
* Suppression d'une div fermante jamais ouverte!
*
* Revision 1.91 2007-09-28 14:43:29 jp_milcent
* Correction bogue sur la gestion du mail des rédacteurs.
*
* Revision 1.90 2007-09-28 13:39:15 jp_milcent
* Ajout d'une constante permettant de configurer l'affichage ou pas du courriel du rédacteur d'une fiche.
*
* Revision 1.89 2007-09-18 07:38:43 alexandre_tb
* ajout de la constante BAZ_AFFICHER_FILTRE_MOTEUR pour enlever le choix du type de fiche dans le moteur de recherche.
*
* Revision 1.88 2007-08-27 12:32:14 alexandre_tb
* suppression de un notice
*
* Revision 1.87 2007-07-05 08:27:35 alexandre_tb
* dans le flux ajout utf8_encode pour la description et le titre des flux
*
* indentation du code, et correction bug lorsque plusieurs catégories nature étaient demandé lors de consultation de fiche.
*
* Revision 1.86 2007-07-04 10:02:42 alexandre_tb
* deplacement d une balise <ul> dans la liste des resultats pour conformite xhtml
*
* Revision 1.85 2007-06-25 12:15:06 alexandre_tb
* merge from narmer
*
* Revision 1.84 2007-06-25 09:56:55 alexandre_tb
* correction de bug
*
* Revision 1.83 2007-06-04 15:26:02 alexandre_tb
* remplacement d un die en return
*
* Revision 1.82 2007/04/20 12:47:42 florian
* correction bugs suite au merge
*
* Revision 1.81 2007/04/20 09:59:41 florian
* et un echo en moins!
*
* Revision 1.80 2007/04/20 09:57:21 florian
* correction bugs suite au merge
*
* Revision 1.79 2007/04/19 14:57:41 alexandre_tb
* merge
*
* Revision 1.77 2007/04/04 15:15:22 neiluj
* débug pour nom wiki
*
* Revision 1.76 2007/04/04 15:09:59 florian
* modif class fichiers
*
* Revision 1.75 2007/04/04 08:51:01 florian
* gestion des classes spécifiques pour habiller par CSS les fiches bazar
*
* Revision 1.74 2007/03/28 15:54:32 florian
* correction de bugs
*
* Revision 1.73 2007/03/28 10:01:47 florian
* ajout de la constante BAZ_UTILISE_TEMPLATE, pour utiliser ou non les templates pour l'affichage du moteur de recherche
*
* Revision 1.72 2007/03/28 08:51:22 neiluj
* passage des flux RSS en UTF-8
* ajout de l'indentation du code
* Vérification validation w3c = OK
*
* Revision 1.71 2007/03/19 15:17:37 alexandre_tb
* correction de la requete de recherche
*
* Revision 1.70 2007/03/08 15:12:13 jp_milcent
* Fusion avec la livraison Menes : 08 mars 2007
*
* Revision 1.60.2.11 2007/03/07 17:20:19 jp_milcent
* Ajout du nettoyage systématique des URLs.
*
* Revision 1.60.2.10 2007/03/06 09:41:15 alexandre_tb
* backport de corrections de bugs de la branche principale
*
* Revision 1.69 2007/03/06 09:39:00 alexandre_tb
* correction de bug sur les jointures et sur les flux rss
*
* Revision 1.68 2007/03/05 10:27:06 alexandre_tb
* ajout d identifiant dans les span qui affiche le detail d une fiche.
* ajout d un modele pour les fiches -> du code a ete deplace dans
* bazar_template
*
* Revision 1.67 2007/02/28 10:18:56 alexandre_tb
* backport de bug depuis la 1.60 de menes
*
* Revision 1.60.2.9 2007/02/27 15:32:40 alexandre_tb
* utilisation de la fonction xmlEntities pour transformer les &amp; en &#...;
* fixe les plantages des flux rss lorsque des guillemets ou des esperluettes étaient présents
*
* Revision 1.60.2.8 2007/02/27 15:11:00 alexandre_tb
* correction d une jointure dans la requete pour les flux rss
* utilisation de la librairie XML_Util de pear pour generer le flux RSS -> plus clair
*
* Revision 1.60.2.7 2007/02/15 17:39:00 jp_milcent
* Remise dans le code d'un bogue...
* A corriger!
*
* Revision 1.60.2.6 2007/02/15 13:42:16 jp_milcent
* Utilisation de IN à la place du = dans les requêtes traitant les catégories de fiches.
* Permet d'utiliser la syntaxe 1,2,3 dans la configuration de categorie_nature.
*
* Revision 1.64 2007/02/02 14:00:41 alexandre_tb
* mise en place d'un template pour l'affichage du moteur de recherche
*
* Revision 1.60.2.5 2007/02/02 13:46:54 alexandre_tb
* correction bug sur une date
*
* Revision 1.60.2.4 2007/01/30 15:45:01 alexandre_tb
* affichage de la date de création e la fiche lorsque la date de début de validité n'est plus bonne
*
* Revision 1.60.2.3 2007/01/29 10:53:46 alexandre_tb
* Mise en place de la constante BAZ_DERNIERES_FICHES pour remplacer le label en francais dans baz_liste
*
* Revision 1.63 2007/01/18 14:37:34 alexandre_tb
* backport
* les dates ne s'affichent pas si elles sont vides.
* les champs dates propose 4 années avant l'année actuelle
*
* Revision 1.60.2.2 2007/01/17 16:01:27 alexandre_tb
* les dates ne s'affichent pas si elles sont vides.
* les champs dates propose 4 années avant l'année actuelle
*
* Revision 1.60.2.1 2007/01/05 14:41:49 alexandre_tb
* backport ordre d affichage des dernieres news et suppression de la taille des images uploadees
*
* Revision 1.60 2006/10/05 08:53:50 florian
* amelioration moteur de recherche, correction de bugs
*
* Revision 1.59 2006/09/21 14:19:39 florian
* amélioration des fonctions liés au wikini
*
* Revision 1.58 2006/09/15 12:31:40 alexandre_tb
* correction du nom du flux RSS.
*
* Revision 1.57 2006/07/25 13:22:27 alexandre_tb
* réorganisation du code, sans grand changement
*
* Revision 1.56 2006/07/18 14:13:35 alexandre_tb
* Ajout d identifiant HTML
*
* Revision 1.55 2006/07/04 14:29:18 alexandre_tb
* Ajout du bouton supprimer pour les administrateurs
*
* Revision 1.54 2006/07/03 09:51:21 alexandre_tb
* correction du bug recherche sur fiches validés et invalidés.
*
* Revision 1.53 2006/06/29 10:29:51 florian
* correction bug moteur de recherche
*
* Revision 1.52 2006/06/02 09:29:07 florian
* debut d'integration de wikini
*
* Revision 1.51 2006/05/23 15:41:27 alexandre_tb
* ajout de la numérotation des pages en haut et en bas ds résultats et ajout d'une div class=bazar_numero pour les entourer
*
* Revision 1.50 2006/05/22 09:55:12 alexandre_tb
* ajout de la variable recherche_avancee dans l'action du formulaire
*
* Revision 1.49 2006/05/19 13:54:11 florian
* stabilisation du moteur de recherche, corrections bugs, lien recherche avancee
*
* Revision 1.48 2006/05/17 09:50:13 alexandre_tb
* Ajout du moteur de recherche évolué et du découpage par page
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/bazarTemplate.class.php
New file
0,0 → 1,87
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | General Public License for more details. |
// | |
// | You should have received a copy of the GNU General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
 
// CVS : $Id: bazarTemplate.class.php,v 1.7 2008-10-29 15:44:02 alexandre_tb Exp $
 
/**
* Application projet
*
* La classe d acces aux templates du bazar
*
*@package bazar
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
//Autres auteurs :
*@author Aucun
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.7 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php' ;
 
// +------------------------------------------------------------------------------------------------------+
// | CONSTANTE DES TEMPLATES |
// +------------------------------------------------------------------------------------------------------+
 
define ('BAZ_TEMPLATE_CONSULTER', 1); // Squelette de l onglet "consulter"
define ('BAZ_TEMPLATE_LISTE_DES_FICHES', 2); // Modele de la liste des fiches
 
define ('BAZ_TEMPLATE_MAIL_NOUVELLE_FICHE_SUJET', 3); // Modele du mail pour prevenir les admins d une nouvelle fiche (sujet)
define ('BAZ_TEMPLATE_MAIL_NOUVELLE_FICHE_CORPS', 4); // Modele du mail pour prevenir les admins d une nouvelle fiche (corps)
 
define ('BAZ_TEMPLATE_MESSAGE_LOGIN', 5); // Modele du message lorsque l utilisateur n est pas logue
 
define ('BAZ_TEMPLATE_ACCUEIL_CARTE_GOOGLE', 6); // Modele de la page d accueil de l appli bazar.carte_google.php
define ('BAZ_TEMPLATE_FORMULAIRE_ACCUEIL', 7); // Modele, de la page saisie formulaire ou l'on choisit le type de fiche a saisir
 
define ('BAZ_TEMPLATE_FORMULAIRE', 8); // Modele du formulaire (different de celui ci-dessus)
 
define ('BAZ_TEMPLATE_MAIL_MODIFIER_FICHE_SUJET', 9); // Modele du mail pour prevenir les admins d une modification de fiche (sujet)
define ('BAZ_TEMPLATE_MAIL_MODIFIER_FICHE_CORPS', 10); // Modele du mail pour prevenir les admins d une modification de fiche (corps)
 
class bazarTemplate extends PEAR {
 
 
var $_db ;
function bazarTemplate(&$objetDB) {
$this->_db = $objetDB ;
}
function getTemplate ($id_template, $lang='fr-FR', $categorie_nature = 'toutes') {
$requete = 'select bt_template from bazar_template where bt_id_template='.$id_template.
' and bt_id_i18n like "'.$lang.'%" ' ;
$resultat = $this->_db->query($requete) ;
if (DB::isError($resultat)) return $this->raiseError ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
if ($resultat->numRows() == 0) return $this->raiseError ('Aucun template avec l\'identifiant: '.$id_template.
' et la langue: '.$lang.'<br />'.$requete) ;
$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT) ;
 
return $ligne->bt_template ;
}
}
?>
/tags/v3.1-blanche-neige/bibliotheque/bazar.fonct.formulaire.controles.php
New file
0,0 → 1,51
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.fonct.formulaire.controles.php,v 1.1 2005-11-07 17:05:45 florian Exp $
/**
* Formulaire controles
*
* Les fonctions de controles de saisie des formulaires
*
*@package bazar
//Auteur original :
*@author Florian SCHMITT <florian@ecole-et-nature.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.1 $ $Date: 2005-11-07 17:05:45 $
// +------------------------------------------------------------------------------------------------------+
*/
 
//-------------------FONCTIONS DE MISE EN PAGE DES FORMULAIRES
 
/** liste_choisir() - Teste si une valeur à été choisie pour une liste
*
*
*/
function liste_choisir($element_name,$element_value) {
if ($element_value == 0) {
return false;
}
else {
return true;
}
}
 
?>
/tags/v3.1-blanche-neige/bibliotheque/bazar.fonct.google.php
New file
0,0 → 1,162
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.fonct.google.php,v 1.1 2007-06-04 15:24:00 alexandre_tb Exp $
/**
* Formulaire
*
* Les fonctions et script specifique a un carto google
*
*@package bazar
//Auteur original :
*@author Aleandre GRANIER <alexandre@tela-botanica.org>
*@copyright Tela-Botanica 2000-2007
*@version $Revision: 1.1 $
// +------------------------------------------------------------------------------------------------------+
*/
 
$script = '
// Variables globales
var map = null;
var geocoder = null;
var marker = null;
var flat = null;
var flon = null;
 
// cette fonction peut d�j� �tre pr�sente
// fonction portable pour ajout de listeners
function addListener(element, baseName, handler)
{
if (element.addEventListener) {
element.addEventListener(baseName, handler, false) ;
} else if (element.attachEvent) {
element.attachEvent(\'on\'+baseName, handler) ;
}
}
addListener(window,\'load\',loadMap) ;
function loadMap() {
flat = document.getElementById("latitude");
flon = document.getElementById("longitude");
 
var optionsGoogleMapsv3 = {
// On centre la carte sur le languedoc roussillon
center: new google.maps.LatLng(43.84245116699036, 3.768310546875),
zoom: 7,
mapTypeId: google.maps.MapTypeId.G_HYBRID_MAP,
mapTypeControl: true,
scaleControl: true
};
map = new google.maps.Map(document.getElementById("map"), optionsGoogleMapsv3);
 
google.maps.event.addListener(map, "click", function(event) {
if (marker != null) {
marker.setMap(null);
marker = null;
}
// On ajoute un marqueur a l endroit du clic et on place les coordonnees dans les champs latitude et longitude
marker = event.overlay;
marker = new google.maps.Marker({
position: event.latLng,
draggable: true,
map: map
});
google.maps.event.addListener(marker, "dragend", function () {
coordMarker = marker.getPosition() ;
flat.value = coordMarker.lat();
flon.value = coordMarker.lng();
});
setLatLonForm(marker);
});';
if ($formtemplate->getElementValue ('latitude') != '' && $formtemplate->getElementValue('longitude') != '') {
$script .= '
point = new google.maps.LatLng('.$formtemplate->getElementValue('latitude').', '.$formtemplate->getElementValue('longitude').');
marker = new google.maps.Marker({
position: point,
draggable: true,
map: map
});
google.maps.event.addListener(marker, "dragend", function () {
coordMarker = marker.getPosition() ;
flat.value = coordMarker.lat();
flon.value = coordMarker.lng();
});
map.setCenter(point);
' ;
}
$script .= 'geocoder = new google.maps.Geocoder();
};
function showAddress() {
var adresse = document.getElementById("bf_adresse").value;
var ville = "";
if (document.getElementById("bf_ville")) {
ville = document.getElementById("bf_ville").value ;
}
var cp = document.getElementById("bf_cp_lieu_evenement").value ;
var pays;
if (document.getElementById("liste30")) {
var selectIndex = document.getElementById("liste30").selectedIndex;
pays = document.getElementById("liste30").options[selectIndex].text ;
} else {
pays = document.getElementById("bf_pays").value;
}
var address = adresse + \' \' + \' \' + cp + \' \' + ville + \' \' +pays ;
if (geocoder) {
geocoder.geocode({
address: address
}, function(result, status) {
if (status != google.maps.GeocoderStatus.OK) {
alert(address + " not found");
} else {
marker.setMap(null);
marker = null;
//map.setCenter(point, 13);
map.fitBounds(result[0].geometry.viewport);
marker = new google.maps.Marker({
position: result[0].geometry.location,
draggable: true,
map: map
});
google.maps.event.addListener(marker, "dragend", function () {
coordMarker = marker.getPosition() ;
flat.value = coordMarker.lat();
flon.value = coordMarker.lng();
});
setLatLonForm(marker);
//marker.openInfoWindowHtml(address+ "'.BAZ_GOOGLE_MSG.'");
}
});
}
}
function setLatLonForm(marker) {
coordMarker = marker.getPosition() ;
flat.value = coordMarker.lat();
flon.value = coordMarker.lng();
}
';
 
 
 
/*
* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
/tags/v3.1-blanche-neige/bibliotheque/bazar.class.php
New file
0,0 → 1,479
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.class.php,v 1.10 2008-09-17 14:08:45 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Florian Schmitt <florian@ecole-et-nature.org>
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.10 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | LES CONSTANTES DES NIVEAUX DE DROIT |
// +------------------------------------------------------------------------------------------------------+
 
define ('BAZ_DROIT_SUPER_ADMINISTRATEUR', 0);
define ('BAZ_DROIT_ADMINISTRATEUR', 2);
define ('BAZ_DROIT_REDACTEUR', 1);
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php';
 
class Administrateur_bazar {
 
var $_auth ;
/**
* Identifiant de l'utilisateur
*/
var $_id_utilisateur ;
 
/**
* Vaut true si l'utilisateur est un administrateur
*/
var $_isSuperAdmin ;
/** Constructeur
*
* @param object Un objet authentification
* @return void
*
*/
function Administrateur_bazar (&$AUTH) {
$this->_auth = $AUTH ;
if ($AUTH->getAuth())$this->_id_utilisateur = $this->_auth->getAuthData(BAZ_CHAMPS_ID) ;
}
/** isSuperAdmin () - Renvoie true si l'utilisateur est un super administrateur
*
*/
function isSuperAdmin() {
if(empty($this->_id_utilisateur))
return FALSE;
// On court-circuite si la question a d�j� �t� pos� pour ne pas refaire la requete
if (isset ($this->_isSuperAdmin)) return $this->_isSuperAdmin ;
// On court-circuite si l'utilisateur n'est pas loggu�
if (!$this->_auth->getAuth()) return false ;
// Sinon on interroge la base
$requete = 'SELECT bd_niveau_droit FROM bazar_droits WHERE bd_id_utilisateur='.
$this->_id_utilisateur.
' AND bd_niveau_droit=0';
 
$resultat = $GLOBALS['_BAZAR_']['db']->query ($requete) ;
if (DB::isError($resultat)) {
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
}
if ($resultat->numRows() != 0) {
$this->_isSuperAdmin = true ;
} else {
$this->_isSuperAdmin = false ;
}
return $this->_isSuperAdmin;
}
/** isAdmin () - Renvoie true si l'utilisateur est administrateur du type de fiche sp�cifi�
*
* @param interger type_annonce Le type de l'annonce
*
*/
function isAdmin($id_nature) {
// on court-circuite si l'utilisateur n'est pas loggu�
if (!$this->_auth->getAuth()) return false ;
return $this->_requeteDroit ($id_nature, 2) ;
}
/** isRedacteur() - Renvoie true si l'utilisateur est redacteur du type de fiche specifie
*
*/
function isRedacteur($id_nature) {
if (isset($GLOBALS['droit_depot']) && $GLOBALS['droit_depot'] == 3) return true;
return $this->_requeteDroit ($id_nature, 1) ;
}
/** _requeteDroit() - fait une requete sur la table bazar_droit
*
*/
function _requeteDroit ($id_nature, $niveau) {
if(empty($this->_id_utilisateur))
return false;
$requete = 'SELECT bd_niveau_droit FROM bazar_droits WHERE bd_id_utilisateur='
.$this->_id_utilisateur.
' AND bd_id_nature_offre="'.$id_nature.'"and bd_niveau_droit='.$niveau;
$resultat = $GLOBALS['_BAZAR_']['db']->query ($requete) ;
if (DB::isError($resultat)) {
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
}
if ($resultat->numRows() != 0) {
return true ;
}
return false ;
}
}
 
class Utilisateur_bazar extends Administrateur_bazar {
function Utilisateur_bazar($id_utilisateur) {
$this->_id_utilisateur = $id_utilisateur ;
}
function isAdmin($id_nature) {
return $this->_requeteDroit ($id_nature, 2) ;
}
/** isSuperAdmin () - Renvoie true si l'utilisateur est un super administrateur
*
*/
function isSuperAdmin() {
if(empty($this->_id_utilisateur))
return false;
// On court-circuite si la question a d�j� �t� pos� pour ne pas refaire la requete
if (isset ($this->_isSuperAdmin)) return $this->_isSuperAdmin ;
// Sinon on interroge la base
$requete = 'SELECT bd_niveau_droit FROM bazar_droits WHERE bd_id_utilisateur='.
$this->_id_utilisateur.
' AND bd_niveau_droit=0';
 
$resultat = $GLOBALS['_BAZAR_']['db']->query ($requete) ;
if (DB::isError($resultat)) {
return ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
}
if ($resultat->numRows() != 0) {
$this->_isSuperAdmin = true ;
} else {
$this->_isSuperAdmin = false ;
}
return $this->_isSuperAdmin;
}
}
 
 
 
define ('BAZAR_NOTIFICATION_NOUVELLE_FICHE', 1);
define ('BAZAR_NOTIFICATION_MODIFICATION_FICHE', 2);
 
 
class bazar extends PEAR {
/**
* getMailAdmin Renvoie un tableau de mail des administrateurs du type
* de fiche passe en parametre
*
* @global DB Un objet DB de PEAR $GLOBALS['_BAZAR_']['db']
* @param integer L identifiant de la nature
*/
function getMailAdmin($id_nature) {
$requete = 'select '.BAZ_CHAMPS_EMAIL.' from '.BAZ_ANNUAIRE.', bazar_droits ' .
'where bd_id_nature_offre="'.$id_nature.'" and bd_niveau_droit="'.BAZ_DROIT_ADMINISTRATEUR.'"' .
' and '.BAZ_CHAMPS_ID.'= bd_id_utilisateur';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete);
if (DB::isError($resultat)) $this->raiseError();
$tableau_mail = array();
if ($resultat->numRows() == 0) return false;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
array_push ($tableau_mail, $ligne[BAZ_CHAMPS_EMAIL]) ;
}
return $tableau_mail;
}
/**
* getMailAdmin Renvoie un tableau de mail des super administrateurs
*
* @global DB Un objet DB de PEAR $GLOBALS['_BAZAR_']['db']
*/
function getMailSuperAdmin() {
$requete = 'select '.BAZ_CHAMPS_EMAIL.' from '.BAZ_ANNUAIRE.', bazar_droits ' .
'where bd_niveau_droit="'.BAZ_DROIT_SUPER_ADMINISTRATEUR.'"' .
' and '.BAZ_CHAMPS_ID.'= bd_id_utilisateur';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete);
if (DB::isError($resultat)) $this->raiseError();
$tableau_mail = array();
if ($resultat->numRows() == 0) return false;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
array_push ($tableau_mail, $ligne[BAZ_CHAMPS_EMAIL]) ;
}
return $tableau_mail;
}
/**
* notifier() envoie un message aux administrateurs
*
* par defaut lors du depot ou de la modification d une fiche
*/
function notifier($type = BAZAR_NOTIFICATION_NOUVELLE_FICHE) {
switch ($type) {
case BAZAR_NOTIFICATION_NOUVELLE_FICHE :
$id_sujet = BAZ_TEMPLATE_MAIL_NOUVELLE_FICHE_SUJET;
$id_corps = BAZ_TEMPLATE_MAIL_NOUVELLE_FICHE_CORPS;
break ;
case BAZAR_NOTIFICATION_MODIFICATION_FICHE :
$id_sujet = BAZ_TEMPLATE_MAIL_MODIFIER_FICHE_SUJET;
$id_corps = BAZ_TEMPLATE_MAIL_MODIFIER_FICHE_CORPS;
break;
}
$template = new bazarTemplate($GLOBALS['_BAZAR_']['db']);
 
$sujet = html_entity_decode($template->getTemplate($id_sujet, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['id_typeannonce']));
$corps = html_entity_decode($template->getTemplate($id_corps, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['id_typeannonce']));
$corps.= $GLOBALS['_BAZAR_']['id_fiche'].'&typeannonce='.$GLOBALS['_BAZAR_']['id_typeannonce'] ;
$mails = bazar::getMailSuperAdmin($GLOBALS['_BAZAR_']['id_typeannonce']);
if (is_array ($mails)) {
foreach ($mails as $mail) {
mail ($mail, $sujet, $corps);
}
}
}
/** Effectue une requete sur bazar_nature pour remplir diverses
* globales
*
* @global string la globale de langue (ex fr-FR)
* @global int $GLOBALS['_BAZAR_']['id_typeannonce']
*
* @return mixed true ou PEAR_Error
*/
function chargeNature() {
$requete = 'SELECT bn_label_nature, bn_condition, bn_template, bn_commentaire, bn_appropriation, bn_image_titre, bn_image_logo';
$requete .= ' FROM bazar_nature WHERE bn_id_nature = '.$GLOBALS['_BAZAR_']['id_typeannonce'];
if (isset($GLOBALS['_BAZAR_']['langue'])) {
$requete .= ' and bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%"';
}
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return $resultat->getMessage().$resultat->getDebugInfo() ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$GLOBALS['_BAZAR_']['typeannonce']=$ligne['bn_label_nature'];
$GLOBALS['_BAZAR_']['condition']=$ligne['bn_condition'];
$GLOBALS['_BAZAR_']['template']=$ligne['bn_template'];
$GLOBALS['_BAZAR_']['commentaire']=$ligne['bn_commentaire'];
$GLOBALS['_BAZAR_']['appropriation']=$ligne['bn_appropriation'];
$GLOBALS['_BAZAR_']['image_titre']=$ligne['bn_image_titre'];
$GLOBALS['_BAZAR_']['image_logo']=$ligne['bn_image_logo'];
return true;
}
/** Renvoie un element de formulaire de type select ou radio
* au vue de filtrer les resultats du bazar
* @global mixed $GLOBALS['_BAZAR_']['db'] identifiant de connexion a la bd
*
* @return string html
*/
function getFiltre($numero_liste, $multiple = false, $type = 'select') {
$type == 'select' ? $balise = 'select' : $balise = 'radio' ;
// chargement du template
$tableau_template = baz_valeurs_template($GLOBALS['_BAZAR_']['template']);
$html_filtre = '<select name="bazar_filtre_'.$numero_liste.'" onchange="javascript:this.form.submit();">'."\n";
// Requete dans bazar_liste_valeurs
$requete = 'select blv_valeur, blv_label from bazar_liste_valeurs where blv_ce_liste="'.$numero_liste.'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete);
if (DB::isError($resultat)) {
return $resultat->getMessage().$resultat->getDebugInfo() ;
}
$html_filtre .= '<option id="filtre_tous" value="*" ';
if (isset($_POST['bazar_filtre_'.$numero_liste]) && '*' == $_POST['bazar_filtre_'.$numero_liste]) {
$html_filtre .= 'selected="selected" ';
}
$html_filtre .= '>'.'Tous les événements'.'</option>';
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
$html_filtre .= '<option class="filtre_'.$ligne->blv_valeur.'" value="'.$ligne->blv_valeur.'"';
if (isset($_POST['bazar_filtre_'.$numero_liste]) && $ligne->blv_valeur == $_POST['bazar_filtre_'.$numero_liste]) {
$html_filtre .= 'selected="selected" ';
}
$html_filtre .= '>'.$ligne->blv_label.'</option>'."\n";
}
$html_filtre .= '</select>'."\n";
$resultat->free();
return $html_filtre;
}
function getFiltrePlageDeDate () {
if (isset ($_POST['date_debut'])) {
$defaut_debut = $_POST['date_debut'];
} else {
$defaut_debut = '';
}
if (isset ($_POST['date_fin'])) {
$defaut_fin = $_POST['date_fin'];
} else {
$defaut_fin = '';
}
 
$formulaire_filtre = 'du <input type="text" readonly size="10" name="date_debut" class="inputDate" id="date_debut" value="'.$defaut_debut.'" />';
$formulaire_filtre .= ' au <input type="text" readonly size="10" name="date_fin" class="inputDate" id="date_fin" value="'.$defaut_fin.'" />';
$formulaire_filtre .= "\n".'<script language="javascript" type="text/javascript">' ."\n".
'
if (typeof(addListener) != \'function\') {
// fonction portable pour ajout de listeners
function addListener(element, baseName, handler)
{
if (element.addEventListener) {
element.addEventListener(baseName, handler, false) ;
} else if (element.attachEvent) {
element.attachEvent(\'on\'+baseName, handler) ;
}
}
}
function verifDate()
{
if (document.getElementById("date_debut") != null && document.getElementById("date_fin") != null) {
this.form.submit() ;
}
}
var calDateFin = document.getElementById("date_fin") ;
addListener(calDateFin,\'change\',verifDate) ;
var calDateDeb = document.getElementById("date_debut") ;
addListener(calDateDeb,\'change\',verifDate) ;
$(document).ready(function() { $(\'#date_debut, #date_fin\').datepicker($.extend({}, $.datepicker.regional["fr-FR"],{
dateFormat:\'dd-mm-yy\',
buttonImage: "client/bazar/images/cal.png",
showOn: "both",
beforeShow: customRange,
buttonImageOnly: true'."\n".
'}));})' ."\n".
'function customRange(input) { return {minDate: (input.id == "date_fin" ? $("#date_debut").datepicker("getDate") : null),
maxDate: (input.id == "date_debut" ? $("#date_fin").datepicker("getDate") : null)};}' ."\n".
'</script>';
 
return $formulaire_filtre;
}
/** Renvoie le formulaire d un filtre
* utile dans la carte google ou dans le calendrier
*
* @param string le template avec des filtres ecrits comme {filtre liste="12"}
* @global mixed $GLOBALS['_BAZAR_']['url']
* @return string html
*/
function getFormulaireFiltre($template) {
if (preg_match_all ('/{filtre liste="([0-9]+)"}/', $template, $subpattern)) {
$formulaire_filtre = '<form action="'.$GLOBALS['_BAZAR_']['url']->getURL().'" method="post">'."\n";
$formulaire_filtre .= '<fieldset><legend>Filtrer : </legend>';
for ($i = 0; $i <count($subpattern[1]); $i++) {
$formulaire_filtre .= bazar::getFiltre($subpattern[1][$i]) ;
}
$formulaire_filtre .= bazar::getFiltrePlageDeDate();
$formulaire_filtre .= '<input type="submit" value="Filtrer" />';
$formulaire_filtre .= '</fieldset>';
$formulaire_filtre .= '</form>'."\n";
$html = preg_replace ('/{filtre liste="([0-9]+)"}/', $formulaire_filtre, $template);
}
return $html;
}
}
 
class Bazar_element {
function &factory($type, $options = false)
{
if (file_exists (BAZ_CHEMIN_APPLI."bibliotheque/elements/{$type}.php")) include_once BAZ_CHEMIN_APPLI."bibliotheque/elements/{$type}.php";
else return PEAR::raiseError("Impossible d inclure le fichier /{$type}.php", "Impossible d inclure le fichier ".
BAZ_CHEMIN_APPLI."bibliotheque/elements/{$type}.php<br />", null, null,
"Impossible d inclure le fichier /{$type}.php"
, 'PEAR_Error', true);;
$classname = "Bazar_{$type}";
 
if (!class_exists($classname)) {
$tmp = PEAR::raiseError(null, -2, null, null,
"la classe $classname n'existe pas"
, 'PEAR_Error', true);
return $tmp;
}
 
@$obj =& new $classname($options);
 
return $obj;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: bazar.class.php,v $
* Revision 1.10 2008-09-17 14:08:45 alexandre_tb
* merge depuis aha
*
* Revision 1.9 2007-10-10 13:27:06 alexandre_tb
* encodage et remplacement de die en return
*
* Revision 1.8 2007-10-01 10:35:14 alexandre_tb
* petit hack pour tester la presence de $GLOBALS['droit_depot'] qui indique le niveau de droit minimum pour pouvoir deposer une fiche.
*
* Revision 1.7 2007-07-04 09:59:09 alexandre_tb
* ajout de la classe bazar, premices d une structuration du code
*
* Revision 1.6 2007/04/20 09:58:06 neiluj
* correction bug $this->_id_utilisateur
*
* Revision 1.5 2007/04/11 08:30:12 neiluj
* remise en état du CVS...
*
* Revision 1.3.2.1 2007/03/07 16:49:21 jp_milcent
* Mise en majuscule de select
*
* Revision 1.3 2006/03/29 13:05:12 alexandre_tb
* ajout de la classe Administrateur_bazar
*
* Revision 1.2 2006/02/09 11:06:12 alexandre_tb
* changement dans les id des droit
* 0 => super administrateur
* 1 => redacteur
* 2 => administrateur
*
* Revision 1.1 2006/02/07 11:08:06 alexandre_tb
* version initiale
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/bazar.fonct.cal.php
New file
0,0 → 1,511
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.fonct.cal.php,v 1.29 2008-10-29 10:38:51 alexandre_tb Exp $
/**
*
* Fonctions calendrier du module bazar
*
* TODO : ajouter la gestion du multilinguisme
*
*@package bazar
//Auteur original :
*@author David Delon <david.delon@clapas.net>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.29 $ $Date: 2008-10-29 10:38:51 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
require_once PAP_CHEMIN_RACINE.'api/pear/Calendar/Month/Weekdays.php';
require_once PAP_CHEMIN_RACINE.'api/pear/Calendar/Day.php';
require_once PAP_CHEMIN_RACINE.'api/pear/Calendar/Decorator.php';
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
 
// Classe Utilitaire pour Calendrier
class DiaryEvent extends Calendar_Decorator {
var $entry = array();
function DiaryEvent($calendar)
{
Calendar_Decorator::Calendar_Decorator($calendar);
}
function setEntry($entry)
{
$this->entry[] = $entry;
}
function getEntry()
{
return $this->entry;
}
}
 
 
// $type : calendrier
// $type : calendrier_appplette
function GestionAffichageCalendrier($arguments = array(), $type = 'calendrier') {
$script = '';
// recuperation des arguments de l applette
$balise = isset ($arguments[0]) ? $arguments[0] : '';
$tab_arguments = $arguments;
if (is_string ($tab_arguments)) {
$tab_arguments = substr($tab_arguments, 1);
} else {
unset($tab_arguments[0]);
}
if (is_array($tab_arguments)) {
foreach($tab_arguments as $argument) {
if ($argument != '') {
$tab_parametres = explode('=', $argument, 2);
if (is_array($tab_parametres)) {
$options[$tab_parametres[0]] =
(isset($tab_parametres[1])? trim($tab_parametres[1], '"') : '') ;
}
}
}
}
if (!isset($options['template'])) {
$options['template'] = BAZ_CHEMIN_SQUELETTE.BAZ_SQUELETTE_DEFAUT;
} else {
if (file_exists(BAZ_CHEMIN_SQUELETTE.$options['template'])) {
$options['template'] = BAZ_CHEMIN_SQUELETTE.$options['template'];
}
}
$retour = '';
 
$url = $GLOBALS['_GEN_commun']['url'] ;
$db =& $GLOBALS['_GEN_commun']['pear_db'] ;
$auth =& $GLOBALS['_GEN_commun']['pear_auth'] ;
// Nettoyage de l'url de la query string
$chaine_url = $url->getQueryString();
$tab_params = explode('&amp;', $chaine_url);
if (count($tab_params) == 0) {
$tab_params = explode('&', $chaine_url);
}
foreach ($tab_params as $param) {
$tab_parametre = explode('=', $param);
// note d'Aurélien, si on nettoie l'URL on perd la vue en cours
//$url->removeQueryString($tab_parametre[0]);
}
if (!isset($_GET['y'])) {
$_GET['y'] = date('Y');
}
if (!isset($_GET['m'])) {
$_GET['m'] = date('m');
}
// Construction Mois en Cours
$month = new Calendar_Month_Weekdays($_GET['y'],$_GET['m']);
 
$curStamp = $month->getTimeStamp();
$url->addQueryString('y', date('Y',$curStamp));
$url->addQueryString('m', date('n',$curStamp));
$url->addQueryString('d', date('j',$curStamp));
$cur = $url->getUrl();
 
// Gestion de l'affichage du filtre des natures d'évènements
$cal_num_annonce = BAZ_NUM_ANNONCE_CALENDRIER;
$ficnat_id = null;
if (isset($_GET['ficnat']) && $_GET['ficnat'] != '*') {
$ficnat_id = $_GET['ficnat'];
$url->addQueryString('ficnat', $_GET['ficnat']);
$cal_num_annonce = $_GET['ficnat'];
}
 
// Gestion de l'affichage des titres des évènements
if (isset($_GET['ctt']) && $_GET['ctt'] == '1') {
$url->addQueryString('tt', '0');
if (isset($_GET['tt']) && $_GET['tt'] == '0') {
$url->addQueryString('tt', '1');
}
$tc_lien = $url->getUrl();
} else {
$url->addQueryString('tt', '0');
if (isset($_GET['tt']) && $_GET['tt'] == '0') {
$url->addQueryString('tt', '1');
}
$url->addQueryString('ctt', '1');
$tc_lien = $url->getUrl();
}
$url->removeQueryString('ctt');
$url->removeQueryString('tt');
$tc_txt = 'Afficher les titres complets des évènements';
if (isset($_GET['tt']) && $_GET['tt'] == '0') {
$tc_txt = 'Tronquer les titres des évènements';
$url->addQueryString('tt', $_GET['tt']);
}
 
// Gestion des champs cachés pour le formulaire de filtre
// Attention à la position dans le fichier...
$ficnat_chps_cache = $url->querystring;
unset($ficnat_chps_cache['ficnat']);
// Navigation
$prevStamp = $month->prevMonth(true);
$url->addQueryString('y', date('Y',$prevStamp));
$url->addQueryString('m', date('n',$prevStamp));
$url->addQueryString('d', date('j',$prevStamp));
$prev = $url->getUrl();
$nextStamp = $month->nextMonth(true);
$url->addQueryString('y', date('Y',$nextStamp));
$url->addQueryString('m', date('n',$nextStamp));
$url->addQueryString('d', date('j',$nextStamp));
$next = $url->getUrl();
// Suppression du paramêtre de troncage des titres
$url->removeQueryString('tt');
$fr_month = array( "1"=>BAZ_JANVIER,"2"=>BAZ_FEVRIER,"3"=>BAZ_MARS,"4"=>BAZ_AVRIL,"5"=>BAZ_MAI,"6"=>BAZ_JUIN,
"7"=>BAZ_JUILLET,"8"=>BAZ_AOUT,"9"=>BAZ_SEPTEMBRE,"10"=>BAZ_OCTOBRE,"11"=>BAZ_NOVEMBRE,"12"=>BAZ_DECEMBRE);
 
// Récupération des infos sur les natures des fiches pour le filtre
$requete_nature_fiche = 'SELECT DISTINCT bn_id_nature, bn_ce_i18n, bn_label_nature '.
'FROM bazar_nature '.
'WHERE bn_id_nature IN ('.BAZ_NUM_ANNONCE_CALENDRIER.') ';
$resultat_nature_fiche = $db->query($requete_nature_fiche);
(DB::isError($resultat_nature_fiche)) ? trigger_error(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_nature_fiche->getMessage(), $requete_nature_fiche), E_USER_WARNING) : '';
// Ajout du javascript et des styles du bazar
if (defined('PAP_VERSION')) { //si on est dans Papyrus
GEN_stockerStyleExterne( 'bazar_interne', 'client/bazar/bazar.interne.css');
GEN_stockerFichierScript('domLib', '/api/js/domtooltip/domLib.js');
GEN_stockerFichierScript('domTT', '/api/js/domtooltip/domTT.js');
// DomToolTip
$script = 'var domTT_styleClass = "niceTitle";'."\n";
$script .= 'function nicetitleDecorator(el) {'."\n";
$script .= ' var result = el.title;'."\n";
$script .= ' result = result.replace(new RegExp("\n", "g"), "<br />");'."\n";
$script .= ' //if (el.href) {'."\n";
$script .= ' //result += "<p>" + el.href + "<\/p>";'."\n";
$script .= ' //}'."\n";
$script .= ' return result;'."\n";
$script .= '}'."\n";
$script .= 'domTT_replaceTitles(nicetitleDecorator);'."\n";
GEN_stockerCodeScript('var domTT_styleClass = "niceTitle";'."\n");
}
// Titre
if ($type == 'calendrier') {
$retour .= '<div id="cal_entete">'."\n";
$retour .= '<span class="cal_navigation">'."\n";
$retour .= '<a id="cal_precedent_lien" href="'.$prev.'" title="Allez au mois précédent"><img id="cal_precedent_img" src="client/bazar/images/cal_precedent.png" alt="&lt;&lt;"/></a>'."\n";
$retour .= '&nbsp;&nbsp;'."\n";
$retour .= '<span id="cal_encadre_mois_courrant"><a id="cal_mois_courrant" href="'.$cur.'">';
$retour .= $fr_month[(date('n',$curStamp))];
$retour .= '&nbsp;';
$retour .= (date('Y',$curStamp));
$retour .= '</a></span>'."\n";
$retour .= '&nbsp;&nbsp;'."\n";
$retour .= '<a id="cal_suivant_lien" href="'.$next.'" title="Allez au mois suivant"><img id="cal_suivant_img" src="client/bazar/images/cal_suivant.png" alt="&gt;&gt;"/></a>'."\n";
$retour .= '</span>'."\n";
$retour .= '<h1 id="cal_titre"><img id="cal_titre_img" src="client/bazar/images/cal_titre.png" alt="Calendrier"/></h1>'."\n";
$retour .= '</div>'."\n";
$retour .= '<form action="'.$tc_lien.'" method="get">'."\n";
$retour .= '<a href="'.$tc_lien.'">'.$tc_txt.'</a>'."\n";
$retour .= '<fieldset>'."\n";
$retour .= '<legend>'.'Filtrer : '.'</legend>'."\n";
$retour .= '<select id="ficnat" name="ficnat" class="filtre_'.((!is_null($ficnat_id)) ? $ficnat_id: 'tous').'" onchange="javascript:this.form.submit();">'."\n";
$retour .= '<option id="filtre_tous" value="*" ';
if (isset($_GET['ficnat']) && '*' == $_GET['ficnat']) {
$retour .= 'selected="selected" ';
}
$retour .= '>'.'Tout afficher'.'</option>';
while ($ligne_nature_fiche = $resultat_nature_fiche->fetchRow(DB_FETCHMODE_OBJECT)) {
$opt = '<option class="filtre_'.$ligne_nature_fiche->bn_id_nature.'" value="'.$ligne_nature_fiche->bn_id_nature.'" ';
if (isset($_GET['ficnat']) && $ligne_nature_fiche->bn_id_nature == $_GET['ficnat']) {
$opt .= 'selected="selected" ';
}
$opt .= '>';
$retour .= $opt.$ligne_nature_fiche->bn_label_nature.'</option>'."\n";
}
$retour .= '</select>'."\n";
$retour .= '<input id="ficnat_ok" type="submit" value="'.'OK'.'" onload="javascript:this.setAttribute(\'style\', \'display:none;\')"/>'."\n";
$script_ok = 'if (document.getElementById(\'ficnat_ok\')) {'.
' document.getElementById(\'ficnat_ok\').style.display = \'none\';'.
'}';
$retour.= '<script type="text/javascript">//<![CDATA['."\n".$script_ok.'//]]></script>'."\n";
foreach ($ficnat_chps_cache as $cle => $val) {
$retour .= '<input id="'.$cle.'" name="'.$cle.'" type="hidden" value="'.$val.'" />'."\n";
}
$retour .= '</fieldset>'."\n";
$retour .= '</form>'."\n";
} else {
// Appel du template
ob_start();
include $options['template'];
$retour .= ob_get_contents();
ob_end_clean();
}
// Vue Mois calendrier ou vue applette
if ((!isset($_GET['id_fiche']) && $type == 'calendrier') || ($type == 'calendrier_applette')){
// trigger_error('ICI', E_USER_NOTICE);
// Recherche evenement de la periode selectionnée
$ts_jour_fin_mois = $month->nextMonth('timestamp');
$ts_jour_debut_mois = $month->thisMonth('timestamp');;
$requete_evenements = "SELECT DISTINCT bf_id_fiche, bf_titre, bf_lieu_evenement, ".
" DAY(bf_date_debut_evenement) AS bf_jour_debut_evenement, bf_date_debut_evenement, ".
" bf_date_fin_evenement, bf_description, bn_id_nature ".
"FROM bazar_fiche, bazar_nature ".
"WHERE bf_date_debut_evenement < '".date('Y-m-d', $ts_jour_fin_mois)."' ".
"AND bf_date_fin_evenement >= '".date('Y-m-d', $ts_jour_debut_mois)."' ".
"AND bf_ce_nature = bn_id_nature ".
"AND bn_id_nature IN (".$cal_num_annonce.") ".
"AND bf_statut_fiche = 1 ".
"ORDER BY bf_jour_debut_evenement";
$resultat_evenement = $db->query($requete_evenements);
(DB::isError($resultat_evenement)) ? trigger_error(BOG_afficherErreurSql(__FILE__, __LINE__, $resultat_evenement->getMessage(), $requete_evenements), E_USER_WARNING) : '';
 
$selection = array();
$evenements = array();
$annee = date('Y', $curStamp);
$mois = date('m', $curStamp);
$tablo_jours = array();
while ($ligne_evenements = $resultat_evenement->fetchRow(DB_FETCHMODE_OBJECT)) {
list($annee_debut, $mois_debut, $jour_debut) = explode('-', $ligne_evenements->bf_date_debut_evenement);
list($annee_fin, $mois_fin, $jour_fin) = explode('-', $ligne_evenements->bf_date_fin_evenement);
$Calendrier = new Calendar($annee_debut, $mois_debut, $jour_debut);
$ts_jour_suivant = $Calendrier->thisDay('timestamp');
$ts_jour_fin = mktime(0,0,0,$mois_fin, $jour_fin, $annee_fin);
$naviguer = true;
while ($naviguer && ($ts_jour_suivant <= $ts_jour_fin)) {
// Si le jours suivant est inferieur a la date de fin du mois courrant, on continue...
if ($ts_jour_suivant < $ts_jour_fin_mois) {
$cle_j = date('Y-m-d', $ts_jour_suivant);
if (!isset($tablo_jours[$cle_j])) {
$tablo_jours[$cle_j]['Calendar_Day'] = new Calendar_Day(date('Y', $ts_jour_suivant),date('m', $ts_jour_suivant), date('d', $ts_jour_suivant));
$tablo_jours[$cle_j]['Diary_Event'] = new DiaryEvent($tablo_jours[$cle_j]['Calendar_Day']);
}
$tablo_jours[$cle_j]['Diary_Event']->setEntry($ligne_evenements);
$ts_jour_suivant = $Calendrier->nextDay('timestamp');
//echo "ici$ts_jour_suivant-";
$Calendrier->setTimestamp($ts_jour_suivant);
//echo "la".$Calendrier->thisDay('timestamp')."-";
} else {
$naviguer = false;
}
}
}
// Add the decorator to the selection
foreach ($tablo_jours as $jour) {
$selection[] = $jour['Diary_Event'];
}
// Affichage Calendrier
$month->build($selection);
if ($type == 'calendrier') {
$retour.= '<table class="calendrier">'.
'<colgroup>'.
'<col class="cal_lundi"/>'.
'<col class="cal_mardi"/>'.
'<col class="cal_mercredi"/>'.
'<col class="cal_jeudi"/>'.
'<col class="cal_vendredi"/>'.
'<col class="cal_samedi"/>'.
'<col class="cal_dimanche"/>'.
'</colgroup>'.
'<thead>'.
"<tr>
<th> ". BAZ_LUNDI ."</th>
<th> ". BAZ_MARDI ."</th>
<th> ". BAZ_MERCREDI ."</th>
<th> ". BAZ_JEUDI ."</th>
<th> ". BAZ_VENDREDI ."</th>
<th> ". BAZ_SAMEDI ."</th>
<th> ". BAZ_DIMANCHE ."</th>
</tr>
".'</thead>'.'<tbody>';
} else {
$retour.= '<table class="calendrier_applette">'.
'<colgroup>'.
'<col class="cal_lundi"/>'.
'<col class="cal_mardi"/>'.
'<col class="cal_mercredi"/>'.
'<col class="cal_jeudi"/>'.
'<col class="cal_vendredi"/>'.
'<col class="cal_samedi"/>'.
'<col class="cal_dimanche"/>'.
'</colgroup>'.
'<thead>'.
"<tr>
<th> ". BAZ_LUNDI_COURT ."</th>
<th> ". BAZ_MARDI_COURT ."</th>
<th> ". BAZ_MERCREDI_COURT ."</th>
<th> ". BAZ_JEUDI_COURT ."</th>
<th> ". BAZ_VENDREDI_COURT ."</th>
<th> ". BAZ_SAMEDI_COURT ."</th>
<th> ". BAZ_DIMANCHE_COURT ."</th>
</tr>
".'</thead>'.'<tbody>';
}
$todayStamp=time();
$today_ymd=date('Ymd',$todayStamp);
 
// Other month : mois
while ($day = $month->fetch() ) {
$dayStamp = $day->thisDay(true);
$day_ymd = date('Ymd',$dayStamp);
if ( $day->isEmpty() ) {
$class = "cal_ma other_month";
} else {
if (($day_ymd < $today_ymd)) {
$class= "cal_mp previous_month";
} else {
if ($day_ymd == $today_ymd) {
$class= "cal_jc current_day";
} else {
$class="cal_mc current_month";
}
}
}
$url->addQueryString ('y', date('Y',$dayStamp));
$url->addQueryString ('m', date('n',$dayStamp));
$url->addQueryString ('d', date('j',$dayStamp));
$link = $url->getUrl();
// isFirst() to find start of week
if ($day->isFirst()) {
$retour.= ( "<tr>\n" );
}
if ($type == 'calendrier') {
$retour.= "<td class=\"".$class."\">".'<span class="cal_j">'.$day->thisDay().'</span>'."\n";
if ($day->isSelected() ) {
$evenements = $day->getEntry();
$evenements_nbre = count($evenements);
$evenemt_xhtml = '';
while ($ligne_evenement = array_pop($evenements)) {
 
$id_fiches = array();
$id_fiches[] = $ligne_evenement->bf_id_fiche;
$url->addQueryString ('id_fiches',$id_fiches);
 
$lien_voir = new Net_Url(BAZ_URL_BASE_APPLI);
$lien_voir->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_voir->addQueryString('id_fiche', $ligne_evenement->bf_id_fiche);
$lien_voir->addQueryString('typeannonce', $ligne_evenement->bn_id_nature);
$link=$lien_voir->getURL();
if (!isset($_GET['tt']) || (isset($_GET['tt']) && $_GET['tt'] == '1')) {
$titre_taille = strlen($ligne_evenement->bf_titre);
$titre = ($titre_taille > 20)?substr($ligne_evenement->bf_titre, 0, 20).'...':$ligne_evenement->bf_titre;
} else {
$titre = $ligne_evenement->bf_titre;
}
$evenemt_xhtml .= '<li class="tooltip nature_'.$ligne_evenement->bn_id_nature.'" title="'.str_replace('"', '\'', $ligne_evenement->bf_titre).'"><a class="cal_evenemt" href="'.$link.'">'.$titre.'</a></li>'."\n";
$url->removeQueryString ('id_fiches');
}
if ($evenements_nbre > 0) {
$retour .= '<ul class="cal_evenemt_liste">';
$retour .= $evenemt_xhtml;
$retour .= '</ul>';
}
}
} else {
$lien_date= "<td class=\"".$class."\">".$day->thisDay();
if ($day->isSelected() ) {
$evenements = $day->getEntry();
$id_fiches = array();
$info_fiches = null;
while ($ligne_evenement = array_pop($evenements)) {
$id_fiches[] = $ligne_evenement->bf_id_fiche;
$info_fiches .= '&rArr; '.str_replace('"', '\'', $ligne_evenement->bf_titre)."\n";
}
$url->addQueryString('id_fiches', $id_fiches);
$link = $url->getUrl();
$lien_date = '<td class="'.$class.'"><a href="'.$link.'" class="tooltip" title="'.$info_fiches.'">'.$day->thisDay()."</a>\n";
$url->removeQueryString('id_fiches');
}
$retour .= $lien_date;
}
$retour.= ( "</td>\n" );
// isLast() to find end of week
if ( $day->isLast() ) {
$retour.= ( "</tr>\n" );
}
}
$retour.= "</tbody></table>";
}
$retour.= '<script type="text/javascript">//<![CDATA['."\n".$script.'//]]></script>'."\n";
// Vue detail
if ((isset($_GET['id_fiches']))) {
// Ajout d'un titre pour la page avec la date
$jours = array ('dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi') ;
$mois = array ('janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre',
'octobre', 'novembre', 'décembre') ;
$timestamp = strtotime ($_GET['y'].'/'.$_GET['m'].'/'.$_GET['d']) ;
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_NAVIGATION'] = '';
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_TETE'] = '';
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_CORPS'] = '<h1>'.$jours[date('w', $timestamp)].
' '.$_GET['d'].' '.$mois[$_GET['m']-1].' '.$_GET['y'].'</h1>' ;
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_CORPS'] .= baz_voir_fiches(1,$_GET['id_fiches'] );
 
$GLOBALS['_GEN_commun']['info_menu'] = '';
// Un lien pour retourner au calendrier
$url->removeQueryString('id_fiches');
$url->removeQueryString('y');
$url->removeQueryString('m');
$url->removeQueryString('d');
$GLOBALS['_PAPYRUS_']['rendu']['CONTENU_PIED'] = '<div class="retour"><a href="'.$url->getURL().'">Retour au calendrier</a></div>';
}
 
// Nettoyage de l'url
$url->removeQueryString('id_fiches');
$url->removeQueryString('y');
$url->removeQueryString('m');
$url->removeQueryString('d');
return $retour;
}
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/labelhtml.php
New file
0,0 → 1,68
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: labelhtml.php,v 1.2 2008-09-17 14:18:12 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_labelhtml extends PEAR {
var $option = array();
function Bazar_labelhtml($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
// On ecrit le label uniquement si le champs obligatoire est a 1
if ($this->options['obligatoire'] == 1) $res .= '<div class="BAZ_label BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'.
$this->options['label'].'</div>'."\n";
 
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: labelhtml.php,v $
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/checkbox.php
New file
0,0 → 1,85
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: checkbox.php,v 1.2 2008-09-17 14:18:12 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_checkbox extends PEAR {
var $option = array();
function Bazar_checkbox($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
//pour les champs renseignes par une liste, on va chercher le label de la liste, plutot que l'id
$requete = 'SELECT blv_label FROM bazar_fiche_valeur_liste, bazar_liste_valeurs WHERE bfvl_ce_fiche='.
$GLOBALS['_BAZAR_']['id_fiche'].' AND bfvl_ce_liste='.$this->options['nom_bdd'].
' AND bfvl_valeur=blv_valeur AND blv_ce_liste='.$this->options['nom_bdd'].
' AND blv_ce_i18n="'.$GLOBALS['_BAZAR_']['langue'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError ($resultat)) {
return ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
$val='';$nb=0;
while ($tab = $resultat->fetchRow()) {
if ($nb>0) $val .= ', ';
$val .= $tab[0];
$nb++;
}
if ($val != '' and $val != BAZ_CHOISIR and $val != BAZ_NON_PRECISE) {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'.
"\n".'<span class="BAZ_label" id="rubrique_'.$this->options['nom_bdd'].'">'.$this->options['label'].' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="description_'.$this->options['nom_bdd'].
'"> '.$val.'</span>'."\n".'</div>'."\n";
}
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: checkbox.php,v $
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/boutonsradio.php
New file
0,0 → 1,69
<?php
/**
* PHP Version 5
*
* @category PHP
* @package bazar_bp
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2009 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/bazar_bp/
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_radio extends PEAR {
var $option = array();
function Bazar_radio($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
//pour les champs renseignes par une liste, on va chercher le label de la liste, plutot que l'id
$requete = 'SELECT blv_label FROM bazar_fiche_valeur_liste, bazar_liste_valeurs WHERE bfvl_ce_fiche='.
$GLOBALS['_BAZAR_']['id_fiche'].' AND bfvl_ce_liste='.$this->options['nom_bdd'].
' AND bfvl_valeur=blv_valeur AND blv_ce_liste='.$this->options['nom_bdd'].
' AND blv_ce_i18n="'.$GLOBALS['_BAZAR_']['langue'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError ($resultat)) {
return ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
$val='';$nb=0;
while ($tab = $resultat->fetchRow()) {
if ($nb>0) $val .= ', ';
$val .= $tab[0];
$nb++;
}
if ($val != '' and $val != BAZ_CHOISIR and $val != BAZ_NON_PRECISE) {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'.
"\n".'<span class="BAZ_label" id="rubrique_'.$this->options['nom_bdd'].'">'.$this->options['label'].' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="description_'.$this->options['nom_bdd'].
'"> '.$val.'</span>'."\n".'</div>'."\n";
}
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
 
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/listedatedeb.php
New file
0,0 → 1,102
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: listedatedeb.php,v 1.2 2008-09-17 14:18:12 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_listedatedeb extends PEAR {
var $option = array();
function Bazar_listedatedeb($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
 
if (!in_array($val, array ('bf_date_debut_validite_fiche', 'bf_date_fin_validite_fiche'))) {
if ($valeur != '' && $valeur != '0000-00-00') {
// Petit test pour afficher la date de debut et de fin d evenement
if ($val == 'bf_date_debut_evenement' || $val == 'bf_date_fin_evenement') {
if ($GLOBALS['_BAZAR_']['ligne_resultat']['bf_date_debut_evenement'] == $GLOBALS['_BAZAR_']['ligne_resultat']['bf_date_fin_evenement']) {
if ($val == 'bf_date_debut_evenement') return;
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.BAZ_LE.' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.$this->options['nom_bdd'].
'_description"> '.strftime('%d.%m.%Y',strtotime($GLOBALS['_BAZAR_']['ligne_resultat']['bf_date_debut_evenement'])).'</span>'.
"\n".'</div>'."\n";
continue;
} else {
if ($val == 'bf_date_debut_evenement') {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">';
$html .= BAZ_DU;
$html .= '</span>'."\n".'<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.
$this->options['nom_bdd'].'_description"> '.strftime('%d.%m.%Y',strtotime($valeur)).'</span>'."\n";
} else {
$html .= '<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.BAZ_AU;
$html .= '</span>'."\n".'<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.
$this->options['nom_bdd'].'_description"> '.strftime('%d.%m.%Y',strtotime($valeur)).
'</span>'."\n".'</div>'."\n";
}
return $html;
}
}
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.$this->options['label'].' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.$this->options['nom_bdd'].
'_description"> '.strftime('%d.%m.%Y',strtotime($valeur)).'</span>'."\n".'</div>'."\n";
}
}
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: listedatedeb.php,v $
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/texte.php
New file
0,0 → 1,83
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: texte.php,v 1.3 2008-10-29 10:36:44 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.3 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_texte extends PEAR {
var $option = array();
function Bazar_texte($options) {
$this->options = $options;
}
function toHTML($valeur) {
if ($valeur == '') return ;
$html = '';
$val = $this->options['nom_bdd'];
//if (!in_array($val, array ('bf_titre', 'bf_description'))) {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.$this->options['label'].' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.$this->options['nom_bdd'].'_description"> '.
nl2br($valeur).'</span>'."\n".'</div>'."\n";
//}
return $html;
}
function toForm($valeur_defaut = '') {
if ($valeur_defaut != '') $this->option['defaut'] = $valeur_defaut;
 
$html = $this->options['label'].'<input type="text" size="'.$this->option['limite1'].
'" maxlength="'.$this->option['limite2'].'" id="'.$this->option['nom_bdd'].
'" value="'.$this->option['defaut'].'" />';
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: texte.php,v $
* Revision 1.3 2008-10-29 10:36:44 alexandre_tb
* l'element texte s affiche meme pour le titre et la description
*
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/textelong.php
New file
0,0 → 1,73
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: textelong.php,v 1.3 2008-10-29 10:35:40 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.3 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_textelong extends PEAR {
var $option = array();
function Bazar_textelong($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
//if (!in_array($val, array ('bf_titre', 'bf_description'))) {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.$this->options['label'].' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.$this->options['nom_bdd'].'_description"> '.
nl2br($valeur).'</span>'."\n".'</div>'."\n";
//}
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: textelong.php,v $
* Revision 1.3 2008-10-29 10:35:40 alexandre_tb
* l'element textlong s affiche meme pour le titre et la description
*
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/carte_google.php
New file
0,0 → 1,104
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: carte_google.php,v 1.1.2.1 2008-04-16 12:35:25 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.1.2.1 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_carte_google extends PEAR {
var $option = array();
function Bazar_carte_google($options) {
unset ($options['nom_bdd']); // fout la merde avec google maps v2
$this->options = $options;
}
function toHTML($valeur) {
if ($GLOBALS['pas_de_carte']) return;
$html = '';
$val = $this->options['nom_bdd'];
$script = '
// Variables globales
// cette fonction peut déjà être présente
if (typeof(addListener) != \'function\') {
// fonction portable pour ajout de listeners
function addListener(element, baseName, handler)
{
if (element.addEventListener) {
element.addEventListener(baseName, handler, false) ;
} else if (element.attachEvent) {
element.attachEvent(\'on\'+baseName, handler) ;
}
}
}
var map = null;
addListener(window,\'load\',loadMap) ;
var geocoder = null;
var lat = document.getElementById("latitude");
var lon = document.getElementById("longitude");
function loadMap() {
var point = new google.maps.LatLng('.$GLOBALS['_BAZAR_']['ligne_resultat']['bf_latitude'].', '.$GLOBALS['_BAZAR_']['ligne_resultat']['bf_longitude'].');
var optionsGoogleMapsv3 = {
// On centre la carte sur le languedoc roussillon
center: point,
zoom: 7,
mapTypeId: google.maps.MapTypeId.G_HYBRID_MAP,
mapTypeControl: true,
scaleControl: true
};
map = new google.maps.Map(document.getElementById("map"), optionsGoogleMapsv3);
 
marker = new google.maps.Marker({
position: point,
map: map
});
};' ;
GEN_stockerCodeScript($script);
//GEN_stockerFichierScript('googleMapScript', $this->options['nom_bdd']);
GEN_stockerFichierScript('googleMapScript', "http://maps.googleapis.com/maps/api/js?sensor=false&key=".BAZ_GOOGLE_KEY);
// On ajoute l attribut load a la balise body
//GEN_AttributsBody('onload', 'load()');
$html = '<div id="map" style="width: 400px; height: 300px"></div>';
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/listedatefin.php
New file
0,0 → 1,102
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: listedatefin.php,v 1.2 2008-09-17 14:18:12 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_listedatefin extends PEAR {
var $option = array();
function Bazar_listedatefin($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
 
if (!in_array($val, array ('bf_date_debut_validite_fiche', 'bf_date_fin_validite_fiche'))) {
if ($valeur != '' && $valeur != '0000-00-00') {
// Petit test pour afficher la date de debut et de fin d evenement
if ($val == 'bf_date_debut_evenement' || $val == 'bf_date_fin_evenement') {
if ($GLOBALS['_BAZAR_']['ligne_resultat']['bf_date_debut_evenement'] == $GLOBALS['_BAZAR_']['ligne_resultat']['bf_date_fin_evenement']) {
if ($val == 'bf_date_debut_evenement') continue;
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.BAZ_LE.' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.$this->options['nom_bdd'].
'_description"> '.strftime('%d.%m.%Y',strtotime($GLOBALS['_BAZAR_']['ligne_resultat']['bf_date_debut_evenement'])).'</span>'.
"\n".'</div>'."\n";
return $html;
} else {
if ($val == 'bf_date_debut_evenement') {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">';
$html .= BAZ_DU;
$html .= '</span>'."\n".'<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.
$this->options['nom_bdd'].'_description"> '.strftime('%d.%m.%Y',strtotime($valeur)).'</span>'."\n";
} else {
$html .= '<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.BAZ_AU;
$html .= '</span>'."\n".'<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.
$this->options['nom_bdd'].'_description"> '.strftime('%d.%m.%Y',strtotime($valeur)).
'</span>'."\n".'</div>'."\n";
}
return $html;
}
}
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.$this->options['label'].' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.$this->options['nom_bdd'].
'_description"> '.strftime('%d.%m.%Y',strtotime($valeur)).'</span>'."\n".'</div>'."\n";
}
}
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: listedatefin.php,v $
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/champs_mail.php
New file
0,0 → 1,71
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: champs_mail.php,v 1.2 2008-09-17 14:18:12 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_champs_mail extends PEAR {
var $option = array();
function Bazar_champs_mail($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
if (!in_array($val, array ('bf_titre', 'bf_description'))) {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'."\n".
'<span class="BAZ_label" id="'.$this->options['nom_bdd'].'_rubrique">'.$this->options['label'].' :</span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="'.$this->options['nom_bdd'].'_description"> '.
'<a href="mailto:'.$valeur.'">'.
nl2br($valeur).'</a></span>'."\n".'</div>'."\n";
}
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: champs_mail.php,v $
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/elements/liste.php
New file
0,0 → 1,85
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: liste.php,v 1.2 2008-09-17 14:18:12 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2008
*@version $Revision: 1.2 $
// +------------------------------------------------------------------------------------------------------+
*/
 
include_once PAP_CHEMIN_API_PEAR.'PEAR.php';
 
 
class Bazar_liste extends PEAR {
var $option = array();
function Bazar_liste($options) {
$this->options = $options;
}
function toHTML($valeur) {
$html = '';
$val = $this->options['nom_bdd'];
//pour les champs renseignes par une liste, on va chercher le label de la liste, plutot que l'id
$requete = 'SELECT blv_label FROM bazar_fiche_valeur_liste, bazar_liste_valeurs WHERE bfvl_ce_fiche='.
$GLOBALS['_BAZAR_']['id_fiche'].' AND bfvl_ce_liste='.$this->options['nom_bdd'].
' AND bfvl_valeur=blv_valeur AND blv_ce_liste='.$this->options['nom_bdd'].
' AND blv_ce_i18n="'.$GLOBALS['_BAZAR_']['langue'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError ($resultat)) {
return ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
$val='';$nb=0;
while ($tab = $resultat->fetchRow()) {
if ($nb>0) $val .= ', ';
$val .= $tab[0];
$nb++;
}
if ($val != '' and $val != BAZ_CHOISIR and $val != BAZ_NON_PRECISE) {
$html .= '<div class="BAZ_rubrique BAZ_rubrique_'.$GLOBALS['_BAZAR_']['class'].'">'.
"\n".'<span class="BAZ_label" id="rubrique_'.$this->options['nom_bdd'].'">'.$this->options['label'].' : </span>'."\n";
$html .= '<span class="BAZ_texte BAZ_texte_'.$GLOBALS['_BAZAR_']['class'].'" id="description_'.$this->options['nom_bdd'].
'"> '.$val.'</span>'."\n".'</div>'."\n";
}
return $html;
}
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: liste.php,v $
* Revision 1.2 2008-09-17 14:18:12 alexandre_tb
* fusion avec aha
*
* Revision 1.1.2.1 2008-04-16 12:35:25 alexandre_tb
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/bibliotheque/bazar.fonct.php
New file
0,0 → 1,1838
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.fonct.php,v 1.74.2.13 2008-08-27 13:21:40 alexandre_tb Exp $
/**
*
* Fonctions du module bazar
*
*
*@package bazar
//Auteur original :
*@author Alexandre Granier <alexandre@tela-botanica.org>
*@author Florian Schmitt <florian@ecole-et-nature.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.74.2.13 $ $Date: 2008-08-27 13:21:40 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm.php' ;
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/checkbox.php' ;
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/textarea.php' ;
require_once PAP_CHEMIN_API_PEAR.'HTML/Table.php' ;
require_once GEN_CHEMIN_API.'formulaire/formulaire.fonct.inc.php';
require_once 'bazar.fonct.rss.php';
 
 
/** fiches_a_valider () - Renvoie les annonces restant a valider par un administrateur
*
* @return string HTML
*/
function fiches_a_valider() {
 
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
// sortie anticipée en cas d'accès non autorisé
// ceci limite l'accès au supers admins
// TODO: voir si l'on ne pourrait afficher que les fiches
// des catégories dont la personne est admin
// des catégories dont la personne est admin, ce qui permettrait un accès plus fin
if(!$utilisateur->isSuperAdmin()) {
return;
}
 
// Pour les administrateurs d'une rubrique, on affiche les fiches a valider de cette rubrique
// On effectue une requete sur le bazar pour voir les fiches a administrer
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_ADMIN);
$res= '<h2>'.BAZ_ANNONCES_A_ADMINISTRER.'</h2><br />'."\n";
$requete = 'SELECT * FROM bazar_fiche, bazar_nature WHERE bf_statut_fiche=0 AND ' .
'bn_id_nature=bf_ce_nature ' ;
if (isset($GLOBALS['_BAZAR_']['langue'])) {
$requete .= ' and bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%" ';
}
$requete .= 'ORDER BY bf_date_maj_fiche DESC' ;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
if ($resultat->numRows() != 0) {
$tableAttr = array('id' => 'table_bazar') ;
$table = new HTML_Table($tableAttr) ;
$entete = array (BAZ_TITREANNONCE ,BAZ_ANNONCEUR, BAZ_TYPEANNONCE, BAZ_PUBLIER, BAZ_SUPPRIMER, BAZ_DATE_DEBUT_EVENEMENT) ;
$table->addRow($entete) ;
$table->setRowType (0, 'th') ;
// On affiche une ligne par proposition
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_ASSOC)) {
//Requete pour trouver le nom et prenom de l'annonceur
$requetenomprenom = 'SELECT '.BAZ_CHAMPS_PRENOM.', '.BAZ_CHAMPS_NOM.' FROM '.BAZ_ANNUAIRE.
' WHERE '.BAZ_CHAMPS_ID.'='.$ligne['bf_ce_utilisateur'] ;
$resultatnomprenom = $GLOBALS['_BAZAR_']['db']->query ($requetenomprenom) ;
if (DB::isError($resultatnomprenom)) {
echo ("Echec de la requete<br />".$resultatnomprenom->getMessage()."<br />".$resultatnomprenom->getDebugInfo()) ;
}
while ($lignenomprenom = $resultatnomprenom->fetchRow (DB_FETCHMODE_ASSOC)) {
$annonceur=$lignenomprenom[BAZ_CHAMPS_PRENOM]." ".$lignenomprenom[BAZ_CHAMPS_NOM];
}
$lien_voir=$GLOBALS['_BAZAR_']['url'];
$lien_voir->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_voir->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$lien_voir->addQueryString('typeannonce', $ligne['bn_id_nature']);
// Nettoyage de l'url
// NOTE (jpm - 23 mai 2007): pour être compatible avec PHP5 il faut utiliser tjrs $GLOBALS['_BAZAR_']['url'] car en php4 on
// copie bien une variable mais pas en php5, cela reste une référence...
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
$GLOBALS['_BAZAR_']['url']->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$GLOBALS['_BAZAR_']['url']->addQueryString('typeannonce', $ligne['bn_id_nature']);
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_voir = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
 
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_PUBLIER);
$lien_publie_oui = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_PAS_PUBLIER);
$lien_publie_non = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_SUPPRESSION);
$lien_supprimer = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
$table->addRow (array(
'<a href="'.$lien_voir.'">'.$ligne['bf_titre'].'</a>'."\n", // col 1 : le nom
$annonceur."\n", // col 2 : annonceur
$ligne['bn_label_nature']."\n", // col 3 : type annonce
"<a href=\"".$lien_publie_oui."\">".BAZ_OUI."</a> / \n".
"<a href=\"".$lien_publie_non."\">".BAZ_NON."</a>", // col 4 : publier ou pas
"<a href=\"".$lien_supprimer."\"".
" onclick=\"javascript:return confirm('".BAZ_CONFIRMATION_SUPPRESSION."');\">".BAZ_SUPPRIMER."</a>\n", // col 5 : supprimer
date('d', strtotime($ligne['bf_date_debut_evenement'])).' '.$GLOBALS['mois'][date('n', strtotime ($ligne['bf_date_debut_evenement']))].' '.date('Y', strtotime ($ligne['bf_date_debut_evenement'])) // col 6 date début d'évenement
)) ;
}
$table->altRowAttributes(1, array("class" => "ligne_impaire"), array("class" => "ligne_paire"));
$table->updateColAttributes(1, array("align" => "center"));
$table->updateColAttributes(2, array("align" => "center"));
$table->updateColAttributes(3, array("align" => "center"));
$table->updateColAttributes(4, array("align" => "center"));
$table->updateColAttributes(5, array("align" => "center"));
$res .= $table->toHTML() ;
}
else {
$res .= '<p class="zone_info">'.BAZ_PAS_DE_FICHE_A_VALIDER.'</p>'."\n" ;
}
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_TOUTES_ANNONCES);
// Nettoyage de l'url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
// Les autres fiches, deja validees
$res .= '<h2>'.BAZ_TOUTES_LES_FICHES.'</h2>'."\n";
$requete = 'SELECT * FROM bazar_fiche, bazar_nature WHERE bf_statut_fiche=1 AND ' .
'bn_id_nature=bf_ce_nature AND bn_ce_id_menu IN ('.$GLOBALS['_BAZAR_']['categorie_nature'].') ';
if (isset($GLOBALS['_BAZAR_']['langue'])) {
$requete .= ' and bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%" ';
}
$requete .= 'ORDER BY bf_date_maj_fiche DESC' ;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
if ($resultat->numRows() != 0) {
$tableAttr = array('id' => 'table_bazar') ;
$table = new HTML_Table($tableAttr) ;
$entete = array (BAZ_TITREANNONCE ,BAZ_ANNONCEUR, BAZ_TYPEANNONCE, BAZ_PUBLIER, BAZ_SUPPRIMER, BAZ_DATE_DEBUT_EVENEMENT, BAZ_DATE_CREATION) ;
$table->addRow($entete) ;
$table->setRowType (0, 'th') ;
// On affiche une ligne par proposition
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_ASSOC)) {
//Requete pour trouver le nom et prenom de l'annonceur
$requetenomprenom = 'SELECT '.BAZ_CHAMPS_PRENOM.', '.BAZ_CHAMPS_NOM.' FROM '.BAZ_ANNUAIRE.
' WHERE '.BAZ_CHAMPS_ID.'='.$ligne['bf_ce_utilisateur'] ;
$resultatnomprenom = $GLOBALS['_BAZAR_']['db']->query ($requetenomprenom) ;
if (DB::isError($resultatnomprenom)) {
echo ("Echec de la requete<br />".$resultatnomprenom->getMessage()."<br />".$resultatnomprenom->getDebugInfo()) ;
}
while ($lignenomprenom = $resultatnomprenom->fetchRow (DB_FETCHMODE_ASSOC)) {
$annonceur=$lignenomprenom[BAZ_CHAMPS_PRENOM]." ".$lignenomprenom[BAZ_CHAMPS_NOM];
}
$lien_voir=$GLOBALS['_BAZAR_']['url'];
$lien_voir->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_voir->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$lien_voir->addQueryString('typeannonce', $ligne['bn_id_nature']);
// Nettoyage de l'url
// NOTE (jpm - 23 mai 2007): pour être compatible avec PHP5 il faut utiliser tjrs $GLOBALS['_BAZAR_']['url'] car en php4 on
// copie bien une variable mais pas en php5, cela reste une référence...
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
$GLOBALS['_BAZAR_']['url']->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$GLOBALS['_BAZAR_']['url']->addQueryString('typeannonce', $ligne['bn_id_nature']);
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_voir = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
 
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_PUBLIER);
$lien_publie_oui = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_PAS_PUBLIER);
$lien_publie_non = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_SUPPRESSION);
$lien_supprimer = $GLOBALS['_BAZAR_']['url']->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
$table->addRow (array(
'<a href="'.$lien_voir.'">'.$ligne['bf_titre'].'</a>'."\n", // col 1 : le nom
$annonceur."\n", // col 2 : annonceur
$ligne['bn_label_nature']."\n", // col 3 : type annonce
"<a href=\"".$lien_publie_oui."\">".BAZ_OUI."</a> / \n".
"<a href=\"".$lien_publie_non."\">".BAZ_NON."</a>", // col 4 : publier ou pas
"<a href=\"".$lien_supprimer."\"".
" onclick=\"javascript:return confirm('".BAZ_CONFIRMATION_SUPPRESSION."');\">".BAZ_SUPPRIMER."</a>\n", // col 5 : supprimer
date('d', strtotime($ligne['bf_date_debut_evenement'])).' '.$GLOBALS['mois'][date('n', strtotime ($ligne['bf_date_debut_evenement']))].' '.date('Y', strtotime ($ligne['bf_date_debut_evenement'])), // col 6 date début d'évenement
date('d', strtotime($ligne['bf_date_creation_fiche'])).' '.$GLOBALS['mois'][date('n', strtotime ($ligne['bf_date_creation_fiche']))].' '.date('Y', strtotime ($ligne['bf_date_creation_fiche'])) // col 7 date de création
)) ;
}
$table->altRowAttributes(1, array("class" => "ligne_impaire"), array("class" => "ligne_paire"));
$table->updateColAttributes(1, array("align" => "center"));
$table->updateColAttributes(2, array("align" => "center"));
$table->updateColAttributes(3, array("align" => "center"));
$table->updateColAttributes(4, array("align" => "center"));
$res .= $table->toHTML() ;
}
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_VOIR);
return $res;
}
 
 
/** mes_fiches () - Renvoie les fiches bazar d'un utilisateur
*
* @return string HTML
*/
function mes_fiches() {
$res= '<h2>'.BAZ_VOS_ANNONCES.'</h2><br />'."\n";
if ($GLOBALS['AUTH']->getAuth()) {
// requete pour voir si l'utilisateur a des fiches a son nom, classees par date de MAJ et nature d'annonce
$requete = 'SELECT * FROM bazar_fiche, bazar_nature WHERE bf_ce_utilisateur='. $GLOBALS['id_user'].
' AND bn_id_nature=bf_ce_nature ';
if (isset($GLOBALS['_BAZAR_']['langue'])) $requete .= ' and bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%" ';
$requete .= ' ORDER BY bf_date_maj_fiche DESC,bf_ce_nature ASC';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
if ($resultat->numRows() != 0) {
$tableAttr = array('id' => 'table_bazar') ;
$table = new HTML_Table($tableAttr) ;
$entete = array (BAZ_TITREANNONCE , BAZ_TYPEANNONCE, BAZ_ETATPUBLICATION, BAZ_MODIFIER, BAZ_SUPPRIMER, 'Dupliquer') ;
$table->addRow($entete) ;
$table->setRowType (0, "th") ;
// On affiche une ligne par proposition
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_ASSOC)) {
if ($ligne['bf_statut_fiche']==1) $publiee=BAZ_PUBLIEE;
elseif ($ligne['bf_statut_fiche']==0) $publiee=BAZ_ENCOURSDEVALIDATION;
else $publiee=BAZ_REJETEE;
$lien_voir = $GLOBALS['_BAZAR_']['url'];
$lien_voir->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_voir->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$lien_voir->addQueryString('typeannonce', $ligne['bn_id_nature']);
$lien_voir_url=$lien_voir->getURL();
$lien_modifier = $GLOBALS['_BAZAR_']['url'];
$lien_modifier->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_MODIFIER);
$lien_modifier->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$lien_modifier->addQueryString('typeannonce', $ligne['bn_id_nature']);
$lien_modifier_url=$lien_modifier->getURL();
$lien_supprimer = $GLOBALS['_BAZAR_']['url'];
$lien_supprimer->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_SUPPRESSION);
$lien_supprimer->addQueryString('id_fiche', $ligne['bf_id_fiche']);
$lien_supprimer->addQueryString('typeannonce', $ligne['bn_id_nature']);
$lien_supprimer_url=$lien_supprimer->getURL();
$lien_dupliquer = $GLOBALS['_BAZAR_']['url'];
$lien_dupliquer->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_NOUVEAU);
$lien_dupliquer->addQueryString(BAZ_VARIABLE_ID_FICHE, $ligne['bf_id_fiche']);
$lien_dupliquer->addQueryString(BAZ_VARIABLE_DUPLICATION, 1);
$lien_dupliquer=$lien_dupliquer->getURL();
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_DUPLICATION);
$table->addRow (array(
'<a href="'.$lien_voir_url.'">'.$ligne['bf_titre'].'</a>'."\n", // col 1 : le nom
$ligne['bn_label_nature']."\n", // col 2: type annonce
$publiee."\n", // col 3 : publiee ou non
'<a href="'.$lien_modifier_url.'">'.BAZ_MODIFIER.'</a>'."\n", // col 4 : modifier
'<a href="'.$lien_supprimer_url.'" onclick="javascript:return '.
'confirm(\''.BAZ_CONFIRMATION_SUPPRESSION.'\');" >'.BAZ_SUPPRIMER.'</a>'."\n", // col 5 : supprimer
'<a href="'.$lien_dupliquer.'">Dupliquer</a>'."\n")) ;
}
$table->altRowAttributes(1, array("class" => "ligne_impaire"), array("class" => "ligne_paire"));
$table->updateColAttributes(1, array("align" => "left"));
$table->updateColAttributes(2, array("align" => "center"));
$table->updateColAttributes(3, array("align" => "center"));
$table->updateColAttributes(4, array("align" => "center"));
$res .= $table->toHTML() ;
}
else {
$res .= '<p class="zone_info">'.BAZ_PAS_DE_FICHE.'</p>'."\n" ;
}
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_SAISIR);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
$GLOBALS['_BAZAR_']['url']->removeQueryString('typeannonce');
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$res .= '<br /><ul id="liste_liens"><li id="lien_saisir"><a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'" title="'.BAZ_SAISIR_UNE_NOUVELLE_FICHE.'">'.BAZ_SAISIR_UNE_NOUVELLE_FICHE.'</a></li></ul>';
}
else {
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php';
$modele = new bazarTemplate($GLOBALS['_BAZAR_']['db']);
$res .= $modele->getTemplate(BAZ_TEMPLATE_MESSAGE_LOGIN, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['categorie_nature']);
}
return $res;
}
 
 
/** baz_gestion_droits() interface de gestion des droits
*
* return string le code HTML
*/
function baz_gestion_droits() {
$lien_formulaire=$GLOBALS['_BAZAR_']['url'];
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_GERER_DROITS);
 
//contruction du squelette du formulaire
$formtemplate = new HTML_QuickForm('formulaire', 'post', preg_replace ('/&amp;/', '&', $lien_formulaire->getURL()) );
$squelette =& $formtemplate->defaultRenderer();
$squelette->setFormTemplate("\n".'<form {attributes}>'."\n".'<table style="border:0;">'."\n".'{content}'."\n".'</table>'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<tr>'."\n".'<td style="font-size:12px;width:150px;text-align:right;">'."\n".'{label} :</td>'."\n".'<td style="text-align:left;padding:5px;"> '."\n".'{element}'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">*</span><!-- END required -->'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</td>'."\n".'</tr>'."\n");
$squelette->setElementTemplate( '<tr>'."\n".'<td colspan="2" class="liste_a_cocher"><strong>{label}&nbsp;{element}</strong>'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">&nbsp;*</span><!-- END required -->'."\n".'</td>'."\n".'</tr>'."\n", 'accept_condition');
$squelette->setElementTemplate( '<tr><td colspan="2" class="bouton">{label}{element}</td></tr>'."\n", 'valider');
$squelette->setRequiredNoteTemplate("\n".'<tr>'."\n".'<td colspan="2" class="symbole_obligatoire">* {requiredNote}</td></tr>'."\n");
//Traduction de champs requis
$formtemplate->setRequiredNote(BAZ_CHAMPS_REQUIS) ;
$formtemplate->setJsWarnings(BAZ_ERREUR_SAISIE,BAZ_VEUILLEZ_CORRIGER);
//Initialisation de la variable personne
if ( isset($_POST['personnes']) ) {
$personne=$_POST['personnes'];
}
else $personne=0;
//Cas ou les droits ont etes changes
if (isset($_GET['pers'])) {
$personne=$_GET['pers'];
//CAS DES DROITS POUR UN TYPE D'ANNONCE: On efface tous les droits de la personne pour ce type d'annonce
if (isset($_GET['idtypeannonce'])) {
$requete = 'DELETE FROM bazar_droits WHERE bd_id_utilisateur='.$_GET['pers'].
' AND bd_id_nature_offre='.$_GET['idtypeannonce'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
}
//CAS DU SUPER ADMIN: On efface tous les droits de la personne en general
else {
$requete = 'DELETE FROM bazar_droits WHERE bd_id_utilisateur='.$_GET['pers'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
}
if ($_GET['droits']=='superadmin') {
$requete = 'INSERT INTO bazar_droits VALUES ('.$_GET['pers'].',0,0)';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
}
elseif ($_GET['droits']=='redacteur') {
$requete = 'INSERT INTO bazar_droits VALUES ('.$_GET['pers'].','.$_GET['idtypeannonce'].',1)';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
}
elseif ($_GET['droits']=='admin') {
$requete = 'INSERT INTO bazar_droits VALUES ('.$_GET['pers'].','.$_GET['idtypeannonce'].',2)';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
}
}
//requete pour obtenir l'id, le nom et prenom des personnes inscrites a l'annuaire sauf soi meme
$requete = 'SELECT '.BAZ_CHAMPS_ID.', '.BAZ_CHAMPS_NOM.', '.BAZ_CHAMPS_PRENOM.' FROM '.BAZ_ANNUAIRE.
' WHERE '.BAZ_CHAMPS_ID." != ".$GLOBALS['id_user'].' ORDER BY '.BAZ_CHAMPS_NOM.' ASC';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die($resultat->getMessage().$resultat->getDebugInfo()) ;
}
$res='<h2>'.BAZ_GESTION_DES_DROITS.'</h2><br />'."\n";
$res.=BAZ_DESCRIPTION_GESTION_DES_DROITS.'<br /><br />'."\n";
$personnes_select[0]=BAZ_SELECTION;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$personnes_select[$ligne[BAZ_CHAMPS_ID]] = $ligne[BAZ_CHAMPS_NOM]." ".$ligne[BAZ_CHAMPS_PRENOM] ;
}
$java=array ('style'=>'width:250px;','onchange'=>'this.form.submit();');
$formtemplate->addElement ('select', 'personnes', BAZ_LABEL_CHOIX_PERSONNE, $personnes_select, $java) ;
$defauts=array ('personnes'=>$personne);
$formtemplate->setDefaults($defauts);
$res.= $formtemplate->toHTML().'<br />'."\n" ;
if ($personne!=0) {
//cas du super utilisateur
$utilisateur = new Utilisateur_bazar($personne) ;
if ($utilisateur->isSuperAdmin()) {
$res.= '<br />'.BAZ_EST_SUPERADMINISTRATEUR.'<br /><br />'."\n";
$lien_enlever_superadmin=$GLOBALS['_BAZAR_']['url'];
$lien_enlever_superadmin->addQueryString(BAZ_VARIABLE_ACTION, BAZ_GERER_DROITS);
$lien_enlever_superadmin->addQueryString('pers', $personne);
$lien_enlever_superadmin->addQueryString('droits', 'aucun');
$res.= '<a href='.$lien_enlever_superadmin->getURL().'>'.BAZ_CHANGER_SUPERADMINISTRATEUR.'</a><br />'."\n";
}
else {
$lien_passer_superadmin=$GLOBALS['_BAZAR_']['url'];
$lien_passer_superadmin->addQueryString(BAZ_VARIABLE_ACTION, BAZ_GERER_DROITS);
$lien_passer_superadmin->addQueryString('pers', $personne);
$lien_passer_superadmin->addQueryString('droits', 'superadmin');
$res.= '<a href='.$lien_passer_superadmin->getURL().'>'.BAZ_PASSER_SUPERADMINISTRATEUR.'</a><br />'."\n";
//on cherche les differentes rubriques d'annonces
$requete = 'SELECT bn_id_nature, bn_label_nature, bn_image_titre FROM bazar_nature';
if (isset($GLOBALS['_BAZAR_']['langue'])) $requete .= ' where bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
$res.='<br /><b>'.BAZ_DROITS_PAR_TYPE.'</b><br /><br />';
$table = new HTML_Table(array ('width' => '100%', 'class' => 'table_bazar')) ;
$table->addRow(array ('<strong>'.BAZ_TYPE_ANNONCES.'</strong>',
'<strong>'.BAZ_DROITS_ACTUELS.'</strong>',
'<strong>'.BAZ_PASSER_EN.'</strong>',
'<strong>'.BAZ_OU_PASSER_EN.'</strong>')) ;
$table->setRowType (0, 'th') ;
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$lien_aucun_droit=$GLOBALS['_BAZAR_']['url'];
$lien_aucun_droit->addQueryString(BAZ_VARIABLE_ACTION, BAZ_GERER_DROITS);
$lien_aucun_droit->addQueryString('pers', $personne);
$lien_aucun_droit->addQueryString('droits', 'aucun');
$lien_aucun_droit->addQueryString('idtypeannonce', $ligne["bn_id_nature"]);
$lien_passer_redacteur=$GLOBALS['_BAZAR_']['url'];
$lien_passer_redacteur->addQueryString(BAZ_VARIABLE_ACTION, BAZ_GERER_DROITS);
$lien_passer_redacteur->addQueryString('pers', $personne);
$lien_passer_redacteur->addQueryString('droits', 'redacteur');
$lien_passer_redacteur->addQueryString('idtypeannonce', $ligne["bn_id_nature"]);
$lien_passer_admin=$GLOBALS['_BAZAR_']['url'];
$lien_passer_admin->addQueryString(BAZ_VARIABLE_ACTION, BAZ_GERER_DROITS);
$lien_passer_admin->addQueryString('pers', $personne);
$lien_passer_admin->addQueryString('droits', 'admin');
$lien_passer_admin->addQueryString('idtypeannonce', $ligne["bn_id_nature"]);
if (isset($ligne['bn_image_titre'])) {
$titre='&nbsp;<img src="client/bazar/images/'.$ligne['bn_image_titre'].'" alt="'.$ligne['bn_label_nature'].'" />'."\n";
} else {
$titre='<strong>&nbsp;'.$ligne['bn_label_nature'].'</strong>'."\n";
}
if ($utilisateur->isAdmin($ligne['bn_id_nature'])) {
$table->addRow(array($titre,
BAZ_DROIT_ADMIN,
'<a href='.$lien_aucun_droit->getURL().'>'.BAZ_AUCUN_DROIT.'</a>',
'<a href='.$lien_passer_redacteur->getURL().'>'.BAZ_LABEL_REDACTEUR.'</a>'));
}
elseif ($utilisateur->isRedacteur($ligne['bn_id_nature'])) {
$table->addRow(array($titre,
BAZ_LABEL_REDACTEUR,
'<a href='.$lien_aucun_droit->getURL().'>'.BAZ_AUCUN_DROIT.'</a>',
'<a href='.$lien_passer_admin->getURL().'>'.BAZ_DROIT_ADMIN.'</a>'));
}
else {
$table->addRow(array($titre,
BAZ_AUCUN_DROIT,
'<a href='.$lien_passer_redacteur->getURL().'>'.BAZ_LABEL_REDACTEUR.'</a>',
'<a href='.$lien_passer_admin->getURL().'>'.BAZ_DROIT_ADMIN.'</a>'));
}
}
$table->altRowAttributes(1, array('class' => 'ligne_impaire'), array('class' => 'ligne_paire'));
$table->updateColAttributes(0, array('align' => 'left'));
$table->updateColAttributes(1, array('align' => 'left'));
$table->updateColAttributes(2, array('align' => 'left'));
$table->updateColAttributes(3, array('align' => 'left'));
$res.=$table->toHTML() ;
}
}
 
// Nettoyage de l'url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('pers');
$GLOBALS['_BAZAR_']['url']->removeQueryString('droits');
$GLOBALS['_BAZAR_']['url']->removeQueryString('idtypeannonce');
 
return $res;
}
 
/** baz_formulaire() - Renvoie le menu pour les saisies et modification des annonces
*
* @param string choix du formulaire a afficher (soit formulaire personnalise de
* l'annonce, soit choix du type d'annonce)
*
* @return string HTML
*/
function baz_formulaire($mode) {
$res = '';
if ($GLOBALS['AUTH']->getAuth()) {
$lien_formulaire=$GLOBALS['_BAZAR_']['url'];
//Definir le lien du formulaire en fonction du mode de formulaire choisi
if ($mode == BAZ_DEPOSER_ANNONCE) {
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_NOUVEAU);
if (isset($GLOBALS['_BAZAR_']['id_typeannonce']) && $GLOBALS['_BAZAR_']['id_typeannonce'] != 'toutes') {
$mode = BAZ_ACTION_NOUVEAU ;
}
}
if ($mode == BAZ_ACTION_NOUVEAU) {
if ((!isset($_POST['accept_condition']))and($GLOBALS['_BAZAR_']['condition']!=NULL)) {
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_NOUVEAU);
} else {
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_NOUVEAU_V);
}
}
if ($mode == BAZ_ACTION_MODIFIER) {
if (!isset($_POST['accept_condition'])and($GLOBALS['_BAZAR_']['condition']!=NULL)) {
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_MODIFIER);
} else {
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_MODIFIER_V);
if (isset ($_SESSION['_BAZAR_']['fichier'])) unset($_SESSION['_BAZAR_']['fichier']) ;
if (isset ($_SESSION['_BAZAR_']['image'])) unset($_SESSION['_BAZAR_']['image']);
if (isset ($_SESSION['_BAZAR_']['lien'])) unset($_SESSION['_BAZAR_']['lien']);
}
$lien_formulaire->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
}
if ($mode == BAZ_ACTION_MODIFIER_V) {
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_MODIFIER_V);
$lien_formulaire->addQueryString('id_fiche', $GLOBALS['_BAZAR_']['id_fiche']);
}
//contruction du squelette du formulaire
$formtemplate = new HTML_QuickForm('formulaire', 'post', preg_replace ('/&amp;/', '&', $lien_formulaire->getURL()) );
$squelette =& $formtemplate->defaultRenderer();
$squelette->setFormTemplate("\n".'<form {attributes}>'."\n".'<table style="border:0;width:100%;">'."\n".'{content}'."\n".'</table>'."\n".'</form>'."\n");
$squelette->setElementTemplate( '<tr>'."\n".'<td>'."\n".'{label}'.
'<!-- BEGIN required --><span class="symbole_obligatoire">&nbsp;*</span><!-- END required -->'."\n".
' </td>'."\n".'<td style="text-align:left;padding:5px;"> '."\n".'{element}'."\n".
'<!-- BEGIN error --><span class="erreur">{error}</span><!-- END error -->'."\n".
'</td>'."\n".'</tr>'."\n");
$squelette->setElementTemplate( '<tr>'."\n".'<td colspan="2" class="liste_a_cocher"><strong>{label}&nbsp;{element}</strong>'."\n".
'<!-- BEGIN required --><span class="symbole_obligatoire">&nbsp;*</span><!-- END required -->'."\n".'</td>'."\n".'</tr>'."\n", 'accept_condition');
$squelette->setElementTemplate( '<tr><td colspan="2" class="bouton">{label}{element}</td></tr>'."\n", 'valider');
$squelette->setRequiredNoteTemplate("\n".'<tr>'."\n".'<td colspan="2" class="symbole_obligatoire">* {requiredNote}</td></tr>'."\n");
//Traduction de champs requis
$formtemplate->setRequiredNote(BAZ_CHAMPS_REQUIS) ;
$formtemplate->setJsWarnings(BAZ_ERREUR_SAISIE,BAZ_VEUILLEZ_CORRIGER);
//------------------------------------------------------------------------------------------------
//AFFICHAGE DU FORMULAIRE GENERAL DE CHOIX DU TYPE D'ANNONCE
//------------------------------------------------------------------------------------------------
if ($mode == BAZ_DEPOSER_ANNONCE) {
$res = '';
//requete pour obtenir le nom et la description des types d'annonce
$requete = 'SELECT * FROM bazar_nature WHERE bn_ce_id_menu IN ('.$GLOBALS['_BAZAR_']['categorie_nature'].') ';
if (isset($GLOBALS['_BAZAR_']['langue'])) {
$requete .= ' and bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%" ';
}
$requete .= 'ORDER BY bn_label_nature ASC';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
//$res.='<h2>'.BAZ_DEPOSE_UNE_NOUVELLE_ANNONCE.'</h2>'."\n";
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php';
$modele = new bazarTemplate($GLOBALS['_BAZAR_']['db']);
$res .= $modele->getTemplate(BAZ_TEMPLATE_FORMULAIRE_ACCUEIL, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['categorie_nature']);
if ($resultat->numRows()==1) {
$ligne = $resultat->fetchRow (DB_FETCHMODE_ASSOC);
$GLOBALS['_BAZAR_']['id_typeannonce']=$ligne['bn_id_nature'];
$GLOBALS['_BAZAR_']['typeannonce']=$ligne['bn_label_nature'];
$GLOBALS['_BAZAR_']['condition']=$ligne['bn_condition'];
$GLOBALS['_BAZAR_']['template']=$ligne['bn_template'];
$GLOBALS['_BAZAR_']['commentaire']=$ligne['bn_commentaire'];
$GLOBALS['_BAZAR_']['appropriation']=$ligne['bn_appropriation'];
$GLOBALS['_BAZAR_']['image_titre']=$ligne['bn_image_titre'];
$GLOBALS['_BAZAR_']['image_logo']=$ligne['bn_image_logo'];
$mode = BAZ_ACTION_NOUVEAU;
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_NOUVEAU_V);
} else {
//$res.='<br />'.BAZ_CHOIX_TYPEANNONCE.'<br /><br />'."\n";
while ($ligne = $resultat->fetchRow (DB_FETCHMODE_ASSOC)) {
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
if (($utilisateur->isRedacteur($ligne['bn_id_nature'])) || ($utilisateur->isAdmin($ligne['bn_id_nature']))
|| ($utilisateur->isSuperAdmin() || !BAZ_RESTREINDRE_DEPOT)) {
if ($ligne['bn_image_titre']!='') {
$titre='&nbsp;<img src="client/bazar/images/'.$ligne['bn_image_titre'].'" alt="'.
$ligne['bn_label_nature'].'" />'.'<br />'."\n";
} else {
$titre='<h3>'.$ligne['bn_label_nature'].' : </h3>'."\n";
}
$formtemplate->addElement('radio', 'typeannonce', '',
$titre.$ligne['bn_description'].'<br /><br />'."\n",
$ligne['bn_id_nature'], array("id" => 'select'.$ligne['bn_id_nature'],
"style" => 'float:left;'));
$formtemplate->addRule('typeannonce', 'Il faut choisir un type de fiche', 'required', '', 'client') ;
}
}
$squelette->setElementTemplate( '<div class="listechoix">'."\n".'{element}'."\n".'</div>'."\n");
//Mettre les annonces en choix par defaut
$formtemplate->setdefaults(array('typeannonce'=>'1'));
// Bouton d annulation
$lien_formulaire->removeQueryString('action');
$buttons[] = &HTML_QuickForm::createElement('link', 'annuler', BAZ_ANNULER,
preg_replace ("/&amp;/", "&", $lien_formulaire->getURL()), BAZ_ANNULER); // Le preg_replace contourne un pb de QuickForm et Net_URL
// qui remplacent deux fois les & par des &amp;
//Bouton de validation du formulaire // ce qui fait échouer le lien
$buttons[] = &HTML_QuickForm::createElement('submit', 'valider', BAZ_VALIDER);
$formtemplate->addGroup($buttons, null, null, '&nbsp;');
//Affichage a l'ecran
$res.= $formtemplate->toHTML()."\n";
}
}
//------------------------------------------------------------------------------------------------
//AFFICHAGE DU FORMULAIRE CORRESPONDANT AU TYPE DE L'ANNONCE CHOISI PAR L'UTILISATEUR
//------------------------------------------------------------------------------------------------
if ($mode == BAZ_ACTION_NOUVEAU) {
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
if ($utilisateur->isRedacteur($GLOBALS['_BAZAR_']['id_typeannonce']) ||
$utilisateur->isAdmin($GLOBALS['_BAZAR_']['id_typeannonce'])||
$utilisateur->isSuperAdmin()) {
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_NOUVEAU_V);
$formtemplate->updateAttributes(array('action' => str_replace('&amp;', '&', $lien_formulaire->getURL())));
// Appel du modele
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php';
$modele = new bazarTemplate($GLOBALS['_BAZAR_']['db']);
$html = $modele->getTemplate(BAZ_TEMPLATE_FORMULAIRE, $GLOBALS['_BAZAR_']['langue'],$GLOBALS['_BAZAR_']['categorie_nature']);
if (!PEAR::isError($html)) {
if (isset($_GET[BAZ_VARIABLE_DUPLICATION])) {
$res = str_replace ('{FORMULAIRE}', baz_afficher_formulaire_annonce('duplication',$formtemplate), $html);
} else {
$res = str_replace ('{FORMULAIRE}', baz_afficher_formulaire_annonce('insertion',$formtemplate), $html);
}
} else {
if (isset($_GET[BAZ_VARIABLE_DUPLICATION])) {
$res = baz_afficher_formulaire_annonce('duplication',$formtemplate);
} else {
$res = baz_afficher_formulaire_annonce('insertion',$formtemplate);
}
}
} else {
// Pas de droit pour deposer un annonce
return '<div>Pas de droits suffisants</div>';
}
}
//------------------------------------------------------------------------------------------------
//CAS DE LA MODIFICATION D'UNE ANNONCE (FORMULAIRE DE MODIFICATION)
//------------------------------------------------------------------------------------------------
if ($mode == BAZ_ACTION_MODIFIER) {
$res=baz_afficher_formulaire_annonce('modification',$formtemplate);
}
// Nettoyage de l'url avant les return : apparement inutile sinon pose pb (url applette deconnexion et moteur de recherche) [jpm le 17 mars 2008]
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('id_fiche');
//------------------------------------------------------------------------------------------------
//CAS DE L'INSCRIPTION D'UNE ANNONCE
//------------------------------------------------------------------------------------------------
if ($mode == BAZ_ACTION_NOUVEAU_V) {
if ($formtemplate->validate() && !isset($_SESSION['formulaire_annonce_valide'])) {
//$formtemplate->process('baz_insertion', false) ;
$id_fiche = baz_insertion ($formtemplate->getSubmitValues());
// Redirection vers mes_fiches pour eviter la revalidation du formulaire
$GLOBALS['_BAZAR_']['url']->addQueryString (BAZ_VARIABLE_ACTION, BAZ_ACTION_POST_VALIDATION);
$GLOBALS['_BAZAR_']['url']->addQueryString (BAZ_VARIABLE_ID_FICHE, $id_fiche);
header ('Location: '.str_replace ('&amp;', '&', $GLOBALS['_BAZAR_']['url']->getURL())) ;
exit();
}
}
//------------------------------------------------------------------------------------------------
//CAS DE LA MODIFICATION D'UNE ANNONCE (VALIDATION ET MAJ)
//------------------------------------------------------------------------------------------------
if ($mode == BAZ_ACTION_MODIFIER_V) {
if ($formtemplate->validate()) {
$formtemplate->process('baz_mise_a_jour', false) ;
$id_fiche = $GLOBALS['_BAZAR_']['id_fiche'] ;
// Redirection vers la fiche modifiée
$GLOBALS['_BAZAR_']['url']->addQueryString (BAZ_VARIABLE_VOIR, BAZ_GERER_DROITS);
$GLOBALS['_BAZAR_']['url']->addQueryString (BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$GLOBALS['_BAZAR_']['url']->addQueryString (BAZ_VARIABLE_ID_FICHE,$id_fiche);
header ('Location: '.str_replace ('&amp;', '&', $GLOBALS['_BAZAR_']['url']->getURL())) ;
exit();
}
}
} else {
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php';
$modele = new bazarTemplate($GLOBALS['_BAZAR_']['db']);
$res .= $modele->getTemplate(BAZ_TEMPLATE_MESSAGE_LOGIN, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['categorie_nature']);
}
 
return $res;
}
 
/** baz_afficher_formulaire_annonce() - Genere le formulaire de saisie d'une annonce
*
* @param string type de formulaire: insertion ou modification
* @param mixed objet quickform du formulaire
*
* @return string code HTML avec formulaire
*/
function baz_afficher_formulaire_annonce($mode='insertion',$formtemplate) {
if ($mode=='modification' || $mode == 'duplication') {
//initialisation de la variable globale id_fiche
$GLOBALS['_BAZAR_']['id_fiche'] = $_REQUEST[BAZ_VARIABLE_ID_FICHE];
//suppression eventuelle d'une url, d'un fichier ou d'une image
if (isset($_GET['id_url'])) {
baz_suppression_url($_GET['id_url']);
}
if (isset($_GET['id_fichier'])) {
baz_suppression_fichier($_GET['id_fichier']);
}
if (isset($_GET['image'])) {
baz_suppression_image($GLOBALS['_BAZAR_']['id_fiche']);
}
}
$res = '';
//titre de la rubrique
if (!BAZ_UTILISE_TEMPLATE) $res= '<h2>'.BAZ_TITRE_SAISIE_ANNONCE.'&nbsp;'.$GLOBALS['_BAZAR_']['typeannonce'].'</h2><br />'."\n";
if (($GLOBALS['_BAZAR_']['condition']!='')AND(!isset($_POST['accept_condition']))AND(!isset($_GET['url'])OR(!isset($_GET['fichier']))OR(!isset($_GET['image'])))) {
require_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/html.php';
$conditions= new HTML_QuickForm_html('<tr><td colspan="2" style="padding:5px; margin:5px; width: 90%; background: #C1CBA7;">'.$GLOBALS['_BAZAR_']['condition'].'</td>'."\n".'</tr>'."\n");
$formtemplate->addElement($conditions);
$formtemplate->addElement('checkbox', 'accept_condition',BAZ_ACCEPTE_CONDITIONS) ;
$formtemplate->addElement('hidden', 'typeannonce', $GLOBALS['_BAZAR_']['id_typeannonce']);
$formtemplate->addRule('accept_condition', BAZ_ACCEPTE_CONDITIONS_REQUIS, 'required', '', 'client') ;
$formtemplate->addElement('submit', 'valider', BAZ_VALIDER);
}
//affichage du formulaire si conditions acceptees
else {
//Parcours du fichier de templates, pour mettre les valeurs des champs
$tableau=baz_valeurs_template($GLOBALS['_BAZAR_']['template']);
if ($mode=='modification' || $mode == 'duplication') {
//Ajout des valeurs par defaut
$valeurs_par_defaut = baz_valeurs_fiche($GLOBALS['_BAZAR_']['id_fiche']) ;
for ($i=0; $i<count($tableau); $i++) {
if (isset($ligne[$tableau[$i]['nom_bdd']])) {
$type = $tableau[$i]['type'];
$valeur = $ligne[$tableau[$i]['nom_bdd']];
} else {
$type = $tableau[$i]['type'];
$valeur = '';
}
/*
$element = Bazar_element::factory($type, $tableau[$i]);
if (!PEAR::isError($element)) {
if (method_exists($element, 'toForm'))$res .= $element->toForm($valeur);
}
*/
if ( $tableau[$i]['type']=='liste' || $tableau[$i]['type']=='checkbox') {
$def=$tableau[$i]['type'].$tableau[$i]['nom_bdd'];
}
elseif ( $tableau[$i]['type']=='texte' || $tableau[$i]['type']=='textelong' || $tableau[$i]['type']=='listedatedeb'
|| $tableau[$i]['type']=='listedatefin' || $tableau[$i]['type']=='champs_cache'
|| $tableau[$i]['type']=='labelhtml' ) {
$def=$tableau[$i]['nom_bdd'];
} elseif ($tableau[$i]['type']=='carte_google') {
$def = 'carte_google';
$valeurs_par_defaut[$def] = array ('latitude' => $valeurs_par_defaut['bf_latitude'], 'longitude' => $valeurs_par_defaut['bf_longitude']);
}
// certain type n ont pas de valeur par defaut (labelhtml par exemple)
// on teste l existence de $valeur_par_defaut[$def] avant de le passer en parametre
if($tableau[$i]['type'] != null) {
$tableau[$i]['type']($formtemplate, $tableau[$i]['nom_bdd'], $tableau[$i]['label'], $tableau[$i]['limite1'],
$tableau[$i]['limite2'],
isset ($valeurs_par_defaut[$def]) ? $valeurs_par_defaut[$def] : '',
$tableau[$i]['table_source'], $tableau[$i]['obligatoire']) ;
}
if ($tableau[$i]['type']=='carte_google') {
include_once 'bazar.fonct.google.php';
GEN_stockerCodeScript($script);
// On ajoute l attribut load a la balise body
GEN_AttributsBody('onload', 'load()');
}
}
}
else {
for ($i=0; $i<count($tableau); $i++) {
if($tableau[$i]['type'] != null) {
$tableau[$i]['type']($formtemplate, $tableau[$i]['nom_bdd'], $tableau[$i]['label'], $tableau[$i]['limite1'],$tableau[$i]['limite2'], $tableau[$i]['defaut'], $tableau[$i]['table_source'], $tableau[$i]['obligatoire']) ;
}
if ($tableau[$i]['type'] == 'carte_google') {
include_once 'bazar.fonct.google.php';
GEN_stockerCodeScript($script);
// On ajoute l attribut load a la balise body
GEN_AttributsBody('onload', 'load()');
}
}
}
$formtemplate->addElement('hidden', 'typeannonce', $GLOBALS['_BAZAR_']['id_typeannonce']);
// Un champs cache pour la duplication
if ($mode == 'duplication') $formtemplate->addElement('hidden', 'fiche_dupliquee', $GLOBALS['_BAZAR_']['id_fiche']);
// Bouton d annulation
$attr = $formtemplate->getAttributes();
$lien_formulaire = new Net_URL($attr[BAZ_VARIABLE_ACTION]);
$lien_formulaire->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_VOIR_VOS_ANNONCES);
$buttons[] = &HTML_QuickForm::createElement('link', 'annuler', BAZ_ANNULER,
preg_replace ("/&amp;/", "&", $lien_formulaire->getURL()), BAZ_ANNULER); // Le preg_replace contourne un pb de QuickForm et Net_URL
// qui remplacent deux fois les & par des &amp;
//Bouton de validation du formulaire // ce qui fait échouer le lien
$buttons[] = &HTML_QuickForm::createElement('submit', 'valider', BAZ_VALIDER);
$formtemplate->addGroup($buttons, null, null, '&nbsp;');
}
 
//Affichage a l'ecran
$res .= $formtemplate->toHTML()."\n";
return $res;
}
 
 
/** requete_bazar_fiche() - preparer la requete d'insertion ou de MAJ de la table bazar_fiche a partir du template
*
* @global mixed L'objet contenant les valeurs issues de la saisie du formulaire
* @return void
*/
function requete_bazar_fiche($valeur) {
$requete=NULL;
//l'annonce est directement publiée pour les admins
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
if ($utilisateur->isAdmin($GLOBALS['_BAZAR_']['id_typeannonce']) ||
$utilisateur->isSuperAdmin()) {
$requete.='bf_statut_fiche=1, ';
}
else {
$requete.='bf_statut_fiche="'.BAZ_ETAT_VALIDATION.'", ';
}
$tableau=baz_valeurs_template($GLOBALS['_BAZAR_']['template']);
for ($i=0; $i<count($tableau); $i++) {
//cas des checkbox et des listes
if ($tableau[$i]['type']=='checkbox' || $tableau[$i]['type']=='liste') {
//on supprime les anciennes valeurs de la table bazar_fiche_valeur_liste
$requetesuppression='DELETE FROM bazar_fiche_valeur_liste WHERE bfvl_ce_fiche='.$GLOBALS['_BAZAR_']['id_fiche'].' AND bfvl_ce_liste='.$tableau[$i]['nom_bdd'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requetesuppression) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
if (isset($valeur[$tableau[$i]['type'].$tableau[$i]['nom_bdd']]) && ($valeur[$tableau[$i]['type'].$tableau[$i]['nom_bdd']]!=0)) {
//on insere les nouvelles valeurs
$requeteinsertion='INSERT INTO bazar_fiche_valeur_liste (bfvl_ce_fiche, bfvl_ce_liste, bfvl_valeur) VALUES ';
//pour les checkbox, les différentes valeurs sont dans un tableau
if (is_array($valeur[$tableau[$i]['type'].$tableau[$i]['nom_bdd']])) {
$nb=0;
while (list($cle, $val) = each($valeur[$tableau[$i]['type'].$tableau[$i]['nom_bdd']])) {
if ($nb>0) $requeteinsertion .= ', ';
$requeteinsertion .= '('.$GLOBALS['_BAZAR_']['id_fiche'].', '.$tableau[$i]['nom_bdd'].', '.$cle.') ';
$nb++;
}
}
//pour les listes, une insertion de la valeur suffit
else {
$requeteinsertion .= '('.$GLOBALS['_BAZAR_']['id_fiche'].', '.$tableau[$i]['nom_bdd'].', '.$valeur[$tableau[$i]['type'].$tableau[$i]['nom_bdd']].')';
}
$resultat = $GLOBALS['_BAZAR_']['db']->query($requeteinsertion) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
}
}
//cas des fichiers
elseif ($tableau[$i]['type']=='fichier') {
if (isset($valeur['texte_fichier'.$tableau[$i]['nom_bdd']]) && $valeur['texte_fichier'.$tableau[$i]['nom_bdd']]!='') {
baz_insertion_fichier($valeur['texte_fichier'.$tableau[$i]['nom_bdd']], $GLOBALS['_BAZAR_']['id_fiche'], 'fichier'.$tableau[$i]['nom_bdd']);
}
}
//cas des urls
// On affine les criteres pour l insertion d une url
// il faut que le lien soit saisie, different de http:// ET que le texte du lien soit saisie aussi
// et ce afin d eviter d avoir des liens vides
elseif ($tableau[$i]['type']=='url') {
if (isset($valeur['url_lien'.$tableau[$i]['nom_bdd']]) &&
$valeur['url_lien'.$tableau[$i]['nom_bdd']]!='http://'
&& isset($valeur['url_texte'.$tableau[$i]['nom_bdd']]) &&
strlen ($valeur['url_texte'.$tableau[$i]['nom_bdd']])) {
baz_insertion_url($valeur['url_lien'.$tableau[$i]['nom_bdd']], $valeur['url_texte'.$tableau[$i]['nom_bdd']], $GLOBALS['_BAZAR_']['id_fiche']);
}
}
//cas des images
elseif ($tableau[$i]['type']=='image') {
if (isset($_FILES['image']['name']) && $_FILES['image']['name']!='') {
$requete .= baz_insertion_image($GLOBALS['_BAZAR_']['id_fiche']);
}
}
//cas des dates
elseif ( $tableau[$i]['type']=='listedatedeb' || $tableau[$i]['type']=='listedatefin' ) {
// On construit la date selon le format YYYY-mm-dd
$date = $valeur[$tableau[$i]['nom_bdd']]['Y'].'-'.$valeur[$tableau[$i]['nom_bdd']]['m'].'-'.$valeur[$tableau[$i]['nom_bdd']]['d'] ;
// si la date de fin evenement est anterieure a la date de debut, on met la date de debut
// pour eviter les incoherence
if ($tableau[$i]['nom_bdd'] == 'bf_date_fin_evenement' &&
mktime(0,0,0, $valeur['bf_date_debut_evenement']['m'], $valeur['bf_date_debut_evenement']['d'], $valeur['bf_date_debut_evenement']['Y']) >
mktime(0,0,0, $valeur['bf_date_fin_evenement']['m'], $valeur['bf_date_fin_evenement']['d'], $valeur['bf_date_fin_evenement']['Y'])) {
$val = $valeur['bf_date_debut_evenement']['Y'].'-'.$valeur['bf_date_debut_evenement']['m'].'-'.$valeur['bf_date_debut_evenement']['d'] ;
} else {
$val = $valeur[$tableau[$i]['nom_bdd']]['Y'].'-'.$valeur[$tableau[$i]['nom_bdd']]['m'].'-'.$valeur[$tableau[$i]['nom_bdd']]['d'] ;
}
$requete .= $tableau[$i]['nom_bdd'].'="'.$val.'", ' ;
}
//cas des champs texte
elseif ( $tableau[$i]['type']=='texte' || $tableau[$i]['type']=='textelong' || $tableau[$i]['type']=='champs_cache' || $tableau[$i]['type']=='champs_mail' ) {
//on mets les slashes pour les saisies dans les champs texte et textearea
$val=addslashes($valeur[$tableau[$i]['nom_bdd']]) ;
$requete .= $tableau[$i]['nom_bdd'].'="'.$val.'", ' ;
}
//cas des wikinis
elseif ( $tableau[$i]['type']=='wikini' && $_REQUEST[BAZ_VARIABLE_ACTION]==BAZ_ACTION_NOUVEAU_V ) {
//on appelle les pages des apis et de l'integrateur wikini
include_once PAP_CHEMIN_RACINE.'api/sql/SQL_manipulation.fonct.php';
include_once PAP_CHEMIN_RACINE.'client/integrateur_wikini/configuration/adwi_configuration.inc.php' ;
include_once PAP_CHEMIN_RACINE.'client/integrateur_wikini/bibliotheque/adwi_wikini.fonct.php' ;
//génération du titre du wiki, sous la forme id-titre du projet
$titre=baz_titre_wiki($valeur["bf_titre"]);
//création du wiki
$valeur=array ("action"=> "nouveau_v", "code_alpha_wikini"=>$titre, "page"=>"AccueiL", "bdd_hote"=> "",
"bdd_nom"=> "", "bdd_utilisateur"=> "", "bdd_mdp" => "", "table_prefix"=> "", "chemin" => "wikini/".$titre, "valider"=> "Valider");
$val = insertion($valeur, $GLOBALS['_BAZAR_']['db']);
}
// Cas de la carte google
elseif ($tableau[$i]['type'] == 'carte_google') {
$requete .= 'bf_latitude="'.$valeur['latitude'].'", bf_longitude="'.$valeur['longitude'].'",';
}
}
$requete.=' bf_date_maj_fiche=NOW()';
/*if($utilisateur->isSuperAdmin()) {
$requete.=', bf_date_debut_validite_fiche=NOW()';
}*/
return $requete;
}
 
/** baz_insertion() - inserer une nouvelle fiche
*
* @array Le tableau des valeurs a inserer
* @integer Valeur de l'identifiant de la fiche
* @return void
*/
function baz_insertion($valeur) {
// =========== Insertion d'une nouvelle fiche ===================
// dans le cas où on traite le type d'évenements, on le récupère dans la globale id_typeannonce
if (isset($valeur['liste31']) && $valeur['liste31'] != '') {
$GLOBALS['_BAZAR_']['id_typeannonce'] = $valeur['liste31'] ;
}
//requete d'insertion dans bazar_fiche
$GLOBALS['_BAZAR_']['id_fiche'] = baz_nextid('bazar_fiche', 'bf_id_fiche', $GLOBALS['_BAZAR_']['db']) ;
$requete = 'INSERT INTO bazar_fiche SET bf_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'].','.
'bf_ce_utilisateur='.$GLOBALS['id_user'].', bf_ce_nature='.$GLOBALS['_BAZAR_']['id_typeannonce'].','.
'bf_date_creation_fiche=NOW() , '.requete_bazar_fiche($valeur);
if (!isset($_REQUEST['bf_date_debut_validite_fiche'])) {
$requete .= ', bf_date_debut_validite_fiche=now(), bf_date_fin_validite_fiche="0000-00-00" ' ;
}
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die($resultat->getMessage().$resultat->getDebugInfo()) ;
}
// Envoie d un mail aux administrateurs
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
if (!$utilisateur->isAdmin($GLOBALS['_BAZAR_']['id_typeannonce']) && !$utilisateur->isSuperAdmin()) {
bazar::notifier(BAZAR_NOTIFICATION_NOUVELLE_FICHE);
}
// On redirige
return $GLOBALS['_BAZAR_']['id_fiche'];
}
 
 
/** baz_insertion_url() - inserer un lien URL a une fiche
*
* @global string L'url du lien
* @global string Le texte du lien
* @global integer L'identifiant de la fiche
* @return void
*/
function baz_insertion_url($url_lien, $url_texte, $idfiche) {
//requete d'insertion dans bazar_url
if (!isset($_SESSION['_BAZAR_']['lien'])) {
$id_url = baz_nextId('bazar_url', 'bu_id_url', $GLOBALS['_BAZAR_']['db']) ;
$requete = 'INSERT INTO bazar_url SET bu_id_url='.$id_url.', bu_ce_fiche='.$idfiche.', '.
'bu_url="'.$url_lien.'", bu_descriptif_url="'.addslashes($url_texte).'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return $resultat->getMessage().$resultat->getDebugInfo() ;
}
$_SESSION['_BAZAR_']['lien'] = 1;
return;
}
}
 
 
/** baz_insertion_fichier() - inserer un fichier a une fiche
*
* @global string Le label du fichier
* @global string La description du fichier
* @global integer L'identifiant de la fiche
* @return void
*/
function baz_insertion_fichier($fichier_description, $idfiche, $nom_fichier='fichier_joint') {
//verification de la presence de ce fichier
$requete = 'SELECT bfj_id_fichier FROM bazar_fichier_joint WHERE bfj_fichier="'.$_FILES[$nom_fichier]['name'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
if (!isset ($_SESSION['_BAZAR_']['fichier'])) {
if ($resultat->numRows()==0) {
$chemin_destination=BAZ_CHEMIN_APPLI.'upload/'.$_FILES[$nom_fichier]['name'];
move_uploaded_file($_FILES[$nom_fichier]['tmp_name'], $chemin_destination);
chmod ($chemin_destination, 0755);
}
$id_fichier_joint = baz_nextId('bazar_fichier_joint', 'bfj_id_fichier', $GLOBALS['_BAZAR_']['db']) ;
$requete = 'INSERT INTO bazar_fichier_joint SET bfj_id_fichier='.$id_fichier_joint.', bfj_ce_fiche='.$idfiche.
', bfj_description="'.addslashes($fichier_description).'", bfj_fichier="'.$_FILES[$nom_fichier]['name'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return $resultat->getMessage().$resultat->getDebugInfo() ;
}
}
$_SESSION['_BAZAR_']['fichier'] = 1;
return;
}
 
 
/** baz_insertion_image() - inserer une image a une fiche
*
* @global integer L'identifiant de la fiche
* @return string requete SQL
*/
function baz_insertion_image($idfiche) {
//verification de la presence de ce fichier
$requete = 'SELECT bf_id_fiche FROM bazar_fiche WHERE bf_url_image="'.$_FILES['image']['name'].'" AND bf_id_fiche!='.$idfiche;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
if ($resultat->numRows()==0) {
$chemin_destination=BAZ_CHEMIN_APPLI.'upload/'.$_FILES['image']['name'];
move_uploaded_file($_FILES['image']['tmp_name'], $chemin_destination);
chmod ($chemin_destination, 0755);
}
$_SESSION['_BAZAR_']['image'] = 1;
return 'bf_url_image="'.$_FILES['image']['name'].'", ' ;
}
 
 
/** baz_mise_a_jour() - Mettre a jour une fiche
*
* @global Le contenu du formulaire de saisie de l'annonce
* @return void
*/
function baz_mise_a_jour($valeur) {
if (isset($valeur['liste31']) && $valeur['liste31'] != '') {
$GLOBALS['_BAZAR_']['id_typeannonce'] = $valeur['liste31'] ;
}
 
//MAJ de bazar_fiche
$requete = 'UPDATE bazar_fiche SET '.requete_bazar_fiche(&$valeur);
if (isset($valeur['liste31']) && $valeur['liste31'] != '') {
$requete .= ' ,bf_ce_nature = '.$GLOBALS['_BAZAR_']['id_typeannonce'] ;
}
$requete.= ' WHERE bf_id_fiche='.$GLOBALS['_BAZAR_']['id_fiche'];
 
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
// Envoie d un mail aux administrateurs
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
if (!$utilisateur->isAdmin($GLOBALS['_BAZAR_']['id_typeannonce']) || !$utilisateur->isSuperAdmin()) {
bazar::notifier(BAZAR_NOTIFICATION_MODIFICATION_FICHE);
}
return;
}
 
function baz_post_validation() {
$lien_duplication = clone $GLOBALS['_BAZAR_']['url'];
$lien_nouvelle_fiche = clone $GLOBALS['_BAZAR_']['url'];
$lien_mes_fiches = clone $GLOBALS['_BAZAR_']['url'];
$lien_visualiser_fiche = clone $GLOBALS['_BAZAR_']['url'];
$lien_duplication->addQueryString(BAZ_VARIABLE_ID_FICHE, $_GET[BAZ_VARIABLE_ID_FICHE]);
$lien_duplication->addQueryString(BAZ_VARIABLE_DUPLICATION, 1);
$lien_duplication->addQueryString(BAZ_VARIABLE_ACTION, BAZ_ACTION_NOUVEAU);
$lien_duplication = $lien_duplication->getURL();
$lien_nouvelle_fiche->addQueryString(BAZ_VARIABLE_ACTION, BAZ_DEPOSER_ANNONCE);
$lien_nouvelle_fiche->addQueryString(BAZ_VARIABLE_CATEGORIE_NATURE, $GLOBALS['_BAZAR_']['categorie_nature']);
$lien_nouvelle_fiche = $lien_nouvelle_fiche->getURL();
$lien_mes_fiches->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_MES_FICHES);
$lien_mes_fiches = $lien_mes_fiches->getURL();
$lien_visualiser_fiche->addQueryString(BAZ_VARIABLE_VOIR, BAZ_GERER_DROITS);
$lien_visualiser_fiche->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FICHE);
$lien_visualiser_fiche->addQueryString(BAZ_VARIABLE_ID_FICHE, $_GET[BAZ_VARIABLE_ID_FICHE]);
$lien_visualiser_fiche = $lien_visualiser_fiche->getUrl() ;
ob_start();
if (file_exists(BAZ_CHEMIN_SQUELETTE.'baz_post_validation.tpl.html')) {
include_once BAZ_CHEMIN_SQUELETTE.'baz_post_validation.tpl.html';
}
$res = ob_get_contents();
ob_end_clean();
return $res ;
}
 
/** baz_suppression() - Supprime une fiche
*
* @global L'identifiant de la fiche a supprimer
* @return void
*/
function baz_suppression() {
if ($GLOBALS['AUTH']->getAuth()) {
$valeurs=baz_valeurs_fiche($_GET['id_fiche']);
//suppression des wikinis associes
//génération du titre du wiki, sous la forme id-titre du projet
$titre=baz_titre_wiki($valeurs["bf_titre"]);
$requete = 'SELECT gewi_id_wikini FROM gen_wikini WHERE gewi_code_alpha_wikini = "'.$titre.'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if ($resultat->numRows()>0) {
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$id_wikini=$ligne['gewi_id_wikini'];
}
include_once PAP_CHEMIN_RACINE.'api/sql/SQL_manipulation.fonct.php';
include_once PAP_CHEMIN_RACINE.'client/integrateur_wikini/configuration/adwi_configuration.inc.php' ;
include_once PAP_CHEMIN_RACINE.'client/integrateur_wikini/bibliotheque/adwi_wikini.fonct.php' ;
adwi_supprimer_wikini($id_wikini, $GLOBALS['_BAZAR_']['db']);
}
// suppression des valeurs des listes et des cases à cocher
$requete = 'DELETE FROM bazar_fiche_valeur_liste WHERE bfvl_ce_fiche='.$_GET['id_fiche'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
//suppression des urls associes
$requete = 'delete FROM bazar_url WHERE bu_ce_fiche = '.$_GET['id_fiche'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo().'<br />'."\n") ;
}
//suppression des fichiers associes
$requete = 'SELECT bfj_id_fichier FROM bazar_fichier_joint WHERE bfj_ce_fiche = '.$_GET['id_fiche'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo().'<br />'."\n") ;
}
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
baz_suppression_fichier($ligne['bfj_id_fichier']);
}
//suppression dans bazar_fiche
$requete = 'DELETE FROM bazar_fiche WHERE bf_id_fiche = '.$_GET['id_fiche'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo().'<br />'."\n") ;
}
return ;
}
}
 
 
/** baz_suppression_url() - Supprimer un lien d'une fiche
*
* @global integer L'identifiant du lien
* @return void
*/
function baz_suppression_url($id_url) {
if ($GLOBALS['AUTH']->getAuth()) {
//suppression dans bazar_url
$requete = 'DELETE FROM bazar_url WHERE bu_id_url = '.$id_url;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
return;
}
}
 
 
/** baz_suppression_fichier() - Supprimer un fichier d'une fiche
*
* @global integer L'identifiant du fichier
* @return void
*/
function baz_suppression_fichier($id_fichier) {
if ($GLOBALS['AUTH']->getAuth()) {
//verification de l'utilisation du fichier joint pour une autre annonce
$requete = 'SELECT bfj_fichier FROM bazar_fichier_joint WHERE bfj_id_fichier='.$id_fichier;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$requete = 'SELECT bfj_fichier FROM bazar_fichier_joint WHERE bfj_fichier="'.$ligne['bfj_fichier'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
//si le fichier n'est que utilise dans cette fiche, on le supprime, on le laisse sinon
if ($resultat->numRows()==1) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
unlink(BAZ_CHEMIN_APPLI.'upload/'.$ligne['bfj_fichier']);
}
//suppression dans la table bazar_fichier
$requete = 'DELETE FROM bazar_fichier_joint WHERE bfj_id_fichier = '.$id_fichier;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
return;
}
}
 
 
/** baz_suppression_image() - Supprimer une image d'une fiche
*
* @global integer L'identifiant de la fiche
* @return void
*/
function baz_suppression_image($id_fiche) {
if ($GLOBALS['AUTH']->getAuth()) {
//verification de l'utilisation de l'image pour une autre annonce
$requete = 'SELECT bf_url_image FROM bazar_fiche WHERE bf_id_fiche='.$id_fiche;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$requete = 'SELECT bf_url_image FROM bazar_fiche WHERE bf_url_image="'.$ligne['bf_url_image'].'"';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
//si le fichier n'est que utilise dans cette fiche, on le supprime, on le laisse sinon
if ($resultat->numRows()==1) {
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
unlink(BAZ_CHEMIN_APPLI.'upload/'.$ligne['bf_url_image']);
}
//suppression dans la table bazar_fiche
$requete = 'UPDATE bazar_fiche SET bf_url_image=NULL WHERE bf_id_fiche = '.$id_fiche;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ('Echec de la requete<br />'.$resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
return;
}
}
 
 
/** publier_fiche () - Publie ou non dans les fichiers XML la fiche bazar d'un utilisateur
*
* @global boolean Valide: oui ou non
* @return void
*/
function publier_fiche($valid) {
 
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']);
// sortie anticipée en cas d'accès non autorisé
// ceci limite l'accès au supers admins
// TODO: voir si l'on ne pourrait valider que les fiches
// des catégories dont la personne est admin, ce qui permettrait un accès plus fin
if(!$utilisateur->isSuperAdmin()) {
return;
}
 
if (isset($_GET['id_fiche'])) $GLOBALS['_BAZAR_']['id_fiche']=$_GET['id_fiche'];
if (isset($_GET['typeannonce'])) $typeannonce=$_GET['typeannonce'];
if(isset($_POST['date_validite']) && date('Y-m-d', strtotime($_POST['date_validite']))) {
$date_validite = '"'.date('Y-m-d', strtotime($_POST['date_validite'])).'"';
} else {
$date_validite = 'now()';
}
if ($valid==0) {
$requete = 'UPDATE bazar_fiche SET bf_statut_fiche=2 ';
if(isset($_POST['date_validite']) && date('Y-m-d', strtotime($_POST['date_validite']))) {
$requete .= ', bf_date_debut_validite_fiche='.$date_validite.' ';
}
$requete .= 'WHERE bf_id_fiche="'.$GLOBALS['_BAZAR_']['id_fiche'].'"' ;
}
else {
$requete .= 'UPDATE bazar_fiche SET bf_date_debut_validite_fiche='.$date_validite.' , bf_statut_fiche=1 WHERE bf_id_fiche="'.$GLOBALS['_BAZAR_']['id_fiche'].'"' ;
}
// ====================Mise a jour de la table bazar_fiche====================
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
unset ($resultat) ;
//TODO envoie mail annonceur
return;
}
 
 
/** baz_s_inscrire() affiche le formulaire qui permet de s'inscrire pour recevoir des annonces d'un type
*
* @return string le code HTML
*/
function baz_s_inscrire() {
$res= '<h2>'.BAZ_S_INSCRIRE_AUX_ANNONCES.'</h2>'."\n";
$res .= '<p id="laius_abonnement">'.BAZ_LAIUS_S_ABONNER.'</p>'."\n";
//requete pour obtenir l'id et le label des types d'annonces
$requete = 'SELECT bn_id_nature, bn_label_nature, bn_image_titre '.
'FROM bazar_nature WHERE 1';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
return ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
// Nettoyage de l url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_VOIR);
$table = new HTML_Table(array ('class' => 'table_bazar'));
$table->addRow(array(BAZ_TYPE_ANNONCES, BAZ_RSS));
$table->setRowType(0, 'th');
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
$lien_RSS=$GLOBALS['_BAZAR_']['url'];
$lien_RSS->addQueryString(BAZ_VARIABLE_ACTION, BAZ_VOIR_FLUX_RSS);
$lien_RSS->addQueryString('annonce', $ligne[bn_id_nature]);
if (isset($ligne['bn_image_titre'])) {$titre='&nbsp;<img src="client/bazar/images/'.$ligne['bn_image_titre'].'" alt="'.$ligne['bn_label_nature'].'" />'."\n";}
else {$titre='<strong>&nbsp;'.$ligne['bn_label_nature'].'</strong>'."\n";}
 
$table->addRow(array($titre,
'<a href="'.$lien_RSS->getURL().'"><img src="client/bazar/images/BAZ_rss.png" alt="'.BAZ_RSS.'"></a>'));
$lien_RSS->removeQueryString('annonce');
}
$table->altRowAttributes(1, array('class' => 'ligne_impaire'), array('class' => 'ligne_paire'));
$table->updateColAttributes(0, array('class' => 'col1'));
$table->updateColAttributes(1, array('class' => 'col2'));
$res.=$table->toHTML() ;
 
// Nettoyage de l'url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION);
$GLOBALS['_BAZAR_']['url']->removeQueryString('idtypeannonce');
return $res;
}
 
 
/** baz_valeurs_fiche() - Renvoie un tableau avec les valeurs par defaut du formulaire d'inscription
*
* @param integer Identifiant de la fiche
*
* @return array Valeurs enregistrees pour cette fiche
*/
function baz_valeurs_fiche($idfiche) {
$requete = 'SELECT * FROM bazar_fiche WHERE bf_id_fiche='.$idfiche;
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
$valeurs_fiche = array() ;
$tableau = baz_valeurs_template($GLOBALS['_BAZAR_']['template']);
for ($i=0; $i<count($tableau); $i++) {
if ($tableau[$i]['type']=='liste' || $tableau[$i]['type']=='checkbox') {
$requete = 'SELECT bfvl_valeur FROM bazar_fiche_valeur_liste WHERE bfvl_ce_fiche='.$idfiche.
' AND bfvl_ce_liste='.$tableau[$i]['nom_bdd'];
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError ($resultat)) {
die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
$nb=0;$val='';
while ($result = $resultat->fetchRow()) {
if ($nb>0) $val .= ', ';
$val .= $result[0];
$nb++;
}
$valeurs_fiche[$tableau[$i]['type'].$tableau[$i]['nom_bdd']] = $val;
}
elseif ($tableau[$i]['type']=='champs_cache' || $tableau[$i]['type']=='texte' || $tableau[$i]['type']=='textelong' || $tableau[$i]['type']=='listedatedeb' || $tableau[$i]['type']=='listedatefin') {
$valeurs_fiche[$tableau[$i]['nom_bdd']] = stripslashes($ligne[$tableau[$i]['nom_bdd']]);
} elseif ($tableau[$i]['type']=='carte_google') {
$valeurs_fiche['bf_latitude'] = $ligne['bf_latitude'];
$valeurs_fiche['bf_longitude'] = $ligne['bf_longitude'];
}
}
return $valeurs_fiche;
}
 
function baz_valeur_champs($nom_champs,$id_fiche) {
 
$requete = 'SELECT blv_label FROM bazar_fiche_valeur_liste, bazar_liste_valeurs WHERE bfvl_ce_fiche='.
$id_fiche.' AND bfvl_ce_liste='.$nom_champs.
' AND bfvl_valeur=blv_valeur AND blv_ce_liste='.$nom_champs.
' AND blv_ce_i18n="'.$GLOBALS['_BAZAR_']['langue'].'"';
 
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError ($resultat)) {
return ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
}
else {
$res = '';
while($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
if($ligne['blv_label'] != 'Autre') {
$res .= $ligne['blv_label'].', ';
}
}
$res = rtrim($res,', ');
 
return $res;
}
}
 
/** function baz_nextId () Renvoie le prochain identifiant numerique libre d'une table
*
* @param string Nom de la table
* @param string Nom du champs identifiant
* @param mixed Objet DB de PEAR pour la connexion a la base de donnees
*
* return integer Le prochain numero d'identifiant disponible
*/
function baz_nextId($table, $colonne_identifiant, $bdd) {
$requete = 'SELECT MAX('.$colonne_identifiant.') AS maxi FROM '.$table;
$resultat = $bdd->query($requete) ;
if (DB::isError($resultat)) {
die (__FILE__ . __LINE__ . $resultat->getMessage() . $requete);
return $bdd->raiseError($resultat) ;
}
if ($resultat->numRows() > 1) {
return $bdd->raiseError('<br />La table '.$table.' a un identifiant non unique<br />') ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
return $ligne->maxi + 1 ;
}
 
/** function baz_titre_wiki () Renvoie la chaine de caractere sous une forme compatible avec wikini
*
* @param string mot à transformer (enlever accents, espaces)
*
* return string mot transformé
*/
function baz_titre_wiki($nom) {
$titre=trim($nom);
for ($j = 0; $j < strlen ($titre); $j++) {
if (!preg_match ('/[a-zA-Z0-9]/', $titre[$j])) {
$titre[$j] = '_' ;
}
}
return $titre;
}
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.74.2.12 2008-04-16 12:38:17 alexandre_tb
* verification des droits avant de permettre l ajout d une nouvelle fiche
*
* Revision 1.74.2.11 2008-03-17 11:03:02 jp_milcent
* Ajout de l'authentification nécessaire pour déposer des commentaires.
* Corrections sur la gestion des paramêtres dans les urls (compatibilité applette Identification et Moteur de Recherche).
*
* Revision 1.74.2.10 2008-02-01 17:20:18 florian
* suppression du lien annuler pour la sélection des fiches, pas de valeur par défaut pour la sélection, et sélectionner un type de fiche devient obligatoire.
*
* Revision 1.74.2.9 2008-02-01 16:23:29 florian
* ajout champs_mail, décommenter les traductions des javascripts
*
* Revision 1.74.2.8 2008-02-01 09:56:56 alexandre_tb
* reglage du pb de double saisie de fiche,
* ajout d un exit apres le header location
*
* Revision 1.74.2.7 2008-01-29 14:35:22 alexandre_tb
* suppression de l identification pour l abonnement au fluxRSS
*
* Revision 1.74.2.6 2008-01-29 09:55:07 alexandre_tb
* suppression de l identification pour l abonnement au fluxRSS
*
* Revision 1.74.2.5 2008-01-29 09:35:36 alexandre_tb
* remplacement des variables action par une constante
* Utilisation d un redirection pour eviter que les formulaires soient valides 2 fois
* simplification de la suppression d un lien associe a une liste
*
* Revision 1.74.2.4 2008-01-11 14:10:12 alexandre_tb
* Remplacement de la variable action ecrite en dur par la constante BAZ_VARIABLE_ACTION
*
* Revision 1.74.2.3 2007-12-14 09:55:05 alexandre_tb
* suppression de style dans le formulaire
*
* Revision 1.74.2.2 2007-12-06 15:36:07 alexandre_tb
* appel de la fonction GEN_AttributsBody dans le composant carte_google
*
* Revision 1.74.2.1 2007-12-04 09:00:08 alexandre_tb
* corrections importantes sur baz_s_inscrire, simplification de l'application qui ne fonctionnait pas.
*
* Revision 1.74 2007-10-25 09:41:31 alexandre_tb
* mise en place de variable de session pour eviter que les formulaires soit valider 2 fois, pour les url, fichiers et image
*
* Revision 1.73 2007-10-24 13:27:00 alexandre_tb
* bug : double saisie d url
* suppression de warning sur variable
*
* Revision 1.72 2007-10-22 10:09:21 florian
* correction template
*
* Revision 1.71 2007-10-22 09:18:39 alexandre_tb
* prise en compte de la langue dans les requetes sur bazar_nature
*
* Revision 1.70 2007-10-10 13:26:36 alexandre_tb
* utilisation de la classe Administrateur_bazar a la place de niveau_droit
* suppression de fonction niveau_droit
*
* Revision 1.69 2007-09-18 07:39:42 alexandre_tb
* correction d un bug lors d une insertion
*
* Revision 1.68 2007-08-27 12:31:31 alexandre_tb
* mise en place de modele
*
* Revision 1.67 2007-07-04 10:01:30 alexandre_tb
* mise en place de divers templates :
* - mail pour admin (sujet et corps)
* - modele carte_google
* ajout de lignes dans bazar_template
*
* Revision 1.66 2007-06-25 12:15:06 alexandre_tb
* merge from narmer
*
* Revision 1.65 2007-06-25 08:31:17 alexandre_tb
* utilisation de la bibliotheque generale api/formulaire/formulaire.fonct.inc.php a la place de bazar.fonct.formulaire.php
*
* Revision 1.64 2007-06-04 15:25:39 alexandre_tb
* ajout de la carto google
*
* Revision 1.63 2007/04/11 08:30:12 neiluj
* remise en état du CVS...
*
* Revision 1.57.2.12 2007/03/16 14:49:24 alexandre_tb
* si la date de debut d evenement est superieure a la date de fin alors on met
* la meme date dans les deux champs (coherence)
*
* Revision 1.57.2.11 2007/03/07 17:40:57 jp_milcent
* Ajout d'id sur les colonnes et gestion par les CSS des styles du tableau des abonnements.
*
* Revision 1.57.2.10 2007/03/07 17:20:19 jp_milcent
* Ajout du nettoyage systématique des URLs.
*
* Revision 1.57.2.9 2007/03/06 16:23:24 jp_milcent
* Nettoyage de l'url pour la gestion des droits.
*
* Revision 1.57.2.8 2007/03/05 14:33:44 jp_milcent
* Suppression de l'appel à Mes_Fiches dans la fonction baz_formulaire
*
* Revision 1.57.2.7 2007/03/05 10:28:03 alexandre_tb
* correction d un commentaire
*
* Revision 1.57.2.6 2007/02/15 13:42:16 jp_milcent
* Utilisation de IN à la place du = dans les requêtes traitant les catégories de fiches.
* Permet d'utiliser la syntaxe 1,2,3 dans la configuration de categorie_nature.
*
* Revision 1.57.2.5 2007/02/12 16:16:31 alexandre_tb
* suppression du style clear:both dans les attribut du formulaire d identification
*
* Revision 1.57.2.4 2007/02/01 16:19:30 alexandre_tb
* correction erreur de requete sur insertion bazar_fiche
*
* Revision 1.57.2.3 2007/02/01 16:11:05 alexandre_tb
* correction erreur de requete sur insertion bazar_fiche
*
* Revision 1.57.2.2 2007/01/22 16:05:39 alexandre_tb
* insertion de la date du jour dans bf_date_debut_validite_fiche quand il n'y a pas ce champs dans le formulaire (évite le 0000-00-00)
*
* Revision 1.57.2.1 2006/12/13 13:23:03 alexandre_tb
* Remplacement de l appel d une constante par un appel direct. -> warning
*
* Revision 1.58 2006/12/13 13:20:16 alexandre_tb
* Remplacement de l appel d une constante par un appel direct. -> warning
*
* Revision 1.57 2006/10/05 08:53:50 florian
* amelioration moteur de recherche, correction de bugs
*
* Revision 1.56 2006/09/28 15:41:36 alexandre_tb
* Le formulaire pour se logguer dans l'action saisir reste sur l'action saisir après
*
* Revision 1.55 2006/09/21 14:19:39 florian
* amélioration des fonctions liés au wikini
*
* Revision 1.54 2006/09/14 15:11:23 alexandre_tb
* suppression temporaire de la gestion des wikinis
*
* Revision 1.53 2006/07/25 13:24:44 florian
* correction bug image
*
* Revision 1.52 2006/07/25 13:05:00 alexandre_tb
* Remplacement d un die par un echo
*
* Revision 1.51 2006/07/18 14:17:32 alexandre_tb
* Ajout d'un formulaire d identification
*
* Revision 1.50 2006/06/21 08:37:59 alexandre_tb
* Correction de bug, d'un appel constant (....) qui ne fonctionnais plus.
*
* Revision 1.49 2006/06/02 09:29:07 florian
* debut d'integration de wikini
*
* Revision 1.48 2006/05/19 13:54:11 florian
* stabilisation du moteur de recherche, corrections bugs, lien recherche avancee
*
* Revision 1.47 2006/04/28 12:46:14 florian
* integration des liens vers annuaire
*
* Revision 1.46 2006/03/29 13:04:35 alexandre_tb
* utilisation de la classe Administrateur_bazar
*
* Revision 1.45 2006/03/24 09:28:02 alexandre_tb
* utilisation de la variable globale $GLOBALS['_BAZAR_']['categorie_nature']
*
* Revision 1.44 2006/03/14 17:10:21 florian
* ajout des fonctions de syndication, changement du moteur de recherche
*
* Revision 1.43 2006/03/02 20:36:52 florian
* les entrees du formulaire de saisir ne sont plus dans les constantes mias dans des tables qui gerent le multilinguisme.
*
* Revision 1.42 2006/03/01 16:23:22 florian
* modifs textes fr et correction bug "undefined index"
*
* Revision 1.41 2006/03/01 16:05:51 florian
* ajout des fichiers joints
*
* Revision 1.40 2006/02/06 09:33:00 alexandre_tb
* correction de bug
*
* Revision 1.39 2006/01/30 17:25:38 alexandre_tb
* correction de bugs
*
* Revision 1.38 2006/01/30 10:27:04 florian
* - ajout des entrées de formulaire fichier, url, et image
* - correction bug d'affichage du mode de saisie
*
* Revision 1.37 2006/01/24 14:11:11 alexandre_tb
* correction de bug sur l'ajout d'une image et d'un fichier
*
* Revision 1.36 2006/01/19 17:42:11 florian
* ajout des cases à cocher pré-cochées pour les maj
*
* Revision 1.35 2006/01/18 11:06:51 florian
* correction erreur saisie date
*
* Revision 1.34 2006/01/18 10:53:28 florian
* corrections bugs affichage fiche
*
* Revision 1.33 2006/01/18 10:07:34 florian
* recodage de l'insertion et de la maj des données relatives aux listes et checkbox dans des formulaires
*
* Revision 1.32 2006/01/18 10:03:36 florian
* recodage de l'insertion et de la maj des données relatives aux listes et checkbox dans des formulaires
*
* Revision 1.31 2006/01/17 10:07:08 alexandre_tb
* en cours
*
* Revision 1.30 2006/01/16 09:42:57 alexandre_tb
* en cours
*
* Revision 1.29 2006/01/13 14:12:51 florian
* utilisation des temlates dans la table bazar_nature
*
* Revision 1.28 2006/01/05 16:28:24 alexandre_tb
* prise en chage des checkbox, reste la mise à jour à gérer
*
* Revision 1.27 2006/01/04 15:30:56 alexandre_tb
* mise en forme du code
*
* Revision 1.26 2006/01/03 10:19:31 florian
* Mise à jour pour accepter des parametres dans papyrus: faire apparaitre ou non le menu, afficher qu'un type de fiches, définir l'action par défaut...
*
* Revision 1.25 2005/12/20 14:49:35 ddelon
* Fusion Head vers Livraison
*
* Revision 1.24 2005/12/16 15:44:40 alexandre_tb
* ajout de l'option restreindre dépôt
*
* Revision 1.23 2005/12/01 17:03:34 florian
* changement des chemins pour appli Pear
*
* Revision 1.22 2005/12/01 16:05:41 florian
* changement des chemins pour appli Pear
*
* Revision 1.21 2005/12/01 15:31:30 florian
* correction bug modifs et saisies
*
* Revision 1.20 2005/11/30 13:58:45 florian
* ajouts graphisme (logos, boutons), changement structure SQL bazar_fiche
*
* Revision 1.19 2005/11/24 16:17:13 florian
* corrections bugs, ajout des cases à cocher
*
* Revision 1.18 2005/11/18 16:03:23 florian
* correction bug html entites
*
* Revision 1.17 2005/11/17 18:48:02 florian
* corrections bugs + amélioration de l'application d'inscription
*
* Revision 1.16 2005/11/07 17:30:36 florian
* ajout controle sur les listes pour la saisie
*
* Revision 1.15 2005/11/07 17:05:45 florian
* amélioration validation conditions de saisie, ajout des règles spécifiques de saisie des formulaires
*
* Revision 1.14 2005/11/07 08:48:02 florian
* correction pb guillemets pour saisie et modif de fiche
*
* Revision 1.13 2005/10/21 16:15:04 florian
* mise a jour appropriation
*
* Revision 1.11 2005/10/12 17:20:33 ddelon
* Reorganisation calendrier + applette
*
* Revision 1.10 2005/10/12 15:14:06 florian
* amélioration de l'interface de bazar, de manière a simplifier les consultations, et à harmoniser par rapport aux Ressources
*
* Revision 1.9 2005/10/10 16:22:52 alexandre_tb
* Correction de bug. Lorsqu'on revient en arrière après avoir validé un formulaire.
*
* Revision 1.8 2005/09/30 13:50:07 alexandre_tb
* correction bug date parution ressource
*
* Revision 1.7 2005/09/30 13:15:58 ddelon
* compatibilité php5
*
* Revision 1.6 2005/09/30 13:00:05 ddelon
* Fiche bazar generique
*
* Revision 1.5 2005/09/30 12:22:54 florian
* Ajouts commentaires pour fiche, modifications graphiques, maj SQL
*
* Revision 1.3 2005/07/21 19:03:12 florian
* nouveautés bazar: templates fiches, correction de bugs, ...
*
* Revision 1.1.1.1 2005/02/17 18:05:11 florian
* Import initial de Bazar
*
* Revision 1.1.1.1 2005/02/17 11:09:50 florian
* Import initial
*
* Revision 1.1.1.1 2005/02/16 18:06:35 florian
* import de la nouvelle version
*
* Revision 1.10 2004/07/08 17:25:25 florian
* ajout commentaires + petits debuggages
*
* Revision 1.8 2004/07/07 14:30:19 florian
* débogage RSS
*
* Revision 1.7 2004/07/06 16:22:01 florian
* débogage modification + MAJ flux RSS
*
* Revision 1.6 2004/07/06 09:28:26 florian
* changement interface de modification
*
* Revision 1.5 2004/07/05 15:10:23 florian
* changement interface de saisie
*
* Revision 1.4 2004/07/02 14:51:14 florian
* ajouts divers pour faire fonctionner l'insertion de fiches
*
* Revision 1.3 2004/07/01 16:37:42 florian
* ajout de fonctions pour les templates
*
* Revision 1.2 2004/07/01 13:00:13 florian
* modif Florian
*
* Revision 1.1 2004/06/23 09:58:32 alex
* version initiale
*
* Revision 1.1 2004/06/18 09:00:37 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
 
?>
/tags/v3.1-blanche-neige/bazarRSS.php
New file
0,0 → 1,115
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazarRSS.php,v 1.7 2007/04/11 08:30:12 neiluj Exp $
/**
* Générateur de flux RSS à partir du bazar
*
*@package bazar
//Auteur original :
*@author Florian SCHMITT <florian@ecole-et-nature.org>
*@author Alexandre Granier <alexandre@tela-botanica.org>
*
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.7 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
include_once 'configuration/baz_config.inc.php'; //fichier de configuration de Bazar
include_once 'bibliotheque/bazar.fonct.rss.php'; //fichier des fonctions RSS de Bazar
 
// +------------------------------------------------------------------------------------------------------+
// | CORPS DU PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
if (isset($_GET['annonce'])) {
$annonce=$_GET['annonce'];
}
else {
$annonce='';
}
 
if (isset($_GET['categorie_nature'])) {
$categorie_nature=$_GET['categorie_nature'];
}
else {
$categorie_nature='';
}
 
if (isset($_GET['nbitem'])) {
$nbitem=$_GET['nbitem'];
}
else {
$nbitem='';
}
 
if (isset($_GET['emetteur'])) {
$emetteur=$_GET['emetteur'];
}
else {
$emetteur='';
}
 
if (isset($_GET['valide'])) {
$valide=$_GET['valide'];
}
else {
$valide=1;
}
 
$requeteSQL='';
 
echo html_entity_decode(gen_RSS($annonce, $nbitem, $emetteur, $valide, $requeteSQL, '', '', $categorie_nature));
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: bazarRSS.php,v $
* Revision 1.7 2007/04/11 08:30:12 neiluj
* remise en état du CVS...
*
* Revision 1.4 2006/05/19 13:54:32 florian
* stabilisation du moteur de recherche, corrections bugs, lien recherche avancee
*
* Revision 1.3 2005/07/21 19:03:12 florian
* nouveautés bazar: templates fiches, correction de bugs, ...
*
* Revision 1.1.1.1 2005/02/17 18:05:11 florian
* Import initial de Bazar
*
* Revision 1.1.1.1 2005/02/17 11:09:50 florian
* Import initial
*
* Revision 1.1.1.1 2005/02/16 18:06:35 florian
* import de la nouvelle version
*
* Revision 1.3 2004/07/08 15:06:48 alex
* modification de la date
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
 
?>
/tags/v3.1-blanche-neige/bazar.carte_google.php
New file
0,0 → 1,282
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.carte_google.php,v 1.9 2008-10-29 15:51:36 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
//Autres auteurs :
*@copyright Tela-Satanica 2000-2007
*@version $Revision: 1.9 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
 
include_once 'configuration/baz_config.inc.php';
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazar.fonct.php';
// Inclusion d'une classe personnalise si elle existe
 
// Le fichier de script de google map
GEN_stockerFichierScript('googleMapScript', 'http://maps.google.com/maps?file=api&amp;v=2&amp;key='.BAZ_GOOGLE_KEY);
 
// Le fichier jquery pour le date picker
//GEN_stockerFichierScript('jquery', 'api/js/jquery/jquery.js');
//GEN_stockerFichierScript('jquery', 'http://code.jquery.com/jquery-latest.js');
GEN_stockerFichierScript('jquery_date_picker', 'api/js/jquery/ui.datepicker.js');
GEN_stockerFichierScript('jquery_date_picker_fr', 'api/js/jquery/ui.datepicker-fr.js');
 
GEN_stockerStyleExterne( 'jquery_date_picker_style', 'api/js/jquery/ui.datepicker.css');
 
 
if (defined('PAP_VERSION')) { //si on est dans Papyrus
GEN_stockerStyleExterne( 'bazar_interne', 'client/bazar/bazar.interne.css');
}
$GLOBALS['_BAZAR_']['id_typeannonce']=$GLOBALS['_GEN_commun']['info_application']->id_nature;
$GLOBALS['_BAZAR_']['categorie_nature']=$GLOBALS['_GEN_commun']['info_application']->categorie_nature;
// requete sur le bazar pour recuperer les evenements
 
$requete_where = '';
foreach ($_POST as $cle => $valeur) {
if (preg_match ('/bazar_filtre_([0-9]+)/', $cle, $sousmotif)) {
$variable = $sousmotif[0] ;
if ($_POST[$variable] != '*') {
$requete_where = ' and bfvl_ce_liste="'.$sousmotif[1].'" and bfvl_valeur="'.$_POST[$variable].'" ';
} else {
$requete_where = ' and bfvl_ce_liste="'.$sousmotif[1].'" ';
}
} else {
}
}
 
if (isset($_POST['date_debut']) && $_POST['date_debut'] != '') {
$requete_date = '((bf_date_debut_evenement <= "'.date('Y-m-d', strtotime($_POST['date_fin'])).'" and bf_date_debut_evenement >="'.date('Y-m-d', strtotime($_POST['date_debut'])).'" )' .
' or (bf_date_fin_evenement >="'.date('Y-m-d', strtotime($_POST['date_debut'])).'" and bf_date_fin_evenement <="'.date('Y-m-d', strtotime($_POST['date_fin'])).'")' .
' or bf_date_debut_evenement <= "'.date('Y-m-d', strtotime($_POST['date_debut'])).'" and bf_date_fin_evenement >= "'.date('Y-m-d', strtotime($_POST['date_fin'])).'") ';
} else {
$requete_date = '((bf_date_debut_validite_fiche <= now( ) AND bf_date_fin_validite_fiche >= now( ))
OR (bf_date_fin_validite_fiche = "0000-00-00" AND date_add( bf_date_fin_evenement, INTERVAL 15 DAY ) > now( )) )';
}
 
$requete = 'SELECT blv_label,blv_valeur, bazar_fiche.*'.
' FROM bazar_fiche, bazar_fiche_valeur_liste , bazar_liste_valeurs'.
' WHERE bf_statut_fiche =1 and bf_id_fiche=bfvl_ce_fiche'.
' and bfvl_ce_liste=blv_ce_liste and bfvl_ce_liste=31 and bfvl_valeur=blv_valeur '.$requete_where.' and '.
$requete_date;
$resultat = $GLOBALS['_BAZAR_']['db']->query ($requete);
 
if (DB::isError($resultat)) {
return BOG_afficherErreurSql(__FILE__, __LINE__, $resultat->getMessage().'<br />'.$resultat->getDebugInfo(), $requete);echo $requete;
}
 
// Le code complique avec ces 2 tableaux sert
// a ne pas mettre 2 points aux memes coordonnees
// car dans ce cas la seul le second serait visible
 
$donnees = array();
 
if ($resultat->numRows() != 0) {
$script_marker = '';
$couleur_drapeau = array ( 1 => 'bleu', 2 => 'vert', 3 => 'orange', 4 => 'rose');
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
if ($ligne['bf_latitude'] == 0 && $ligne['bf_longitude'] == 0) continue;
$cle = $ligne['bf_latitude'].'-'.$ligne['bf_longitude'];
$donnees[$cle][] = $ligne;
}
foreach ($donnees as $valeur) {
// cas un : une seule entree pour le point de coordonnees
if (count ($valeur) == 1) {
$chaine = $valeur[0];
$script_marker .= 'var icon = new GIcon(G_DEFAULT_ICON);
icon.image = "client/bazar/images/drapeau_'.$couleur_drapeau[$chaine['blv_valeur']].'.png";'."\n".'
icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
icon.iconSize = new GSize(16, 16);
icon.shadowSize = new GSize(16, 16);
icon.iconAnchor = new GPoint(6, 16);
icon.infoWindowAnchor = new GPoint(5, 1);'."\n";
$script_marker .= "\t".'point = new GLatLng('.$chaine['bf_latitude'].','.$chaine['bf_longitude'].');'."\n"
."\t".'map.addOverlay(createMarker(point, \''.'<div class="BAZ_cadre_map">'.
preg_replace ('/\n/', '', str_replace ("\r\n", '',
str_replace ("'", "\'", baz_voir_fiche(0, $chaine['bf_id_fiche'])))).'</div>\',icon));'."\n";
} else { // Cas 2 plusieurs entrees
$tableau_id = array();
foreach ($valeur as $val) {
array_push ($tableau_id, $val['bf_id_fiche']);
}
$script_marker .= 'var icon = new GIcon();
icon.image = "http://www.tela-botanica.org/client/bazar/images/drapeau_'.$couleur_drapeau[$chaine['blv_valeur']].'.png";
icon.shadow = "http://www.google.com/mapfiles/shadow50.png";
icon.iconSize = new GSize(16, 16);
icon.shadowSize = new GSize(37, 34);
icon.iconAnchor = new GPoint(6, 34);
icon.infoWindowAnchor = new GPoint(5, 1);';
$script_marker .= "\t".'point = new GLatLng('.$val['bf_latitude'].','.$val['bf_longitude'].');'."\n"
."\t".'map.addOverlay(createMarker(point, \''.'<div class="BAZ_cadre_map">'.
preg_replace ('/\n/', '', str_replace ("\r\n", '',
str_replace ("'", "\'", baz_voir_fiches(0, $tableau_id)))).'</div>\', icon));'."\n";
}
}
} else {
$script_marker = '';
}
 
$script = ' // Variables globales
var map = null;
// cette fonction peut déjà être présente
if (typeof(addListener) != \'function\') {
// fonction portable pour ajout de listeners
function addListener(element, baseName, handler)
{
if (element.addEventListener) {
element.addEventListener(baseName, handler, false) ;
} else if (element.attachEvent) {
element.attachEvent(\'on\'+baseName, handler) ;
}
}
}
addListener(window,\'load\',loadMap) ;';
if (BAZ_GOOGLE_MAXIMISE_TAILLE) $script .= '
// Pour gerer la taille
var winW = 630, winH = 560;
var deltaH = 220;
var deltaW = 270;
 
function setWinHW() {
if (window.innerHeight) {
winW = window.innerWidth - deltaW;
winH = window.innerHeight - deltaH;
} else {
winW = document.documentElement.offsetWidth - 20 - deltaW;
winH = document.documentElement.offsetHeight - 20 - deltaH ;
}
 
var me = document.getElementById("map");
if (me != null) {
me.style.width= \'\' + winW + \'px\';
me.style.height= \'\' + winH + \'px\';
}
}
 
window.onresize = function () {
setWinHW();
if (map) map.checkResize();
}';
$script .= '
function createMarker(point, chaine, icon) {
 
var marker = new GMarker(point, icon);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(chaine);
});
return marker;
}
function loadMap() {';
if (BAZ_GOOGLE_MAXIMISE_TAILLE) $script .= '
setWinHW();';
$script .= '
if (GBrowserIsCompatible()) {
map = new GMap2(document.getElementById("map"));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.addControl(new GScaleControl());
map.enableContinuousZoom();
// On centre la carte sur le languedoc roussillon
center = new GLatLng('.BAZ_GOOGLE_CENTRE_LAT.', '.BAZ_GOOGLE_CENTRE_LON.');
map.setCenter(center, '.BAZ_GOOGLE_ALTITUDE.');
map.setMapType(G_HYBRID_MAP);' ;
if (BAZ_GOOGLE_FOND_KML != '') {
$script .= 'var geoXml = new GGeoXml("'.BAZ_GOOGLE_FOND_KML.'");';
}
$script .= $script_marker;
if (BAZ_GOOGLE_FOND_KML != '') {
$script .= 'map.addOverlay(geoXml);';
}
$script .= '
}
};
';
 
GEN_stockerCodeScript($script);
// On ajoute l attribut load a la balise body
//GEN_AttributsBody('onload', 'load()');
 
 
function afficherContenuCorps() {
include_once BAZ_CHEMIN_APPLI.'bibliotheque/bazarTemplate.class.php';
$modele = new bazarTemplate($GLOBALS['_BAZAR_']['db']);
$html = $modele->getTemplate(BAZ_TEMPLATE_ACCUEIL_CARTE_GOOGLE, $GLOBALS['_BAZAR_']['langue'], $GLOBALS['_BAZAR_']['categorie_nature']);
if (PEAR::isError($html)) return $html->getMessage();
// nettoyage url
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ID_FICHE) ;
$GLOBALS['_BAZAR_']['url']->removeQueryString(BAZ_VARIABLE_ACTION) ;
$html = bazar::getFormulaireFiltre($html) ;
$res = str_replace ('{CARTE}', '<div id="map" style="width: '.BAZ_GOOGLE_IMAGE_LARGEUR.
'px; height: '.BAZ_GOOGLE_IMAGE_HAUTEUR.'px"></div>', $html);
 
return $res;
}
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.5.2.3 2008-01-29 09:41:11 alexandre_tb
* utilisation des constantes BAZ_GOOGLE_FOND_KML
*
* Revision 1.5.2.2 2007-12-14 09:57:15 alexandre_tb
* utilisation des constantes de la carte google
*
* Revision 1.5.2.1 2007-12-04 16:19:32 jp_milcent
* Ajout de la prise en charge de l'applette body_attributs
*
* Revision 1.5 2007-10-01 12:07:03 alexandre_tb
* utilisation de constantes du fichier de conf pour centrer la carte
*
* Revision 1.4 2007-08-27 12:27:34 alexandre_tb
* mise en place d un icone personnalise
* et de l affichage de plusieurs donnees sur un meme point
*
* Revision 1.3 2007-07-04 10:08:41 alexandre_tb
* Appel du template carte_google
*
* Revision 1.2 2007-06-13 10:02:47 alexandre_tb
* le carte s adapte a la taille du conteneur
*
* Revision 1.1 2007-06-04 15:26:57 alexandre_tb
* version initiale
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
/tags/v3.1-blanche-neige/upload/vide.txt
--- v3.1-blanche-neige/bazar.head.php (revision 0)
+++ v3.1-blanche-neige/bazar.head.php (revision 470)
@@ -0,0 +1,14 @@
+<?php
+include_once 'configuration/baz_config.inc.php'; //fichier de configuration de Bazar
+
+$requete = 'SELECT bn_id_nature, bn_label_nature FROM bazar_nature' ;
+$resultat = $GLOBALS['_BAZAR_']['db']->query ($requete) ;
+if (DB::isError($resultat)) {
+ die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
+}
+echo '<link rel="alternate" type="application/rss+xml" title="'.BAZ_TOUTES_LES_ANNONCES.'" href="http://'.$_SERVER['HTTP_HOST'].'/bazar/bazarRSS.php" />'."\n";
+while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
+ echo '<link rel="alternate" type="application/rss+xml" title="'.$ligne['bn_label_nature'].'" href="http://'.$_SERVER['HTTP_HOST'].'/bazar/bazarRSS.php?annonce='.$ligne['bn_label_nature'].'" />'."\n";
+}
+
+?>
/tags/v3.1-blanche-neige/bazar.php
New file
0,0 → 1,518
<?php
/*vim: set expandtab tabstop=4 shiftwidth=4: */
// +------------------------------------------------------------------------------------------------------+
// | PHP version 4.1 |
// +------------------------------------------------------------------------------------------------------+
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org) |
// +------------------------------------------------------------------------------------------------------+
// | This library is free software; you can redistribute it and/or |
// | modify it under the terms of the GNU Lesser General Public |
// | License as published by the Free Software Foundation; either |
// | version 2.1 of the License, or (at your option) any later version. |
// | |
// | This library is distributed in the hope that it will be useful, |
// | but WITHOUT ANY WARRANTY; without even the implied warranty of |
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
// | Lesser General Public License for more details. |
// | |
// | You should have received a copy of the GNU Lesser General Public |
// | License along with this library; if not, write to the Free Software |
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
// +------------------------------------------------------------------------------------------------------+
// CVS : $Id: bazar.php,v 1.49.2.4 2008-02-04 13:10:15 alexandre_tb Exp $
/**
*
*@package bazar
//Auteur original :
*@author Alexandre GRANIER <alexandre@tela-botanica.org>
*@author Florian Schmitt <florian@ecole-et-nature.org>
//Autres auteurs :
*@copyright Tela-Botanica 2000-2004
*@version $Revision: 1.49.2.4 $ $Date: 2008-02-04 13:10:15 $
// +------------------------------------------------------------------------------------------------------+
*/
 
// +------------------------------------------------------------------------------------------------------+
// | ENTETE du PROGRAMME |
// +------------------------------------------------------------------------------------------------------+
 
//error_reporting(E_ALL);
require_once PAP_CHEMIN_API_PEAR.'DB.php' ;
require_once PAP_CHEMIN_API_PEAR.'Auth.php' ;
require_once 'configuration/baz_config.inc.php'; //fichier de configuration de Bazar
require_once 'bibliotheque/bazar.class.php';
require_once 'bibliotheque/bazar.fonct.php'; //fichier des fonctions de Bazar
 
if (defined('PAP_VERSION')) { //si on est dans Papyrus
GEN_stockerStyleExterne( 'bazar_interne', 'client/bazar/bazar.interne.css');
}
 
//**********************************************************************************************************
//initialisation des paramêtres papyrus
//**********************************************************************************************************
//si un parametre est précisé dans le gestionnaire de menus papyrus, on le prends en compte
 
//parametre action pour lancer directement l'action indiquée
if (!isset($_GET[BAZ_VARIABLE_ACTION])and(isset($GLOBALS['_GEN_commun']['info_application']->action))) {
$_GET[BAZ_VARIABLE_ACTION]=$GLOBALS['_GEN_commun']['info_application']->action;
}
 
//parametre vue pour afficher directement une vue
if (!isset($_GET[BAZ_VARIABLE_VOIR])and(isset($GLOBALS['_GEN_commun']['info_application']->vue))) {
$_GET[BAZ_VARIABLE_VOIR]=$GLOBALS['_GEN_commun']['info_application']->vue;
}
 
// Si le parametre vue est vide on le positionne a 1
if (!isset($_GET[BAZ_VARIABLE_VOIR])) {
$_GET[BAZ_VARIABLE_VOIR] = BAZ_VOIR_CONSULTER;
}
 
if(!isset($GLOBALS['_BAZAR_']['mois']))
{
$GLOBALS['mois'] = array (1 => BAZ_JANVIER, 2 => BAZ_FEVRIER, 3 => BAZ_MARS, 4 => BAZ_AVRIL, 5 => BAZ_MAI, 6 => BAZ_JUIN,
7 => BAZ_JUILLET, 8 => BAZ_AOUT, 9 => BAZ_SEPTEMBRE, 10 => BAZ_OCTOBRE, 11 =>BAZ_NOVEMBRE,
12 => BAZ_DECEMBRE) ;
}
 
//parametre voir_menu pour afficher le menu ou pas (par défaut, il l'affiche)
if ((isset($GLOBALS['_GEN_commun']['info_application']->voir_menu))and($GLOBALS['_GEN_commun']['info_application']->voir_menu==0)) {
$GLOBALS['_BAZAR_']['affiche_menu']=0;
}
else $GLOBALS['_BAZAR_']['affiche_menu']=1;
 
//parametre categorie_nature pour préciser quels types de fiches sont montrees (par défaut, il affiche les id_menu=0)
if (isset($GLOBALS['_GEN_commun']['info_application']->categorie_nature)) {
$GLOBALS['_BAZAR_']['categorie_nature']=$GLOBALS['_GEN_commun']['info_application']->categorie_nature;
}
elseif (isset($_REQUEST['categorie_nature'])) {
$GLOBALS['_BAZAR_']['categorie_nature']=$_REQUEST['categorie_nature'];
}
else $GLOBALS['_BAZAR_']['categorie_nature']=0;
 
//parametre id_nature pour afficher un certain type de fiche (par défaut, tous les types de fiches)
if (isset($GLOBALS['_GEN_commun']['info_application']->id_nature)) {
$GLOBALS['_BAZAR_']['id_typeannonce']=$GLOBALS['_GEN_commun']['info_application']->id_nature;
}
elseif (!isset($GLOBALS['_BAZAR_']['typeannonce'])) $GLOBALS['_BAZAR_']['typeannonce']='toutes';
 
 
//**********************************************************************************************************
//initialisation de la variable globale de bazar
//**********************************************************************************************************
$GLOBALS['id_user']=$GLOBALS['AUTH']->getAuthData(BAZ_CHAMPS_ID);
 
//Recuperer les eventuelles variables passees en GET ou en POST
if (isset($_REQUEST['id_fiche'])) {
$GLOBALS['_BAZAR_']['id_fiche'] = $_REQUEST['id_fiche'];
// récupération du type d'annonce à partir de la fiche
$requete = 'select bf_ce_nature from bazar_fiche where bf_id_fiche='.$_REQUEST['id_fiche'] ;
$resultat = $GLOBALS['_BAZAR_']['db']->query ($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
$GLOBALS['_BAZAR_']['id_typeannonce'] = $ligne->bf_ce_nature ;
$resultat->free();
}
if (isset($_REQUEST['typeannonce']) && $_REQUEST['typeannonce'] != '1,2,3,4') {
$GLOBALS['_BAZAR_']['id_typeannonce'] = $_REQUEST['typeannonce'];
}
else
{
$GLOBALS['_BAZAR_']['id_typeannonce'] = 'toutes' ;
}
 
if (isset($_REQUEST['liste31'])) {
if($_REQUEST['liste31'] == "0")
{
$GLOBALS['_BAZAR_']['id_typeannonce']= 'toutes' ;
}
else
{
$GLOBALS['_BAZAR_']['id_typeannonce']= $_REQUEST['liste31'];
}
}
else
{
$GLOBALS['_BAZAR_']['id_typeannonce'] = 'toutes' ;
}
 
if ((isset($GLOBALS['_BAZAR_']['id_typeannonce']))and($GLOBALS['_BAZAR_']['id_typeannonce']!='toutes')) {
$typeAnnonce = false;
$requete = 'SELECT bn_label_nature, bn_condition, bn_template, bn_commentaire, bn_appropriation, bn_image_titre, bn_image_logo '.
'FROM bazar_nature ';
if (isset($GLOBALS['_BAZAR_']['id_typeannonce']) && !empty($GLOBALS['_BAZAR_']['id_typeannonce']) && isset($GLOBALS['_BAZAR_']['id_typeannonce']) != 'toutes') {
$requete .= 'WHERE bn_id_nature = '.$GLOBALS['_BAZAR_']['id_typeannonce'];
$typeAnnonce = true;
}
if (isset($GLOBALS['_BAZAR_']['langue'])) {
if (!$typeAnnonce) {
$requete .= ' WHERE ';
} else {
$requete .= ' AND ';
}
$requete .= 'bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%"';
}
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$GLOBALS['_BAZAR_']['typeannonce']=$ligne['bn_label_nature'];
$GLOBALS['_BAZAR_']['condition']=$ligne['bn_condition'];
$GLOBALS['_BAZAR_']['template']=$ligne['bn_template'];
$GLOBALS['_BAZAR_']['commentaire']=$ligne['bn_commentaire'];
$GLOBALS['_BAZAR_']['appropriation']=$ligne['bn_appropriation'];
$GLOBALS['_BAZAR_']['image_titre']=$ligne['bn_image_titre'];
$GLOBALS['_BAZAR_']['image_logo']=$ligne['bn_image_logo'];
}
else
{
$requete = 'SELECT bn_label_nature, bn_condition, bn_template, bn_commentaire, bn_appropriation, bn_image_titre, bn_image_logo '.
'FROM bazar_nature ';
$requete .= 'WHERE bn_id_nature = 1';
$typeAnnonce = true;
if (isset($GLOBALS['_BAZAR_']['langue'])) {
if (!$typeAnnonce) {
$requete .= ' WHERE ';
} else {
$requete .= ' AND ';
}
$requete .= 'bn_ce_i18n like "'.$GLOBALS['_BAZAR_']['langue'].'%"';
}
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
$GLOBALS['_BAZAR_']['typeannonce']= 'toutes' ;
$GLOBALS['_BAZAR_']['condition']=$ligne['bn_condition'];
$GLOBALS['_BAZAR_']['template']=$ligne['bn_template'];
$GLOBALS['_BAZAR_']['commentaire']=$ligne['bn_commentaire'];
$GLOBALS['_BAZAR_']['appropriation']=$ligne['bn_appropriation'];
$GLOBALS['_BAZAR_']['image_titre']=$ligne['bn_image_titre'];
$GLOBALS['_BAZAR_']['image_logo']=$ligne['bn_image_logo'];
}
 
if (!isset($GLOBALS['_BAZAR_']['id_typeannonce'])) $GLOBALS['_BAZAR_']['id_typeannonce'] = 'toutes' ;
 
// +------------------------------------------------------------------------------------------------------+
// | LISTE de FONCTIONS |
// +------------------------------------------------------------------------------------------------------+
if ($GLOBALS['_BAZAR_']['affiche_menu']) {
//---------------le menu de l'appli-----------
function afficherContenuNavigation () {
$res ='<ul class="onglets" id="BAZ_menu">'."\n";
 
// Gestion de la vue par défaut
if (!isset($_GET[BAZ_VARIABLE_VOIR])) {
$_GET[BAZ_VARIABLE_VOIR] = BAZ_VOIR_DEFAUT;
}
 
//partie consultation d'annonces
if (strstr(BAZ_VOIR_AFFICHER, strval(BAZ_VOIR_CONSULTER))) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_CONSULTER);
$res .= '<li id="consulter"';
if ((isset($_GET[BAZ_VARIABLE_VOIR]) && $_GET[BAZ_VARIABLE_VOIR] == BAZ_VOIR_CONSULTER)) { $res .=' class="menu_actif" '; } else { $res .=' class="menu_inactif" '; }
$res .='><a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.BAZ_CONSULTER.'</a>'."\n".'</li>'."\n";
}
// Mes fiches
if (strstr(BAZ_VOIR_AFFICHER, strval(BAZ_VOIR_MES_FICHES))) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_MES_FICHES);
$res .= '<li id="mes_fiches"';
if (isset($_GET[BAZ_VARIABLE_VOIR]) && $_GET[BAZ_VARIABLE_VOIR] == BAZ_VOIR_MES_FICHES) { $res .=' class="menu_actif" '; } else { $res .=' class="menu_inactif" '; }
$res .= '><a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.BAZ_VOIR_VOS_ANNONCES.'</a>'."\n".'</li>'."\n";
}
//partie abonnement aux annonces
if (strstr(BAZ_VOIR_AFFICHER, strval(BAZ_VOIR_S_ABONNER))) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_S_ABONNER);
$res .= '<li id="inscrire"';
if (isset($_GET[BAZ_VARIABLE_VOIR]) && $_GET[BAZ_VARIABLE_VOIR]==BAZ_VOIR_S_ABONNER) { $res .=' class="menu_actif" '; } else { $res .=' class="menu_inactif" '; }
$res .= '><a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.BAZ_S_ABONNER.'</a></li>'."\n" ;
}
//partie saisie d'annonces
if (strstr(BAZ_VOIR_AFFICHER, strval(BAZ_VOIR_SAISIR))) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_SAISIR);
$res .= '<li id="deposer"';
if (isset($_GET[BAZ_VARIABLE_VOIR]) && ($_GET[BAZ_VARIABLE_VOIR]==BAZ_VOIR_SAISIR )) { $res .=' class="menu_actif" '; } else { $res .=' class="menu_inactif" '; }
$res .='><a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.BAZ_SAISIR.'</a>'."\n".'</li>'."\n";
}
//choix des administrateurs
$utilisateur = new Administrateur_bazar($GLOBALS['AUTH']) ;
$est_admin=0;
if ($GLOBALS['AUTH']->getAuth()) {
$requete='SELECT bn_id_nature FROM bazar_nature';
$resultat = $GLOBALS['_BAZAR_']['db']->query($requete) ;
if (DB::isError($resultat)) {
die ($resultat->getMessage().$resultat->getDebugInfo()) ;
}
while ($ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC)) {
if ($utilisateur->isAdmin ($ligne['bn_id_nature'])) {
$est_admin=1;
}
}
if ($est_admin || $utilisateur->isSuperAdmin()) {
//partie administrer
if (strstr(BAZ_VOIR_AFFICHER, strval(BAZ_VOIR_ADMIN))) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_ADMIN);
$res .= '<li id="administrer"';
if (isset($_GET[BAZ_VARIABLE_VOIR]) && $_GET[BAZ_VARIABLE_VOIR]==BAZ_VOIR_ADMIN) { $res .=' class="menu_actif" '; } else { $res .=' class="menu_inactif" '; }
$res .='><a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.BAZ_ADMINISTRER.'</a></li>'."\n";
}
if ($utilisateur->isSuperAdmin()) {
if (strstr(BAZ_VOIR_AFFICHER, strval(BAZ_VOIR_GESTION_DROITS))) {
$GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, BAZ_VOIR_GESTION_DROITS);
$res .= '<li id="gerer"';
if (isset($_GET[BAZ_VARIABLE_VOIR]) && $_GET[BAZ_VARIABLE_VOIR]==BAZ_VOIR_GESTION_DROITS) { $res .=' class="menu_actif" '; } else { $res .=' class="menu_inactif" '; }
$res .='><a href="'.$GLOBALS['_BAZAR_']['url']->getURL().'">'.BAZ_GESTION_DES_DROITS.'</a></li>'."\n" ;
}
}
}
}
// Au final, on place dans l url, l action courante
if (isset($_GET[BAZ_VARIABLE_VOIR])) $GLOBALS['_BAZAR_']['url']->addQueryString(BAZ_VARIABLE_VOIR, $_GET[BAZ_VARIABLE_VOIR]);
$res.= '</ul>'."\n";
return $res ;
}
}
function afficherContenuCorps() {
 
$res = '';
$res.='<h1 id="titre_bazar">'.$GLOBALS['_GEN_commun']['info_menu']->gm_titre.'</h1>'."\n";
 
// La resolution des actions ci-dessous AVANT l afichage des vues afin
// d afficher des vues correctes
if (isset($_GET[BAZ_VARIABLE_ACTION])) {
 
if (($_GET[BAZ_VARIABLE_ACTION]!=BAZ_ACTION_NOUVEAU_V)and($_GET[BAZ_VARIABLE_ACTION]!=BAZ_ACTION_MODIFIER_V)) unset($_SESSION['formulaire_annonce_valide']);
switch ($_GET[BAZ_VARIABLE_ACTION]) {
case BAZ_ACTION_VOIR_VOS_ANNONCES : $res .= mes_fiches(); break;
case BAZ_ANNONCES_A_VALIDER : $res .= fiches_a_valider(); break;
case BAZ_ADMINISTRER_ANNONCES : $res .= baz_administrer_annonces(); break;
case BAZ_SUPPRIMER_FICHE : $res .= baz_suppression().baz_liste('',$GLOBALS['id_user'],''); break;
case BAZ_VOIR_FICHE : $res .= baz_voir_fiche(1); break;
case BAZ_ACTION_NOUVEAU_V : $res .= baz_formulaire(BAZ_ACTION_NOUVEAU_V).mes_fiches(); break;
case BAZ_ACTION_SUPPRESSION : $res .= baz_suppression(); unset ($_GET['action']); break;
case BAZ_ACTION_PUBLIER : publier_fiche(1) ; break;
case BAZ_ACTION_PAS_PUBLIER : publier_fiche(0) ;$res .= fiches_a_valider(); break;
case BAZ_S_INSCRIRE : $res .= baz_s_inscrire(); break;
case BAZ_VOIR_FLUX_RSS : header('Content-type: text/xml; charset=UTF-8');include("bazarRSS.php");exit(0);break;
case BAZ_ACTION_POST_VALIDATION : $res .= baz_post_validation();break;
}
}
if (isset ($_GET[BAZ_VARIABLE_VOIR])) {
switch ($_GET[BAZ_VARIABLE_VOIR]) {
case BAZ_VOIR_CONSULTER:
if (isset ($_GET[BAZ_VARIABLE_ACTION]) && $_GET[BAZ_VARIABLE_ACTION] != BAZ_VOIR_TOUTES_ANNONCES) {
$res .= baz_formulaire($_GET[BAZ_VARIABLE_ACTION]) ;
if ($_GET[BAZ_VARIABLE_ACTION] == BAZ_ACTION_MODIFIER_V) $res .= baz_voir_fiche(1);
} else $res .= baz_liste($GLOBALS['_BAZAR_']['id_typeannonce']);
break;
case BAZ_VOIR_MES_FICHES :
if (isset ($_GET[BAZ_VARIABLE_ACTION])) $res .= baz_formulaire($_GET[BAZ_VARIABLE_ACTION]) ; else $res .= mes_fiches();
break;
case BAZ_VOIR_S_ABONNER : $res .= baz_s_inscrire();
break;
case BAZ_VOIR_SAISIR :
if (isset ($_GET[BAZ_VARIABLE_ACTION])) $res .= baz_formulaire($_GET[BAZ_VARIABLE_ACTION]) ; else $res .= baz_formulaire(BAZ_DEPOSER_ANNONCE);
break;
case BAZ_VOIR_ADMIN:
if (isset($_GET[BAZ_VARIABLE_ACTION])) $res .= baz_formulaire($_GET[BAZ_VARIABLE_ACTION]) ; else $res .= fiches_a_valider();
break;
case BAZ_VOIR_GESTION_DROITS: $res .= baz_gestion_droits();
break;
default :
$res .= baz_liste($GLOBALS['_BAZAR_']['id_typeannonce']);
}
}
return $res ;
}
 
 
/* +--Fin du code ----------------------------------------------------------------------------------------+
*
* $Log: not supported by cvs2svn $
* Revision 1.49.2.3 2008-01-29 09:43:19 alexandre_tb
* Utilisation d un redirection pour eviter que les formulaires soient valides 2 fois
*
* Revision 1.49.2.2 2008-01-11 14:07:39 alexandre_tb
* Remplacement de la variable action ecrite en dur par la constante BAZ_VARIABLE_ACTION
*
* Revision 1.49.2.1 2007-12-04 09:01:17 alexandre_tb
* suppression de vieux code commenté.
*
* Revision 1.49 2007-10-24 13:26:02 alexandre_tb
* bug : double saisie d url
*
* Revision 1.48 2007-10-17 08:24:59 alexandre_tb
* correction multilinguisme
*
* Revision 1.47 2007-10-01 12:13:53 alexandre_tb
* bug, affichage vue / action pour la vue "administrer"
*
* Revision 1.46 2007-09-28 14:29:13 jp_milcent
* Ajout de la gestion de l'affichage des vues ou pas.
*
* Revision 1.45 2007-09-18 14:24:01 alexandre_tb
* onglet administrer
*
* Revision 1.44 2007-09-06 15:39:28 alexandre_tb
* fixation d une valeur par defaut a la variable vue pour
* eviter un ecran vide si pas de parametres dans le menu
*
* Revision 1.43 2007-08-27 12:26:04 alexandre_tb
* Mise en place de l action BAZ_VOIR_ADMIN
*
* Revision 1.42 2007-07-05 08:29:24 alexandre_tb
* modification du charset iso-8859-1 vers utf8 lors l'envoie des entetes xml.
*
* Revision 1.41 2007-07-04 10:05:12 alexandre_tb
* ajout d une variable $_GET['vue'] en complement de la variable action.
* Elle correspond aux 6 vues du bazar (consulter, mes fiches, s'abonner, saisir, administrer, gestion des droits)
*
* Revision 1.40 2007/04/11 08:30:12 neiluj
* remise en état du CVS...
*
* Revision 1.35.2.2 2007/03/07 16:53:17 jp_milcent
* Suppression du query string "action" et non pas "nature"
*
* Revision 1.35.2.1 2007/02/15 13:42:16 jp_milcent
* Utilisation de IN à la place du = dans les requêtes traitant les catégories de fiches.
* Permet d'utiliser la syntaxe 1,2,3 dans la configuration de categorie_nature.
*
* Revision 1.35 2006/10/05 08:53:50 florian
* amelioration moteur de recherche, correction de bugs
*
* Revision 1.34 2006/09/04 15:25:12 alexandre_tb
* ajout d'un id dans la balise HTML du titre
*
* Revision 1.33 2006/06/21 15:41:42 alexandre_tb
* rétablissement du menu mes fiches
*
* Revision 1.32 2006/06/21 15:40:15 alexandre_tb
* rétablissement du menu mes fiches
*
* Revision 1.31 2006/05/19 13:54:32 florian
* stabilisation du moteur de recherche, corrections bugs, lien recherche avancee
*
* Revision 1.30 2006/04/28 12:46:14 florian
* integration des liens vers annuaire
*
* Revision 1.29 2006/04/24 10:16:22 alexandre_tb
* ajout de la globale filtre.
* elle remplace (à terme) catégorie nature
*
* Revision 1.28 2006/03/29 13:05:41 alexandre_tb
* utilisation de la classe Administrateur_bazar
*
* Revision 1.27 2006/02/07 11:08:36 alexandre_tb
* utilisation de la classe Utilisateur_bazar pour la vérification des droits
*
* Revision 1.26 2006/02/06 09:33:53 alexandre_tb
* modification de l'affichage lors de la saisie de fiche
*
* Revision 1.25 2006/01/30 17:25:38 alexandre_tb
* correction de bugs
*
* Revision 1.24 2006/01/26 11:06:43 alexandre_tb
* ajout d'une requete pour recupere l'id_nature si un id_fiche est passé dans l'url
*
* Revision 1.23 2006/01/17 10:07:36 alexandre_tb
* en cours
*
* Revision 1.22 2006/01/16 15:11:28 alexandre_tb
* simplification code
*
* Revision 1.21 2006/01/13 14:12:52 florian
* utilisation des temlates dans la table bazar_nature
*
* Revision 1.20 2006/01/05 16:28:25 alexandre_tb
* prise en chage des checkbox, reste la mise à jour à gérer
*
* Revision 1.19 2006/01/03 10:19:31 florian
* Mise à jour pour accepter des parametres dans papyrus: faire apparaitre ou non le menu, afficher qu'un type de fiches, définir l'action par défaut...
*
* Revision 1.18 2005/12/02 10:57:03 florian
* MAJ pour paramétrage dans gestion de menus papyrus
*
* Revision 1.17 2005/12/01 16:05:41 florian
* changement des chemins pour appli Pear
*
* Revision 1.16 2005/12/01 15:31:30 florian
* correction bug modifs et saisies
*
* Revision 1.15 2005/11/30 13:58:45 florian
* ajouts graphisme (logos, boutons), changement structure SQL bazar_fiche
*
* Revision 1.14 2005/11/24 16:17:13 florian
* corrections bugs, ajout des cases à cocher
*
* Revision 1.13 2005/11/14 16:04:54 florian
* maj bug affichage flux
*
* Revision 1.12 2005/11/07 17:05:46 florian
* amélioration validation conditions de saisie, ajout des règles spécifiques de saisie des formulaires
*
* Revision 1.11 2005/10/21 16:15:04 florian
* mise a jour appropriation
*
* Revision 1.10 2005/10/12 17:20:33 ddelon
* Reorganisation calendrier + applette
*
* Revision 1.9 2005/10/12 13:35:07 florian
* amélioration de l'interface de bazar, de manière a simplifier les consultations, et à harmoniser par rapport aux Ressources
*
* Revision 1.8 2005/09/30 13:00:05 ddelon
* Fiche bazar generique
*
* Revision 1.7 2005/09/30 12:34:44 ddelon
* petite modification pour integration bazar dans papyrus
*
* Revision 1.6 2005/09/30 12:22:54 florian
* Ajouts commentaires pour fiche, modifications graphiques, maj SQL
*
* Revision 1.4 2005/07/21 19:03:12 florian
* nouveautés bazar: templates fiches, correction de bugs, ...
*
* Revision 1.2 2005/02/22 15:33:32 florian
* integration dans Papyrus
*
* Revision 1.1.1.1 2005/02/17 18:05:11 florian
* Import initial de Bazar
*
* Revision 1.1.1.1 2005/02/17 11:09:50 florian
* Import initial
*
* Revision 1.1.1.1 2005/02/16 18:06:35 florian
* import de la nouvelle version
*
* Revision 1.3 2004/07/05 15:10:14 florian
* changement interface de saisie
*
* Revision 1.2 2004/07/01 10:13:41 florian
* modif Florian
*
* Revision 1.1 2004/06/23 09:58:32 alex
* version initiale
*
* Revision 1.1 2004/06/18 09:00:07 alex
* version initiale
*
*
* +-- Fin du code ----------------------------------------------------------------------------------------+
*/
?>
/tags/v3.1-blanche-neige/jrest/.htaccess
New file
0,0 → 1,4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /bazar_bp/jrest/index.php/
/tags/v3.1-blanche-neige/jrest/JRest.php
New file
0,0 → 1,302
<?php
// In : utf8 url_encoded (get et post)
// Out : utf8
 
// TODO : gerer les retours : dans ce controleur : code retour et envoi ...
class JRest {
 
/** Parsed configuration file */
private $config;
 
/** The HTTP request method used. */
private $method = 'GET';
 
/** The HTTP request data sent (if any). */
private $requestData = NULL;
 
/** Array of strings to convert into the HTTP response. */
private $output = array();
 
/** Nom resource. */
private $resource = NULL;
 
/** Identifiant unique resource. */
private $uid = NULL;
 
/**
* Constructor. Parses the configuration file "JRest.ini", grabs any request data sent, records the HTTP
* request method used and parses the request URL to find out the requested resource
* @param str iniFile Configuration file to use
*/
public function JRest($iniFile = 'jrest.ini.php') {
$this->config = parse_ini_file($iniFile, TRUE);
if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
if (isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['CONTENT_LENGTH'] > 0) {
$this->requestData = '';
$httpContent = fopen('php://input', 'r');
while ($data = fread($httpContent, 1024)) {
$this->requestData .= $data;
}
fclose($httpContent);
}
if (strlen($_SERVER['QUERY_STRING']) == 0) {
$len = strlen($_SERVER['REQUEST_URI']);
} else {
$len = -(strlen($_SERVER['QUERY_STRING']) + 1);
}
$urlString = substr($_SERVER['REQUEST_URI'], strlen($this->config['settings']['baseURL']), $len);
 
$urlParts = explode('/', $urlString);
 
if (isset($urlParts[0])) $this->resource = $urlParts[0];
if (count($urlParts) > 1 && $urlParts[1] != '') {
array_shift($urlParts);
foreach ($urlParts as $uid) {
if ($uid != '') {
$this->uid[] = urldecode($uid);
}
}
}
 
$this->method = $_SERVER['REQUEST_METHOD'];
} else {
trigger_error('I require the server variables REQUEST_URI, REQUEST_METHOD and QUERY_STRING to work.', E_USER_ERROR);
}
}
 
/**
* Execute the request.
*/
function exec() {
switch ($this->method) {
case 'GET':
$this->get();
break;
case 'POST':
$this->post();
break;
case 'DELETE':
$this->delete();
break;
case 'PUT':
$this->add();
break;
}
}
 
/**
* Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
* when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
* database contents.
*/
private function get() {
if ($this->resource) {
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if ($this->uid) { // get a resource element
if (method_exists($service, 'getElement')) {
$service->getElement($this->uid);
}
} elseif (method_exists($service, 'getRessource')) { // get all elements of a ressource
$service->getRessource();
}
}
}
} else { // get resources
// include set.jrest.php, instanticiation et appel
}
}
 
private function post() {
$pairs = array();
// Récupération des paramètres passés dans le contenu de la requête HTTP (= POST)
if ($this->requestData) {
$pairs = $this->parseRequestData();
}
 
// Ajout des informations concernant l'upload de fichier passées dans la variable $_FILE
if(isset($_FILES)) {
foreach ($_FILES as $v) {
$pairs[$v['name']] = $v;
}
 
// Ne pas effacer cette ligne ! Elle est indispensable pour les services du Carnet en ligne
// qui n'utilisent que le tableau pairs dans les posts
$pairs = array_merge($pairs, $_POST);
}
 
// gestion du contenu du post
if(isset($_POST))
{
// Safari ne sait pas envoyer des DELETE avec gwt...
// Nous utilisons le parametre "action" passé dans le POST qui doit contenir DELETE pour lancer la supression
if ($pairs['action'] == 'DELETE') {
$this->delete();
return;
}
 
if (count($pairs) != 0) {
if ($this->uid) { // get a resource element
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if (method_exists($service,'updateElement')) { // Update element
// TODO : a voir le retour ...
if ($service->updateElement($this->uid, $pairs)) {
$this->created();
}
}
}
}
} else { // get all elements of a ressource
$this->add($pairs);
}
} else {
$this->lengthRequired();
}
}
}
 
private function delete() {
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if ($this->uid) { // get a resource element
if (method_exists($service, 'deleteElement')) { // Delete element
if ($service->deleteElement($this->uid)) {
$this->noContent();
}
}
}
}
}
}
 
private function add($pairs = null) {
if (is_null($pairs)) {
$pairs = array();
// Récupération des paramètres passés dans le contenu de la requête HTTP (= POST)
// FIXME : vérifier que l'on récupère bien les données passées par PUT
if ($this->requestData) {
$pairs = $this->parseRequestData();
}
}
 
if (count($pairs) != 0) {
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if (method_exists($service,'createElement')) { // Create a new element
if ($service->createElement($pairs)) {
$this->created();
}
}
}
}
} else {
$this->lengthRequired();
}
}
 
/**
* Parse the HTTP request data.
* @return str[] Array of name value pairs
*/
private function parseRequestData() {
$values = array();
$pairs = explode('&', $this->requestData);
foreach ($pairs as $pair) {
$parts = explode('=', $pair);
if (isset($parts[0]) && isset($parts[1])) {
$parts[1] = rtrim(urldecode($parts[1]));
$values[$parts[0]] = $parts[1];
}
}
return $values;
}
 
/**
* Send a HTTP 201 response header.
*/
private function created($url = FALSE) {
header('HTTP/1.0 201 Created');
if ($url) {
header('Location: '.$url);
}
}
 
/**
* Send a HTTP 204 response header.
*/
private function noContent() {
header('HTTP/1.0 204 No Content');
}
 
/**
* Send a HTTP 400 response header.
*/
private function badRequest() {
header('HTTP/1.0 400 Bad Request');
}
 
/**
* Send a HTTP 401 response header.
*/
private function unauthorized($realm = 'JRest') {
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
header('WWW-Authenticate: Basic realm="'.$realm.'"');
}
header('HTTP/1.0 401 Unauthorized');
}
 
/**
* Send a HTTP 404 response header.
*/
private function notFound() {
header('HTTP/1.0 404 Not Found');
}
 
/**
* Send a HTTP 405 response header.
*/
private function methodNotAllowed($allowed = 'GET, HEAD') {
header('HTTP/1.0 405 Method Not Allowed');
header('Allow: '.$allowed);
}
 
/**
* Send a HTTP 406 response header.
*/
private function notAcceptable() {
header('HTTP/1.0 406 Not Acceptable');
echo join(', ', array_keys($this->config['renderers']));
}
 
/**
* Send a HTTP 411 response header.
*/
private function lengthRequired() {
header('HTTP/1.0 411 Length Required');
}
 
/**
* Send a HTTP 500 response header.
*/
private function internalServerError() {
header('HTTP/1.0 500 Internal Server Error');
}
}
?>
/tags/v3.1-blanche-neige/jrest/index.php
New file
0,0 → 1,38
<?php
 
// Decommenter ces lignes si version de php < 5
//require_once 'lib/JSON.php';
 
// Lazy require
// TODO : voir si on ne peut pas dépacer ces inclusions directement dans les services.
//require_once 'lib/DBAccessor.php';
//require_once 'lib/SpreadsheetProductor.php';
//require_once 'lib/PDFProductor.php';
//require 'JRest.php';
 
/**
* La fonction __autoload() charge dynamiquement les classes trouvées dans le code.
*
* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
*
*@param string le nom de la classe appelée.
*@return void le fichier contenant la classe doit être inclu par la fonction.
*/
function __autoload($classe)
{
if (class_exists($classe)) {
return null;
}
 
$chemins = array('', 'services/', 'services/include/', 'lib/');
foreach ($chemins as $chemin) {
$chemin = $chemin.$classe.'.php';
if (file_exists($chemin)) {
require_once $chemin;
}
}
}
 
$jRest =& new JRest();
$jRest->exec();
?>
/tags/v3.1-blanche-neige/jrest/util/phpMyEditSetup.php
New file
0,0 → 1,569
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* phpMyEditSetup.php - interactive table configuration utility (setup)
* ____________________________________________________________
*
* Copyright (c) 1999-2002 John McCreesh <jpmcc@users.sourceforge.net>
* Copyright (c) 2001-2002 Jim Kraai <jkraai@users.sourceforge.net>
* Versions 5.0 and higher developed by Ondrej Jombik <nepto@php.net>
* Copyright (c) 2002-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
 
/* $Platon: phpMyEdit/phpMyEditSetup.php,v 1.48 2006-09-09 07:38:54 nepto Exp $ */
 
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<title>phpMyEdit Setup</title>
<style type="text/css">
<!--
body { font-family: "Verdana", "Arial", "Sans-Serif"; text-align: left }
h1 { color: #004d9c; font-size: 13pt; font-weight: bold }
h2 { color: #004d9c; font-size: 11pt; font-weight: bold }
h3 { color: #004d9c; font-size: 11pt; }
p { color: #004d9c; font-size: 9pt; }
table { border: 1px solid #004d9c; border-collapse: collapse; border-spacing: 0px; }
td { border: 1px solid; padding: 3px; color: #004d9c; font-size: 9pt; }
hr
{
height: 1px;
background-color: #000000;
color: #000000;
border: solid #000000 0;
padding: 0;
margin: 0;
border-top-width: 1px;
}
-->
</style>
</head>
<body bgcolor="white">
 
<?php
 
if (! defined('PHP_EOL')) {
define('PHP_EOL', strtoupper(substr(PHP_OS, 0, 3) == 'WIN') ? "\r\n"
: strtoupper(substr(PHP_OS, 0, 3) == 'MAC') ? "\r" : "\n");
}
 
$hn = @$_POST['hn'];
$un = @$_POST['un'];
$pw = @$_POST['pw'];
if(strlen($_POST['db'])>0) $db = @$_POST['db'];
if(strlen($_POST['tb'])>0) $tb = @$_POST['tb'];
$id = @$_POST['id'];
$submit = @$_POST['submit'];
$options = @$_POST['options'];
$baseFilename = @$_POST['baseFilename'];
$pageTitle = @$_POST['pageTitle'];
$pageHeader = @$_POST['pageHeader'];
$HTMLissues = @$_POST['HTMLissues'];
$CSSstylesheet = @$_POST['CSSstylesheet'];
 
$phpExtension = '.php';
if (isset($baseFilename) && $baseFilename != '') {
$phpFile = $baseFilename.$phpExtension;
//$contentFile = $baseFilename.'Content.inc';
$contentFile = $baseFilename.'.php';
} elseif (isset($tb)) {
$phpFile = $tb.$phpExtension;
//$contentFile = $tb.'Content.inc';
$contentFile = $tb.'.php';
} else {
$phpFile = 'index'.$phpExtension;
//$contentFile = 'Content.inc';
$contentFile = 'phpMyEdit-content.php';
}
 
$buffer = '';
 
function echo_html($x)
{
echo htmlspecialchars($x),PHP_EOL;
}
 
function echo_buffer($x)
{
global $buffer;
$buffer .= $x.PHP_EOL;
}
 
#:#####################################:#
#:# Function: check_constraints #:#
#:# Parameters: tb=table name #:#
#:# fd=field name #:#
#:# return: lookup default for #:#
#:# said constraint #:#
#:# or null if no #:#
#:# constraint is found. #:#
#:# Contributed by Wade Ryan, #:#
#:# 20060906 #:#
#:#####################################:#
function check_constraints($tb,$fd)
{
$query = "show create table $tb";
$result = mysql_query($query);
$tableDef = preg_split('/\n/',mysql_result($result,0,1));
 
$constraint_arg="";
while (list($key,$val) = each($tableDef)) {
$words=preg_split("/[\s'`()]+/", $val);
if ($words[1] == "CONSTRAINT" && $words[6]=="REFERENCES") {
if ($words[5]==$fd) {
$constraint_arg=" 'values' => array(\n".
" 'table' => '$words[7]',\n".
" 'column' => '$words[8]'\n".
" ),\n";
}
 
}
}
return $constraint_arg;
}
 
function get_versions()
{
$ret_ar = array();
$dirname = dirname(__FILE__);
foreach (array(
'current' => __FILE__,
'setup' => "$dirname/phpMyEditSetup.php",
'core' => "$dirname/phpMyEdit.class.php",
'version' => "$dirname/doc/VERSION")
as $type => $file) {
if (@file_exists($file) && @is_readable($file)) {
if (($f = fopen($file, 'r')) == false) {
continue;
}
$str = trim(fread($f, 4096));
if (strpos($str, ' ') === false && strlen($str) < 10) {
$ret_ar[$type] = $str;
} else if (preg_match('|\$'.'Platon:\s+\S+,v\s+(\d+.\d+)\s+|', $str, $matches)) {
$ret_ar[$type] = $matches[1];
}
fclose($f);
}
}
return $ret_ar;
}
 
 
$self = basename($_SERVER['PHP_SELF']);
$dbl = @mysql_pconnect($hn, $un, $pw);
 
if ((!$dbl) or empty($submit)) {
echo '<h1>Please log in to your MySQL database</h1>';
if (!empty($submit)) {
echo '<h2>Sorry - login failed - please try again</h2>'.PHP_EOL;
}
if (! isset($hn)) {
$hn = 'localhost';
}
echo '
<form action="'.htmlspecialchars($self).'" method="POST">
<table border="1" cellpadding="1" cellspacing="0" summary="Login form">
<tr>
<td>Hostname:</td>
<td><input type="text" name="hn" value="'.htmlspecialchars($hn).'"></td>
</tr><tr>
<td>Username:</td>
<td><input type="text" name="un" value="'.htmlspecialchars($un).'"></td>
</tr><tr>
<td>Password:</td>
<td><input type="password" name="pw" value="'.htmlspecialchars($pw).'"></td>
</tr><tr>
<td>Database:</td>
<td><input type="text" name="db" value="'.htmlspecialchars($db).'"></td>
</tr><tr>
<td>Table:</td>
<td><input type="text" name="tb" value="'.htmlspecialchars($tb).'"></td>
</tr>
</table><br>
<input type="submit" name="submit" value="Submit">
</form>'.PHP_EOL;
} else if (! isset($db)) {
$dbs = @mysql_list_dbs($dbl);
$num_dbs = @mysql_num_rows($dbs);
echo '<h1>Please select a database</h1>
<form action="'.htmlspecialchars($self).'" method="POST">
<input type="hidden" name="hn" value="'.htmlspecialchars($hn).'">
<input type="hidden" name="un" value="'.htmlspecialchars($un).'">
<input type="hidden" name="pw" value="'.htmlspecialchars($pw).'">
<table border="1" cellpadding="1" cellspacing="1" summary="Database selection">'.PHP_EOL;
for ($i = 0; $i < $num_dbs; $i++) {
$db = @mysql_db_name($dbs, $i);
$checked = ! strcasecmp($un, $db) ? ' checked' : '';
$db = htmlspecialchars($db);
echo '<tr><td><input'.$checked.' type="radio" name="db" value="'.$db.'"></td><td>'.$db.'</td></tr>'.PHP_EOL;
}
echo '</table><br>
<input type="submit" name="submit" value="Submit">
<input type="submit" name="cancel" value="Cancel">
</form>'.PHP_EOL;
} else if (!isset($tb)) {
echo '<h1>Please select a table from database: '.htmlspecialchars($db).'</h1>
<form action="'.htmlspecialchars($self).'" method="POST">
<input type="hidden" name="hn" value="'.htmlspecialchars($hn).'">
<input type="hidden" name="un" value="'.htmlspecialchars($un).'">
<input type="hidden" name="pw" value="'.htmlspecialchars($pw).'">
<input type="hidden" name="db" value="'.htmlspecialchars($db).'">
<table border="1" cellpadding="1" cellspacing="1" summary="Table selection">'.PHP_EOL;
$tbs = @mysql_list_tables($db, $dbl);
$num_tbs = @mysql_num_rows($tbs);
for ($j = 0; $j < $num_tbs; $j++) {
$tb = @mysql_tablename($tbs, $j);
$tb = htmlspecialchars($tb);
$checked = $j == 0 ? ' checked' : '';
echo '<tr><td><input'.$checked.' type="radio" name="tb" value="'.$tb.'"></td><td>'.$tb.'</td></tr>'.PHP_EOL;
}
echo '</table><br>
<input type="submit" name="submit" value="Submit">
<input type="submit" name="cancel" value="Cancel">
</form>'.PHP_EOL;
} else if (!isset($id)) {
echo ' <h1>Please select an identifier from table: '.htmlspecialchars($tb).'</h1>
<p>
This field will be used in change, view, copy and delete operations.<br>
The field should be numeric and must uniquely identify a record.
</p>
<p>
Please note, that there were problems reported by phpMyEdit users
regarding using MySQL reserved word as unique key name (the example for
this is "key" name). Thus we recommend you to use another name
of unique key. Usage of "id" or "ID" should be safe and good idea.
</p>
<form action="'.htmlspecialchars($self).'" method="POST">
<input type="hidden" name="hn" value="'.htmlspecialchars($hn).'">
<input type="hidden" name="un" value="'.htmlspecialchars($un).'">
<input type="hidden" name="pw" value="'.htmlspecialchars($pw).'">
<input type="hidden" name="db" value="'.htmlspecialchars($db).'">
<input type="hidden" name="tb" value="'.htmlspecialchars($tb).'">
<table border="1" cellpadding="1" cellspacing="1" summary="Key selection">'.PHP_EOL;
// <tr><td><input type="radio" name="id" value="">
// <td><i>None</i></td><td><i>No id field required</i></td></tr>
@mysql_select_db($db);
$tb_desc = @mysql_query("DESCRIBE $tb");
$fds = @mysql_list_fields($db,$tb,$dbl);
for ($j = 0; ($fd = @mysql_field_name($fds, $j)) != false; $j++) {
$ff = @mysql_field_flags($fds, $j);
strlen($ff) <= 0 && $ff = '---';
$checked = stristr($ff, 'primary_key') ? ' checked' : '';
echo '<tr><td><input',$checked,' type="radio" name="id" value="',htmlspecialchars($fd),'"></td>';
echo '<td>',htmlspecialchars($fd),'</td>';
echo '<td>',htmlspecialchars($ff),'</td>';
$r = @mysql_fetch_array($tb_desc, $j);
}
echo '</table><br>
<input type="submit" name="submit" value="Submit">
<input type="submit" name="cancel" value="Cancel">
</form>'.PHP_EOL;
 
} else if (!isset($options)) {
echo '<h1>Please select additional options</h1>
<form action="'.htmlspecialchars($self).'" method="POST">
<input type="hidden" name="hn" value="'.htmlspecialchars($hn).'">
<input type="hidden" name="un" value="'.htmlspecialchars($un).'">
<input type="hidden" name="pw" value="'.htmlspecialchars($pw).'">
<input type="hidden" name="db" value="'.htmlspecialchars($db).'">
<input type="hidden" name="tb" value="'.htmlspecialchars($tb).'">
<input type="hidden" name="id" value="'.htmlspecialchars($id).'">
<table border="1" cellpadding="1" cellspacing="1" summary="Additional options">
<tr><td>Base filename</td><td><input type="text" name=baseFilename value ="'.htmlspecialchars($tb).'"></td></tr>
<tr><td>Page title</td><td><input type="text" name=pageTitle value ="'.htmlspecialchars($tb).'"></td></tr>
<tr><td>Page header</td><td><input type="checkbox" name=pageHeader></td></tr>
<tr><td>HTML header &amp; footer</td><td><input type="checkbox" name=HTMLissues></td></tr>
<tr><td>CSS basic stylesheet</td><td><input checked type="checkbox" name=CSSstylesheet></td></tr>
</table><br>
<input type="submit" name="submit" value="Submit">
<input type="submit" name="cancel" value="Cancel">
<input type="hidden" name="options" value="1">
</form>'.PHP_EOL;
} else {
echo '<h1>Here is your phpMyEdit calling program</h1>'.PHP_EOL;
echo '<h2>You may now copy and paste it into your PHP editor</h2>'.PHP_EOL;
if ($pageHeader) {
echo_buffer('<h3>'.$pageTitle.'</h3>');
}
$versions = '';
$versions_ar = get_versions();
foreach (array(
'version' => 'phpMyEdit version:',
'core' => 'phpMyEdit.class.php core class:',
'setup' => 'phpMyEditSetup.php script:',
'current' => 'generating setup script:')
as $type => $desc) {
$version = isset($versions_ar[$type]) ? $versions_ar[$type] : 'unknown';
$versions .= sprintf("\n * %36s %s", $desc, $version);
}
echo_buffer("<?php
 
/*
* IMPORTANT NOTE: This generated file contains only a subset of huge amount
* of options that can be used with phpMyEdit. To get information about all
* features offered by phpMyEdit, check official documentation. It is available
* online and also for download on phpMyEdit project management page:
*
* http://platon.sk/projects/main_page.php?project_id=5
*
* This file was generated by:
*$versions
*/
 
// MySQL host name, user name, password, database, and table
\$opts['hn'] = '$hn';
\$opts['un'] = '$un';
\$opts['pw'] = '$pw';
\$opts['db'] = '$db';
\$opts['tb'] = '$tb';
 
// Name of field which is the unique key
\$opts['key'] = '$id';
 
// Type of key field (int/real/string/date etc.)");
 
if ($id == '') {
echo_buffer("\$opts['key_type'] = '';");
} else {
$fds = @mysql_list_fields($db,$tb,$dbl);
for ($j = 0; ($fd = @mysql_field_name($fds, $j)) != ''; $j++) {
if ($fd == $id) {
echo_buffer("\$opts['key_type'] = '".@mysql_field_type($fds, $j)."';");
break;
}
}
}
echo_buffer("
// Sorting field(s)
\$opts['sort_field'] = array('$id');
 
// Number of records to display on the screen
// Value of -1 lists all records in a table
\$opts['inc'] = 15;
 
// Options you wish to give the users
// A - add, C - change, P - copy, V - view, D - delete,
// F - filter, I - initial sort suppressed
\$opts['options'] = 'ACPVDF';
 
// Number of lines to display on multiple selection filters
\$opts['multiple'] = '4';
 
// Navigation style: B - buttons (default), T - text links, G - graphic links
// Buttons position: U - up, D - down (default)
\$opts['navigation'] = 'DB';
 
// Display special page elements
\$opts['display'] = array(
'form' => true,
'query' => true,
'sort' => true,
'time' => true,
'tabs' => true
);
 
// Set default prefixes for variables
\$opts['js']['prefix'] = 'PME_js_';
\$opts['dhtml']['prefix'] = 'PME_dhtml_';
\$opts['cgi']['prefix']['operation'] = 'PME_op_';
\$opts['cgi']['prefix']['sys'] = 'PME_sys_';
\$opts['cgi']['prefix']['data'] = 'PME_data_';
 
/* Get the user's default language and use it if possible or you can
specify particular one you want to use. Refer to official documentation
for list of available languages. */
\$opts['language'] = \$_SERVER['HTTP_ACCEPT_LANGUAGE'];
 
/* Table-level filter capability. If set, it is included in the WHERE clause
of any generated SELECT statement in SQL query. This gives you ability to
work only with subset of data from table.
 
\$opts['filters'] = \"column1 like '%11%' AND column2<17\";
\$opts['filters'] = \"section_id = 9\";
\$opts['filters'] = \"PMEtable0.sessions_count > 200\";
*/
 
/* Field definitions
Fields will be displayed left to right on the screen in the order in which they
appear in generated list. Here are some most used field options documented.
 
['name'] is the title used for column headings, etc.;
['maxlen'] maximum length to display add/edit/search input boxes
['trimlen'] maximum length of string content to display in row listing
['width'] is an optional display width specification for the column
e.g. ['width'] = '100px';
['mask'] a string that is used by sprintf() to format field output
['sort'] true or false; means the users may sort the display on this column
['strip_tags'] true or false; whether to strip tags from content
['nowrap'] true or false; whether this field should get a NOWRAP
['select'] T - text, N - numeric, D - drop-down, M - multiple selection
['options'] optional parameter to control whether a field is displayed
L - list, F - filter, A - add, C - change, P - copy, D - delete, V - view
Another flags are:
R - indicates that a field is read only
W - indicates that a field is a password field
H - indicates that a field is to be hidden and marked as hidden
['URL'] is used to make a field 'clickable' in the display
e.g.: 'mailto:\$value', 'http://\$value' or '\$page?stuff';
['URLtarget'] HTML target link specification (for example: _blank)
['textarea']['rows'] and/or ['textarea']['cols']
specifies a textarea is to be used to give multi-line input
e.g. ['textarea']['rows'] = 5; ['textarea']['cols'] = 10
['values'] restricts user input to the specified constants,
e.g. ['values'] = array('A','B','C') or ['values'] = range(1,99)
['values']['table'] and ['values']['column'] restricts user input
to the values found in the specified column of another table
['values']['description'] = 'desc_column'
The optional ['values']['description'] field allows the value(s) displayed
to the user to be different to those in the ['values']['column'] field.
This is useful for giving more meaning to column values. Multiple
descriptions fields are also possible. Check documentation for this.
*/
");
 
@mysql_select_db($db);
$tb_desc = @mysql_query("DESCRIBE $tb");
$fds = @mysql_list_fields($db, $tb, $dbl);
$num_fds = @mysql_num_fields($fds);
$ts_cnt = 0;
for ($k = 0; $k < $num_fds; $k++) {
$fd = mysql_field_name($fds,$k);
$fm = mysql_fetch_field($fds,$k);
$fn = strtr($fd, '_-.', ' ');
$fn = preg_replace('/(^| +)id( +|$)/', '\\1ID\\2', $fn); // uppercase IDs
$fn = ucfirst($fn);
$row = @mysql_fetch_array($tb_desc);
echo_buffer('$opts[\'fdd\'][\''.$fd.'\'] = array('); // )
echo_buffer(" 'name' => '".str_replace('\'','\\\'',$fn)."',");
$auto_increment = strstr($row[5], 'auto_increment') ? 1 : 0;
if (substr($row[1],0,3) == 'set') {
echo_buffer(" 'select' => 'M',");
} else {
echo_buffer(" 'select' => 'T',");
}
if ($auto_increment) {
echo_buffer(" 'options' => 'AVCPDR', // auto increment");
}
// timestamps are read-only
else if (@mysql_field_type($fds, $k) == 'timestamp') {
if ($ts_cnt > 0) {
echo_buffer(" 'options' => 'AVCPD',");
} else { // first timestamp
echo_buffer(" 'options' => 'AVCPDR', // updated automatically (MySQL feature)");
}
$ts_cnt++;
}
echo_buffer(" 'maxlen' => ".@mysql_field_len($fds,$k).',');
// blobs -> textarea
if (@mysql_field_type($fds,$k) == 'blob') {
echo_buffer(" 'textarea' => array(");
echo_buffer(" 'rows' => 5,");
echo_buffer(" 'cols' => 50),");
}
// SETs and ENUMs get special treatment
if ((substr($row[1],0,3) == 'set' || substr($row[1],0,4) == 'enum')
&& ! (($pos = strpos($row[1], '(')) === false)) {
$indent = str_repeat(' ', 18);
$outstr = substr($row[1], $pos + 2, -2);
$outstr = explode("','", $outstr);
$outstr = str_replace("''", "'", $outstr);
$outstr = str_replace('"', '\\"', $outstr);
$outstr = implode('",'.PHP_EOL.$indent.'"', $outstr);
echo_buffer(" 'values' => array(".PHP_EOL.$indent.'"'.$outstr.'"),');
}
// automatic support for Default values
if ($row[4] != '' && $row[4] != 'NULL') {
echo_buffer(" 'default' => '".$row[4]."',");
} else if ($auto_increment) {
echo_buffer(" 'default' => '0',");
}
// check for table constraints
$outstr = check_constraints($tb, $fd);
if ($outstr != '') {
echo_buffer($outstr);
}
echo_buffer(" 'sort' => true");
//echo_buffer(" 'nowrap' => false,");
echo_buffer(');');
}
 
echo_buffer("
// Now important call to phpMyEdit
require_once 'phpMyEdit.class.php';
new phpMyEdit(\$opts);
 
?>
");
 
$css_directive = <<<END
<style type="text/css">
hr.pme-hr { border: 0px solid; padding: 0px; margin: 0px; border-top-width: 1px; height: 1px; }
table.pme-main { border: #004d9c 1px solid; border-collapse: collapse; border-spacing: 0px; width: 100%; }
table.pme-navigation { border: #004d9c 0px solid; border-collapse: collapse; border-spacing: 0px; width: 100%; }
th.pme-header { border: #004d9c 1px solid; padding: 4px; background: #add8e6; }
td.pme-key-0, td.pme-value-0, td.pme-help-0, td.pme-navigation-0, td.pme-cell-0,
td.pme-key-1, td.pme-value-1, td.pme-help-0, td.pme-navigation-1, td.pme-cell-1,
td.pme-sortinfo, td.pme-filter { border: #004d9c 1px solid; padding: 3px; }
td.pme-buttons { text-align: left; }
td.pme-message { text-align: center; }
td.pme-stats { text-align: right; }
</style>
END;
if (! $CSSstylesheet) {
$css_directive = '';
}
 
if ($HTMLissues) {
$buffer = <<<END
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>$pageTitle</title>
$css_directive
</head>
<body>
$buffer
</body>
</html>
END;
} else if ($CSSstylesheet) {
$buffer = $css_directive . $buffer;
}
// write the content include file
echo 'Trying to write content file to: <b>'.'./'.$contentFile.'</b><br>'.PHP_EOL;
$filehandle = @fopen('./'.$contentFile, 'w+');
if ($filehandle) {
fwrite($filehandle, $buffer);
flush($filehandle);
fclose($filehandle);
echo 'phpMyEdit content file written successfully<br>';
} else {
echo 'phpMyEdit content file was NOT written due to inssufficient privileges.<br>';
echo 'Please copy and paste content listed below to <i>'.'./'.$contentFile.'</i> file.';
}
echo '<br><hr>';
echo '<pre>';
echo_html($buffer);
echo '</pre><hr>'.PHP_EOL;
}
 
?>
 
</body>
</html>
 
/tags/v3.1-blanche-neige/jrest/util/phpMyEdit.class.php
New file
0,0 → 1,3312
<?php
 
/*
* phpMyEdit - instant MySQL table editor and code generator
*
* phpMyEdit.class.php - main table editor class definition file
* ____________________________________________________________
*
* Copyright (c) 1999-2002 John McCreesh <jpmcc@users.sourceforge.net>
* Copyright (c) 2001-2002 Jim Kraai <jkraai@users.sourceforge.net>
* Versions 5.0 and higher developed by Ondrej Jombik <nepto@php.net>
* Copyright (c) 2002-2006 Platon Group, http://platon.sk/
* All rights reserved.
*
* See README file for more information about this software.
* See COPYING file for license information.
*
* Download the latest version from
* http://platon.sk/projects/phpMyEdit/
*/
 
/* $Platon: phpMyEdit/phpMyEdit.class.php,v 1.188 2006-09-08 16:30:31 michal Exp $ */
 
/* This is a generic table editing program. The table and fields to be
edited are defined in the calling program.
 
This program works in three passes.
* Pass 1 (the last part of the program) displays the selected MySQL
table in a scrolling table on the screen. Radio buttons are used to
select a record for editing or deletion. If the user chooses Add,
Change, Copy, View or Delete buttons.
* Pass 2 starts, displaying the selected record. If the user chooses
the Save button from this screen.
* Pass 3 processes the update and the display returns to the
original table view (Pass 1).
*/
 
class phpMyEdit_timer /* {{{ */
{
var $startTime;
var $started;
 
function phpMyEdit_timer($start = true)
{
$this->started = false;
if ($start) {
$this->start();
}
}
 
function start()
{
$startMtime = explode(' ', microtime());
$this->startTime = (double) $startMtime[0] + (double) $startMtime[1];
$this->started = true;
}
 
function end($iterations = 1)
{
// get the time, check whether the timer was started later
$endMtime = explode(' ', microtime());
if ($this->started) {
$endTime = (double)($endMtime[0])+(double)($endMtime[1]);
$dur = $endTime - $this->startTime;
$avg = 1000 * $dur / $iterations;
$avg = round(1000 * $avg) / 1000;
return $avg;
} else {
return 'phpMyEdit_timer ERROR: timer not started';
}
}
} /* }}} */
 
if (! function_exists('array_search')) { /* {{{ */
function array_search($needle, $haystack)
{
foreach ($haystack as $key => $value) {
if ($needle == $value)
return $key;
}
return false;
}
} /* }}} */
 
if (! function_exists('realpath')) { /* {{{ */
function realpath($path)
{
return $path;
}
} /* }}} */
 
class phpMyEdit
{
// Class variables {{{
 
// Database handling
var $hn; // hostname
var $un; // user name
var $pw; // password
var $tb; // table
var $db; // database
var $dbp; // database with point
var $dbh; // database handle
var $close_dbh; // if database handle should be closed
 
// Record manipulation
var $key; // name of field which is the unique key
var $key_num; // number of field which is the unique key
var $key_type; // type of key field (int/real/string/date etc.)
var $key_delim; // character used for key value quoting
var $rec; // number of record selected for editing
var $inc; // number of records to display
var $fm; // first record to display
var $fl; // is the filter row displayed (boolean)
var $fds; // sql field names
var $fdn; // sql field names => $k
var $num_fds; // number of fields
var $options; // options for users: ACDFVPI
var $fdd; // field definitions
var $qfn; // value of all filters used during the last pass
var $sfn; // sort field number (- = descending sort order)
var $cur_tab; // current selected tab
 
// Operation
var $navop; // navigation buttons/operations
var $sw; // filter display/hide/clear button
var $operation; // operation to do: Add, Change, Delete
var $saveadd;
var $moreadd;
var $canceladd;
var $savechange;
var $morechange;
var $cancelchange;
var $savecopy;
var $cancelcopy;
var $savedelete;
var $canceldelete;
var $cancelview;
 
// Additional features
var $labels; // multilingual labels
var $cgi; // CGI variable features array
var $js; // JS configuration array
var $dhtml; // DHTML configuration array
var $url; // URL array
var $message; // informational message to print
var $notify; // change notification e-mail adresses
var $logtable; // name of optional logtable
var $navigation; // navigation style
var $tabs; // TAB names
var $timer = null; // phpMyEdit_timer object
 
// Predefined variables
var $comp_ops = array('<'=>'<','<='=>'<=','='=>'=','>='=>'>=','>'=>'>');
var $sql_aggrs = array(
'sum' => 'Total',
'avg' => 'Average',
'min' => 'Minimum',
'max' => 'Maximum',
'count' => 'Count');
var $page_types = array(
'L' => 'list',
'F' => 'filter',
'A' => 'add',
'V' => 'view',
'C' => 'change',
'P' => 'copy',
'D' => 'delete'
);
var $default_buttons = array(
'L' => array('<<','<','add','view','change','copy','delete','>','>>','goto','goto_combo'),
'F' => array('<<','<','add','view','change','copy','delete','>','>>','goto','goto_combo'),
'A' => array('save','more','cancel'),
'C' => array('save','more','cancel'),
'P' => array('save', 'cancel'),
'D' => array('save','cancel'),
'V' => array('change','cancel')
);
// }}}
 
/*
* column specific functions
*/
 
function col_has_sql($k) { return isset($this->fdd[$k]['sql']); }
function col_has_sqlw($k) { return isset($this->fdd[$k]['sqlw']) && !$this->virtual($k); }
function col_has_values($k) { return isset($this->fdd[$k]['values']) || isset($this->fdd[$k]['values2']); }
function col_has_php($k) { return isset($this->fdd[$k]['php']); }
function col_has_URL($k) { return isset($this->fdd[$k]['URL'])
|| isset($this->fdd[$k]['URLprefix']) || isset($this->fdd[$k]['URLpostfix']); }
function col_has_multiple($k)
{ return $this->col_has_multiple_select($k) || $this->col_has_checkboxes($k); }
function col_has_multiple_select($k)
{ return $this->fdd[$k]['select'] == 'M' && ! $this->fdd[$k]['values']['table']; }
function col_has_checkboxes($k)
{ return $this->fdd[$k]['select'] == 'C' && ! $this->fdd[$k]['values']['table']; }
function col_has_radio_buttons($k)
{ return $this->fdd[$k]['select'] == 'O' && ! $this->fdd[$k]['values']['table']; }
function col_has_datemask($k)
{ return isset($this->fdd[$k]['datemask']) || isset($this->fdd[$k]['strftimemask']); }
 
/*
* functions for indicating whether navigation style is enabled
*/
 
function nav_buttons() { return stristr($this->navigation, 'B'); }
function nav_text_links() { return stristr($this->navigation, 'T'); }
function nav_graphic_links() { return stristr($this->navigation, 'G'); }
function nav_up() { return (stristr($this->navigation, 'U') && !($this->buttons[$this->page_type]['up'] === false)); }
function nav_down() { return (stristr($this->navigation, 'D') && !($this->buttons[$this->page_type]['down'] === false)); }
 
/*
* functions for indicating whether operations are enabled
*/
 
function add_enabled() { return stristr($this->options, 'A'); }
function change_enabled() { return stristr($this->options, 'C'); }
function delete_enabled() { return stristr($this->options, 'D'); }
function filter_enabled() { return stristr($this->options, 'F'); }
function view_enabled() { return stristr($this->options, 'V'); }
function copy_enabled() { return stristr($this->options, 'P') && $this->add_enabled(); }
function tabs_enabled() { return $this->display['tabs'] && count($this->tabs) > 0; }
function hidden($k) { return stristr($this->fdd[$k]['input'],'H'); }
function password($k) { return stristr($this->fdd[$k]['input'],'W'); }
function readonly($k) { return stristr($this->fdd[$k]['input'],'R') || $this->virtual($k); }
function virtual($k) { return stristr($this->fdd[$k]['input'],'V') && $this->col_has_sql($k); }
 
function add_operation() { return $this->operation == $this->labels['Add'] && $this->add_enabled(); }
function change_operation() { return $this->operation == $this->labels['Change'] && $this->change_enabled(); }
function copy_operation() { return $this->operation == $this->labels['Copy'] && $this->copy_enabled(); }
function delete_operation() { return $this->operation == $this->labels['Delete'] && $this->delete_enabled(); }
function view_operation() { return $this->operation == $this->labels['View'] && $this->view_enabled(); }
function filter_operation() { return $this->fl && $this->filter_enabled() && $this->list_operation(); }
function list_operation() { /* covers also filtering page */ return ! $this->change_operation()
&& ! $this->add_operation() && ! $this->copy_operation()
&& ! $this->delete_operation() && ! $this->view_operation(); }
function next_operation() { return ($this->navop == $this->labels['Next']) || ($this->navop == '>'); }
function prev_operation() { return ($this->navop == $this->labels['Prev']) || ($this->navop == '<'); }
function first_operation() { return ($this->navop == $this->labels['First']) || ($this->navop == '<<'); }
function last_operation() { return ($this->navop == $this->labels['Last']) || ($this->navop == '>>'); }
function clear_operation() { return $this->sw == $this->labels['Clear']; }
 
function add_canceled() { return $this->canceladd == $this->labels['Cancel']; }
function view_canceled() { return $this->cancelview == $this->labels['Cancel']; }
function change_canceled() { return $this->cancelchange == $this->labels['Cancel']; }
function copy_canceled() { return $this->cancelcopy == $this->labels['Cancel']; }
function delete_canceled() { return $this->canceldelete == $this->labels['Cancel']; }
 
function is_values2($k, $val = 'X') /* {{{ */
{
return $val === null ||
(isset($this->fdd[$k]['values2']) && !isset($this->fdd[$k]['values']['table']));
} /* }}} */
 
function processed($k) /* {{{ */
{
if ($this->virtual($k)) {
return false;
}
$options = @$this->fdd[$k]['options'];
if (! isset($options)) {
return true;
}
return
($this->saveadd == $this->labels['Save'] && stristr($options, 'A')) ||
($this->moreadd == $this->labels['More'] && stristr($options, 'A')) ||
($this->savechange == $this->labels['Save'] && stristr($options, 'C')) ||
($this->morechange == $this->labels['Apply'] && stristr($options, 'C')) ||
($this->savecopy == $this->labels['Save'] && stristr($options, 'P')) ||
($this->savedelete == $this->labels['Save'] && stristr($options, 'D'));
} /* }}} */
 
function displayed($k) /* {{{ */
{
if (is_numeric($k)) {
$k = $this->fds[$k];
}
$options = @$this->fdd[$k]['options'];
if (! isset($options)) {
return true;
}
return
($this->add_operation() && stristr($options, 'A')) ||
($this->view_operation() && stristr($options, 'V')) ||
($this->change_operation() && stristr($options, 'C')) ||
($this->copy_operation() && stristr($options, 'P')) ||
($this->delete_operation() && stristr($options, 'D')) ||
($this->filter_operation() && stristr($options, 'F')) ||
($this->list_operation() && stristr($options, 'L'));
} /* }}} */
function debug_var($name, $val) /* {{{ */
{
if (is_array($val) || is_object($val)) {
echo "<pre>$name\n";
ob_start();
//print_r($val);
var_dump($val);
$content = ob_get_contents();
ob_end_clean();
echo htmlspecialchars($content);
echo "</pre>\n";
} else {
echo 'debug_var()::<i>',htmlspecialchars($name),'</i>';
echo '::<b>',htmlspecialchars($val),'</b>::',"<br />\n";
}
} /* }}} */
 
function myquery($qry, $line = 0, $debug = 0) /* {{{ */
{
global $debug_query;
if ($debug_query || $debug) {
$line = intval($line);
echo '<h4>MySQL query at line ',$line,'</h4>',htmlspecialchars($qry),'<hr />',"\n";
}
if (isset($this->db)) {
$ret = @mysql_db_query($this->db, $qry, $this->dbh);
} else {
$ret = @mysql_query($qry, $this->dbh);
}
if (! $ret) {
echo '<h4>MySQL error ',mysql_errno($this->dbh),'</h4>';
echo htmlspecialchars(mysql_error($this->dbh)),'<hr />',"\n";
}
return $ret;
} /* }}} */
 
function make_language_labels($language) /* {{{ */
{
// just try the first language and variant
// this isn't content-negotiation rfc compliant
$language = strtoupper($language);
 
// try the full language w/ variant
$file = $this->dir['lang'].'PME.lang.'.$language.'.inc';
 
if (! file_exists($file)) {
// try the language w/o variant
$file = $this->dir['lang'].'PME.lang.'.substr($language,0,2).'.inc';
}
if (! file_exists($file)) {
// default to classical English
$file = $this->dir['lang'].'PME.lang.EN.inc';
}
$ret = @include($file);
if (! is_array($ret)) {
return $ret;
}
$small = array(
'Search' => 'v',
'Hide' => '^',
'Clear' => 'X',
'Query' => htmlspecialchars('>'));
if ((!$this->nav_text_links() && !$this->nav_graphic_links())
|| !isset($ret['Search']) || !isset($ret['Query'])
|| !isset($ret['Hide']) || !isset($ret['Clear'])) {
foreach ($small as $key => $val) {
$ret[$key] = $val;
}
}
return $ret;
} /* }}} */
 
function set_values($field_num, $prepend = null, $append = null, $strict = false) /* {{{ */
{
return (array) $prepend + (array) $this->fdd[$field_num]['values2']
+ (isset($this->fdd[$field_num]['values']['table']) || $strict
? $this->set_values_from_table($field_num, $strict)
: array())
+ (array) $append;
} /* }}} */
 
function set_values_from_table($field_num, $strict = false) /* {{{ */
{
$db = &$this->fdd[$field_num]['values']['db'];
$table = &$this->fdd[$field_num]['values']['table'];
$key = &$this->fdd[$field_num]['values']['column'];
$desc = &$this->fdd[$field_num]['values']['description'];
$dbp = isset($db) ? "$db." : $this->dbp;
$qparts['type'] = 'select';
if ($table) {
$qparts['select'] = 'DISTINCT '.$table.'.'.$key;
if ($desc && is_array($desc) && is_array($desc['columns'])) {
$qparts['select'] .= ',CONCAT('; // )
$num_cols = sizeof($desc['columns']);
if (isset($desc['divs'][-1])) {
$qparts['select'] .= '"'.addslashes($desc['divs'][-1]).'",';
}
foreach ($desc['columns'] as $key => $val) {
if ($val) {
$qparts['select'] .= 'IFNULL('.$val.',"")';
if ($desc['divs'][$key]) {
$qparts['select'] .= ',"'.addslashes($desc['divs'][$key]).'"';
}
$qparts['select'] .= ',';
}
}
$qparts['select']{strlen($qparts['select']) - 1} = ')';
$qparts['select'] .= ' AS PMEalias'.$field_num;
$qparts['orderby'] = 'PMEalias'.$field_num;
} else if ($desc && is_array($desc)) {
// TODO
} else if ($desc) {
$qparts['select'] .= ','.$table.'.'.$desc;
$qparts['orderby'] = $desc;
} else if ($key) {
$qparts['orderby'] = $key;
}
$qparts['from'] = "$dbp$table";
$ar = array(
'table' => $table,
'column' => $column,
'description' => $desc);
$qparts['where'] = $this->substituteVars($this->fdd[$field_num]['values']['filters'], $ar);
if ($this->fdd[$field_num]['values']['orderby']) {
$qparts['orderby'] = $this->substituteVars($this->fdd[$field_num]['values']['orderby'], $ar);
}
} else { /* simple value extraction */
$key = &$this->fds[$field_num];
$this->virtual($field_num) && $key = $this->fqn($field_num);
$qparts['select'] = 'DISTINCT '.$key.' AS PMEkey';
$qparts['orderby'] = 'PMEkey';
$qparts['from'] = $this->dbp.$this->tb;
}
$values = array();
$res = $this->myquery($this->get_SQL_query($qparts), __LINE__);
while ($row = @mysql_fetch_array($res, MYSQL_NUM)) {
$values[$row[0]] = $desc ? $row[1] : $row[0];
}
return $values;
} /* }}} */
 
function fqn($field, $dont_desc = false, $dont_cols = false) /* {{{ */
{
is_numeric($field) || $field = array_search($field, $this->fds);
// if read SQL expression exists use it
if ($this->col_has_sql($field))
return $this->fdd[$field]['sql'];
// on copy/change always use simple key retrieving
if ($this->add_operation()
|| $this->copy_operation()
|| $this->change_operation()) {
$ret = 'PMEtable0.'.$this->fds[$field];
} else {
if ($this->fdd[$this->fds[$field]]['values']['description'] && ! $dont_desc) {
$desc = &$this->fdd[$this->fds[$field]]['values']['description'];
if (is_array($desc) && is_array($desc['columns'])) {
$ret = 'CONCAT('; // )
$num_cols = sizeof($desc['columns']);
if (isset($desc['divs'][-1])) {
$ret .= '"'.addslashes($desc['divs'][-1]).'",';
}
foreach ($desc['columns'] as $key => $val) {
if ($val) {
$ret .= 'PMEjoin'.$field.'.'.$val;
if ($desc['divs'][$key]) {
$ret .= ',"'.addslashes($desc['divs'][$key]).'"';
}
$ret .= ',';
}
}
$ret{strlen($ret) - 1} = ')';
} else if (is_array($desc)) {
// TODO
} else {
$ret = 'PMEjoin'.$field.'.'.$this->fdd[$this->fds[$field]]['values']['description'];
}
// TODO: remove me
} elseif (0 && $this->fdd[$this->fds[$field]]['values']['column'] && ! $dont_cols) {
$ret = 'PMEjoin'.$field.'.'.$this->fdd[$this->fds[$field]]['values']['column'];
} else {
$ret = 'PMEtable0.'.$this->fds[$field];
}
// TODO: not neccessary, remove me!
if (is_array($this->fdd[$this->fds[$field]]['values2'])) {
}
}
return $ret;
} /* }}} */
 
function get_SQL_query($parts) /* {{{ */
{
foreach ($parts as $k => $v) {
$parts[$k] = trim($parts[$k]);
}
switch ($parts['type']) {
case 'select':
$ret = 'SELECT ';
if ($parts['DISTINCT'])
$ret .= 'DISTINCT ';
$ret .= $parts['select'];
$ret .= ' FROM '.$parts['from'];
if ($parts['where'] != '')
$ret .= ' WHERE '.$parts['where'];
if ($parts['groupby'] != '')
$ret .= ' GROUP BY '.$parts['groupby'];
if ($parts['having'] != '')
$ret .= ' HAVING '.$parts['having'];
if ($parts['orderby'] != '')
$ret .= ' ORDER BY '.$parts['orderby'];
if ($parts['limit'] != '')
$ret .= ' LIMIT '.$parts['limit'];
if ($parts['procedure'] != '')
$ret .= ' PROCEDURE '.$parts['procedure'];
break;
case 'update':
$ret = 'UPDATE '.$parts['table'];
$ret .= ' SET '.$parts['fields'];
if ($parts['where'] != '')
$ret .= ' WHERE '.$parts['where'];
break;
case 'insert':
$ret = 'INSERT INTO '.$parts['table'];
$ret .= ' VALUES '.$parts['values'];
break;
case 'delete':
$ret = 'DELETE FROM '.$parts['table'];
if ($parts['where'] != '')
$ret .= ' WHERE '.$parts['where'];
break;
default:
die('unknown query type');
break;
}
return $ret;
} /* }}} */
 
function get_SQL_column_list() /* {{{ */
{
$fields = array();
for ($k = 0; $k < $this->num_fds; $k++) {
if (! $this->displayed[$k] && $k != $this->key_num) {
continue;
}
$fields[] = $this->fqn($k).' AS qf'.$k;
if ($this->col_has_values($k)) {
$fields[] = $this->fqn($k, true, true).' AS qf'.$k.'_idx';
}
if ($this->col_has_datemask($k)) {
$fields[] = 'UNIX_TIMESTAMP('.$this->fqn($k).') AS qf'.$k.'_timestamp';
}
}
return join(',', $fields);
} /* }}} */
 
function get_SQL_join_clause() /* {{{ */
{
$main_table = 'PMEtable0';
$join_clause = $this->tb." AS $main_table";
for ($k = 0, $numfds = sizeof($this->fds); $k < $numfds; $k++) {
$main_column = $this->fds[$k];
if($this->fdd[$main_column]['values']['db']) {
$dbp = $this->fdd[$main_column]['values']['db'].'.';
} else {
$dbp = $this->dbp;
}
$table = @$this->fdd[$main_column]['values']['table'];
$join_column = @$this->fdd[$main_column]['values']['column'];
$join_desc = @$this->fdd[$main_column]['values']['description'];
if ($join_desc != '' && $join_column != '') {
$join_table = 'PMEjoin'.$k;
$ar = array(
'main_table' => $main_table,
'main_column' => $main_column,
'join_table' => $join_table,
'join_column' => $join_column,
'join_description' => $join_desc);
$join_clause .= " LEFT OUTER JOIN $dbp$table AS $join_table ON (";
$join_clause .= isset($this->fdd[$main_column]['values']['join'])
? $this->substituteVars($this->fdd[$main_column]['values']['join'], $ar)
: "$join_table.$join_column = $main_table.$main_column";
if (isset($this->fdd[$main_column]['values']['filters'])) {
$join_clause .= ' AND ';
$join_clause .= $this->substituteVars($this->fdd[$main_column]['values']['filters'], $ar);
}
$join_clause .= ')';
}
}
return $join_clause;
} /* }}} */
 
function get_SQL_where_from_query_opts($qp = null, $text = 0) /* {{{ */
{
if ($qp == null) {
$qp = $this->query_opts;
}
$where = array();
foreach ($qp as $field => $ov) {
if (is_numeric($field)) {
$tmp_where = array();
foreach ($ov as $field2 => $ov2) {
$tmp_where[] = sprintf('%s %s %s', $field2, $ov2['oper'], $ov2['value']);
}
$where[] = '('.join(' OR ', $tmp_where).')';
} else {
if (is_array($ov['value'])) {
$tmp_ov_val = '';
foreach ($ov['value'] as $ov_val) {
strlen($tmp_ov_val) > 0 && $tmp_ov_val .= ' OR ';
$tmp_ov_val .= sprintf('FIND_IN_SET("%s",%s)', $ov_val, $field);
}
$where[] = "($tmp_ov_val)";
} else {
$where[] = sprintf('%s %s %s', $field, $ov['oper'], $ov['value']);
}
}
}
// Add any coder specified filters
if (! $text && $this->filters) {
$where[] = '('.$this->filters.')';
}
if (count($where) > 0) {
if ($text) {
return str_replace('%', '*', join(' AND ',$where));
} else {
return join(' AND ',$where);
}
}
return ''; /* empty string */
} /* }}} */
 
function gather_query_opts() /* {{{ */
{
$this->query_opts = array();
$this->prev_qfn = $this->qfn;
$this->qfn = '';
if ($this->clear_operation()) {
return;
}
// gathers query options into an array, $this->query_opts
$qo = array();
for ($k = 0; $k < $this->num_fds; $k++) {
$l = 'qf'.$k;
$lc = 'qf'.$k.'_comp';
$li = 'qf'.$k.'_id';
$m = $this->get_sys_cgi_var($l);
$mc = $this->get_sys_cgi_var($lc);
$mi = $this->get_sys_cgi_var($li);
if (! isset($m) && ! isset($mi)) {
continue;
}
if (is_array($m) || is_array($mi)) {
if (is_array($mi)) {
$m = $mi;
$l = $li;
}
if (in_array('*', $m)) {
continue;
}
if ($this->col_has_values($k) && $this->col_has_multiple($k)) {
foreach (array_keys($m) as $key) {
$m[$key] = addslashes($m[$key]);
}
$qo[$this->fqn($k)] = array('value' => $m);
} else {
$qf_op = '';
foreach (array_keys($m) as $key) {
if ($qf_op == '') {
$qf_op = 'IN';
$qf_val = '"'.addslashes($m[$key]).'"';
$afilter = ' IN ("'.addslashes($m[$key]).'"'; // )
} else {
$afilter = $afilter.',"'.addslashes($m[$key]).'"';
$qf_val .= ',"'.addslashes($m[$key]).'"';
}
$this->qfn .= '&'.$this->cgi['prefix']['sys'].$l.'['.rawurlencode($key).']='.rawurlencode($m[$key]);
}
$afilter = $afilter.')';
// XXX: $dont_desc and $dont_cols hack
$dont_desc = isset($this->fdd[$k]['values']['description']);
$dont_cols = isset($this->fdd[$k]['values']['column']);
$qo[$this->fqn($k, $dont_desc, $dont_cols)] =
array('oper' => $qf_op, 'value' => "($qf_val)"); // )
}
} else if (isset($mi)) {
if ($mi == '*') {
continue;
}
if ($this->fdd[$k]['select'] != 'M' && $this->fdd[$k]['select'] != 'D' && $mi == '') {
continue;
}
$afilter = addslashes($mi);
$qo[$this->fqn($k, true, true)] = array('oper' => '=', 'value' => "'$afilter'");
$this->qfn .= '&'.$this->cgi['prefix']['sys'].$li.'='.rawurlencode($mi);
} else if (isset($m)) {
if ($m == '*') {
continue;
}
if ($this->fdd[$k]['select'] != 'M' && $this->fdd[$k]['select'] != 'D' && $m == '') {
continue;
}
$afilter = addslashes($m);
if ($this->fdd[$k]['select'] == 'N') {
$mc = in_array($mc, $this->comp_ops) ? $mc : '=';
$qo[$this->fqn($k)] = array('oper' => $mc, 'value' => "'$afilter'");
$this->qfn .= '&'.$this->cgi['prefix']['sys'].$l .'='.rawurlencode($m);
$this->qfn .= '&'.$this->cgi['prefix']['sys'].$lc.'='.rawurlencode($mc);
} else {
$afilter = '%'.str_replace('*', '%', $afilter).'%';
$ids = array();
$ar = array();
$ar[$this->fqn($k)] = array('oper' => 'LIKE', 'value' => "'$afilter'");
if (is_array($this->fdd[$k]['values2'])) {
foreach ($this->fdd[$k]['values2'] as $key => $val) {
if (strlen($m) > 0 && stristr($val, $m)) {
$ids[] = '"'.addslashes($key).'"';
}
}
if (count($ids) > 0) {
$ar[$this->fqn($k, true, true)]
= array('oper' => 'IN', 'value' => '('.join(',', $ids).')');
}
}
$qo[] = $ar;
$this->qfn .= '&'.$this->cgi['prefix']['sys'].$l.'='.rawurlencode($m);
}
}
}
$this->query_opts = $qo;
} /* }}} */
 
/*
* Create JavaScripts
*/
 
function form_begin() /* {{{ */
{
$page_name = htmlspecialchars($this->page_name);
if ($this->add_operation() || $this->change_operation() || $this->copy_operation()
|| $this->view_operation() || $this->delete_operation()) {
$field_to_tab = array();
for ($tab = $k = $this->cur_tab = 0; $k < $this->num_fds; $k++) {
if (isset($this->fdd[$k]['tab'])) {
if ($tab == 0 && $k > 0) {
$this->tabs[0] = 'PMEtab0';
$this->cur_tab = 1;
$tab++;
}
if (is_array($this->fdd[$k]['tab'])) {
$this->tabs[$tab] = @$this->fdd[$k]['tab']['name'];
$this->fdd[$k]['tab']['default'] && $this->cur_tab = $tab;
} else {
$this->tabs[$tab] = @$this->fdd[$k]['tab'];
}
$tab++;
}
$field_to_tab[$k] = max(0, $tab - 1);
}
if (preg_match('/^'.$this->dhtml['prefix'].'tab(\d+)$/', $this->get_sys_cgi_var('cur_tab'), $parts)) {
$this->cur_tab = $parts[1];
}
if ($this->tabs_enabled()) {
// initial TAB styles
echo '<style type="text/css" media="screen">',"\n";
for ($i = 0; $i < count($this->tabs); $i++) {
echo ' #'.$this->dhtml['prefix'].'tab',$i,' { display: ';
echo (($i == $this->cur_tab || $this->tabs[$i] == 'PMEtab0' ) ? 'block' : 'none') ,'; }',"\n";
}
echo '</style>',"\n";
// TAB javascripts
echo '<script type="text/javascript"><!--',"\n\n";
$css_class_name1 = $this->getCSSclass('tab', $position);
$css_class_name2 = $this->getCSSclass('tab-selected', $position);
echo 'var '.$this->js['prefix'].'cur_tab = "'.$this->dhtml['prefix'].'tab',$this->cur_tab,'";
 
function '.$this->js['prefix'].'show_tab(tab_name)
{';
if ($this->nav_up()) {
echo '
document.getElementById('.$this->js['prefix'].'cur_tab+"_up_label").className = "',$css_class_name1,'";
document.getElementById('.$this->js['prefix'].'cur_tab+"_up_link").className = "',$css_class_name1,'";
document.getElementById(tab_name+"_up_label").className = "',$css_class_name2,'";
document.getElementById(tab_name+"_up_link").className = "',$css_class_name2,'";';
}
if ($this->nav_down()) {
echo '
document.getElementById('.$this->js['prefix'].'cur_tab+"_down_label").className = "',$css_class_name1,'";
document.getElementById('.$this->js['prefix'].'cur_tab+"_down_link").className = "',$css_class_name1,'";
document.getElementById(tab_name+"_down_label").className = "',$css_class_name2,'";
document.getElementById(tab_name+"_down_link").className = "',$css_class_name2,'";';
}
echo '
document.getElementById('.$this->js['prefix'].'cur_tab).style.display = "none";
document.getElementById(tab_name).style.display = "block";
'.$this->js['prefix'].'cur_tab = tab_name;
document.'.$this->cgi['prefix']['sys'].'form.'.$this->cgi['prefix']['sys'].'cur_tab.value = tab_name;
}',"\n\n";
echo '// --></script>', "\n";
}
}
 
if ($this->add_operation() || $this->change_operation() || $this->copy_operation()) {
$first_required = true;
for ($k = 0; $k < $this->num_fds; $k++) {
if ($this->displayed[$k] && ! $this->readonly($k) && ! $this->hidden($k)
&& ($this->fdd[$k]['js']['required'] || isset($this->fdd[$k]['js']['regexp']))) {
if ($first_required) {
$first_required = false;
echo '<script type="text/javascript"><!--',"\n";
echo '
function '.$this->js['prefix'].'trim(str)
{
while (str.substring(0, 1) == " "
|| str.substring(0, 1) == "\\n"
|| str.substring(0, 1) == "\\r")
{
str = str.substring(1, str.length);
}
while (str.substring(str.length - 1, str.length) == " "
|| str.substring(str.length - 1, str.length) == "\\n"
|| str.substring(str.length - 1, str.length) == "\\r")
{
str = str.substring(0, str.length - 1);
}
return str;
}
 
function '.$this->js['prefix'].'form_control(theForm)
{',"\n";
}
if ($this->col_has_values($k)) {
$condition = 'theForm.'.$this->cgi['prefix']['data'].$this->fds[$k].'.selectedIndex == -1';
$multiple = $this->col_has_multiple_select($k);
} else {
$condition = '';
$multiple = false;
if ($this->fdd[$k]['js']['required']) {
$condition = $this->js['prefix'].'trim(theForm.'.$this->cgi['prefix']['data'].$this->fds[$k].'.value) == ""';
}
if (isset($this->fdd[$k]['js']['regexp'])) {
$condition .= (strlen($condition) > 0 ? ' || ' : '');
$condition .= sprintf('!(%s.test('.$this->js['prefix'].'trim(theForm.%s.value)))',
$this->fdd[$k]['js']['regexp'], $this->cgi['prefix']['data'].$this->fds[$k]);
}
}
 
/* Multiple selects have their name like ``name[]''.
It is not possible to work with them directly, because
theForm.name[].something will result into JavaScript
syntax error. Following search algorithm is provided
as a workaround for this.
*/
if ($multiple) {
echo '
multiple_select = null;
for (i = 0; i < theForm.length; i++) {
if (theForm.elements[i].name == "',$this->cgi['prefix']['data'].$this->fds[$k],'[]") {
multiple_select = theForm.elements[i];
break;
}
}
if (multiple_select != null && multiple_select.selectedIndex == -1) {';
} else {
echo '
if (',$condition,') {';
}
echo '
alert("';
if (isset($this->fdd[$k]['js']['hint'])) {
echo htmlspecialchars($this->fdd[$k]['js']['hint']);
} else {
echo $this->labels['Please enter'],' ',$this->fdd[$k]['name'],'.';
}
echo '");';
if ($this->tabs_enabled() && $field_to_tab[$k] >= $this->cur_tab) {
echo '
'.$this->js['prefix'].'show_tab("'.$this->dhtml['prefix'].'tab',$field_to_tab[$k],'");';
}
echo '
theForm.',$this->cgi['prefix']['data'].$this->fds[$k],'.focus();
return false;
}',"\n";
}
}
if (! $first_required) {
echo '
return true;
}',"\n\n";
echo '// --></script>', "\n";
}
}
 
if ($this->filter_operation()) {
echo '<script type="text/javascript"><!--',"\n";
echo '
function '.$this->js['prefix'].'filter_handler(theForm, theEvent)
{
var pressed_key = null;
if (theEvent.which) {
pressed_key = theEvent.which;
} else {
pressed_key = theEvent.keyCode;
}
if (pressed_key == 13) { // enter pressed
theForm.submit();
return false;
}
return true;
}',"\n\n";
echo '// --></script>', "\n";
}
 
if ($this->display['form']) {
echo '<form class="',$this->getCSSclass('form'),'" method="post"';
echo ' action="',$page_name,'" name="'.$this->cgi['prefix']['sys'].'form">',"\n";
}
return true;
} /* }}} */
 
function form_end() /* {{{ */
{
if ($this->display['form']) {
echo '</form>',"\n";
}
} /* }}} */
 
function display_tab_labels($position) /* {{{ */
{
if (! is_array($this->tabs)) {
return false;
}
echo '<table summary="labels" class="',$this->getCSSclass('tab', $position),'">',"\n";
echo '<tr class="',$this->getCSSclass('tab', $position),'">',"\n";
for ($i = ($this->tabs[0] == 'PMEtab0' ? 1 : 0); $i < count($this->tabs); $i++) {
$css_class_name = $this->getCSSclass($i != $this->cur_tab ? 'tab' : 'tab-selected', $position);
echo '<td class="',$css_class_name,'" id="'.$this->dhtml['prefix'].'tab',$i,'_',$position,'_label">';
echo '<a class="',$css_class_name,'" id="'.$this->dhtml['prefix'].'tab',$i,'_',$position,'_link';
echo '" href="javascript:'.$this->js['prefix'].'show_tab(\''.$this->dhtml['prefix'].'tab',$i,'\')">';
echo $this->tabs[$i],'</a></td>',"\n";
}
echo '<td class="',$this->getCSSclass('tab-end', $position),'">&nbsp;</td>',"\n";
echo '</tr>',"\n";
echo '</table>',"\n";
} /* }}} */
 
/*
* Display functions
*/
 
function display_add_record() /* {{{ */
{
for ($tab = 0, $k = 0; $k < $this->num_fds; $k++) {
if (isset($this->fdd[$k]['tab']) && $this->tabs_enabled() && $k > 0) {
$tab++;
echo '</table>',"\n";
echo '</div>',"\n";
echo '<div id="'.$this->dhtml['prefix'].'tab',$tab,'">',"\n";
echo '<table class="',$this->getCSSclass('main'),'" summary="',$this->tb,'">',"\n";
}
if (! $this->displayed[$k]) {
continue;
}
if ($this->hidden($k)) {
echo $this->htmlHiddenData($this->fds[$k], $this->fdd[$k]['default']);
continue;
}
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, 'next', $css_postfix);
$escape = isset($this->fdd[$k]['escape']) ? $this->fdd[$k]['escape'] : true;
echo '<tr class="',$this->getCSSclass('row', null, true, $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">';
echo $this->fdd[$k]['name'],'</td>',"\n";
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),">\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$selected = @$this->fdd[$k]['default'];
$multiple = $this->col_has_multiple($k);
$readonly = $this->readonly($k);
$strip_tags = true;
//$escape = true;
if ($this->col_has_checkboxes($k) || $this->col_has_radio_buttons($k)) {
echo $this->htmlRadioCheck($this->cgi['prefix']['data'].$this->fds[$k],
$css_class_name, $vals, $selected, $multiple, $readonly,
$strip_tags, $escape);
} else {
echo $this->htmlSelect($this->cgi['prefix']['data'].$this->fds[$k],
$css_class_name, $vals, $selected, $multiple, $readonly,
$strip_tags, $escape);
}
} elseif (isset ($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="',$this->cgi['prefix']['data'].$this->fds[$k],'"';
echo ($this->readonly($k) ? ' disabled="disabled"' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
}
echo '>';
if($escape) echo htmlspecialchars($this->fdd[$k]['default']);
else echo $this->fdd[$k]['default'];
echo '</textarea>',"\n";
} elseif ($this->col_has_php($k)) {
echo include($this->fdd[$k]['php']);
} else {
// Simple edit box required
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
echo '<input class="',$css_class_name,'" ';
echo ($this->password($k) ? 'type="password"' : 'type="text"');
echo ($this->readonly($k) ? ' disabled="disabled"' : '');
echo ' name="',$this->cgi['prefix']['data'].$this->fds[$k],'"';
echo $size_ml_props,' value="';
if($escape) echo htmlspecialchars($this->fdd[$k]['default']);
else echo $this->fdd[$k]['default'];
echo '" />';
}
echo '</td>',"\n";
if ($this->guidance) {
$css_class_name = $this->getCSSclass('help', null, true, $css_postfix);
$cell_value = $this->fdd[$k]['help'] ? $this->fdd[$k]['help'] : '&nbsp;';
echo '<td class="',$css_class_name,'">',$cell_value,'</td>',"\n";
}
echo '</tr>',"\n";
}
} /* }}} */
 
function display_copy_change_delete_record() /* {{{ */
{
/*
* For delete or change: SQL SELECT to retrieve the selected record
*/
 
$qparts['type'] = 'select';
$qparts['select'] = $this->get_SQL_column_list();
$qparts['from'] = $this->get_SQL_join_clause();
$qparts['where'] = '('.$this->fqn($this->key).'='
.$this->key_delim.$this->rec.$this->key_delim.')';
 
$res = $this->myquery($this->get_SQL_query($qparts),__LINE__);
if (! ($row = @mysql_fetch_array($res, MYSQL_ASSOC))) {
return false;
}
for ($tab = 0, $k = 0; $k < $this->num_fds; $k++) {
if (isset($this->fdd[$k]['tab']) && $this->tabs_enabled() && $k > 0) {
$tab++;
echo '</table>',"\n";
echo '</div>',"\n";
echo '<div id="'.$this->dhtml['prefix'].'tab',$tab,'">',"\n";
echo '<table class="',$this->getCSSclass('main'),'" summary="',$this->tb,'">',"\n";
}
if (! $this->displayed[$k]) {
continue;
}
if ($this->copy_operation() || $this->change_operation()) {
if ($this->hidden($k)) {
if ($k != $this->key_num) {
echo $this->htmlHiddenData($this->fds[$k], $row["qf$k"]);
}
continue;
}
$css_postfix = @$this->fdd[$k]['css']['postfix'];
echo '<tr class="',$this->getCSSclass('row', null, 'next', $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">';
echo $this->fdd[$k]['name'],'</td>',"\n";
/* There are two possibilities of readonly fields handling:
1. Display plain text for readonly timestamps, dates and URLs.
2. Display disabled input field
In all cases particular readonly field will NOT be saved. */
if ($this->readonly($k) && ($this->col_has_datemask($k) || $this->col_has_URL($k))) {
echo $this->display_delete_field($row, $k);
} elseif ($this->password($k)) {
echo $this->display_password_field($row, $k);
} else {
echo $this->display_change_field($row, $k);
}
if ($this->guidance) {
$css_class_name = $this->getCSSclass('help', null, true, $css_postfix);
$cell_value = $this->fdd[$k]['help'] ? $this->fdd[$k]['help'] : '&nbsp;';
echo '<td class="',$css_class_name,'">',$cell_value,'</td>',"\n";
}
echo '</tr>',"\n";
} elseif ($this->delete_operation() || $this->view_operation()) {
$css_postfix = @$this->fdd[$k]['css']['postfix'];
echo '<tr class="',$this->getCSSclass('row', null, 'next', $css_postfix),'">',"\n";
echo '<td class="',$this->getCSSclass('key', null, true, $css_postfix),'">';
echo $this->fdd[$k]['name'],'</td>',"\n";
if ($this->password($k)) {
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),'>',$this->labels['hidden'],'</td>',"\n";
} else {
$this->display_delete_field($row, $k);
}
if ($this->guidance) {
$css_class_name = $this->getCSSclass('help', null, true, $css_postfix);
$cell_value = $this->fdd[$k]['help'] ? $this->fdd[$k]['help'] : '&nbsp;';
echo '<td class="',$css_class_name,'">',$cell_value,'</td>',"\n";
}
echo '</tr>',"\n";
}
}
} /* }}} */
 
function display_change_field($row, $k) /* {{{ */
{
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('input', null, true, $css_postfix);
$escape = isset($this->fdd[$k]['escape']) ? $this->fdd[$k]['escape'] : true;
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),">\n";
if ($this->col_has_values($k)) {
$vals = $this->set_values($k);
$multiple = $this->col_has_multiple($k);
$readonly = $this->readonly($k);
$strip_tags = true;
//$escape = true;
if ($this->col_has_checkboxes($k) || $this->col_has_radio_buttons($k)) {
echo $this->htmlRadioCheck($this->cgi['prefix']['data'].$this->fds[$k],
$css_class_name, $vals, $row["qf$k"], $multiple, $readonly,
$strip_tags, $escape);
} else {
echo $this->htmlSelect($this->cgi['prefix']['data'].$this->fds[$k],
$css_class_name, $vals, $row["qf$k"], $multiple, $readonly,
$strip_tags, $escape);
}
} elseif (isset($this->fdd[$k]['textarea'])) {
echo '<textarea class="',$css_class_name,'" name="',$this->cgi['prefix']['data'].$this->fds[$k],'"';
echo ($this->readonly($k) ? ' disabled="disabled"' : '');
if (intval($this->fdd[$k]['textarea']['rows']) > 0) {
echo ' rows="',$this->fdd[$k]['textarea']['rows'],'"';
}
if (intval($this->fdd[$k]['textarea']['cols']) > 0) {
echo ' cols="',$this->fdd[$k]['textarea']['cols'],'"';
}
if (isset($this->fdd[$k]['textarea']['wrap'])) {
echo ' wrap="',$this->fdd[$k]['textarea']['wrap'],'"';
} else {
echo ' wrap="virtual"';
}
echo '>';
if($escape) echo htmlspecialchars($row["qf$k"]);
else echo $row["qf$k"];
echo '</textarea>',"\n";
} elseif ($this->col_has_php($k)) {
echo include($this->fdd[$k]['php']);
} else {
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
echo '<input class="',$css_class_name,'" type="text" ';
echo ($this->readonly($k) ? 'disabled="disabled" ' : '');
echo 'name="',$this->cgi['prefix']['data'].$this->fds[$k],'" value="';
if($escape) echo htmlspecialchars($row["qf$k"]);
else echo $row["qf$k"];
echo '" />',"\n";
}
echo '</td>',"\n";
} /* }}} */
 
function display_password_field($row, $k) /* {{{ */
{
$css_postfix = @$this->fdd[$k]['css']['postfix'];
echo '<td class="',$this->getCSSclass('value', null, true, $css_postfix),'"';
echo $this->getColAttributes($k),">\n";
$size_ml_props = '';
$maxlen = intval($this->fdd[$k]['maxlen']);
$size = isset($this->fdd[$k]['size']) ? $this->fdd[$k]['size'] : min($maxlen, 60);
$size && $size_ml_props .= ' size="'.$size.'"';
$maxlen && $size_ml_props .= ' maxlength="'.$maxlen.'"';
echo '<input class="',$this->getCSSclass('value', null, true, $css_postfix),'" type="password" ';
echo ($this->readonly($k) ? 'disabled="disabled" ' : '');
echo 'name="',$this->cgi['prefix']['data'].$this->fds[$k],'" value="';
echo htmlspecialchars($row["qf$k"]),'" ',$size_ml_props,' />',"\n";
echo '</td>',"\n";
} /* }}} */
 
function display_delete_field($row, $k) /* {{{ */
{
$css_postfix = @$this->fdd[$k]['css']['postfix'];
$css_class_name = $this->getCSSclass('value', null, true, $css_postfix);
echo '<td class="',$css_class_name,'"',$this->getColAttributes($k),">\n";
echo $this->cellDisplay($k, $row, $css_class_name);
echo '</td>',"\n";
} /* }}} */
 
/**
* Returns CSS class name
*/
function getCSSclass($name, $position = null, $divider = null, $postfix = null) /* {{{ */
{
static $div_idx = -1;
$elements = array($this->css['prefix'], $name);
if ($this->page_type && $this->css['page_type']) {
if ($this->page_type != 'L' && $this->page_type != 'F') {
$elements[] = $this->page_types[$this->page_type];
}
}
if ($position && $this->css['position']) {
$elements[] = $position;
}
if ($divider && $this->css['divider']) {
if ($divider === 'next') {
$div_idx++;
if ($this->css['divider'] > 0 && $div_idx >= $this->css['divider']) {
$div_idx = 0;
}
}
$elements[] = $div_idx;
}
if ($postfix) {
$elements[] = $postfix;
}
return join($this->css['separator'], $elements);
} /* }}} */
 
/**
* Returns field cell HTML attributes
*/
function getColAttributes($k) /* {{{ */
{
$colattrs = '';
if (isset($this->fdd[$k]['colattrs'])) {
$colattrs .= ' ';
$colattrs .= trim($this->fdd[$k]['colattrs']);
}
if (isset($this->fdd[$k]['nowrap'])) {
$colattrs .= ' nowrap';
}
return $colattrs;
} /* }}} */
 
/**
* Substitutes variables in string
* (this is very simple but secure eval() replacement)
*/
function substituteVars($str, $subst_ar) /* {{{ */
{
$array = preg_split('/(\\$\w+)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE);
$count = count($array);
for ($i = 1; $i < $count; $i += 2) {
$key = substr($array[$i], 1);
if (isset($subst_ar[$key])) {
$array[$i] = $subst_ar[$key];
}
}
return join('', $array);
} /* }}} */
 
/**
* Print URL
*/
function urlDisplay($k, $link_val, $disp_val, $css, $key) /* {{{ */
{
$escape = isset($this->fdd[$k]['escape']) ? $this->fdd[$k]['escape'] : true;
$ret = '';
$name = $this->fds[$k];
$page = $this->page_name;
$url = $this->cgi['prefix']['sys'].'rec'.'='.$key.'&'.$this->cgi['prefix']['sys'].'fm'
.'='.$this->fm.'&'.$this->cgi['prefix']['sys'].'fl'.'='.$this->fl;
$url .= '&'.$this->cgi['prefix']['sys'].'qfn'.'='.rawurlencode($this->qfn).$this->qfn;
$url .= '&'.$this->get_sfn_cgi_vars().$this->cgi['persist'];
$ar = array(
'key' => $key,
'name' => $name,
'link' => $link_val,
'value' => $disp_val,
'css' => $css,
'page' => $page,
'url' => $url
);
$urllink = isset($this->fdd[$k]['URL'])
? $this->substituteVars($this->fdd[$k]['URL'], $ar)
: $link_val;
$urldisp = isset($this->fdd[$k]['URLdisp'])
? $this->substituteVars($this->fdd[$k]['URLdisp'], $ar)