Subversion Repositories Applications.papyrus

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
448 ddelon 1
<?php
2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
3
// +------------------------------------------------------------------------------------------------------+
4
// | PHP version 4.1                                                                                      |
5
// +------------------------------------------------------------------------------------------------------+
6
// | Copyright (C) 2004 Tela Botanica (accueil@tela-botanica.org)                                         |
7
// +------------------------------------------------------------------------------------------------------+
8
// | This library is free software; you can redistribute it and/or                                        |
9
// | modify it under the terms of the GNU Lesser General Public                                           |
10
// | License as published by the Free Software Foundation; either                                         |
1298 neiluj 11
// | version 2.1 of the License, or (at your option) any later version.                                   |
448 ddelon 12
// |                                                                                                      |
13
// | This library is distributed in the hope that it will be useful,                                      |
14
// | but WITHOUT ANY WARRANTY; without even the implied warranty of                                       |
15
// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU                                    |
16
// | Lesser General Public License for more details.                                                      |
17
// |                                                                                                      |
18
// | You should have received a copy of the GNU Lesser General Public                                     |
19
// | License along with this library; if not, write to the Free Software                                  |
20
// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA                            |
21
// +------------------------------------------------------------------------------------------------------+
1421 alexandre_ 22
// CVS : $Id: inscription.fonct.php,v 1.29 2007-05-25 14:32:17 alexandre_tb Exp $
448 ddelon 23
/**
24
* Fonctions du module inscription
25
*
26
* Fonctions du module inscription
27
*
28
*@package inscription
29
//Auteur original :
30
*@author        Alexandre Granier <alexandre@tela-botanica.org>
31
//Autres auteurs :
1298 neiluj 32
*@author        Florian Schmitt <florian@ecole-et-nature.org>
448 ddelon 33
*@copyright     Tela-Botanica 2000-2004
1421 alexandre_ 34
*@version       $Revision: 1.29 $ $Date: 2007-05-25 14:32:17 $
448 ddelon 35
// +------------------------------------------------------------------------------------------------------+
36
*/
37
 
38
// +------------------------------------------------------------------------------------------------------+
39
// |                                            ENTETE du PROGRAMME                                       |
40
// +------------------------------------------------------------------------------------------------------+
41
 
42
include_once 'inscription.fonct.wiki.php' ;
1298 neiluj 43
include_once 'inscription.class.php' ;
448 ddelon 44
if (INS_UTILISE_SPIP) include_once 'inscription.fonct.spip.php' ;
45
 
46
// +------------------------------------------------------------------------------------------------------+
47
// |                                           LISTE de FONCTIONS                                         |
48
// +------------------------------------------------------------------------------------------------------+
49
 
50
 
51
/**
52
 *
1298 neiluj 53
 * @param   array   les valeurs renvoyés par le formulaire
54
 * @return
55
 */
56
 
57
function demande_inscription($valeurs) {
58
    // On stocke les informations dans un variable de session
59
    // On coupe l'identifiant de session pour ne prendre que les 8 premiers caractères
60
    // afin d'éviter d'obtenir une url trop longue
61
    $chaine = substr (session_id(), 0, 8) ;
62
    $requete_verif = 'select * from inscription_demande where id_identifiant_session="'.$chaine.'"' ;
63
    $resultat_verif = $GLOBALS['ins_db']->query ($requete_verif) ;
64
    if ($resultat_verif->numRows() != 0) {
65
        $requete_suppression = 'delete from inscription_demande where id_identifiant_session="'.$chaine.'"' ;
66
        $GLOBALS['ins_db']->query ($requete_suppression) ;
67
    }
68
    $requete = 'insert into inscription_demande set id_identifiant_session="'.$chaine.'", id_donnees="'.
69
                addslashes(serialize($valeurs)).'", id_date=NOW()' ;
70
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
71
    if (DB::isError ($resultat)) {
72
        echo ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
73
    }
74
    // On envoie un email de confirmation pour l'utilisateur
75
    $GLOBALS['ins_url']->addQueryString ('id', $chaine) ;
76
 
77
 
78
    if (INS_UTILISE_REECRITURE_URL) {
79
        $url = 'http://'.$GLOBALS['ins_url']->host.'/'.INS_URL_PREFIXE.$chaine ;
80
    } else {
81
        $url = str_replace ('&amp;', '&', $GLOBALS['ins_url']->getURL()) ;
82
    }
83
 
1343 alexandre_ 84
    require_once PAP_CHEMIN_API_PEAR.'HTML/Template/IT.php';
1298 neiluj 85
    $tpl = new HTML_Template_IT() ;
86
    // Le gabarit du mail est dans un template
87
    // template 2
88
    $requete = 'select it_template from inscription_template where it_id_template=2'.
89
    			' and it_i18n like "%'.INS_LANGUE_DEFAUT.'"' ;
90
 
91
    if (!$tpl -> setTemplate($GLOBALS['ins_db']->getOne ($requete))) {
92
    	echo 'erreur' ;
93
    }
94
	$tpl->setVariable('URL_INSCRIPTION', $url) ;
95
 
96
    mail ($GLOBALS['email'], 'Inscription', $tpl->get(), 'From: '.INS_MAIL_ADMIN_APRES_INSCRIPTION) ;
97
}
98
 
99
 
100
 
101
/**
102
*   Renvoie l'accueil de l'inscription
103
*
104
*   @return string	HTML
105
*/
106
function AUTH_formulaire_login() {
1343 alexandre_ 107
    require_once PAP_CHEMIN_API_PEAR.'api/pear/HTML/Template/IT.php';
1298 neiluj 108
    $tpl = new HTML_Template_IT() ;
109
    // Le formulaire pour se logguer est dans un template
110
    // template 1
111
    $requete = 'SELECT it_template FROM inscription_template WHERE it_id_template=1'.
112
    			' AND it_i18n LIKE "%'.INS_LANGUE_DEFAUT.'"' ;
113
 
114
    if (!$tpl -> setTemplate($GLOBALS['ins_db']->getOne ($requete))) {
115
    	echo 'erreur' ;
116
    }
117
	$tpl->setVariable('URL_INSCRIPTION', $GLOBALS['ins_url']->getURL());
118
    return $tpl->get() ;
119
 
120
}
121
 
122
 
123
/** formulaire_envoi_passe() - Renvoie le code HTML d'un formulaire d'envoi de mot de passe par mail
124
*
125
* @return   string  HTML
126
*/
127
function formulaire_envoi_passe() {
128
    $res = '<h2>'.INS_SI_PASSE_PERDU.'</h2>'."\n" ;
129
    $res .= '<form action="'.$GLOBALS['ins_url']->getURL().'&amp;action=sendpasswd" method="post">'."\n" ;
130
    $res .= '<p class="label100">'.INS_EMAIL.' : </p>'."\n" ;
131
    $res .= '<input type="text" value="';
132
    if (isset($_POST['username'])) $res .= $_POST['username'];
133
    $res .= '" name="mail" size="32" />'."\n" ;
134
    $res .= '<input type="submit" value="'.INS_ENVOIE_PASSE.'" />' ;
135
    $res .= '</form><br />'."\n" ;
136
    $res .= AUTH_formulaire_login() ;
137
    return $res;
138
}
139
 
140
 
141
function insertion($valeur) {
142
    // ===========  Insertion dans l'annuaire ===================
143
	// Génération du nom wikini à partir du nom et du prénom
144
    if (INS_UTILISE_WIKINI && INS_NOM_WIKINI_GENERE) {
145
        $valeur['nom_wiki'] = genere_nom_wiki ($valeur['nom'], isset ($valeur['prenom']) ?  $valeur['prenom'] : '') ;
146
    } else {
147
    	if (!INS_NOM_WIKINI_GENERE)	{
148
    		$valeur['nom_wiki'] = $valeur['nomwiki'];
149
    	}
150
    }
151
    $id_utilisateur = nextId(INS_ANNUAIRE, INS_CHAMPS_ID, $GLOBALS['ins_db']) ;
152
    $requete = 'INSERT INTO '.INS_ANNUAIRE.' SET '.
153
                INS_CHAMPS_ID.'="'.$id_utilisateur.'",'.
154
                requete_annuaire($valeur) ;
155
 
156
    $resultat = $GLOBALS['ins_db']->query($requete) ;
157
    if (DB::isError($resultat)) {
158
        die ($resultat->getMessage().$resultat->getDebugInfo()) ;
159
    }
160
 
161
    // ================ Insertion dans SPIP =========================================
162
    if (INS_UTILISE_SPIP) {
163
        inscription_spip($id_utilisateur, $valeur) ;
164
    }
165
	if (INS_UTILISE_WIKINI) inscription_interwikini_users('', $valeur) ;
166
	return $id_utilisateur ;
167
}
168
 
169
 
170
/**
171
*   Réalise une mise à jour dans la base de donnée
172
*
173
*   @param  array   un tableau de valeur avec en clé les noms des champs du formulaire
174
*   @return void
175
*/
176
function mise_a_jour($valeur, $id = '') {
177
    // ====================Mise à jour dans l'annuaire gen_annuaire ====================
178
	if ($id == '') {
179
		$id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID);
180
	}
181
    $requete = 'update '.INS_ANNUAIRE.' set '.
182
                requete_annuaire ($valeur).
183
                'where '.INS_CHAMPS_ID.'="'.$id.'"';
184
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
185
    if (DB::isError($resultat)) {
186
        die ($resultat->getMessage().$resultat->getDebugInfo()) ;
187
    }
188
    unset ($resultat) ;
189
 
190
    // ========================= Mise à jour dans SPIP ================================
191
    if (INS_UTILISE_SPIP) {
192
        mod_inscription_spip($GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID), $valeur) ;
193
    }
194
}
195
 
448 ddelon 196
/** requete_annuaire () - Renvoie une chaine contenant les champs de l'annuaire avec leur valeur suite à le fonction process de QuickForm
197
*
198
* @return   string  une requete du type champs="valeur",...
199
*/
200
 
1298 neiluj 201
function requete_annuaire($valeur) {
606 florian 202
    $req = INS_CHAMPS_NOM.'="'.addslashes($valeur['nom']).'", ';
1298 neiluj 203
    if (isset($valeur['est_structure']) && $valeur['est_structure'] == 0)
204
    			$req .= INS_CHAMPS_PRENOM.'="'.addslashes($valeur['prenom']).'", ';
205
    // Initialisation de variable pour éviter des notices
206
    foreach (array ('adresse_1', 'adresse_2', 'ville', 'telephone', 'fax', 'site') as $val) {
207
    	if (!isset ($valeur[$val])) $valeur[$val] = '' ;
737 alexandre_ 208
    }
760 alexandre_ 209
 
606 florian 210
    $req .= INS_CHAMPS_MAIL.'="'.addslashes($valeur['email']).'", ' ;
211
    $req .= INS_CHAMPS_PASSE.'="'.md5($valeur['mot_de_passe']).'", '.
212
            INS_CHAMPS_PAYS.'="'.addslashes($valeur['pays']).'", '.
213
            INS_CHAMPS_ADRESSE_1.'="'.addslashes($valeur['adresse_1']).'", '.
214
            INS_CHAMPS_ADRESSE_2.'="'.addslashes($valeur['adresse_2']).'", '.
1298 neiluj 215
            INS_CHAMPS_DATE_INSCRIPTION.'=NOW(), '.
606 florian 216
            INS_CHAMPS_CODE_POSTAL.'="'.addslashes($valeur['cp']).'", '.
217
			INS_CHAMPS_VILLE.'="'.addslashes($valeur['ville']).'", '.
1298 neiluj 218
			INS_CHAMPS_EST_STRUCTURE.'="'.addslashes($valeur['est_structure']).'", '.
219
			INS_CHAMPS_TELEPHONE.'="'.addslashes($valeur['telephone']).'", '.
220
			INS_CHAMPS_FAX.'="'.addslashes($valeur['fax']).'", '.
606 florian 221
			INS_CHAMPS_SITE_INTERNET.'="'.addslashes($valeur['site']).'" ';
222
 
223
	if (isset($valeur['visible'])) $req .= ', '.INS_CHAMPS_VISIBLE.'="'.$valeur['visible'].'"';
224
	else $req .= ', '.INS_CHAMPS_VISIBLE.'=0';
448 ddelon 225
 
483 alexandre_ 226
	if (INS_CHAMPS_LETTRE != '') {
227
		if (isset($valeur['lettre'])) {
612 florian 228
			$req .= ', '.INS_CHAMPS_LETTRE.'="'.$valeur['lettre'].'" ';
606 florian 229
			inscription_lettre('inscrire');
483 alexandre_ 230
		}
606 florian 231
		else {
612 florian 232
			$req .= ', '.INS_CHAMPS_LETTRE.'=0 ';
606 florian 233
			inscription_lettre('desinscrire');
234
		}
448 ddelon 235
	}
603 florian 236
 
606 florian 237
	if (isset($valeur['sigle_structure'])) {
238
        $req .= ', '.INS_CHAMPS_SIGLE_STRUCTURE.'="'.addslashes($valeur['sigle_structure']).'"' ;
448 ddelon 239
    }
240
    if (isset($valeur['num_agrement'])) {
606 florian 241
        $req .= ', '.INS_CHAMPS_NUM_AGREMENT.'="'.addslashes($valeur['num_agrement']).'"' ;
448 ddelon 242
    }
243
    // traitement du numéro de département pour la france
244
    if ($valeur['pays'] == 'FR') {
245
        if (preg_match("/^97|98[0-9]*/", $valeur['cp'])) {
246
            $n_dpt = substr($valeur['cp'], 0, 3) ;
247
        } else {
248
            $n_dpt = substr($valeur['cp'], 0, 2) ;
249
        }
250
        $req .= ",".INS_CHAMPS_DEPARTEMENT."='$n_dpt'";
251
    }
1298 neiluj 252
    if (INS_UTILISE_WIKINI && isset ($valeur['nom_wiki'])) $req .= ','.INS_CHAMPS_NOM_WIKINI.'="'.$valeur['nom_wiki'].'"';
1421 alexandre_ 253
    if ($GLOBALS['ins_config']['ic_google_key']) {
254
    	$req .= ', a_longitude="'.$valeur['longitude'].'", a_latitude="'.$valeur['latitude'].'"';
255
    }
448 ddelon 256
    return $req ;
257
}
258
 
259
 
260
 
603 florian 261
/** formulaire_defaults() - Renvoie un tableau avec les valeurs par défaut du formulaire d'inscription
448 ddelon 262
*
263
* @return   array   Valeurs par défaut du formulaire d'inscription
264
*/
679 alexandre_ 265
function formulaire_defaults($id = '') {
266
	if ($id == '') {
267
			$id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID);
268
	}
448 ddelon 269
    $requete = 'select '.INS_ANNUAIRE.'.* '.
270
                'from '.INS_ANNUAIRE.' '.
679 alexandre_ 271
                'where '.INS_ANNUAIRE.'.'.INS_CHAMPS_ID.'= "'.$id.'"' ;
501 alexandre_ 272
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
448 ddelon 273
    if (DB::isError($resultat)) {
274
    	die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
275
    }
276
    $ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
277
    $valeurs_par_defaut = array() ;
278
    $valeurs_par_defaut['email'] = $ligne[INS_CHAMPS_MAIL];
279
    $valeurs_par_defaut['nom'] = $ligne[INS_CHAMPS_NOM];
280
    $valeurs_par_defaut['prenom'] = $ligne[INS_CHAMPS_PRENOM] ;
281
    $valeurs_par_defaut['pays'] = $ligne[INS_CHAMPS_PAYS] ;
1298 neiluj 282
    if (INS_UTILISE_WIKINI) {$valeurs_par_defaut['nomwiki'] = $ligne[INS_CHAMPS_NOM_WIKINI] ;}
283
    $valeurs_par_defaut['cp'] = $ligne[INS_CHAMPS_CODE_POSTAL] ;
284
    $valeurs_par_defaut['ville'] = $ligne[INS_CHAMPS_VILLE] ;
285
    $valeurs_par_defaut['adresse_1'] = $ligne[INS_CHAMPS_ADRESSE_1] ;
286
    $valeurs_par_defaut['adresse_2'] = $ligne[INS_CHAMPS_ADRESSE_2] ;
287
    $valeurs_par_defaut['telephone'] = $ligne[INS_CHAMPS_TELEPHONE] ;
288
    $valeurs_par_defaut['fax'] = $ligne[INS_CHAMPS_FAX] ;
289
    if (INS_CHAMPS_STRUCTURE != '' && isset($ligne[INS_CHAMPS_STRUCTURE])) {
290
    	$valeurs_par_defaut['structure'] = $ligne[INS_CHAMPS_STRUCTURE] ;
291
    	//$valeurs_par_defaut['type_structure'] = $ligne['a_type_structure'];
292
    }
293
    $valeurs_par_defaut['site'] = $ligne[INS_CHAMPS_SITE_INTERNET] ;
294
    $valeurs_par_defaut['lettre'] = $ligne[INS_CHAMPS_LETTRE] ;
295
    $valeurs_par_defaut['visible'] = $ligne[INS_CHAMPS_VISIBLE] ;
296
    $valeurs_par_defaut['sigle_structure'] = $ligne[INS_CHAMPS_SIGLE_STRUCTURE] ;
297
    if (INS_CHAMPS_NUM_AGREMENT != '') $valeurs_par_defaut['num_agrement'] = $ligne[INS_CHAMPS_NUM_AGREMENT] ;
298
    return $valeurs_par_defaut ;
299
}
300
 
301
 
302
/**	ligne_inscription() - Renvoie une ligne avec label et valeur
303
 *
304
 * @param string label Le label
305
 * @param string valeur
306
 * @return	string HTML
307
 */
308
function ligne_inscription($label, $valeur) {
309
    if ($valeur == '') {
310
        return;
311
    }
312
    if (($label == '')or($label == '&nbsp;')) {
313
    	return '<li>'."\n".$valeur."\n".'</li>'."\n" ;
314
    } else {
315
    	return '<li>'."\n".'<strong>'.$label.' : </strong>'."\n".$valeur."\n".'</li>'."\n" ;
316
    }
317
}
318
 
319
 
320
/** Renvoie vrai si l'email passé en paramètre n'est pas déjà dans l'annuaire
321
*   ou si, en cas de modification d'inscription, l'inscrit ne modifie pas son email
322
*
323
*   @return boolean
324
*/
325
function verif_doublonMail($mail, $id = '') {
326
	if ($id == '') {
327
		if (isset ($GLOBALS['AUTH'])) {
328
			$id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID) ;
329
		}
1292 neiluj 330
	}
1298 neiluj 331
    if (isset ($id) && $id != '') {
332
        $requete_mail = "select ".INS_CHAMPS_MAIL." from ".INS_ANNUAIRE." where ".
333
        				INS_CHAMPS_ID."=".$id ;
334
        $resultat_mail = $GLOBALS['ins_db']->query ($requete_mail) ;
335
        if (DB::isError ($resultat_mail)) {
336
            die ("Echec de la requete : $requete_mail<br />".$resultat_mail->getMessage()) ;
337
        }
338
        $ligne_mail = $resultat_mail->fetchRow(DB_FETCHMODE_ASSOC) ;
339
        if ($mail == $ligne_mail[INS_CHAMPS_MAIL]) {
340
            return true ;
341
        }
342
    }
343
    $requete = "select ".INS_CHAMPS_MAIL." from ".INS_ANNUAIRE." where ".INS_CHAMPS_MAIL."= \"$mail\"" ;
344
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
345
    if (DB::isError ($resultat)) {
346
    	die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
347
    }
348
    if ($resultat->numRows() == 0) return true ;
349
    return false ;
350
}
448 ddelon 351
 
603 florian 352
 
1298 neiluj 353
function envoie_passe() {
354
	$res='';
355
	$requete = 'SELECT '.INS_CHAMPS_MAIL.' FROM '.INS_ANNUAIRE.' WHERE '.INS_CHAMPS_MAIL.'="'.$_POST['mail'].'"' ;
356
    $resultat = $GLOBALS['ins_db']->query($requete) ;
357
    if (DB::isError($resultat)) {
358
        die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
359
    }
360
    if ($resultat->numRows() == 0) {
361
    	$res .= '<p class="erreur">'.INS_MAIL_INCONNU_DANS_ANNUAIRE.'</p>'."\n" ;
362
    } else {
363
    	include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ;
364
    	$mail = & Mail::factory('smtp') ;
365
    	$headers ['Return-Path'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ;
366
    	$headers ['From'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ;
367
    	$headers ['Subject'] = INS_MOT_DE_PASSE_CHANGE ;
368
    	$headers ['Reply-To'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ;
369
    	$headers ['To'] = "<".$_POST['mail'].">" ;
370
    	$nouveau_passe = create_new_random(6) ;
371
    	// modification du mot de passe dans la base
372
    	$requete = 'UPDATE '.INS_ANNUAIRE.' SET '.INS_CHAMPS_PASSE.'=MD5("'.$nouveau_passe.'") WHERE '.INS_CHAMPS_MAIL.'="'.$_POST['mail'].'"' ;
373
    	$resultat = $GLOBALS['ins_db']->query($requete) ;
374
    	if (DB::isError($resultat)) {
375
    		die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
376
    	}
377
    	$body = INS_NOUVEAU_MOT_DE_PASSE_2.$nouveau_passe ;
378
    	$body .= INS_NOUVEAU_MOT_DE_PASSE_LAIUS ;
379
    	$mail->send($_POST['mail'], $headers, $body) ;
380
    	if (PEAR::isError($mail)) {
381
    		$res .= '<p class="erreur">'.INS_PROBLEME_ENVOI_MAIL.'</p>'."\n" ;
382
    		return $res ;
383
    	}
384
    	$res .= '<p class="info">'.INS_NOUVEAU_MOT_DE_PASSE_ENVOYE.'</p>'."\n" ;
385
    }
386
    return $res ;
387
}
483 alexandre_ 388
 
1298 neiluj 389
/**
390
 *
391
 * @global  ins_db  Un pointeur vers un objet PEAR::DB connecté
392
 * @return
393
 */
394
 
395
function envoie_mail() //A COMPLETER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
396
{
397
    include_once PAP_CHEMIN_RACINE.'api/pear/Mail/mime.php' ;
398
    include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ;
399
    $crlf="\n";
400
 
401
    $headers ['From'] = INS_MAIL_ADMIN_APRES_INSCRIPTION ;
402
    $headers ['Subject'] = INS_MAIL_COORD_SUJET ;
403
    $headers ['Reply-To'] = INS_MAIL_ADMIN_APRES_INSCRIPTION ;
404
 
405
    $mime = new Mail_mime($crlf);
406
 
407
    $requete = "select *, ".INS_CHAMPS_LABEL_PAYS." from ".INS_ANNUAIRE.",".INS_TABLE_PAYS.
408
            " where ".INS_CHAMPS_MAIL."=\"".$GLOBALS['AUTH']->getUsername()."\"".
409
            " and ".INS_CHAMPS_ID_PAYS."=".INS_CHAMPS_PAYS;
410
 
411
    $resultat = $GLOBALS['ins_db']->query($requete) ;
412
    if (DB::isError ($resultat)) {
413
        die ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
414
    }
415
    $ligne  = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
416
    $body_entete = INS_MAIL_COORD_CORPS."\n" ;
417
    $body = "mail : ".$ligne[INS_CHAMPS_MAIL]."\n" ;
418
    $body .= "------------------------------------------\n";
419
    $body .= INS_NOM.": ".unhtmlentities($ligne[INS_CHAMPS_NOM])." \n" ;
420
    $body .= INS_PRENOM.' : '.unhtmlentities($ligne[INS_CHAMPS_PRENOM])." \n" ;
421
    $body .= INS_PAYS." : ".unhtmlentities($ligne[INS_CHAMPS_LABEL_PAYS])." \n" ;
422
    $body .= "-------------------------------------------\n" ;
423
 
424
    $mime->setTXTBody($body);
425
    $mime->setHTMLBody(info()) ;
426
 
427
    $body = $mime->get();
428
    $headers = $mime->headers($headers);
429
 
430
    $mail = & Mail::factory('mail') ;
431
 
432
    $mail -> send ($ligne[INS_CHAMPS_MAIL], $headers, $body) ;
433
 
434
        // Envoi du mail aux administrateur du site
435
    foreach ($GLOBALS['mail_admin'] as $administrateur) {
436
        $mail -> send ($administrateur, $headers, $body) ;
437
    }
438
    if (PEAR::isError($mail)) {
439
        echo 'erreur d\'envoi' ;
440
        return false ;
441
    }
442
    return true ;
443
}
444
 
445
 
446
/**
447
 *  Génère un nom wiki valide à partir des données saisies par l'utilisateur
1292 neiluj 448
 *  fait une requete dans la base
1298 neiluj 449
 *
450
 * @return  string un nom wiki valide
451
 */
452
 
453
function genere_nom_wiki($prenom, $nom) {
454
    // 1. suppression des espaces
455
    $nom = trim ($nom) ;
456
    $prenom = trim ($prenom) ;
457
 
458
    // 2. suppression des caractères non ascii et ajout de la première lettre en majuscule
459
    $nom = trim_non_ascii ($nom) ;
460
    $prenom = trim_non_ascii ($prenom) ;
461
 
462
    // Vérification
463
    $nom_wiki = $prenom.$nom ;
464
    if (!preg_match('/^[A-Z][a-z]+[A-Z,0-9][A-Z,a-z,0-9]*$/', $nom_wiki)) {
465
        $nom_wiki = chr(rand(65, 90)).$nom_wiki.chr(rand(65, 90)) ;
466
    }
1292 neiluj 467
    return $nom_wiki ;
448 ddelon 468
}
469
 
470
/**
1292 neiluj 471
 *	Cette fonction supprime les caractères autres que asccii et les chiffres
448 ddelon 472
 *
1292 neiluj 473
 * @return	string la chaine épurée
448 ddelon 474
 */
475
 
1292 neiluj 476
function trim_non_ascii ($nom) {
477
    $premiere_lettre = true ;
1298 neiluj 478
    for ($i = 0; $i < strlen ($nom); $i++) {
1292 neiluj 479
        if (!preg_match ('/[a-zA-Z0-9]/', $nom[$i])) {
480
            $nom[$i] = '_' ;
481
        }
482
    // remplacement de la première lettre en majuscule
483
        if (preg_match ('/[a-zA-Z]/', $nom[$i]) && $premiere_lettre) {
484
            $nom[$i] = strtoupper ($nom[$i]) ;
485
            $premiere_lettre = false ;
486
        } else {
487
            if (preg_match ('/[a-zA-Z]/', $nom[$i])) {
488
                $nom[$i] = strtolower ($nom[$i]) ;
489
            }
490
        }
448 ddelon 491
    }
1292 neiluj 492
    $nom = preg_replace ('/_/', '', $nom) ;
493
    return $nom ;
448 ddelon 494
}
495
 
496
// For users prior to PHP 4.3.0 you may do this:
497
function unhtmlentities($string)
498
{
499
    $trans_tbl = get_html_translation_table (HTML_ENTITIES);
500
    $trans_tbl = array_flip ($trans_tbl);
501
    return strtr ($string, $trans_tbl);
502
}
503
 
504
//==============================================================================
505
/** function nextId () Renvoie le prochain identifiant numérique libre d'une table
506
*
507
*   On passe en paramètre le nom de la table et l'identifiant de la base selon PEAR DB
508
*
509
*   @param  mixed   handler de connexion
510
*   @param  string  Nom de la table
511
*   return  interger    l'identifiant
512
*/
513
 
514
function nextId($table, $colonne_identifiant)
515
{
516
    $requete = 'select MAX('.$colonne_identifiant.') as maxi from '.$table ;
517
    $resultat = $GLOBALS['ins_db']->query($requete) ;
518
    if (DB::isError($resultat)) {
519
        die (__FILE__ . __LINE__ . $resultat->getMessage() . $requete);
520
        return $GLOBALS['ins_db']->raiseError($resultat) ;
521
    }
522
 
523
    if ($resultat->numRows() > 1) {
524
        return $GLOBALS['ins_db']->raiseError("<br />La table $table a un identifiant non unique<br/>") ;
525
    }
526
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
527
    return $ligne->maxi + 1 ;
528
}
529
 
530
/* +--Fin du code ----------------------------------------------------------------------------------------+
531
*
532
* $Log: not supported by cvs2svn $
1421 alexandre_ 533
* Revision 1.28  2007/04/20 08:39:37  alexandre_tb
534
* correction de commentaire
535
*
1343 alexandre_ 536
* Revision 1.27  2007/04/11 08:30:12  neiluj
537
* remise en état du CVS...
538
*
1298 neiluj 539
* Revision 1.23  2006/12/01 13:23:15  florian
540
* integration annuaire backoffice
541
*
542
* Revision 1.22  2006/10/05 13:53:53  florian
543
* amélioration des fichiers sql
544
*
545
* Revision 1.21  2006/09/20 13:10:01  alexandre_tb
546
* Ajout d'un test sur la lettre d'actualité
547
*
548
* Revision 1.20  2006/07/06 10:33:58  alexandre_tb
549
* Suppression d'un warning
550
*
551
* Revision 1.19  2006/07/04 09:39:27  alexandre_tb
552
* correction d'un bug mineur
553
*
554
* Revision 1.18  2006/06/01 14:42:20  alexandre_tb
555
* suppression d'un commentaire inutile
556
*
557
* Revision 1.17  2006/04/28 12:44:05  florian
558
* integration bazar
559
*
560
* Revision 1.16  2006/04/11 08:41:41  alexandre_tb
561
* Ajout du champs nom wiki dans le formulaire si la constante INS_GENERE_NOM_WIKI n'est pas activé
562
*
563
* Revision 1.15  2006/04/10 14:01:36  florian
564
* uniformisation de l'appli bottin: plus qu'un fichier de fonctions
565
*
566
* Revision 1.14  2006/04/04 12:23:05  florian
567
* modifs affichage fiches, généricité de la carto, modification totale de l'appli annuaire
568
*
569
* Revision 1.13  2006/03/21 10:25:33  alexandre_tb
570
* ajout d'un template pour le mail de confirmation
571
*
572
* Revision 1.12  2006/03/15 11:02:35  alexandre_tb
573
* ajout de l'insertion du prénom qui avait disparu
574
*
575
* Revision 1.11  2006/03/02 16:57:31  alexandre_tb
576
* correction appel au générateur de nom wiki
577
*
578
* Revision 1.10  2006/02/28 14:02:20  alexandre_tb
579
* suppression des insertion dans les tables du bazar
580
*
581
* Revision 1.9  2006/02/14 10:19:10  alexandre_tb
582
* Mise en place des templates
583
* CREATE TABLE `inscription_template` (
584
*   `it_id_template` smallint(5) unsigned NOT NULL default '0',
585
*   `it_i18n` varchar(5) NOT NULL default '',
586
*   `it_template` text NOT NULL,
587
*   PRIMARY KEY  (`it_id_template`)
588
* ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
589
*
737 alexandre_ 590
* Revision 1.8  2006/01/02 09:51:38  alexandre_tb
591
* généralisation du code et intégration au bottin
592
*
679 alexandre_ 593
* Revision 1.7  2005/12/19 13:19:07  alexandre_tb
594
* Correction de l'affichage des pays
595
*
674 alexandre_ 596
* Revision 1.6  2005/11/24 16:17:52  florian
597
* changement template inscription + modifs carto
598
*
612 florian 599
* Revision 1.5  2005/11/18 16:04:15  florian
600
* corrections de bugs, optimisations, tests pour rendre inscription stable.
601
*
606 florian 602
* Revision 1.4  2005/11/17 18:48:02  florian
603
* corrections bugs + amélioration de l'application d'inscription
604
*
603 florian 605
* Revision 1.3  2005/10/03 09:45:21  alexandre_tb
606
* suppression d'un echo
607
*
501 alexandre_ 608
* Revision 1.2  2005/09/29 13:56:48  alexandre_tb
609
* En cours de production. Reste à gérer les news letters et d'autres choses.
610
*
483 alexandre_ 611
* Revision 1.1  2005/09/22 14:02:49  ddelon
612
* nettoyage annuaire et php5
613
*
448 ddelon 614
* Revision 1.4  2005/09/22 13:30:49  florian
615
* modifs pour compatibilité XHTML Strict + corrections de bugs (mais ya encore du boulot!!)
616
*
617
* Revision 1.3  2005/03/21 16:57:30  florian
618
* correction de bug, mise à jour interface
619
*
620
* Revision 1.2  2004/12/17 17:41:51  alex
621
* ajout du numéro de tel, du fax et de la structure
622
*
623
* Revision 1.1  2004/12/15 13:32:25  alex
624
* version initiale
625
*
626
*
627
* +-- Fin du code ----------------------------------------------------------------------------------------+
628
*/
629
 
630
?>