diff --git a/.gitattributes b/.gitattributes index 54d65ae649b90cf7c5e1cfec5bdab9b3b015e02f..6995455d8b38be37c96be89f1e2c4934f2952b34 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,7 @@ ecrire/action/charger_plugin.php -text ecrire/action/configurer.php -text ecrire/action/configurer_previsualiseur.php -text ecrire/action/configurer_relayeur.php -text +ecrire/action/confirmer_email.php -text ecrire/action/converser.php -text ecrire/action/copier_local.php -text ecrire/action/dater.php -text diff --git a/ecrire/action/confirmer_email.php b/ecrire/action/confirmer_email.php new file mode 100644 index 0000000000000000000000000000000000000000..8b10316c627d5b848d04717250985ea72b6618a9 --- /dev/null +++ b/ecrire/action/confirmer_email.php @@ -0,0 +1,35 @@ +<?php + +/***************************************************************************\ + * SPIP, Systeme de publication pour l'internet * + * * + * Copyright (c) 2001-2010 * + * Arnaud Martin, Antoine Pitrou, Philippe Riviere, Emmanuel Saint-James * + * * + * Ce programme est un logiciel libre distribue sous licence GNU/GPL. * + * Pour plus de details voir le fichier COPYING.txt ou l'aide en ligne. * +\***************************************************************************/ + +if (!defined("_ECRIRE_INC_VERSION")) return; + + +// Cette action permet de confirmer un changement d'email + +function action_confirmer_email_dist() +{ + $securiser_action = charger_fonction('securiser_action', 'inc'); + $arg = $securiser_action(); + + include_spip('inc/filtres'); + if ($GLOBALS['visiteur_session']['id_auteur'] AND email_valide($arg)){ + $editer_auteur = charger_fonction('editer_auteur','action'); + auteurs_set($GLOBALS['visiteur_session']['id_auteur'],array('email'=>$arg)); + } + // verifier avant de rediriger pour invalider le message de confirmation + // si ca n'a pas marche + if ($redirect = _request('redirect') AND !$arg == sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($GLOBALS['visiteur_session']))) + $GLOBALS['redirect'] = parametre_url($redirect, 'email_modif',''); + +} + +?> \ No newline at end of file diff --git a/ecrire/action/editer_auteur.php b/ecrire/action/editer_auteur.php index a51d8b6c275d8c53bc6ec37012c31c94c59bd0a9..53960b49adf698229e4208e48c6140736a3c7f38 100644 --- a/ecrire/action/editer_auteur.php +++ b/ecrire/action/editer_auteur.php @@ -90,7 +90,7 @@ function insert_auteur($source='spip') { // Appelle toutes les fonctions de modification d'un auteur -function auteurs_set($id_auteur) { +function auteurs_set($id_auteur, $set = null) { $err = ''; $c = array(); @@ -99,7 +99,7 @@ function auteurs_set($id_auteur) { 'nom_site','url_site', 'imessage','pgp', ) as $champ) - $c[$champ] = _request($champ); + $c[$champ] = _request($champ,$set); include_spip('inc/modifier'); revision_auteur($id_auteur, $c); diff --git a/ecrire/inc/auteur_infos.php b/ecrire/inc/auteur_infos.php index d213b89f7bae010d9be204b351f28da22e5fa4f5..2b268ebb9ec2170a010a9c5f28c460b8fabd3459 100644 --- a/ecrire/inc/auteur_infos.php +++ b/ecrire/inc/auteur_infos.php @@ -185,6 +185,14 @@ function legender_auteur_voir($auteur) { $contenu_auteur .= "<div>"._T('email_2') ." <b><a href='mailto:".htmlspecialchars($auteur['email'])."'>" .$auteur['email']."</a></b></div>"; + // message d'information d'envoi d'email pour modif et de confirmation + // on ne fait ici qu'informer, sans aucune action + if ($email = _request('email_confirm')){ + $contenu_auteur .= "<p><strong>"._T('form_auteur_envoi_mail_confirmation',array('email'=>$email))."</strong></p>"; + } + elseif (_request('email_modif')==='ok'){ + $contenu_auteur .= "<p><strong>"._T('form_auteur_email_modifie')."</strong></p>"; + } if ($auteur['url_site']) { if (!$auteur['nom_site']) diff --git a/ecrire/lang/spip_fr.php b/ecrire/lang/spip_fr.php index 15166d108a9c7bb0d260108fd6bcb2dab063a47c..7b913208a347544f72d0f3b5a0a94420828b33ea 100644 --- a/ecrire/lang/spip_fr.php +++ b/ecrire/lang/spip_fr.php @@ -220,6 +220,18 @@ $GLOBALS[$GLOBALS['idx_lang']] = array( // F 'fichier_introuvable' => 'Fichier @fichier@ introuvable', +'form_auteur_envoi_mail_confirmation' => 'Un courrier électronique de confirmation vient d\'être envoyé à @email@. Vous devrez visiter l\'adresse Web mentionnée dans ce courrier pour valider votre adresse mail.', +'form_auteur_email_modifie' => 'Votre adresse email a été modifiée.', +'form_auteur_confirmation' => 'Confirmez votre adresse email', +'form_auteur_mail_confirmation' => 'Bonjour, + +Vous avez demandé à changer votre adresse email. +Pour confirmer votre nouvelle adresse, il suffit de vous connecter à +l\'adresse ci-dessous (dans le cas contraire, votre demande +sera ignorée) : + + @url@ +', 'form_deja_inscrit' => 'Vous êtes déjà inscrit.', 'form_email_non_valide' => 'Votre adresse email n\'est pas valide.', 'form_forum_access_refuse' => 'Vous n\'avez plus accès à ce site.', diff --git a/prive/formulaires/editer_auteur.html b/prive/formulaires/editer_auteur.html index c4282718e33dda299f5a3e7c662400cc8673a8ef..599ad8265dd5eec45e75df008d89b44d47e7d4c9 100644 --- a/prive/formulaires/editer_auteur.html +++ b/prive/formulaires/editer_auteur.html @@ -22,14 +22,9 @@ Modification de l'email ou message disant que seuls les admins peuvent le modifier ] - #SET{disable,''} - [(#AUTORISER{modifier,auteur,#ENV{id_auteur},#NULL,#ARRAY{email,?}}|non) - #SET{disable,disabled='disabled'} - ] <li class="editer_email[ (#ENV**{erreurs}|table_valeur{email}|oui)erreur]"> <label for="email"><:entree_adresse_email:></label>[ <span class='erreur_message'>(#ENV**{erreurs}|table_valeur{email})</span> - ][(#GET{disable}|oui)<p class='explication'><:info_reserve_admin:></p> ]<input type='text' class='text[ (#GET{disable}|oui)disabled]' name='email' id='email' value="[(#ENV**{email})]" #GET{disable}/> </li> <li class="editer_bio[ (#ENV**{erreurs}|table_valeur{bio}|oui)erreur]"> diff --git a/prive/formulaires/editer_auteur.php b/prive/formulaires/editer_auteur.php index 81b9722220c6e9e842bd536ee6cedd55826aed5c..93411b3751a19311eb3bad4d7c928f9c1d461534 100644 --- a/prive/formulaires/editer_auteur.php +++ b/prive/formulaires/editer_auteur.php @@ -53,6 +53,13 @@ function formulaires_editer_auteur_verifier_dist($id_auteur='new', $retour='', $ $auth_methode = ($auth_methode ? $auth_methode : 'spip'); include_spip('inc/auth'); + if ($email = _request('email')){ + include_spip('inc/filtres'); + if (!email_valide($email)){ + $erreurs['email'] = _T('form_email_non_valide'); + } + } + if ($err = auth_verifier_login($auth_methode, _request('new_login'), $id_auteur)){ $erreurs['new_login'] = $err; $erreurs['message_erreur'] .= $err; @@ -77,9 +84,31 @@ function formulaires_editer_auteur_verifier_dist($id_auteur='new', $retour='', $ function formulaires_editer_auteur_traiter_dist($id_auteur='new', $retour='', $lier_article=0, $config_fonc='auteurs_edit_config', $row=array(), $hidden=''){ if (_request('saisie_webmestre') OR _request('webmestre')) set_request('webmestre',_request('webmestre')?_request('webmestre'):'non'); + $retour = parametre_url($retour, 'email_confirm',''); + + if (!autoriser('modifier','auteur',$id_auteur,null,array('statut'=>'?'))){ + $email_nouveau = _request('email'); + set_request('email'); // vider la saisie car l'auteur n'a pas le droit de modifier cet email + // mais si c'est son propre profil on lui envoie un email à l'adresse qu'il a indique + // pour qu'il confirme qu'il possede bien cette adresse + // son clic sur l'url du message permettre de confirmer le changement + // et de revenir sur son profil + if ($GLOBALS['visiteur_session']['id_auteur']==$id_auteur + AND $email_nouveau!=sql_getfetsel('email', 'spip_auteurs', 'id_auteur='.intval($id_auteur))){ + $envoyer_mail = charger_fonction('envoyer_mail','inc'); + $envoyer_mail( + $email_nouveau, + _T('form_auteur_confirmation'), + _T('form_auteur_mail_confirmation', + array('url'=>generer_action_auteur('confirmer_email', $email_nouveau,parametre_url($retour, 'email_modif','ok')))) + ); + set_request('email_confirm',$email_nouveau); + $retour = parametre_url($retour, 'email_confirm',$email_nouveau); + } + } - return formulaires_editer_objet_traiter('auteur',$id_auteur,0,0,$retour,$config_fonc,$row,$hidden); - //return $message; + $res = formulaires_editer_objet_traiter('auteur',$id_auteur,0,0,$retour,$config_fonc,$row,$hidden); + return $res; } ?>