Subversion Repositories Applications.papyrus

Rev

Rev 1289 | 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
/*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                                         |
1292 neiluj 11
// | version 2.1 of the License, or (at your option) any later veRrsion.                                   |
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
// +------------------------------------------------------------------------------------------------------+
1292 neiluj 22
// CVS : $Id: inscription.fonct.php,v 1.26 2007-04-06 08:35:46 neiluj Exp $
23
// CVS : $Id: inscription.fonct.php,v 1.26 2007-04-06 08:35:46 neiluj Exp $
448 ddelon 24
/**
25
* Fonctions du module inscription
26
*
27
* Fonctions du module inscription
28
*
29
*@package inscription
30
//Auteur original :
31
*@author        Alexandre Granier <alexandre@tela-botanica.org>
32
//Autres auteurs :
1292 neiluj 33
*@author        Aucun
448 ddelon 34
*@copyright     Tela-Botanica 2000-2004
1292 neiluj 35
*@version       $Revision: 1.26 $ $Date: 2007-04-06 08:35:46 $
36
*@version       $Revision: 1.26 $ $Date: 2007-04-06 08:35:46 $
448 ddelon 37
// +------------------------------------------------------------------------------------------------------+
38
*/
39
 
40
// +------------------------------------------------------------------------------------------------------+
41
// |                                            ENTETE du PROGRAMME                                       |
42
// +------------------------------------------------------------------------------------------------------+
43
 
44
include_once 'inscription.fonct.wiki.php' ;
45
if (INS_UTILISE_SPIP) include_once 'inscription.fonct.spip.php' ;
1292 neiluj 46
require_once PAP_CHEMIN_RACINE.'api/pear/HTML/QuickForm.php' ;
47
require_once PAP_CHEMIN_RACINE.'api/pear/HTML/QuickForm/checkbox.php' ;
48
require_once PAP_CHEMIN_RACINE.'api/pear/HTML/QuickForm/password.php' ;
448 ddelon 49
 
50
// +------------------------------------------------------------------------------------------------------+
51
// |                                           LISTE de FONCTIONS                                         |
52
// +------------------------------------------------------------------------------------------------------+
53
 
54
 
55
/**
56
 *
1292 neiluj 57
 * @param   array   les valeurs renvoyés par le formulaire
58
 * @return
59
 */
60
 
61
function demande_inscription($valeurs) {
62
    // On stocke les informations dans un variable de session
63
    // On coupe l'identifiant de session pour ne prendre que les 8 premiers caractères
64
    // afin d'éviter d'obtenir une url trop longue
65
    $chaine = substr (session_id(), 0, 8) ;
66
    $requete_verif = 'select * from inscription_demande where id_identifiant_session="'.$chaine.'"' ;
67
    $resultat_verif = $GLOBALS['ins_db']->query ($requete_verif) ;
68
    if ($resultat_verif->numRows() != 0) {
69
        $requete_suppression = 'delete from inscription_demande where id_identifiant_session="'.$chaine.'"' ;
70
        $GLOBALS['ins_db']->query ($requete_suppression) ;
71
    }
72
    $requete = 'insert into inscription_demande set id_identifiant_session="'.$chaine.'", id_donnees="'.
73
                addslashes(serialize($valeurs)).'", id_date=NOW()' ;
74
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
75
    if (DB::isError ($resultat)) {
76
        echo ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
77
    }
78
    // On envoie un email de confirmation pour l'utilisateur
79
    $GLOBALS['ins_url']->addQueryString ('id', $chaine) ;
80
 
81
    $corps = INS_MESSAGE_DEBUT_MAIL_INSCRIPTION ;
82
    if (INS_UTILISE_REECRITURE_URL) {
83
        $corps .= 'http://'.$GLOBALS['ins_url']->host.'/'.INS_URL_PREFIXE.$chaine ;
84
    } else {
85
        $corps .= str_replace ('&amp;', '&', $GLOBALS['ins_url']->getURL()) ;
86
    }
87
    $corps .= INS_MESSAGE_FIN_MAIL_INSCRIPTION ;
88
    mail ($GLOBALS['email'], 'Inscription', $corps, 'From: '.INS_MAIL_ADMIN_APRES_INSCRIPTION) ;
89
}
90
 
91
/**
92
 *
93
 * @param   array   les valeurs renvoyés par le formulaire
94
 * @return
95
 */
96
 
97
function inscription_validee($valeurs) {
98
	insertion($valeurs) ;
99
	$GLOBALS['AUTH']->username = $valeurs['email'] ;
100
	$GLOBALS['AUTH']->password = $valeurs['mot_de_passe'] ;
101
	// On loggue l'utilisateur
102
	$GLOBALS['AUTH']->login() ;
103
	// inscription à la lettre d'information
104
	if (INS_CHAMPS_LETTRE != '' && isset ($valeurs['lettre'])) {
105
		inscription_lettre(INS_MAIL_INSCRIPTION_LISTE) ;
106
	}
107
}
108
 
109
/**
110
*   Réalise l'insertion dans la base de donnée
111
*
112
*   @param  array   un tableau de valeur avec en clé les noms des champs du formulaire
113
*   @return void
114
*/
115
function AUTH_formulaire_login($msg = '') {
116
    //--------------------------------------------------------------------------
117
    // Le formulaire
118
    //--------------------------------------------------------------------------
119
    $res = '';
120
    if ($msg!='') {$res .= $msg.'<br /><br />';}
121
    $res .= "\n".'<div>'.INS_LAIUS_INSCRIPTION_2.'</div><br />'."\n" ;
122
    $res .= '<a href="'.$GLOBALS['ins_url']->getURL().'&amp;action=inscription&amp;form_structure=0" style="font-size:16px;font-weight:bold;color:#EABE07;">'.'accède au formulaire d\'inscription'.'</a>'."\n" ;
123
 
124
    return $res;
125
}
126
 
127
 
128
/** formulaire_envoi_passe() - Renvoie le code HTML d'un formulaire d'envoi de mot de passe par mail
129
*
130
* @return   string  HTML
131
*/
132
function formulaire_envoi_passe() {
133
    $res = '<h2>'.INS_SI_PASSE_PERDU.'</h2>'."\n" ;
134
    $res .= '<form action="'.$GLOBALS['ins_url']->getURL().'&amp;action=sendpasswd" method="post">'."\n" ;
135
    $res .= '<p class="label100">'.INS_EMAIL.' : </p>'."\n" ;
136
    $res .= '<input type="text" value="';
137
    if (isset($_POST['username'])) $res .= $_POST['username'];
138
    $res .= '" name="mail" size="32" />'."\n" ;
139
    $res .= '<input type="submit" value="'.INS_ENVOIE_PASSE.'" />' ;
140
    $res .= '</form><br />'."\n" ;
141
    $res .= AUTH_formulaire_login() ;
142
    return $res;
143
}
144
 
145
 
146
function insertion($valeur) {
147
        // ===========  Insertion dans l'annuaire gen_annuaire ===================
148
		// Génération du nom wikini à partir du nom et du prénom
149
	    if (INS_UTILISE_WIKINI) {
150
	        $valeur['nom_wiki'] = genere_nom_wiki ($valeur['nom']) ;
151
	    }
152
        $id_utilisateur = nextId(INS_ANNUAIRE, INS_CHAMPS_ID, $GLOBALS['ins_db']) ;
153
        $requete = 'insert into '.INS_ANNUAIRE.' set '.
154
                    INS_CHAMPS_ID.'="'.$id_utilisateur.'",'.
155
                    requete_annuaire($valeur) ;
156
 
157
        $resultat = $GLOBALS['ins_db']->query($requete) ;
158
        if (DB::isError($resultat)) {
159
            die ($resultat->getMessage().$resultat->getDebugInfo()) ;
160
        }
161
 
162
        // ================ Insertion dans SPIP =========================================
163
        if (INS_UTILISE_SPIP) {
164
            inscription_spip($id_utilisateur, $valeur) ;
165
        }
166
	if (INS_UTILISE_WIKINI) inscription_interwikini_users('', $valeur) ;
167
	// TODO Créer un fichier bazar/bazar.inscription.inc.php et y mettre le code qui suit
168
	// Vérifier tous les noms des répertoires du répertoire client et s'il existe
169
	// un fichier nom/nom/inscription.inc.php l'inclure
170
	//inscription dans Bazar
171
	$requete = 'INSERT INTO bazar_droits VALUES ('.$id_utilisateur.',1,1),('.$id_utilisateur.',2,1),('.$id_utilisateur.',3,1),('.$id_utilisateur.',4,1),('.$id_utilisateur.',5,1),('.$id_utilisateur.',6,1),('.$id_utilisateur.',7,1),('.$id_utilisateur.',8,1)';
172
	$resultat = $GLOBALS['ins_db']->query($requete);
173
	if (DB::isError($resultat)) {
174
		die($resultat->getMessage().$resultat->getDebugInfo()) ;
175
	}
176
	unset($resultat) ;
177
 
178
 
179
}
180
 
181
 
182
/**
183
*   Réalise une mise à jour dans la base de donnée
184
*
185
*   @param  array   un tableau de valeur avec en clé les noms des champs du formulaire
186
*   @return void
187
*/
188
function mise_a_jour($valeur, $id = '') {
189
    // ====================Mise à jour dans l'annuaire gen_annuaire ====================
190
	if ($id == '') {
191
		$id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID);
192
	}
193
    $requete = 'update '.INS_ANNUAIRE.' set '.
194
                requete_annuaire ($valeur, $maj = TRUE).
195
                ' where '.INS_CHAMPS_ID.'="'.$id.'"';
196
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
197
    if (DB::isError($resultat)) {
198
        die ($resultat->getMessage().$resultat->getDebugInfo()) ;
199
    }
200
    unset ($resultat) ;
201
 
202
    // ========================= Mise à jour dans SPIP ================================
203
    if (INS_UTILISE_SPIP) {
204
        mod_inscription_spip($GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID), $valeur) ;
205
    }
206
}
207
 
448 ddelon 208
/** requete_annuaire () - Renvoie une chaine contenant les champs de l'annuaire avec leur valeur suite à le fonction process de QuickForm
209
*
210
* @return   string  une requete du type champs="valeur",...
211
*/
212
 
1292 neiluj 213
function requete_annuaire($valeur, $maj = FALSE) {
606 florian 214
    $req = INS_CHAMPS_NOM.'="'.addslashes($valeur['nom']).'", ';
1292 neiluj 215
    if (INS_UTILISE_WIKINI) {
216
    	$req .= INS_CHAMPS_NOM_WIKINI.'="'.genere_nom_wiki($valeur['nom']).'", ' ;
737 alexandre_ 217
    }
1292 neiluj 218
 
219
    if($maj)
220
    {
221
    	$id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID);
222
 
223
    	if(!$id) die("erreur"); // ne devrai jamais arriver --julien
224
 
225
    	$requete = 'SELECT * FROM '.INS_ANNUAIRE.' WHERE '.INS_ANNUAIRE.'.'
226
               .INS_CHAMPS_ID.'="'.$id.'"' ;
227
    	$resultat = $GLOBALS['ins_db'] -> query($requete) ;
228
    	if (DB::isError($resultat)) {
229
    		die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
230
    	}
760 alexandre_ 231
 
1292 neiluj 232
    	$ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
233
    } else
234
    	$id_utilisateur = nextId(INS_ANNUAIRE, INS_CHAMPS_ID, $GLOBALS['ins_db']) ;
235
 
606 florian 236
    $req .= INS_CHAMPS_MAIL.'="'.addslashes($valeur['email']).'", ' ;
1292 neiluj 237
 
238
    if(is_file($_FILES['image']['tmp_name']))
239
    {
240
    	if($maj && is_file($ligne[INS_CHAMPS_AVATAR]))
241
    		@unlink($ligne[INS_CHAMPS_AVATAR]);
242
 
243
    	$chemin_destination=INS_CHEMIN_APPLI.'images/'. ($maj ? $id : $id_utilisateur) .'_'.md5($_FILES['image']['name']).'.jpg';
244
	    move_uploaded_file($_FILES['image']['tmp_name'], $chemin_destination);
245
 
246
    } elseif(is_file($ligne[INS_CHAMPS_AVATAR]))
247
    	$chemin_destination=$ligne[INS_CHAMPS_AVATAR];
248
 
606 florian 249
    $req .= INS_CHAMPS_PASSE.'="'.md5($valeur['mot_de_passe']).'", '.
1292 neiluj 250
            'a_description="'.addslashes($valeur['description']).'", '.
251
            'a_logo="'.$chemin_destination.'", '.
606 florian 252
            INS_CHAMPS_PAYS.'="'.addslashes($valeur['pays']).'", '.
1292 neiluj 253
    	    'niveauscolaire="'.addslashes($valeur['nom_ref']).'", '.
606 florian 254
            INS_CHAMPS_ADRESSE_1.'="'.addslashes($valeur['adresse_1']).'", '.
255
            INS_CHAMPS_ADRESSE_2.'="'.addslashes($valeur['adresse_2']).'", '.
1292 neiluj 256
            INS_CHAMPS_DATE_INSCRIPTION.'="'.
257
            	($maj ? $ligne[INS_CHAMPS_DATE_INSCRIPTION] : 'NOW()'). '", '.
606 florian 258
            INS_CHAMPS_CODE_POSTAL.'="'.addslashes($valeur['cp']).'", '.
259
			INS_CHAMPS_VILLE.'="'.addslashes($valeur['ville']).'", '.
1292 neiluj 260
			INS_CHAMPS_EST_STRUCTURE.'="'.addslashes($valeur['est_structure']).'" ';
261
	//		INS_CHAMPS_TELEPHONE.'="'.addslashes($valeur['telephone']).'", '.
262
	//TODO:mettre un wiki
606 florian 263
			INS_CHAMPS_SITE_INTERNET.'="'.addslashes($valeur['site']).'" ';
264
 
265
	if (isset($valeur['visible'])) $req .= ', '.INS_CHAMPS_VISIBLE.'="'.$valeur['visible'].'"';
266
	else $req .= ', '.INS_CHAMPS_VISIBLE.'=0';
448 ddelon 267
 
483 alexandre_ 268
	if (INS_CHAMPS_LETTRE != '') {
269
		if (isset($valeur['lettre'])) {
612 florian 270
			$req .= ', '.INS_CHAMPS_LETTRE.'="'.$valeur['lettre'].'" ';
606 florian 271
			inscription_lettre('inscrire');
483 alexandre_ 272
		}
606 florian 273
		else {
612 florian 274
			$req .= ', '.INS_CHAMPS_LETTRE.'=0 ';
606 florian 275
			inscription_lettre('desinscrire');
276
		}
448 ddelon 277
	}
603 florian 278
 
606 florian 279
	if (isset($valeur['sigle_structure'])) {
280
        $req .= ', '.INS_CHAMPS_SIGLE_STRUCTURE.'="'.addslashes($valeur['sigle_structure']).'"' ;
448 ddelon 281
    }
282
    if (isset($valeur['num_agrement'])) {
606 florian 283
        $req .= ', '.INS_CHAMPS_NUM_AGREMENT.'="'.addslashes($valeur['num_agrement']).'"' ;
448 ddelon 284
    }
285
    // traitement du numéro de département pour la france
286
    if ($valeur['pays'] == 'FR') {
287
        if (preg_match("/^97|98[0-9]*/", $valeur['cp'])) {
288
            $n_dpt = substr($valeur['cp'], 0, 3) ;
289
        } else {
290
            $n_dpt = substr($valeur['cp'], 0, 2) ;
291
        }
292
        $req .= ",".INS_CHAMPS_DEPARTEMENT."='$n_dpt'";
293
    }
294
    return $req ;
295
}
296
 
297
 
298
 
603 florian 299
/** formulaire_defaults() - Renvoie un tableau avec les valeurs par défaut du formulaire d'inscription
448 ddelon 300
*
301
* @return   array   Valeurs par défaut du formulaire d'inscription
302
*/
679 alexandre_ 303
function formulaire_defaults($id = '') {
304
	if ($id == '') {
305
			$id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID);
306
	}
448 ddelon 307
    $requete = 'select '.INS_ANNUAIRE.'.* '.
308
                'from '.INS_ANNUAIRE.' '.
679 alexandre_ 309
                'where '.INS_ANNUAIRE.'.'.INS_CHAMPS_ID.'= "'.$id.'"' ;
501 alexandre_ 310
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
448 ddelon 311
    if (DB::isError($resultat)) {
312
    	die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
313
    }
314
    $ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
315
    $valeurs_par_defaut = array() ;
316
    $valeurs_par_defaut['email'] = $ligne[INS_CHAMPS_MAIL];
1292 neiluj 317
    $valeurs_par_defaut['description'] = $ligne['a_description'];
318
    $valeurs_par_defaut['image'] = $ligne['a_logo'];
448 ddelon 319
    $valeurs_par_defaut['nom'] = $ligne[INS_CHAMPS_NOM];
320
    $valeurs_par_defaut['prenom'] = $ligne[INS_CHAMPS_PRENOM] ;
321
    $valeurs_par_defaut['pays'] = $ligne[INS_CHAMPS_PAYS] ;
1292 neiluj 322
    $valeurs_par_defaut['niveauscolaire'] = $ligne['niveauscolaire'];
323
    if (INS_UTILISE_WIKINI) {$valeurs_par_defaut['nomwiki'] = $ligne[INS_CHAMPS_NOM_WIKINI] ;}
324
    $valeurs_par_defaut['cp'] = $ligne[INS_CHAMPS_CODE_POSTAL] ;
325
    $valeurs_par_defaut['ville'] = $ligne[INS_CHAMPS_VILLE] ;
326
    $valeurs_par_defaut['adresse_1'] = $ligne[INS_CHAMPS_ADRESSE_1] ;
327
    $valeurs_par_defaut['adresse_2'] = $ligne[INS_CHAMPS_ADRESSE_2] ;
328
    $valeurs_par_defaut['telephone'] = $ligne[INS_CHAMPS_TELEPHONE] ;
329
    $valeurs_par_defaut['site'] = $ligne[INS_CHAMPS_SITE_INTERNET] ;
330
    $valeurs_par_defaut['lettre'] = $ligne[INS_CHAMPS_LETTRE] ;
331
    $valeurs_par_defaut['visible'] = $ligne[INS_CHAMPS_VISIBLE] ;
332
    $valeurs_par_defaut['sigle_structure'] = $ligne[INS_CHAMPS_SIGLE_STRUCTURE] ;
333
    return $valeurs_par_defaut ;
334
}
335
 
336
 
337
/** info() - Renvoie une fiche d'information sur la personne ou la structure
338
*
339
* @return   text   Code HTML de la fiche
340
*/
341
function info($id=-1) {
342
	if ($id==-1) $id=$GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID);
343
    	$requete = 'SELECT * FROM '.INS_ANNUAIRE.' WHERE '.INS_ANNUAIRE.'.'
344
               .INS_CHAMPS_ID.'="'.$id.'"' ;
345
    $resultat = $GLOBALS['ins_db'] -> query($requete) ;
346
    if (DB::isError($resultat)) {
347
    	die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
348
    }
349
 
350
    $ligne = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
351
    if ($ligne[INS_CHAMPS_EST_STRUCTURE] == 1) {
352
    	$res = '<h1>'.INS_FICHE_STRUCTURE.'</h1>'."\n" ;
353
	    $res .= '<h2>'.$ligne[INS_CHAMPS_NOM].'</h2>'."\n";
354
	    $res .= '<dl class="affiche_infos">'."\n";
355
	    $res .= ligne_inscription(INS_SIGLE_DE_LA_STRUCTURE, $ligne[INS_CHAMPS_SIGLE_STRUCTURE]) ;
356
	    $res .= ligne_inscription(INS_NUM_AGREMENT, $ligne[INS_CHAMPS_NUM_AGREMENT]) ;
357
    } else {
358
    	$res = '<h1>'.INS_FICHE_PERSONNELLE.'</h1>'."\n" ;
359
    	if(!empty($ligne[INS_CHAMPS_AVATAR]) && is_file($ligne[INS_CHAMPS_AVATAR]))
360
    		$res = '<img src="'. INS_URL_IMAGES . $ligne[INS_CHAMPS_AVATAR] .'" style="float:right;" alt="avatar de '.$ligne[INS_CHAMPS_NOM_WIKINI].'" />'."\n" ;
361
 
362
    	$res .= '<h2>'.$ligne[INS_CHAMPS_PRENOM].' '.$ligne[INS_CHAMPS_NOM].'</h2>'."\n";
363
    	$res .= '<dl class="affiche_infos">'."\n";
364
    }
365
    $res .= ligne_inscription(INS_ADRESSE_1, $ligne[INS_CHAMPS_ADRESSE_1]) ;
366
    $res .= ligne_inscription(INS_ADRESSE_2, $ligne[INS_CHAMPS_ADRESSE_2]) ;
367
    $res .= ligne_inscription(INS_CODE_POSTAL, $ligne[INS_CHAMPS_CODE_POSTAL]) ;
368
    $res .= ligne_inscription(INS_VILLE, $ligne[INS_CHAMPS_VILLE]) ;
369
    $pays = new ListeDePays($GLOBALS['ins_db']) ;
370
 
371
    $res .= ligne_inscription(INS_PAYS, $pays->getNomPays($ligne[INS_CHAMPS_PAYS], INS_LANGUE_DEFAUT)) ;
372
    $res .= ligne_inscription(INS_TELEPHONE, $ligne[INS_CHAMPS_TELEPHONE]) ;
373
    $res .= ligne_inscription(INS_FAX, $ligne[INS_CHAMPS_FAX]) ;
374
    $res .= ligne_inscription('&nbsp;', '&nbsp;') ;
375
    if (INS_UTILISE_WIKINI) {
376
		$res .= ligne_inscription (INS_NOM_WIKI, $ligne[INS_CHAMPS_NOM_WIKINI]) ;
377
	}
378
    $res .= ligne_inscription(INS_EMAIL, $ligne[INS_CHAMPS_MAIL]);
379
    if ($ligne[INS_CHAMPS_SITE_INTERNET]!='') {
380
    	$res .= ligne_inscription(INS_SITE_INTERNET, '<a href="'.$ligne[INS_CHAMPS_SITE_INTERNET].'" onclick="javascript:window.open(this.href);return false;">'.$ligne[INS_CHAMPS_SITE_INTERNET].'</a>');
381
    }
382
    $res .= '</dl>'."\n";
383
    $res .= '<br />'."\n";
384
    if ($id==$GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID)) {
385
	    $res .= '<br />'."\n";
386
	    $res .= '<ul>'."\n";
387
	    if ($ligne[INS_CHAMPS_VISIBLE] == 1) {
388
	    	$res .= '<li>'.INS_VOUS_APPARAISSEZ.'</li>'."\n";
389
	    } else $res .= '<li>'.INS_VOUS_APPARAISSEZ_PAS.'</li>'."\n";
390
	    if ($ligne[INS_CHAMPS_LETTRE] == 1) {
391
	    	$res .= '<li>'.INS_VOUS_RECEVEZ_LETTRE.'</li>'."\n";
392
	    } else $res .= '<li>'.INS_VOUS_RECEVEZ_PAS_LETTRE.'</li>'."\n";
805 florian 393
	    $res .= '</ul>'."\n";
1292 neiluj 394
	    $res .= '<br />'."\n";
395
	    $res .= '<ul>'."\n";;
396
	    $res .= '<li><a href="'.$GLOBALS['ins_url']->getURL().'&amp;action=modifier&amp;form_structure='.$ligne[INS_CHAMPS_EST_STRUCTURE].'">'.INS_MODIFIER_INSCRIPTION.'</a></li>'."\n" ;
397
	    $res .= '<li><a href="'.$GLOBALS['ins_url']->getURL().'&amp;action=supprimer&amp;form_structure='.$ligne[INS_CHAMPS_EST_STRUCTURE].'" onclick="javascript:return confirm(\''.INS_SUPPRIMER_INSCRIPTION.'?\');">'.INS_SUPPRIMER_INSCRIPTION.'</a></li>'."\n" ;
398
	    $res .= '<li><a href="'.$GLOBALS['ins_url']->getURL().'&amp;action=deconnexion">'.INS_DECONNEXION.'</a></li>'."\n" ;
399
	    $res .= '</ul>'."\n";
805 florian 400
    }
1292 neiluj 401
    $res .=  '{{Syndication titre="Les fiches associ&eacute;es &agrave; ce participant" url="http://ekotribu.localhost/papyrus.php?menu=48&action=18&emetteur='. $ligne[INS_CHAMPS_ID].'" nb=0 nouvellefenetre=0 formatdate="jma"}}';
402
 
403
    return $res ;
404
}
405
 
406
 
407
/**	ligne_inscription() - Renvoie une ligne avec label et valeur
408
 *
409
 * @param string label Le label
410
 * @param string valeur
411
 * @return	string HTML
412
 */
413
function ligne_inscription($label, $valeur) {
414
    if ($valeur == '') {
415
        return;
416
    }
417
    if (($label == '')or($label == '&nbsp;')) {
418
    	return '<dt>&nbsp;</dt>'."\n".'<dd>'.$valeur.'</dd>'."\n" ;
419
    } else {
420
    	return '<dt>'.$label.' : </dt>'."\n".'<dd>'.$valeur.'</dd>'."\n" ;
421
    }
422
}
423
 
424
 
425
/** Renvoie vrai si l'email passé en paramètre n'est pas déjà dans l'annuaire
426
*   ou si, en cas de modification d'inscription, l'inscrit ne modifie pas son email
427
*
428
*   @return boolean
429
*/
430
function verif_doublonMail($mail, $id = '') {
431
	if ($id == '') {
432
		if (isset ($GLOBALS['AUTH'])) {
433
			$id = $GLOBALS['AUTH']->getAuthData(INS_CHAMPS_ID) ;
434
		}
435
	}
436
 
437
    if (isset ($id) && $id != '') {
438
        $requete_mail = "select ".INS_CHAMPS_MAIL." from ".INS_ANNUAIRE." where ".
439
        				INS_CHAMPS_ID."=".$id ;
440
        $resultat_mail = $GLOBALS['ins_db']->query ($requete_mail) ;
441
        if (DB::isError ($resultat_mail)) {
442
            die ("Echec de la requete : $requete_mail<br />".$resultat_mail->getMessage()) ;
443
        }
444
        $ligne_mail = $resultat_mail->fetchRow(DB_FETCHMODE_ASSOC) ;
445
        if ($mail == $ligne_mail[INS_CHAMPS_MAIL]) {
446
            return true ;
447
        }
448
    }
449
    $requete = "select ".INS_CHAMPS_MAIL." from ".INS_ANNUAIRE." where ".INS_CHAMPS_MAIL."= \"$mail\" ";
450
    $resultat = $GLOBALS['ins_db']->query ($requete) ;
451
    if (DB::isError ($resultat)) {
452
    	die ($resultat->getMessage().'<br />'.$resultat->getDebugInfo()) ;
453
    }
454
    if ($resultat->numRows() == 0) return true ;
455
    return false ;
456
}
457
 
458
 
459
function envoie_passe() {
460
	$res='';
461
	$requete = 'SELECT '.INS_CHAMPS_MAIL.' FROM '.INS_ANNUAIRE.' WHERE '.INS_CHAMPS_MAIL.'="'.$_POST['mail'].'"' ;
462
    $resultat = $GLOBALS['ins_db']->query($requete) ;
463
    if (DB::isError($resultat)) {
464
        die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
465
    }
466
    if ($resultat->numRows() == 0) {
467
    	$res .= '<p class="erreur">'.INS_MAIL_INCONNU_DANS_ANNUAIRE.'</p>'."\n" ;
468
    } else {
469
    	include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ;
470
    	$mail = & Mail::factory('smtp') ;
471
    	$headers ['Return-Path'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ;
472
    	$headers ['From'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ;
473
    	$headers ['Subject'] = INS_MOT_DE_PASSE_CHANGE ;
474
    	$headers ['Reply-To'] = "<".INS_MAIL_ADMIN_APRES_INSCRIPTION.">" ;
475
    	$headers ['To'] = "<".$_POST['mail'].">" ;
476
    	$nouveau_passe = create_new_random(6) ;
477
    	// modification du mot de passe dans la base
478
    	$requete = 'UPDATE '.INS_ANNUAIRE.' SET '.INS_CHAMPS_PASSE.'=MD5("'.$nouveau_passe.'") WHERE '.INS_CHAMPS_MAIL.'="'.$_POST['mail'].'"' ;
479
    	$resultat = $GLOBALS['ins_db']->query($requete) ;
480
    	if (DB::isError($resultat)) {
481
    		die ("Echec de la requete<br />".$resultat->getMessage()."<br />".$resultat->getDebugInfo()) ;
482
    	}
483
    	$body = INS_NOUVEAU_MOT_DE_PASSE_2.$nouveau_passe ;
484
    	$body .= INS_NOUVEAU_MOT_DE_PASSE_LAIUS ;
485
    	$mail->send($_POST['mail'], $headers, $body) ;
486
    	if (PEAR::isError($mail)) {
487
    		$res .= '<p class="erreur">'.INS_PROBLEME_ENVOI_MAIL.'</p>'."\n" ;
488
    		return $res ;
489
    	}
490
    	$res .= '<p class="info">'.INS_NOUVEAU_MOT_DE_PASSE_ENVOYE.'</p>'."\n" ;
491
    }
492
    return $res ;
493
}
494
 
495
/**
496
 *  Inscrit un adhérent à la lettre d'actualité par l'envoie d'un email subscribe / unsubscribe
497
 *  à la liste
498
 *
499
 * @global  AUTH    Un objet PEAR::Auth
500
 * @return  boolean true en cas de succès
501
 */
502
 
503
function inscription_lettre($action) {
504
    include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ;
505
    $mail = & Mail::factory ('smtp') ;
506
    $email = $GLOBALS['AUTH']->getUsername() ;
507
    $headers ['Return-Path'] = $email ;
508
    $headers ['From'] = "<".$email.">" ;
509
    $headers ['Subject'] = $action ;
510
    $headers ['Reply-To'] = $email ;
511
 
512
    $mail -> send ($action, $headers, "") ;
513
    if (PEAR::isError ($mail)) {
514
        echo '<p class="erreur">Le mail n\'est pas parti...</p>' ;
515
        return false ;
516
    }
517
    return true ;
518
}
519
 
520
/**
521
 *
522
 * @global  ins_db  Un pointeur vers un objet PEAR::DB connecté
523
 * @return
524
 */
525
 
526
function envoie_mail() //A COMPLETER!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
527
{
528
    include_once PAP_CHEMIN_RACINE.'api/pear/Mail/mime.php' ;
529
    include_once PAP_CHEMIN_RACINE.'api/pear/Mail.php' ;
530
    $crlf="\n";
531
 
532
    $headers ['From'] = INS_MAIL_ADMIN_APRES_INSCRIPTION ;
533
    $headers ['Subject'] = INS_MAIL_COORD_SUJET ;
534
    $headers ['Reply-To'] = INS_MAIL_ADMIN_APRES_INSCRIPTION ;
535
 
536
    $mime = new Mail_mime($crlf);
537
 
538
    $requete = "select *, ".INS_CHAMPS_LABEL_PAYS." from ".INS_ANNUAIRE.",".INS_TABLE_PAYS.
539
            " where ".INS_CHAMPS_MAIL."=\"".$GLOBALS['AUTH']->getUsername()."\"".
540
            " and ".INS_CHAMPS_ID_PAYS."=".INS_CHAMPS_PAYS;
541
 
542
    $resultat = $GLOBALS['ins_db']->query($requete) ;
543
    if (DB::isError ($resultat)) {
544
        die ("Echec de la requete : $requete<br />".$resultat->getMessage()) ;
545
    }
546
    $ligne  = $resultat->fetchRow(DB_FETCHMODE_ASSOC) ;
547
    $body_entete = INS_MAIL_COORD_CORPS."\n" ;
548
    $body = "mail : ".$ligne[INS_CHAMPS_MAIL]."\n" ;
549
    $body .= "------------------------------------------\n";
550
    $body .= INS_NOM.": ".unhtmlentities($ligne[INS_CHAMPS_NOM])." \n" ;
551
    $body .= INS_PRENOM.' : '.unhtmlentities($ligne[INS_CHAMPS_PRENOM])." \n" ;
552
    $body .= INS_PAYS." : ".unhtmlentities($ligne[PROJET_CHAMPS_LABEL_PAYS])." \n" ;
553
    $body .= "-------------------------------------------\n" ;
554
 
555
    $mime->setTXTBody($body);
556
    $mime->setHTMLBody(info()) ;
557
 
558
    $body = $mime->get();
559
    $headers = $mime->headers($headers);
560
 
561
    $mail = & Mail::factory('mail') ;
562
 
563
    $mail -> send ($ligne[INS_CHAMPS_MAIL], $headers, $body) ;
564
 
565
    if (PEAR::isError($mail)) {
566
        echo 'erreur d\'envoi' ;
567
        return false ;
568
    }
569
    return true ;
570
}
571
 
572
// merci PHP 5 ...
573
function mb_str_split($str, $length = 1) {
574
  if ($length < 1) return FALSE;
448 ddelon 575
 
1292 neiluj 576
  $result = array();
603 florian 577
 
1292 neiluj 578
  for ($i = 0; $i < strlen($str); $i += $length) {
579
    $result[] = substr($str, $i, $length);
580
  }
483 alexandre_ 581
 
1292 neiluj 582
  return $result;
448 ddelon 583
}
1292 neiluj 584
//
585
 
586
/**
587
 *  Génère un nom wiki valide à partir des données saisies par l'utilisateur
588
 *  fait une requete dans la base
589
 *
590
 * --> révision par julien suite nouvelle fonction get_wiki_name();
591
 * --> ajout de la vérification des doublons.
592
 *
593
 * @return  string un nom wiki valide
594
 */
595
 
596
function genere_nom_wiki($nom) {
597
 
598
  	// si le nom est trop invalide (____) on génère une chaine au hazard..
599
  	$nom_wiki = (!get_wiki_name($nom) ? get_wiki_name(create_new_random(5)) : get_wiki_name($nom));
600
 
601
	// si le nom existe déjà: on ajoute des _ à la fin jusqu'à ce qu'il soit libre !
602
	while(!verif_doublonNomWiki($nom_wiki))
603
	{
604
		$nom_wiki .= '_';
605
	}
606
 
607
    return $nom_wiki ;
448 ddelon 608
}
609
 
610
/**
1292 neiluj 611
 *	Cette fonction supprime les caractères autres que asccii et les chiffres
448 ddelon 612
 *
1292 neiluj 613
 * @return	string la chaine épurée
448 ddelon 614
 */
615
 
1292 neiluj 616
function trim_non_ascii ($nom) {
617
    $premiere_lettre = true ;
618
    for ($i = 0; $i <= strlen ($nom); $i++) {
619
        if (!preg_match ('/[a-zA-Z0-9]/', $nom[$i])) {
620
            $nom[$i] = '_' ;
621
        }
622
    // remplacement de la première lettre en majuscule
623
        if (preg_match ('/[a-zA-Z]/', $nom[$i]) && $premiere_lettre) {
624
            $nom[$i] = strtoupper ($nom[$i]) ;
625
            $premiere_lettre = false ;
626
        } else {
627
            if (preg_match ('/[a-zA-Z]/', $nom[$i])) {
628
                $nom[$i] = strtolower ($nom[$i]) ;
629
            }
630
        }
448 ddelon 631
    }
1292 neiluj 632
    $nom = preg_replace ('/_/', '', $nom) ;
633
    return $nom ;
448 ddelon 634
}
635
 
1292 neiluj 636
//function get_wiki_name($nom)
637
//{
638
//	$temp = explode('', $nom);
639
//	$count = 0;
640
//	$final = NULL;
641
//	foreach($temp as $letter)
642
//	{
643
//		if(preg_match ('/[a-zA-Z0-9]/', $letter)) {
644
//            $final .= (($count == 0 || $count == (strlen($nom) - 1)) ? strtoupper($letter) : strtolower($letter));
645
//        }
646
//	}
647
//	return($final);
648
//}
448 ddelon 649
 
1292 neiluj 650
// fonction révisée de get_wiki_name() --julien
651
function get_wiki_name($nom)
448 ddelon 652
{
1289 neiluj 653
	// traitement des accents
654
	$nom = str_replace(array('é','è','ë','ê','É','È','Ë','Ê','&','£'), 'e', $nom);
655
	$nom = str_replace(array('à','ä','â','Â','Ä','À','@'), 'a', $nom);
656
	$nom = str_replace(array('ç','Ç'), 'c', $nom);
657
	$nom = str_replace(array('ÿ','¾'), 'y', $nom);
658
	$nom = str_replace(array('ô','ö','ò','Ô','Ò','Ö'), 'o', $nom);
659
	$nom = str_replace(array('ï','î','ì','Î','Ï','Ì'), 'i', $nom);
660
	$nom = str_replace('$', 's', $nom);
483 alexandre_ 661
 
1292 neiluj 662
	$temp = mb_str_split($nom);
1289 neiluj 663
 
664
	$count = 0;
665
	$final = NULL;
666
	foreach($temp as $letter)
667
	{
668
		if(preg_match('/([[:space:]]|[[:punct:]])/', $letter))
669
		{
1292 neiluj 670
			$final .= '_';
1289 neiluj 671
		} elseif(preg_match ('/[a-zA-Z0-9]/', $letter)) {
672
            $final .= (($count == 0 || $count == (strlen($nom) - 1)) ? strtoupper($letter) : strtolower($letter));
673
        }
674
        $count++;
675
	}
676
 
677
	// vérifions que le retour n'est pas uniquement un underscore
678
	if(preg_match('/^[[:punct:]]+$/', $final)) return FALSE;
679
 
680
 	// sinon retour du nom formaté
681
	return($final);
483 alexandre_ 682
}
683
 
1289 neiluj 684
 
448 ddelon 685
// For users prior to PHP 4.3.0 you may do this:
686
function unhtmlentities($string)
687
{
688
    $trans_tbl = get_html_translation_table (HTML_ENTITIES);
689
    $trans_tbl = array_flip ($trans_tbl);
690
    return strtr ($string, $trans_tbl);
691
}
692
 
693
//==============================================================================
1289 neiluj 694
/** function create_new_random($n,$type) permet de générer un nombre de caractères alçatoires.
448 ddelon 695
*
696
*
697
*
698
*  ENTREE :
699
*  - $n : créer un 'mot' de $n caractères
700
*  - $type : permet de définir la liste des caractères disponibles
701
*
702
*  SORTIE : chaine de $n caractères pris dans une liste $type
703
*/
704
 
705
function create_new_random($n,$type="")
706
{
707
    $str = "";
708
 
709
    switch ($type){
710
        default:{
711
            $chaine = "abcdefghkmnpqrstuvwxyzABCDEFGHKLMNPQRSTUVWXYZ23456789";
712
        }
713
            break;
714
    }
715
 
716
    srand((double)microtime()*1000000);
717
    for($i = 0; $i < $n; $i++){
718
        $str .= $chaine[rand()%strlen($chaine)];
719
    }
720
 
721
    return "$str";
722
}
723
 
724
//==============================================================================
725
/** function nextId () Renvoie le prochain identifiant numérique libre d'une table
726
*
727
*   On passe en paramètre le nom de la table et l'identifiant de la base selon PEAR DB
728
*
729
*   @param  mixed   handler de connexion
730
*   @param  string  Nom de la table
731
*   return  interger    l'identifiant
732
*/
733
 
734
function nextId($table, $colonne_identifiant)
735
{
736
    $requete = 'select MAX('.$colonne_identifiant.') as maxi from '.$table ;
737
    $resultat = $GLOBALS['ins_db']->query($requete) ;
738
    if (DB::isError($resultat)) {
739
        die (__FILE__ . __LINE__ . $resultat->getMessage() . $requete);
740
        return $GLOBALS['ins_db']->raiseError($resultat) ;
741
    }
742
 
743
    if ($resultat->numRows() > 1) {
744
        return $GLOBALS['ins_db']->raiseError("<br />La table $table a un identifiant non unique<br/>") ;
745
    }
746
    $ligne = $resultat->fetchRow(DB_FETCHMODE_OBJECT) ;
747
    return $ligne->maxi + 1 ;
748
}
749
 
750
/* +--Fin du code ----------------------------------------------------------------------------------------+
751
*
752
* $Log: not supported by cvs2svn $
737 alexandre_ 753
* Revision 1.8  2006/01/02 09:51:38  alexandre_tb
754
* généralisation du code et intégration au bottin
755
*
679 alexandre_ 756
* Revision 1.7  2005/12/19 13:19:07  alexandre_tb
757
* Correction de l'affichage des pays
758
*
674 alexandre_ 759
* Revision 1.6  2005/11/24 16:17:52  florian
760
* changement template inscription + modifs carto
761
*
612 florian 762
* Revision 1.5  2005/11/18 16:04:15  florian
763
* corrections de bugs, optimisations, tests pour rendre inscription stable.
764
*
606 florian 765
* Revision 1.4  2005/11/17 18:48:02  florian
766
* corrections bugs + amélioration de l'application d'inscription
767
*
603 florian 768
* Revision 1.3  2005/10/03 09:45:21  alexandre_tb
769
* suppression d'un echo
770
*
501 alexandre_ 771
* Revision 1.2  2005/09/29 13:56:48  alexandre_tb
772
* En cours de production. Reste à gérer les news letters et d'autres choses.
773
*
483 alexandre_ 774
* Revision 1.1  2005/09/22 14:02:49  ddelon
775
* nettoyage annuaire et php5
776
*
448 ddelon 777
* Revision 1.4  2005/09/22 13:30:49  florian
778
* modifs pour compatibilité XHTML Strict + corrections de bugs (mais ya encore du boulot!!)
779
*
780
* Revision 1.3  2005/03/21 16:57:30  florian
781
* correction de bug, mise à jour interface
782
*
783
* Revision 1.2  2004/12/17 17:41:51  alex
784
* ajout du numéro de tel, du fax et de la structure
785
*
786
* Revision 1.1  2004/12/15 13:32:25  alex
787
* version initiale
788
*
789
* Revision 1.2  2004/09/01 16:37:52  alex
790
* modification du formulaire
791
*
792
* Revision 1.1  2004/07/06 15:42:17  alex
793
* en cours
794
*
795
* Revision 1.7  2004/07/06 15:28:41  alex
796
* en cours
797
*
798
* Revision 1.5  2004/07/06 15:22:19  alex
799
* en cours
800
*
801
=======
802
* Revision 1.4  2004/06/30 10:00:26  alex
803
* modification de l'envoie de mail
804
*
805
* Revision 1.2  2004/06/23 12:41:51  alex
806
* amélioration de la gestion de la perte de mot de passe
807
*
808
* Revision 1.1  2004/06/18 09:20:47  alex
809
* version initiale
810
*
811
*
812
* +-- Fin du code ----------------------------------------------------------------------------------------+
813
*/
814
 
815
?>