Subversion Repositories Applications.papyrus

Rev

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

Rev Author Line No. Line
2079 ddelon 1
<?php
2084 jp_milcent 2
/*vim: set expandtab tabstop=4 shiftwidth=4: */
2079 ddelon 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                                         |
11
// | version 2.1 of the License, or (at your option) any later version.                                   |
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
// +------------------------------------------------------------------------------------------------------+
22
// CVS : $Id: identification.php,v 1.37 2008-04-18 14:19:09 jp_milcent Exp $
23
/**
24
* Applette : identification
25
*
2154 aurelien 26
* Génére un formulaire les champs nécessaires pour s'identifier.
2079 ddelon 27
* Nécessite :
28
* - Variable globale de Génésia.
29
* - Pear Auth
30
* - Pear Net_URL
31
*
32
* A faire : remplacer le formulaire par un QuickForm
33
*
34
*@package Applette
35
*@subpackage Identification
36
//Auteur original :
37
*@author        Jean-Pascal MILCENT <jpm@tela-botanica.org>
38
//Autres auteurs :
39
*@author        Aucun
40
*@copyright     Tela-Botanica 2000-2004
41
*@version       $Revision: 1.37 $ $Date: 2008-04-18 14:19:09 $
42
// +------------------------------------------------------------------------------------------------------+
43
*/
44
 
45
// +------------------------------------------------------------------------------------------------------+
2154 aurelien 46
// |                                            ENTéTE du PROGRAMME                                       |
2079 ddelon 47
// +------------------------------------------------------------------------------------------------------+
48
$GLOBALS['_GEN_commun']['info_applette_nom_fonction'] = 'afficherFormIdentification';
49
$GLOBALS['_GEN_commun']['info_applette_balise'] = 	'(?:<!-- '.$GLOBALS['_GEN_commun']['balise_prefixe'].'(IDENTIFICATION) -->|'.
50
													'\{\{[Ii]dentification'.
51
													'(?:\s*'.
52
														'(?:'.
53
															'(template=".*")|'.
54
														')'.
55
													')+'.
56
													'\s*\}\})';
57
 
58
/** Inclusion du fichier de configuration de cette applette.*/
59
require_once GEN_CHEMIN_APPLETTE.'identification'.GEN_SEP.'configuration'.GEN_SEP.'iden_config.inc.php';
60
 
61
// Inclusion des fichiers de traduction de l'applette.
62
if (file_exists(IDEN_CHEMIN_LANGUE.'iden_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php')) {
2154 aurelien 63
    /** Inclusion du fichier de traduction suite é la transaction avec le navigateur.*/
2079 ddelon 64
    require_once IDEN_CHEMIN_LANGUE.'iden_langue_'.$GLOBALS['_GEN_commun']['i18n'].'.inc.php';
65
} else {
66
    /** Inclusion du fichier de traduction par défaut.*/
67
    require_once IDEN_CHEMIN_LANGUE.'iden_langue_'.IDEN_I18N_DEFAUT.'.inc.php';
68
}
69
// +------------------------------------------------------------------------------------------------------+
70
// |                                            CORPS du PROGRAMME                                        |
71
// +------------------------------------------------------------------------------------------------------+
72
 
73
// Si le site utilise une authentification.
74
if ($GLOBALS['_GEN_commun']['info_auth']->gsa_ce_type_auth == 1) {
2154 aurelien 75
 
76
	if(IDEN_UTILISE_SSO) {
77
		require_once GEN_CHEMIN_PAP.'bibliotheque/classes/pap_identificationsso.class.php';
78
		$identification = new identificationSso();
79
	}
80
 
2079 ddelon 81
	$cookie_persistant_nom = session_name().'-memo';
2084 jp_milcent 82
	$cookie_utilisateur_nom = session_name().'-utilisateur';
2079 ddelon 83
    // Si un formulaire nous renvoie en POST une variable "deconnexion", nous délogons l'utilisateur.
84
    if ((isset($_REQUEST['deconnexion']) || isset($_REQUEST['logout']))) {
85
		$GLOBALS['_GEN_commun']['pear_auth']->logout();
86
		// Destruction du cookie de session de Papyrus : est ce utile?
87
		setcookie(session_name(), session_id(), time()-3600, '/');
88
		// Destruction du cookie de permanence de l'identitification de Papyrus
89
		setcookie($cookie_persistant_nom, '', time()-3600, '/');
2084 jp_milcent 90
		setcookie($cookie_utilisateur_nom, '', time()-3600, '/');
2154 aurelien 91
 
92
		if(IDEN_UTILISE_SSO) {
93
			// On propage la deconnexion sur le sso, attention ceci provoque une redirection suivie d'un exit
94
			$identification->deconnecterEtRediriger();
95
		}
96
 
2084 jp_milcent 97
    } else if (isset($_REQUEST['connexion'])) {
98
    	// Si un formulaire nous renvoie en POST une variable "connexion", nous logons l'utilisateur.
99
    	$cookie_val = md5($_POST['password']).$_POST['username'];
100
		// Nous vérifions que l'utilisateur est coché "Mémoriser mon compte"
101
		if (isset($_POST['persistant']) && $_POST['persistant'] == 'o' && IDEN_AUTH_SESSION_DUREE != 0) {
102
	        // Expiration si l'utilisateur ne referme pas son navigateur
103
			$GLOBALS['_GEN_commun']['pear_auth']->setExpire((int)IDEN_AUTH_SESSION_DUREE);
104
			// Création d'un cookie pour rendre permanente l'identification de Papyrus
105
			setcookie($cookie_persistant_nom, $cookie_val, (int)IDEN_AUTH_SESSION_DUREE, '/');
106
		} else {
107
			setcookie($cookie_utilisateur_nom, $cookie_val, 0, '/');
2079 ddelon 108
		}
2154 aurelien 109
 
110
		if(IDEN_UTILISE_SSO) {
111
			// On propage la connexion sur le sso, attention ceci provoque une redirection suivie d'un exit
112
			$identification->connecterEtRediriger($_POST['username'], $_POST['password']);
113
		}
114
 
2084 jp_milcent 115
	} else if (isset($_COOKIE[$cookie_persistant_nom])) {
116
		// Si un cookie existe, nous loggons l'utilisateur.
117
		$GLOBALS['_GEN_commun']['pear_auth']->password = substr($_COOKIE[$cookie_persistant_nom], 0, 32 );
118
		$GLOBALS['_GEN_commun']['pear_auth']->username = substr($_COOKIE[$cookie_persistant_nom], 32);
119
 
2154 aurelien 120
		// Le mot de passe est déjé crypté dans cookie donc il faut indiquer é pear de ne pas le re crytper
2084 jp_milcent 121
		if (isset($GLOBALS['_GEN_commun']['pear_auth']->storage_options)) {
122
			$GLOBALS['_GEN_commun']['pear_auth']->storage_options['cryptType'] = 'none';
123
		}
124
		if (isset($GLOBALS['_GEN_commun']['pear_auth']->storage->options)) {
125
			$GLOBALS['_GEN_commun']['pear_auth']->storage->options['cryptType'] = 'none';
126
		}
127
	} else if (isset($_COOKIE[$cookie_utilisateur_nom])) {
128
		$GLOBALS['_GEN_commun']['pear_auth']->password = substr($_COOKIE[$cookie_utilisateur_nom], 0, 32 );
129
		$GLOBALS['_GEN_commun']['pear_auth']->username = substr($_COOKIE[$cookie_utilisateur_nom], 32);
130
 
2154 aurelien 131
		// Le mot de passe est déjé crypté dans cookie donc il faut indiquer é pear de ne pas le re crytper
2084 jp_milcent 132
		if (isset($GLOBALS['_GEN_commun']['pear_auth']->storage_options)) {
133
			$GLOBALS['_GEN_commun']['pear_auth']->storage_options['cryptType'] = 'none';
134
		}
135
		if (isset($GLOBALS['_GEN_commun']['pear_auth']->storage->options)) {
136
			$GLOBALS['_GEN_commun']['pear_auth']->storage->options['cryptType'] = 'none';
137
		}
2079 ddelon 138
    }
2154 aurelien 139
 
140
    if(IDEN_UTILISE_SSO) {
141
    	// Si nous n'avons pas de cookie, on redirige vers le sso pour vérifier la présence du jeton
142
    	// attention ceci entraine une redirection suivie d'un exit
143
    	$identification->verifierIdentiteEtRediriger();
144
    }
145
 
2084 jp_milcent 146
    $GLOBALS['_GEN_commun']['pear_auth']->login();
2079 ddelon 147
}
148
 
149
// +------------------------------------------------------------------------------------------------------+
150
// |                                           LISTE de FONCTIONS                                         |
151
// +------------------------------------------------------------------------------------------------------+
152
 
153
/** Fonction afficherFormIdentification() - Retourne une formulaire pour s'identifier.
154
*
155
* Retourne un formulaire d'identificatin ou de déconnexion suivant que l'utilisateur est
156
* identifié ou pas.
157
*
2154 aurelien 158
* @param  array  tableau d'éventuel arguments présent dans la balise transmis é la fonction.
2079 ddelon 159
* @param  array  tableau global de Papyrus.
160
* @return string formulaire de connexion ou de déconnexion.
161
*/
162
function afficherFormIdentification($tab_arguments, $_GEN_commun)
163
{
164
    // Extraction des arguments s il y a
165
    $balise = $tab_arguments[0];
166
    $tab_arguments = $tab_arguments;
167
	unset($tab_arguments[0]);
168
    foreach($tab_arguments as $argument) {
169
    	if ($argument != '') {
170
	    	$tab_parametres = explode('=', $argument, 2);
171
	    	if (isset($tab_parametres[1])) $options[$tab_parametres[0]] = trim($tab_parametres[1], '"');
172
    	}
173
    }
174
    if (!isset($options['template'])) {
175
    	$options['template'] = IDEN_CHEMIN_APPLETTE.'squelettes/'.IDEN_SQUELETTE_DEFAUT;
176
    }
177
    // Initialisation de variable.
178
    $retour = '';
179
    // Gestion des attributs "id" des balises XHTML uniques
180
    $id_xhtml = '';
181
    if ( $GLOBALS['_PAPYRUS_']['applette']['comptage']['afficherFormIdentification'] > 1) {
182
    	$id_xhtml =  $GLOBALS['_PAPYRUS_']['applette']['comptage']['afficherFormIdentification'];
183
    }
184
    $objet_pear_auth =& $_GEN_commun['pear_auth'];
185
    $objet_pear_db =& $_GEN_commun['pear_db'];
186
    $InfoAuthBdd =& $_GEN_commun['info_auth_bdd'];
187
    $objet_url =& $_GEN_commun['url'];
188
    $url = $objet_url->getURL();
189
    $objet_url->addQueryString('logout', 1);
190
    $url_deconnect = $objet_url->getURL();
191
    $objet_url->removeQueryString('logout');
192
    // Récupération des valeurs pour le login et le mot de passe
193
    $mot_de_passe = (! isset($_POST['password']))    ? '' : $_POST['password'];
194
    $login        = (! isset($_POST['username']))    ? '' : $_POST['username'];
2084 jp_milcent 195
 
2154 aurelien 196
    $url_inscription_aide = $InfoAuthBdd->url_erreur;
2084 jp_milcent 197
 
2154 aurelien 198
    // ATTENTION : Partie é supprimer une fois les mise é jour effectué dans l'annuaire de Tela Botanica
199
    // Devrait étre déplacer dans l'appli inscription de Tela.
2079 ddelon 200
    if (isset($InfoAuthBdd->gsab_nom_table) && $InfoAuthBdd->gsab_nom_table == 'annuaire_tela') {
201
        verification_mot_de_passe($objet_pear_db, $mot_de_passe, $login);
202
        if (isset($_POST['connexion'])) {
203
            $objet_pear_auth->login();
204
        }
205
    }
2084 jp_milcent 206
 
2079 ddelon 207
	// L'utilisateur a essayé de s'identifier mais a échoué
208
	$url_erreur = false;
209
	if ($login != '') {
210
		$url_erreur = '#';
211
		if (isset($InfoAuthBdd->url_erreur)) {
212
			$url_erreur = $InfoAuthBdd->url_erreur;
213
		} else if (isset($InfoAuthBdd->url_inscription)) {
214
			$url_erreur = $InfoAuthBdd->url_inscription;
215
		}
216
	}
217
	$url_inscription_aide = '';
218
	$url_page_inscription = '';
219
	$url_page_modif_inscription = '';
220
	if (isset($InfoAuthBdd->url_inscription)) {
221
    	$url_page_inscription = $InfoAuthBdd->url_inscription;
222
	}
223
	if (isset($InfoAuthBdd->url_inscription_modif)) {
224
    	$url_page_modif_inscription = $InfoAuthBdd->url_inscription_modif;
225
	}
226
	if (isset($InfoAuthBdd->url_inscription_aide)) {
227
		$url_inscription_aide = $InfoAuthBdd->url_inscription_aide;
228
	}
229
	$chp_personne_prenom='';
230
    if (isset($InfoAuthBdd->chp_personne_prenom)) {
231
        $chp_personne_prenom = $objet_pear_auth->getAuthData($InfoAuthBdd->chp_personne_prenom);
232
    }
233
    $chp_personne_nom='';
234
    if (isset($InfoAuthBdd->chp_personne_nom)) {
235
    	$chp_personne_nom = $objet_pear_auth->getAuthData($InfoAuthBdd->chp_personne_nom);
2084 jp_milcent 236
    }
237
    $chp_structure='';
2079 ddelon 238
    if (isset($InfoAuthBdd->chp_structure_nom)) {
239
    	$chp_structure = $objet_pear_auth->getAuthData($InfoAuthBdd->chp_structure_nom);
240
    }
241
    if ($objet_pear_auth->getAuth()) { $loggue = true; } else { $loggue = false; }
2084 jp_milcent 242
 
2079 ddelon 243
    /** Compteur sert a compter le nombre de fois qu est appele l applet
244
     * et ce afin que les tabindex du formulaire soient correct
2084 jp_milcent 245
     */
246
 
2079 ddelon 247
    static $compteur = 0;
248
	ob_start();
249
	include $options['template'];
250
	$retour = ob_get_contents();
251
	// Arrete et detruit le buffer
2084 jp_milcent 252
	ob_end_clean();
253
 
2079 ddelon 254
	$compteur++;
2084 jp_milcent 255
 
2079 ddelon 256
    return $retour;
257
}
258
 
259
// +------------------------------------------------------------------------------------------------------+
260
// |                                            PIED du PROGRAMME                                         |
261
// +------------------------------------------------------------------------------------------------------+
262
 
263
 
264
 
265
/* +--Fin du code ----------------------------------------------------------------------------------------+
266
*
267
* $Log: identification.php,v $
268
* Revision 1.37  2008-04-18 14:19:09  jp_milcent
269
* Fusion avec la livraison AHA : 18 avril 2008
270
*
271
* Revision 1.35.2.2  2008-04-18 14:14:55  jp_milcent
2154 aurelien 272
* Gestion de plusieurs applettes identifications sur la même page html.
2079 ddelon 273
* Correction de bogues.
274
*
275
* Revision 1.36  2007-11-27 11:26:55  jp_milcent
276
* Fusion avec la livraison AHA : 27 novembre 2007
277
*
278
* Revision 1.35.2.1  2007-11-27 11:25:30  jp_milcent
279
* Correction bogue : non affichage de l'url d'erreur de saisie du login.
280
*
281
* Revision 1.35  2007-10-11 14:14:22  florian
282
* amelioration du template de l'applette inscription
283
*
284
* Revision 1.34  2007-09-18 08:40:54  alexandre_tb
285
* modification de la balise identification pour permettre de preciser un template.
286
*
287
* Revision 1.33  2007-08-28 14:23:35  jp_milcent
288
* Amélioration de la gestion des mots de passe perdus.
289
*
290
* Revision 1.32  2007-08-28 14:14:35  jp_milcent
291
* Ajout de la gestion des erreurs d'identification.
292
*
293
* Revision 1.31  2006-12-15 14:49:47  jp_milcent
2154 aurelien 294
* Correction bogue : le type de cryptage est stocké é 2 endroits...
2079 ddelon 295
*
296
* Revision 1.30  2006/12/14 15:01:05  jp_milcent
2154 aurelien 297
* Utilisation d'un systéme permettant de mémoriser les idenitifications.
298
* Passage é Auth 1.4.3 et DB 1.7.6.
2079 ddelon 299
*
300
* Revision 1.29  2006/12/12 13:53:54  jp_milcent
301
* Mise en place du nouveau format des balises d'applette.
302
*
303
* Revision 1.28  2006/12/12 13:26:42  jp_milcent
304
* Modification de la gestion de l'identification. Utilisation des variables de session.
305
*
306
* Revision 1.27  2006/12/08 18:14:57  jp_milcent
307
* Correction bogue : l'identification ne tenait pas...
308
*
309
* Revision 1.26  2006/12/01 16:33:40  florian
310
* Amélioration de la gestion des applettes et compatibilité avec le nouveau mode de gestion de l'inclusion des applettes.
311
*
312
* Revision 1.25  2006/11/20 18:40:33  jp_milcent
313
* Amélioration de la gestion des infos sur l'inscription.
2154 aurelien 314
* Ajout du paramétre url_inscription_aide permettant d'indiquer l'url vers une page d'aide sur l'inscription.
2079 ddelon 315
*
316
* Revision 1.24  2006/11/20 17:42:40  jp_milcent
317
* Ajout d'un test activant ou pas la mémorisation de l'identification.
318
*
319
* Revision 1.23  2006/11/20 17:30:40  jp_milcent
320
* Amélioration de la gestion de l'identification.
321
* Utilisation des durées de session correcte.
322
* Suppression du code pour Spip non fonctionnel.
323
*
324
* Revision 1.22  2006/09/21 15:25:17  jp_milcent
325
* Nettoyage dans l'url de la querystring logout.
326
*
327
* Revision 1.21  2006/03/02 10:49:49  ddelon
328
* Fusion branche multilinguisme dans branche principale
329
*
330
* Revision 1.20  2005/12/13 11:13:35  alexandre_tb
331
* ajout d'un message si l'identification échoue
332
*
333
* Revision 1.19.2.1  2005/12/20 14:40:24  ddelon
334
* Fusion Head vers Livraison
335
*
336
* Revision 1.20  2005/12/13 11:13:35  alexandre_tb
337
* ajout d'un message si l'identification échoue
338
*
339
* Revision 1.19  2005/10/31 17:09:28  ddelon
2154 aurelien 340
* Suppression auth start suite é deconnexion ... attention aux effets de bord
2079 ddelon 341
*
342
* Revision 1.18  2005/09/27 09:07:32  ddelon
343
* size applette et squelettes
344
*
345
* Revision 1.17  2005/09/12 09:17:17  alexandre_tb
346
* utilisation de l'objet Net_URL pour ajouter la variable logout dans le lien de déconnexion
347
*
348
* Revision 1.16  2005/06/09 17:06:28  jpm
349
* Ajout de constantes de langue.
350
*
351
* Revision 1.15  2005/06/02 11:56:00  jpm
352
* Modification de l'affichage de l'identification.
353
*
354
* Revision 1.14  2005/05/19 14:00:58  jpm
355
* Déplacement du menu de modif de l'inscription.
356
*
357
* Revision 1.13  2005/04/14 16:37:22  jpm
358
* Ajout de la gestion de la modification de son inscription.
359
*
360
* Revision 1.12  2005/03/25 14:40:51  jpm
2154 aurelien 361
* Prise en compte du paramétre url_inscription permettant de faire figurer dans l'applette inscription un lien vers la page d'inscription.
2079 ddelon 362
*
363
* Revision 1.11  2005/03/17 15:52:17  jpm
364
* Suppression d'un / causant un bogue.
365
*
366
* Revision 1.10  2005/03/15 14:47:14  jpm
2154 aurelien 367
* Utilisation d'un lien é la place d'un formulaire pour la déconnexion.
2079 ddelon 368
*
369
* Revision 1.9  2005/03/15 14:17:46  jpm
370
* Ajout d'un fichier de config et de traduction.
371
* Début gestion des constantes de langue.
372
*
373
* Revision 1.8  2005/03/10 12:50:44  alex
374
* remplacement de & par  &amp;
375
*
376
* Revision 1.7  2005/01/07 12:43:03  alex
2154 aurelien 377
* réauction de la taille des champs texte é 12
2079 ddelon 378
*
379
* Revision 1.6  2004/12/13 18:07:09  alex
380
* désauthentification spip presque parfaite
381
*
382
* Revision 1.5  2004/09/23 14:31:12  jpm
383
* Correction bogue sur l'identification de l'annuaire_tela.
384
*
385
* Revision 1.4  2004/09/23 10:53:44  jpm
386
* Suppression de l'attribut size. Gestion via les css.
387
*
388
* Revision 1.3  2004/06/28 10:18:48  alex
389
* suppression de balises <p>
390
*
391
* Revision 1.2  2004/06/21 07:37:30  alex
392
* Modification d'un label
393
*
394
* Revision 1.1  2004/06/15 15:01:41  jpm
395
* Changement de nom et d'arborescence de Genesia en Papyrus.
396
*
397
* Revision 1.5  2004/05/05 06:44:15  jpm
2154 aurelien 398
* Complément des commentaires indiquant les paquetages nécessaire é l'applette.
2079 ddelon 399
*
400
* Revision 1.4  2004/05/03 11:18:55  jpm
401
* Intégration de la variable globale de Génésia dans les arguments de la fonction de l'applette.
402
*
403
* Revision 1.3  2004/05/01 17:21:16  jpm
404
* Ajout d'un fieldset et d'une légende au formulaire.
405
*
406
* Revision 1.2  2004/05/01 16:13:07  jpm
407
* Ajout du nom de la balise de l'applette dans le code de l'applette.
408
*
409
* Revision 1.1  2004/05/01 11:42:01  jpm
410
* Ajout de l'applette identification.
411
*
412
*
413
* +-- Fin du code ----------------------------------------------------------------------------------------+
414
*/
415
?>