Subversion Repositories Applications.papyrus

Rev

Rev 1088 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 ddelon 1
<?php
2
 
3
// +--------------------------------------------------------------------------------+
4
// | annuaire_moteur_fonction.php 		                      						|
5
// +--------------------------------------------------------------------------------+
6
// | Copyright (c) 2000 - 2003 Tela Botanica 							        	|
7
// +--------------------------------------------------------------------------------+
8
// | Les fonctions de annuaire_moteur.php                                           |
9
// +--------------------------------------------------------------------------------+
10
// | Auteur : Alexandre Granier <alexandre@tela-botanica.org> 		  		        |
11
// +--------------------------------------------------------------------------------+
12
//
1185 alexandre_ 13
// $Id: annuaire_backoffice.fonct.php,v 1.8 2007-01-04 16:33:09 alexandre_tb Exp $
448 ddelon 14
 
15
 
16
/** function mkengine ()
17
*
18
*
19
*
20
*	@return
21
*/
22
 
1081 florian 23
include_once PAP_CHEMIN_API_PEAR.'Pager/Pager.php' ;
24
include_once PAP_CHEMIN_API_PEAR.'HTML/Table.php';
1185 alexandre_ 25
include_once PAP_CHEMIN_API_PEAR.'HTML/QuickForm/select.php';
679 alexandre_ 26
 
448 ddelon 27
function mkengine()
28
  {
29
    global $nbr_total;
30
    global $bouton, $HTTP_POST_VARS ;
31
 
679 alexandre_ 32
    $requete = mkquery() ;
33
    $ret = '<div>'. $requete .'</div>';
34
    // Deux requetes, une avec tous les resultats, l'autre avec les résultats affichés
35
 
36
    $result_final = $GLOBALS['ins_db']->query($requete) ;
37
    if (DB::isError($result_final)) {
38
    	echo $result_final->getMessage().'<br />'.$requete ;
39
    }
40
    $nbr_final = $result_final->numRows() ;
41
 
42
    $_SESSION['requete_mail_tous'] = $requete ;
43
 
44
    $donnees = array();
45
	while ($ligne = $result_final->fetchRow(DB_FETCHMODE_ASSOC)) {
46
		$donnees[] = $ligne ;
47
	}
48
 
49
	if (!isset($_REQUEST['setPerPage'])) $_REQUEST['setPerPage'] = 50 ;
50
 
51
	$param_pager = array (
52
                    'mode' => 'Jumping',
53
                    'delta' => 5,
54
                    'itemData' => $donnees
55
             ) ;
56
    $pager = & Pager::factory($param_pager);
1088 florian 57
 
448 ddelon 58
    $mes_vars = array ("recherche", "nom", "ville", "mail" ,"dept", "prenom", "cotisant", "pays", "sort", "T_REPONSE", "lettre","statut") ;
59
    // Deux cas , soit on a cliqué sur rechercher, soit on a cliqué sur un lien
60
    foreach ($mes_vars as $key=>$value) {
61
        if (!$bouton) {     // on a cliqué sur un lien
62
            if (empty($HTTP_POST_VARS[$value])) {
679 alexandre_ 63
 
448 ddelon 64
            }
65
        } else {
66
            // Si on clique sur le bouton rechercher
67
            if (empty ($HTTP_POST_VARS[$value])) {
68
                $$value = "" ;
69
            } else {
70
                $$value = $HTTP_POST_VARS[$value] ;
71
            }
72
        }
1088 florian 73
    }
448 ddelon 74
 
679 alexandre_ 75
  	$ret = '';
1088 florian 76
	$ret .= '<h1>'.AM_L_TITRE.'</h1>'."\n" ;
448 ddelon 77
  // construction du moteur de str
1185 alexandre_ 78
 	$ret .= '<div>';
448 ddelon 79
 
1185 alexandre_ 80
	// Le formulaire de recherche avec QuickForm
81
	$formulaire = new HTML_QuickForm('formulaire_recherche', 'post', str_replace('&amp;', '&', $GLOBALS['ins_url']->getURL()));
82
 
83
 	$formulaire->addElement('text', 'recherche', AM_L_RECHERCHER);
84
 
85
 	$requete = 'select GC_ID, GC_NAME from gen_COUNTRY where GC_LOCALE="fr"';
86
    $pays = &$GLOBALS['ins_db']->getAssoc ($requete);
679 alexandre_ 87
 
1185 alexandre_ 88
    $pays = array_merge (array('tous' => 'Tous les pays'), $pays);
679 alexandre_ 89
 
1185 alexandre_ 90
    if (DB::isError($pays)) {
91
		return $pays->getMessage().'<br />'.$pays->getDebugInfo();
92
	}
679 alexandre_ 93
 
1185 alexandre_ 94
	$select = new HTML_QuickForm_select ('pays', AM_L_PAYS, $pays, array ('class' => 'projet_asso')) ;
95
	$formulaire->addElement($select) ;
96
	$formulaire->addElement('text', 'nom', AM_L_NOM);
97
	$formulaire->addElement('text', 'prenom', AM_L_PRENOM);
98
	$formulaire->addElement('text', 'ville', AM_L_VILLE);
99
 
100
	if (defined('INS_CHAMPS_NOM_DEPARTEMENT')) {
101
		$departement = & $GLOBALS['ins_db']->getAssoc('select GFD_ID, CONCAT(GFD_ID,\' - \',GFD_NAME) as GFD_NAME from gen_FRENCH_DPT');
102
		$departement = array_merge (array ('tous' => 'Tous'), $departement);
103
 
104
		$select_dpt = new HTML_QuickForm_select ('departement', AM_L_DEPARTEMENT, $departement, array ('class' => 'projet_asso')) ;
105
		$formulaire->addElement($select_dpt);
106
	}
107
	$formulaire->addElement('text', 'mail', AM_L_MAIL);
108
 
109
	$grp = array(20 => 20, 50 => 50, 100 => 100) ;
110
	$select_grp = new HTML_QuickForm_select ('T_REPONSE', '', $grp, array ('class' => 'projet_asso')) ;
111
	$formulaire->addElement($select_grp);
112
	$formulaire->addElement('submit', 'bouton', AM_L_RECHERCHER);
113
	foreach ($mes_vars as $key=>$value) {
114
		if (isset($_POST[$value])) {
115
			$default[$value] = $_POST[$value] ;
116
		}
117
	}
118
	$formulaire->setDefaults($_POST);
119
 
120
    $ret .= '<br />'.$formulaire->toHTML();
121
 
679 alexandre_ 122
 
123
    // La liste des lettres de l'alphabet
124
    for ($i = 65 ; $i <91 ; $i++) {
125
    	$GLOBALS['ins_url']->addQueryString('lettre', chr($i)) ;
126
        $ret .= "\t<a href=\"".$GLOBALS['ins_url']->getURL();
127
        $ret .= '">';
128
        $ret .= chr($i) ;
129
        $ret .= "</a> \n";
130
	}
131
	$GLOBALS['ins_url']->addQueryString ('lettre', 'tous') ;
132
	$ret .= " <a href=\"".$GLOBALS['ins_url']->getURL().'">'.AM_L_TOUS."</a>\n" ;
133
    $ret .= "</div>\n" ;
1088 florian 134
 
135
    // Comptage du nombre total de données dans la table (hors CACHER = 1)
136
    $requete_nbre_inscrit = "select count(*) as CPT from ".INS_ANNUAIRE;
137
    $resultat_nbre_inscrit = $GLOBALS['ins_db']->query($requete_nbre_inscrit) ;
138
    if ($resultat_nbre_inscrit->numRows() == 1) {
139
    	$tmp_nb = $resultat_nbre_inscrit->fetchRow(DB_FETCHMODE_OBJECT);
140
        $nbr_total = $tmp_nb->CPT;
141
        $chaine = " sur $nbr_total entrées";
142
        if ($nbr_total <= 0) $ret .= "<B>Erreur</B> lors du comptage des structures ($nbr_total trouvées) : $requete_nbre_inscrit";
143
    }
144
  else $ret .=  "<B>Erreur</B> lors du comptage des structures : $requete_nbre_inscrit";
145
  // fin comptage
146
 
147
    $ret .= '<p class="zone_info">'.$nbr_final.' résultat(s)'.$chaine.'</p>' ;
679 alexandre_ 148
    $GLOBALS['ins_url']->removeQueryString('lettre') ;
149
 
150
    // Menu Ajouter un inscrit
151
    $GLOBALS['ins_url']->addQueryString('ajouter', '1') ;
152
    $ret .= '<div><a href="'.$GLOBALS['ins_url']->getURL().'">'.INS_AJOUT_MEMBRE.'</a></div>'."\n";
153
	$data  = $pager->getPageData();
154
 
155
	$table = new HTML_Table(array ('class' => 'table_bazar')) ;
1088 florian 156
	if (defined('INS_CHAMPS_VILLE')) {
157
		$table->addRow(array(
158
			'<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_NOM.'">Identit&eacute;</a>',
159
			'<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_MAIL.'">Adresse mail</a>',
160
			'<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_VILLE.'">'.AM_L_VILLE.'</a>',
161
			'Pays ou Dpt (fr)'
679 alexandre_ 162
			), '', 'TH') ;
1088 florian 163
	} else {
164
		$table->addRow(array(
165
			'<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_NOM.'">Identit&eacute;</a>',
166
			'<a href="'.$GLOBALS['ins_url']->getURL().'&amp;sort='.INS_CHAMPS_MAIL.'">Adresse mail</a>',
167
			'Pays ou Dpt (fr)'
168
			), '', 'TH') ;
169
	}
679 alexandre_ 170
 
171
	$debut = isset($_REQUEST['pageID']) ? $_REQUEST['pageID'] : 1 ;
172
	for ($i = ($debut - 1) * $_REQUEST['setPerPage'];
173
				$i < $_REQUEST['setPerPage'] * $debut;
174
				$i++) {
175
		// On teste s'il y une valeur, si oui on ajoute la ligne
176
		if (isset ($data[$i])) {
177
			$urlPop = $GLOBALS['ins_url']->getURL().'&amp;'.INS_CHAMPS_ID.'='.$data[$i][INS_CHAMPS_ID];
1088 florian 178
			if (defined('INS_CHAMPS_VILLE')) {
179
				$ligne_inscrit = array ("<a href=\"$urlPop\">".$data[$i][INS_CHAMPS_NOM].' '.$data[$i][INS_CHAMPS_PRENOM].
679 alexandre_ 180
								'</a>', $data[$i][INS_CHAMPS_MAIL], $data[$i][INS_CHAMPS_VILLE]) ;
1088 florian 181
			} else {
182
				$ligne_inscrit = array ("<a href=\"$urlPop\">".$data[$i][INS_CHAMPS_NOM].' '.$data[$i][INS_CHAMPS_PRENOM].
183
								'</a>', $data[$i][INS_CHAMPS_MAIL]) ;
184
			}
679 alexandre_ 185
 
186
			// Pour la france on met le département, sinon on laisse le nom du pays
187
			if ($data[$i][INS_CHAMPS_PAYS] != 'fr') {
188
				array_push ($ligne_inscrit, $data[$i][INS_CHAMPS_LABEL_PAYS]);
189
			} else {
1088 florian 190
				if (defined('INS_CHAMPS_NOM_DEPARTEMENT')) {
191
			        $req_dpt = 'select '.INS_CHAMPS_NOM_DEPARTEMENT.' from '.INS_TABLE_DPT.",".INS_ANNUAIRE.
192
								" where ".INS_ANNUAIRE.'.'.INS_CHAMPS_ID.'='.$data[$i][INS_CHAMPS_ID] ;
193
			        $req_dpt .= " and ".INS_ANNUAIRE.'.'.INS_CHAMPS_DEPARTEMENT.'='.INS_TABLE_DPT.'.'
194
			        					.INS_CHAMPS_ID_DEPARTEMENT ;
195
			        $resultat_dpt = $GLOBALS['ins_db']->query($req_dpt) ;
196
			        if (DB::isError($resultat_dpt)) {
197
			        	echo $resultat_dpt->getMessage().$resultat_dpt->getDebugInfo();
198
			        }
199
			        $ligne_dpt = $resultat_dpt->fetchRow(DB_FETCHMODE_ASSOC) ;
200
					array_push ($ligne_inscrit, $ligne_dpt[INS_CHAMPS_NOM_DEPARTEMENT]) ;
201
				}
679 alexandre_ 202
			}
203
 
204
			$table->addRow($ligne_inscrit) ;
205
		}
206
	}
207
	$ret .= $table->toHTML();
208
	$links = $pager->getLinks();
209
	$ret .= $links['all'] ;
210
 
211
    $ret .= '<div><a href="'.$GLOBALS['ins_url']->getURL().'&amp;action='.ANN_MAIL_TOUS
212
    			.'">'.AM_L_MAIL_SELECTION."</a></div>\n" ;
213
 
448 ddelon 214
    return $ret;
215
}
216
 
217
 
218
function mkquery()
219
{
220
 
221
	// Requete sur l'annuaire pour extraire le nom, prénom, ville, nom du département (jointure),
222
	// l'état de la cotisation (jointure)
223
 
224
	// le tableau suivant contient tous les champs de la table annuaire_tela sur lesquels on peut effectuer une recherche
1088 florian 225
	if (defined('INS_CHAMPS_DEPARTEMENT')) {
226
		$fields_annu = array("nom" => INS_CHAMPS_NOM, "prenom" => INS_CHAMPS_PRENOM , "mail" => INS_CHAMPS_MAIL ,
227
		"dept" => INS_CHAMPS_DEPARTEMENT, "pays" => INS_CHAMPS_PAYS ) ;
228
	}
229
	else {
230
		$fields_annu = array("nom" => INS_CHAMPS_NOM, "prenom" => INS_CHAMPS_PRENOM , "mail" => INS_CHAMPS_MAIL ,
231
		 "pays" => INS_CHAMPS_PAYS ) ;
232
	}
233
	if (defined('INS_CHAMPS_VILLE')) $fields_annu["ville"]=INS_CHAMPS_VILLE;
234
    $mes_vars = array ("recherche", "nom", "ville", "mail" ,"dept", "prenom", "pays", "sort", "T_REPONSE", "lettre", "statut") ;
448 ddelon 235
 
1088 florian 236
	$queries = "SELECT ".INS_ANNUAIRE.".*" ;
679 alexandre_ 237
    $queries .= ", ".INS_TABLE_PAYS.'.'.INS_CHAMPS_LABEL_PAYS ;
1088 florian 238
	$queries .= " FROM ".INS_ANNUAIRE ;
679 alexandre_ 239
    $queries .= ",".INS_TABLE_PAYS ;
448 ddelon 240
 
241
	// Construction en fonction des champs saisies
242
 
243
	// juste le champs "rechercher", on regarde partout
679 alexandre_ 244
 
1088 florian 245
	$where = ' WHERE ' ;
679 alexandre_ 246
    if (isset ($_REQUEST['recherche']) && $_REQUEST['recherche'] != "") {
247
        $where .= '('.INS_CHAMPS_NOM.' like "%'.$_REQUEST['recherche'].'%"' ; // le premier
248
        foreach($fields_annu as $key=>$value) {
249
			if ($key == "nom" || $key == 'dept') continue ;
250
            $where .= ($key == "pays" ?
251
                $_REQUEST['pays'] == "tous" ? ")" :
252
                ") and $value = '".$_REQUEST['pays']."'" : ' or '.$value.' like "%'.$_REQUEST['recherche'].'%"') ;	// les autres
253
        }
254
        if (isset ($_REQUEST['dept']) && $_REQUEST['dept'] != 'tous') {
255
        	$where .= 'and '.INS_CHAMPS_DEPARTEMENT.'="'.$_REQUEST['dept'].'"' ;
256
        }
257
	} else {
448 ddelon 258
 
679 alexandre_ 259
		// si un ou plusieurs autres champs ont été indiqué, on les rajoute ici
448 ddelon 260
 
679 alexandre_ 261
		$or_flag = false ;
262
		foreach($fields_annu as $key=>$valeur) {
263
            if ($key != "") {
264
                if ($key == "pays") {
265
                    if (!isset($_REQUEST[$key]) || $_REQUEST[$key] == "tous") {
1088 florian 266
                    	$where .= ' '.INS_CHAMPS_PAYS." like '%'"." and ";
448 ddelon 267
                    } else {
1088 florian 268
                    	$where .= " $valeur like \"%".$_REQUEST[$key]."%\""." and " ;
679 alexandre_ 269
                    }
270
                } else {
271
                    if ($key == "dept") {
272
                        if (isset($_REQUEST[$key]) && $_REQUEST[$key] != "tous") {
273
                            $where .= " and ".INS_CHAMPS_DEPARTEMENT."=".$_REQUEST[$key] ;
274
                            if ($fields_annu["pays"] != "fr") $where .= " and ".INS_CHAMPS_PAYS."=\"fr\"" ;
275
                        }
276
 
277
                    } else {
278
                        if (isset ($_REQUEST[$key]) && $or_flag) {
1088 florian 279
                        	$where .= "$valeur like \"%".$_REQUEST[$key]."%\" and " ; ;
448 ddelon 280
                        } else {
1088 florian 281
                        	$where .= "$valeur like \"%%\" and " ; ;
282
                        }
448 ddelon 283
                    }
284
                }
679 alexandre_ 285
                $or_flag = true ;
286
            }
287
		}
1088 florian 288
		$where = substr($where, 0, strlen($where)-5);
679 alexandre_ 289
		// ici le cas ou rien n'a été saisie du tout, on affiche tout
290
		if (!$or_flag) {
291
				$where .= INS_CHAMPS_NOM." like '%')" ;
292
		}
448 ddelon 293
	}
679 alexandre_ 294
 
295
    if (isset($_REQUEST['lettre'])) {
296
    	if ($_REQUEST['lettre'] == 'tous') $_REQUEST['lettre'] = '';
1088 florian 297
    	$where = ' WHERE '.INS_CHAMPS_NOM.' LIKE "'.$_REQUEST['lettre'].'%"' ;
448 ddelon 298
    }
679 alexandre_ 299
    $where .= " and ".INS_ANNUAIRE.".".INS_CHAMPS_PAYS."=".INS_TABLE_PAYS.".".INS_CHAMPS_ID_PAYS."" ;
300
 
301
    if (isset($nom) && $nom != "") $where .= " and ".INS_CHAMPS_NOM." like \"%$nom%\"" ;
302
    if (isset($_REQUEST['prenom']) && $_REQUEST['prenom'] != "")
303
    				$where .= " and ".INS_CHAMPS_PRENOM.' like "%'.$_REQUEST['prenom'].'%"' ;
304
    if (isset($ville) && $ville != "") $where .= " and ".INS_CHAMPS_VILLE." like \"%$ville%\"" ;
305
    if (isset($mail) && $mail != "") $where .= " and ".INS_CHAMPS_MAIL." like \"%$mail%\"" ;
306
    $where .= ' and  gip_id_i18n like "%'.$GLOBALS['lang'].'%"' ;
307
 
308
	if (isset ($_REQUEST['lettre']) && $_REQUEST['lettre'] == "tous") $_REQUEST['lettre'] = "" ;
309
    if (!isset ($_REQUEST['lettre'])) $_REQUEST['lettre'] = '' ;
310
 
311
 
1088 florian 312
    $queries .= $where.' AND '.INS_CHAMPS_ID.'!=0';
679 alexandre_ 313
 
314
  if (isset($_REQUEST['sort']) && $_REQUEST['sort'] != "") $queries .= ' order by '.$_REQUEST['sort'] ;
448 ddelon 315
  return $queries;
316
}
317
 
318
 
679 alexandre_ 319
function ajouterInscrit() {
320
	$res = '';
321
	$GLOBALS['ins_url']->addQueryString ('ajouter', '1');
322
	$GLOBALS['ins_url']->addQueryString ('ajouter_v', '1');
323
	$formulaire = new HTML_formulaireInscription('inscription',  '',
324
						str_replace ('&amp;', '&', $GLOBALS['ins_url']->getURL()), '', '') ;
325
	$formulaire->construitFormulaire(str_replace ('&amp;', '&', $GLOBALS['ins_url']->getURL())) ;
326
 
327
	if (isset($_REQUEST['ajouter_v'])) {
328
		if ($formulaire->validate()) {
939 alexandre_ 329
			$id_utilisateur = insertion($formulaire->getSubmitValues()) ;
330
 
331
			// Appel des actions desinscriptions des applications clientes
332
		        $d = dir(GEN_CHEMIN_CLIENT);
333
				while (false !== ($repertoire = $d->read())) {
334
					if (file_exists(GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.inscription.inc.php'))
335
					include_once GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.inscription.inc.php' ;
336
				}
337
					$d->close();
679 alexandre_ 338
			if (INS_CHAMPS_LETTRE != '' && isset ($valeurs['lettre'])) {
339
				inscription_lettre(INS_MAIL_INSCRIPTION_LISTE) ;
340
			}
341
		    return mkengine();
342
        }
448 ddelon 343
	}
679 alexandre_ 344
	return $formulaire->toHTML();
448 ddelon 345
}
1185 alexandre_ 346
?>