Subversion Repositories Applications.papyrus

Rev

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

Rev Author Line No. Line
1163 alexandre_ 1
<?php
2
 
3
//vim: set expandtab tabstop=4 shiftwidth=4:
4
// +-----------------------------------------------------------------------------------------------+
5
// | PHP version 4.0                                                                               |
6
// +-----------------------------------------------------------------------------------------------+
7
// | Copyright (c) 1997, 1998, 1999, 2000, 2001 The PHP Group                                      |
8
// +-----------------------------------------------------------------------------------------------+
9
// | This source file is subject to version 2.0 of the PHP license,                                |
10
// | that is bundled with this package in the file LICENSE, and is                                 |
11
// | available at through the world-wide-web at                                                    |
12
// | http://www.php.net/license/2_02.txt.                                                          |
13
// | If you did not receive a copy of the PHP license and are unable to                            |
14
// | obtain it through the world-wide-web, please send a note to                                   |
15
// | license@php.net so we can mail you a copy immediately.                                        |
16
// +-----------------------------------------------------------------------------------------------+
17
/**
18
*
19
*Fichier des fonctions du bottin
20
*
21
*@package bottin
22
//Auteur original :
23
*@author                Alexandre GRANIER <alexandre@tela-botanica.org.org>
24
//Autres auteurs :
25
*@copyright         Outils-reseaux 2006-2040
26
*@version           05 avril 2006
27
// +-----------------------------------------------------------------------------------------------+
28
//
1836 alexandre_ 29
// $Id: bottin.class.php,v 1.6.2.3 2008-04-29 09:47:03 alexandre_tb Exp $
1163 alexandre_ 30
// FICHIER : $RCSfile: bottin.class.php,v $
31
// AUTEUR    : $Author: alexandre_tb $
1836 alexandre_ 32
// VERSION : $Revision: 1.6.2.3 $
33
// DATE        : $Date: 2008-04-29 09:47:03 $
1163 alexandre_ 34
*/
35
 
36
 
37
// +------------------------------------------------------------------------------------------------------+
38
// |                                            ENTETE du PROGRAMME                                       |
39
// +------------------------------------------------------------------------------------------------------+
40
 
41
require_once PAP_CHEMIN_API_PEAR.'PEAR.php';
42
 
1467 alexandre_ 43
// +------------------------------------------------------------------------------------------------------+
44
// |                                            CONSTANTE DES TEMPLATES                                   |
45
// +------------------------------------------------------------------------------------------------------+
1163 alexandre_ 46
 
1467 alexandre_ 47
// Page d'accueil
48
define ('INS_TEMPLATE_PAGE_ACCUEIL', 1);
1163 alexandre_ 49
 
1467 alexandre_ 50
//Template du formulaire
51
define ('INS_TEMPLATE_FORMULAIRE', 3);
1421 alexandre_ 52
 
1467 alexandre_ 53
// Template mail confirmation inscription
54
define ('INS_TEMPLATE_MAIL_CONFIRMATION_SUJET', 4);
55
define ('INS_TEMPLATE_MAIL_CONFIRMATION_CORPS', 2);
56
 
57
// Template d envoie de mot de passe perdu
58
define ('INS_TEMPLATE_MAIL_PASSE_SUJET', 5);
59
define ('INS_TEMPLATE_MAIL_PASSE_CORPS', 6);
60
 
61
// Template du mail apres moderation accepte
62
define ('INS_TEMPLATE_MAIL_APRES_MODERATION_SUJET', 7);
63
define ('INS_TEMPLATE_MAIL_APRES_MODERATION_CORPS', 8);
64
 
65
// Modele du titre du formulaire (ce qui precede le formulaire)
66
define ('INS_TEMPLATE_TITRE_FORMULAIRE', 9);
67
 
68
// Message apres demande d inscription moderee
69
define ('INS_TEMPLATE_MESSAGE_INSCRIPTION_MODEREE', 10);
70
 
1552 alexandre_ 71
// Modele de la page de la cartogrphie google
72
define ('INS_TEMPLATE_CARTO_GOOGLE_ACCUEIL', 11);
73
 
1722 alexandre_ 74
// Modele du mail apres inscription non modere
75
define ('INS_TEMPLATE_MAIL_APRES_INSCRIPTION_SUJET', 12);
76
define ('INS_TEMPLATE_MAIL_APRES_INSCRIPTION_CORPS', 13);
1552 alexandre_ 77
 
1722 alexandre_ 78
 
1421 alexandre_ 79
class inscription extends PEAR {
80
 
81
	/**
82
     * Constructeur
83
     *
84
     *
85
     * @return void
86
     * @access public
87
     */
88
	function inscription() {
89
 
90
	}
91
 
92
	/**
93
	 * Renvoie le code HTML d une liste avec les lettres
94
	 *
95
	 * @global  Un pointeur vers une connexion de base de donnee $GLOBALS['ins_url']
96
	 * @return array ['ic_param'] les parametres tels que dans la table inscription_config
97
	 * @access public
98
	 */
1431 alexandre_ 99
	function getConfig($id_inscription = '') {
1421 alexandre_ 100
		// Recuperation de la configuration
101
	    $requete = 'select * from inscription_configuration';
1431 alexandre_ 102
	    if ($id_inscription != '') $requete .= ' where ic_id_inscription="'.$id_inscription.'"';
1421 alexandre_ 103
	    $resultat = $GLOBALS['ins_db']->query($requete);
104
	    if (DB::isError($resultat)) return "Echec de la requete : $requete<br />".$resultat->getMessage() ;
105
		    if ($resultat->numRows() != 0) {
106
		    $ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC);
107
		    return $ligne;
108
	    } else {
1483 alexandre_ 109
	    	return PEAR::raiseError('La table inscription_configuration est vide...');
1421 alexandre_ 110
	    }
111
	}
112
 
113
	/**
114
	 * Renvoi un tableau avec les informations de inscription_attente
115
	 *
116
	 * @global  Un pointeur vers une connexion de base de donnee $GLOBALS['ins_db']
117
	 * @return array Un tableau ['id'], ['nom'], ['prenom'] ... ou la chaine vide si il n'y a personne en attente
118
	 * @access public
119
	 */
120
	function getInscritEnAttenteModeration() {
121
		$requete = 'select * from inscription_attente';
122
		$resultat = $GLOBALS['ins_db']->query($requete);
123
 
124
		$tableau_inscrit = array();
125
		if (DB::isError($resultat)) return "Echec de la requete : $requete<br />".$resultat->getMessage() ;
126
		    if ($resultat->numRows() != 0) {
127
			    while ($ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT)) {
1794 alexandre_ 128
				    $donnees = unserialize (($ligne->ia_donnees)) ;
1421 alexandre_ 129
				    array_push ($tableau_inscrit, array_merge (array('id' => $ligne->ia_id_inscription, 'date' => $ligne->ia_date), $donnees));
130
			    }
131
			    return $tableau_inscrit;
132
		    } else {
133
	    		return '';
134
	    	}
135
	}
136
 
1431 alexandre_ 137
	/** Renvoi le tableau HTML des inscrits en attente
1421 alexandre_ 138
	 *
139
	 * @global	$GLOBALS['ins_url'] un objet Net_URL avec l url courante
140
	 * @param array Un tableau de tableau d inscrit avec ['id'],['nom'],['prenom'],['email'],['ville'],['date']
141
	 * @return string Un tableau HTML
142
	 */
143
 
144
	 function getTableauEnAttente($tableau) {
145
	 	$html = '';
146
 
1431 alexandre_ 147
	 	if (empty ($tableau)) {
148
	 		return INS_PAS_D_INSCRIT_EN_ATTENTE;
149
	 	}
1421 alexandre_ 150
	 	$table = new HTML_Table();
151
	 	$table->addRow(array (INS_NOM, INS_EMAIL, INS_VILLE, INS_DATE_INS, INS_ACTION), '', 'TH');
1431 alexandre_ 152
 
1421 alexandre_ 153
	 	$action = '<a href="'.$GLOBALS['ins_url']->getURL().'">'.'</a>';
154
	 	foreach ($tableau as $demandeur) {
1431 alexandre_ 155
	 		// L identifiant du demandeur dans l url
156
	 		$GLOBALS['ins_url']->addQueryString (INS_VARIABLE_ID_DEMANDEUR, $demandeur['id']) ;
157
	 		$GLOBALS['ins_url']->addQueryString(ANN_VARIABLE_ACTION, ANN_ACTION_VALIDER_INSCRIPTION);
158
	 		$valide = '<a href="'.$GLOBALS['ins_url']->getURL().'">'.INS_VALIDER.'</a> / ';
159
	 		$GLOBALS['ins_url']->addQueryString(ANN_VARIABLE_ACTION, ANN_ACTION_SUPPRIMER_DEMANDE_INSCRIPTION);
160
	 		$valide .= '<a href="'.$GLOBALS['ins_url']->getURL().
161
					'" onclick="javascript:return confirm(\''.INS_SUPPRIMER.' ?\')">'.INS_SUPPRIMER.'</a>';
1467 alexandre_ 162
	 		$table->addRow(array($demandeur['a_nom'].' '.(isset($demandeur['a_prenom']) ? $demandeur['a_prenom']: ''), $demandeur['a_mail'],
163
	 							$demandeur['a_ville'], $demandeur['date'], $valide));
1421 alexandre_ 164
	 	}
165
	 	return $table->toHTML();
166
	 }
167
 
168
	/**
169
	 * Renvoie un tableau avec les moderateurs de l inscription
170
	 * ceux du champs ic_mail_moderateur
171
	 *
172
	 * @return array Un tableau de mail de moderateur
173
	 */
174
	function getModerateurs() {
175
 
176
	}
177
	/**
178
	 * Insere une demande d inscription dans la table inscription_attente et
179
	 * envoi un mail aux moderateurs
180
	 *
181
	 * @param	string	Un identifiant de session, soit genere aleatoirement soit venu de la tablea inscription_demande
182
	 * @global array la globale $GLOBALS['ins_config']
183
	 * @global mixed un pointeur vers une base de donnees $GLOBALS['ins_db']
184
	 * @return string Un message a renvoye a l utilisateur indiquant que sa demande a ete prise en compte
185
	 */
186
	function demandeInscriptionModere($valeurs) {
187
	// On stocke les informations dans un variable de session
1836 alexandre_ 188
	    // On coupe l'identifiant de session pour ne prendre que les 8 premiers caracteres
1431 alexandre_ 189
	    // afin d'eviter d'obtenir une url trop longue
1421 alexandre_ 190
	    $chaine = substr (session_id(), 0, 8) ;
191
	    $requete_verif = 'select * from inscription_attente where ia_id_inscription="'.$chaine.'"' ;
192
	    $resultat_verif = $GLOBALS['ins_db']->query ($requete_verif) ;
193
	    if ($resultat_verif->numRows() != 0) {
194
	        $requete_suppression = 'delete from inscription_attente where ia_id_inscription="'.$chaine.'"' ;
195
	        $GLOBALS['ins_db']->query ($requete_suppression) ;
196
	    }
197
	    $requete = 'insert into inscription_attente set ia_id_inscription="'.$chaine.'", ia_donnees="'.
198
	                addslashes(serialize($valeurs)).'", ia_date=NOW()' ;
199
	    $resultat = $GLOBALS['ins_db']->query ($requete) ;
200
	    if (DB::isError ($resultat)) {
201
	        echo ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
202
	    }
203
	    // On envoie un email aux moderateurs
204
 
205
	    require_once PAP_CHEMIN_RACINE.'api/pear/HTML/Template/IT.php';
206
	    $tpl = new HTML_Template_IT() ;
207
	    // Le gabarit du mail est dans un template
208
	    // template 3
209
	    $url = $GLOBALS['ins_url']->getURL();
210
	    $requete = 'select it_template from inscription_template where it_id_template=3'.
211
	    			' and it_i18n like "%'.INS_LANGUE_DEFAUT.'"' ;
212
 
213
	    if (!$tpl -> setTemplate($GLOBALS['ins_db']->getOne ($requete))) {
214
	    	echo 'erreur' ;
215
	    }
216
		$tpl->setVariable('URL_INSCRIPTION', $url) ;
217
		$mails_moderateur = split ('/\n/', $GLOBALS['ins_config']['ic_mail_moderateur']);
218
		foreach ($mails_moderateur as $mail) {
1467 alexandre_ 219
			mail ($mail, INS_MODERATION_SUJET,
220
				html_entity_decode(INS_NOUVELLE_INSCRIPTION_A_MODERE),
221
					'From: '.$GLOBALS['ins_config']['ic_from_mail_confirmation']) ;
1421 alexandre_ 222
		}
1467 alexandre_ 223
	    return true ;
1421 alexandre_ 224
	}
1431 alexandre_ 225
	/**
226
	 * 	Valide une demande d inscription
227
	 * 	Transfere les donnees de la table inscription_attente vers annuaire
228
	 *
229
	 * 	Envoie un email d avertissement a l inscrit
230
	 *
231
	 * @global array la globale ins_config
232
	 */
233
	function validerInscription() {
234
		$requete = 'SELECT ia_donnees FROM inscription_attente WHERE ia_id_inscription="'.$_GET[INS_VARIABLE_ID_DEMANDEUR].'"' ;
235
	    $resultat = $GLOBALS['ins_db']->query($requete) ;
236
	    if (DB::isError ($resultat)) {
237
		    return ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
238
	    }
239
	    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
1836 alexandre_ 240
	    $donnees = unserialize ($ligne->ia_donnees) ;
1431 alexandre_ 241
 
242
	    // dans les donnees serialisees, on recupere l identifiant de l inscription
243
	    // pour charger la globale ins_config
244
	    $GLOBALS['ins_config'] = inscription::getConfig($donnees['id_inscription']);
1467 alexandre_ 245
	    // Template du formulaire
246
   		$GLOBALS['ins_config']['ic_inscription_template'] = inscription::getTemplate(INS_TEMPLATE_FORMULAIRE,
247
    									$GLOBALS['ins_config']['ic_id_inscription']);
248
 
1431 alexandre_ 249
 
250
	    $id_utilisateur = inscription_insertion($donnees) ;
251
 
252
	    // Envoie du mail
1467 alexandre_ 253
	    $destinataire = $donnees['a_mail'];
254
	    $sujet = inscription::getTemplate(INS_TEMPLATE_MAIL_APRES_MODERATION_SUJET, $GLOBALS['ins_config']['ic_id_inscription']);
255
	    $corps = inscription::getTemplate(INS_TEMPLATE_MAIL_APRES_MODERATION_CORPS, $GLOBALS['ins_config']['ic_id_inscription']);
256
	    // Appel des actions desinscriptions des applications clientes
257
        $d = dir(GEN_CHEMIN_CLIENT);
258
		while (false !== ($repertoire = $d->read())) {
259
			if (file_exists(GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.inscription.inc.php'))
260
			include_once GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.inscription.inc.php' ;
261
		}
262
		$d->close();
263
		if (INS_CHAMPS_LETTRE != '' && isset ($donnees['a_lettre'])) {
264
			inscription_lettre($GLOBALS['ins_config']['ic_mail_inscription_news']) ;
265
		}
266
	    if (!mail ($destinataire, $sujet, $corps, 'From: '.$GLOBALS['ins_config']['ic_from_mail_confirmation'])) return 'erreur dans l\'envoi du mail';
1431 alexandre_ 267
 
268
	    inscription::supprimerDemandeInscription();
269
	}
270
	/**
271
	 * 	Supprime une demande d inscription dans la table inscription_attente
272
	 *
273
	 * @global	string	l indentifiant de la demande
274
	 * @global mixed la globale ins_db
275
	 */
276
	function supprimerDemandeInscription() {
277
		// Suppression de la ligne dans inscription_attente
278
	    $req_sup = 'delete from inscription_attente where ia_id_inscription="'.$_GET[INS_VARIABLE_ID_DEMANDEUR].'"';
279
	    $res_sup = $GLOBALS['ins_db']->query ($req_sup);
280
	    if (DB::isError ($res_sup)) {
281
		    return ("Echec de la requete : $req_sup<br />".$res_sup->getMessage()) ;
282
	    }
283
	}
284
 
285
	/**
286
	 * 	Supprimer un inscrit de l annuaire et appelle les fichiers
287
	 * 	client appli.desinscription.inc.php
288
	 *
289
	 * @static
290
	 * @global int l identifiant de l inscrit
291
	 * @global mixed la globale ins_db
292
	 */
293
 
294
	function supprimerInscription() {
295
 
296
	    $queryLogin = 'select '.INS_CHAMPS_MAIL.' from '.INS_ANNUAIRE.' where '.INS_CHAMPS_ID.'='.$_GET[INS_VARIABLE_ID_INSCRIT] ;
297
	    $resultLogin = $GLOBALS['ins_db']->query($queryLogin) ;
298
	    $rowLogin = $resultLogin->fetchRow(DB_FETCHMODE_ASSOC) ;
299
	    $mail = $rowLogin[INS_CHAMPS_MAIL];
300
 
301
	    // suppression
302
	    $query = 'delete from '.INS_ANNUAIRE.' where '.INS_CHAMPS_ID.'='.$_GET[INS_VARIABLE_ID_INSCRIT] ;
303
	    $resultat = $GLOBALS['ins_db']->query($query);
304
	    if (DB::isError ($resultat)) {
305
		    return ("Echec de la requete : $req_sup<br />".$res_sup->getMessage()) ;
306
	    }
307
	     // Appel des actions desinscriptions des applications clientes
308
	    $d = dir(GEN_CHEMIN_CLIENT);
309
		$id_utilisateur = $_GET[INS_VARIABLE_ID_INSCRIT];
310
		while (false !== ($repertoire = $d->read())) {
311
			if (file_exists(GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.desinscription.inc.php'))
312
			include_once GEN_CHEMIN_CLIENT.$repertoire.GEN_SEP.$repertoire.'.desinscription.inc.php' ;
313
		}
314
		$d->close();
315
	}
1467 alexandre_ 316
 
317
	function getTemplate($id_template, $id_inscription, $langue = INS_LANGUE_DEFAUT) {
318
 
319
	    $requete = 'select it_template from inscription_template where it_id_template="'.$id_template.'"'.
320
	    			' and it_i18n like "'.$langue.'%" and it_ce_inscription="'.$id_inscription.'"' ;
321
	    $resultat = $GLOBALS['ins_db']->query($requete);
322
	    if (DB::isError ($resultat)) {
323
		    $this->raiseError();
324
		}
1794 alexandre_ 325
		if ($resultat->numRows() == 0) return 'Aucun template avec id_template='.$id_template.', id_inscription='.$id_inscription.' et langue='.$langue;
1467 alexandre_ 326
		$ligne = $resultat->fetchRow (DB_FETCHMODE_OBJECT);
327
		return $ligne->it_template;
328
	}
1421 alexandre_ 329
}
1467 alexandre_ 330
 
331
 
332
class lettresAlphabet extends PEAR {
333
 
334
	var $url;
335
 
336
	var $variable_lettre ;
337
 
338
	/**
339
     * Constructeur
340
     *
341
     * @param Net_URL un objet Net_URL
342
     * @param string $variable_lettre le nom de la variable $_GET qui sera place dans l URL
343
     * @return void
344
     * @access public
345
     */
346
	function lettresAlphabet($url, $variable_lettre = 'lettre') {
347
		$this->url = $url ;
348
		$this->variable_lettre = $variable_lettre ;
349
	}
350
 
351
	/**
352
	 * Renvoie le code HTML d une liste avec les lettres
353
	 *
354
	 * @return string HTML
355
	 * @access public
356
	 */
357
	function toHMTL() {
358
 
359
		$res = '<ul class="liste_lettre">'."\n" ;
360
		for ($i = 65 ; $i <91 ; $i++) {
361
			$this->url->addQueryString($this->variable_lettre, chr($i)) ;
362
			$res .= "\t".'<li class="liste_lettre"><a class="lien_alphabet" '.
363
					'href="'.
364
					$this->url->getURL().'">';
365
			$res .= chr($i) ;
366
			$res .= '</a></li>'."\n";
367
		}
368
		$res .= '</ul>';
369
		return $res ;
370
	}
371
}
372
 
1163 alexandre_ 373
//-- Fin du code source    ------------------------------------------------------------
374
/*
375
* $Log: not supported by cvs2svn $
1836 alexandre_ 376
* Revision 1.6.2.2  2008-02-08 08:22:46  alexandre_tb
377
* correction du bug lors d un inscription moderee.
378
* a surveiller.
379
*
1794 alexandre_ 380
* Revision 1.6.2.1  2007-11-22 10:13:54  alexandre_tb
381
* ajout d un template pour le mail de confirmation d inscription
382
*
1722 alexandre_ 383
* Revision 1.6  2007-08-27 13:12:15  alexandre_tb
384
* ajout de la constante INS_TEMPLATE_CARTO_GOOGLE_ACCUEIL
385
*
1552 alexandre_ 386
* Revision 1.5  2007-06-25 15:02:50  alexandre_tb
387
* correction bug
388
*
1483 alexandre_ 389
* Revision 1.4  2007-06-25 09:59:03  alexandre_tb
390
* ajout de carte_google, mise en place des templates avec api/formulaire, configuration de multiples inscriptions, ajout de modele pour les mails
391
*
1467 alexandre_ 392
* Revision 1.3  2007-06-01 13:47:47  alexandre_tb
393
* nouvelles methodes
394
*
1431 alexandre_ 395
* Revision 1.2  2007-05-25 14:31:24  alexandre_tb
396
* en cours
397
*
1421 alexandre_ 398
* Revision 1.1  2006/12/13 13:26:52  alexandre_tb
399
* version initiale
400
*
1163 alexandre_ 401
*/
402
?>