Valider 96a6705e rédigé par rastapopoulos@spip.org's avatar rastapopoulos@spip.org
Parcourir les fichiers

Un petit plugin qui fait une seule chose (et qui peut-être le fait...

Un petit plugin qui fait une seule chose (et qui peut-être le fait correctement, ça reste à voir) : ajouter le choix du mot de passe dès la phase d'inscription.

On ajoute donc deux champs (un pour la confirmation) que l'on insère juste après le champ d'email.

Le but est aussi de surcharger le moins de chose possible. Ainsi, le changement de mot de passe se fait donc dans l'unique surcharge, celle de la fonction "envoyer_inscription", ce qui permet de tout laisser pareil pour le reste : même squelette qui génère la notification, etc.

Pour l'instant ça marche. Je suis preneur de retour si ça merde ailleurs. :)
parent
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours

.gitattributes

0 → 100644
+8 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
* text=auto !eol
formulaires/inc-inscriptionmotdepasse.html -text
/inscriptionmotdepasse.png -text
/inscriptionmotdepasse_options.php -text
/inscriptionmotdepasse_pipelines.php -text
lang/inscriptionmotdepasse_fr.php -text
lang/paquet-inscriptionmotdepasse_fr.php -text
/paquet.xml -text
+10 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<li class="editer saisie_password obligatoire[ (#ENV*{erreurs/password}|oui)erreur]">
	<label for="inscription_password"><:inscriptionmotdepasse:champ_password_label:> <span class="obligatoire"><:info_obligatoire_02:></span></label>
	[<span class="erreur_message">(#ENV**{erreurs/password})</span>]
	<input type="password" class="text" name="password" id="inscription_password" value="#ENV**{password}" autocapitalize="off" autocorrect="off" />
</li>
<li class="editer saisie_password_confirmation obligatoire[ (#ENV*{erreurs/password_confirmation}|oui)erreur]">
	<label for="inscription_password_confirmation"><:inscriptionmotdepasse:champ_password_confirmation_label:> <span class="obligatoire"><:info_obligatoire_02:></span></label>
	[<span class="erreur_message">(#ENV**{erreurs/password_confirmation})</span>]
	<input type="password" class="text" name="password_confirmation" id="inscription_password_confirmation" value="#ENV**{password_confirmation}" autocapitalize="off" autocorrect="off" />
</li>
+2,22 ko
Chargement de la diff d'image…
+34 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;

// Inhiber la notification par défaut, pour changer le mot de passe nous-mêmes avant de générer le squelette
function envoyer_inscription($desc, $nom, $statut, $options){
	include_spip('action/editer_auteur');
	
	// Récupérer l'email, pour retrouver l'identifiant de l'utilisateur
	$email = $desc['email'];
	
	// Si tout s'est bien passé avant, SPIP a déjà créé l'auteur et lui a déjà donné un login et pass
	if ($user = sql_fetsel('*', 'spip_auteurs', 'email='.sql_quote($email))){
		// On modifie le mot de passe en utilisant les API de SPIP
		auteur_instituer($user['id_auteur'], array('pass' => _request('password')));
	}
	
	// On modifie l'information de mot de passe
	$desc['pass'] = _request('password');
	
	// On continue comme la fonction d'origine
	$contexte = array_merge($desc,$options);
	$contexte['nom'] = $nom;
	$contexte['mode'] = $mode;
	$contexte['url_confirm'] = generer_url_action('confirmer_inscription','',true,true);
	$contexte['url_confirm'] = parametre_url($contexte['url_confirm'],'email',$desc['email']);
	$contexte['url_confirm'] = parametre_url($contexte['url_confirm'],'jeton',$desc['jeton']);

	$message = recuperer_fond('modeles/mail_inscription',$contexte);
	$from = (isset($options['from'])?$options['from']:null);
	$head = null;
	return array("", $message,$from,$head);
}
+65 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<?php

// Sécurité
if (!defined('_ECRIRE_INC_VERSION')) return;

/**
 * Charge les deux champs de mot de passe au démarrage du formulaire d'inscription
 *
 * @param array $flux
 * @return array
 */
function inscriptionmotdepasse_formulaire_charger($flux){
	if ($flux['args']['form'] == 'inscription'){
		$flux['data']['password'] = '';
		$flux['data']['password_confirmation'] = '';
	}
	
	return $flux;
}

/**
 * Ajoute le HTML des deux champs de mot de passe durant l'inscription
 *
 * @param array $flux
 * @return array
 */
function inscriptionmotdepasse_formulaire_fond($flux){
	if ($flux['args']['form'] == 'inscription'){
		$champs_password = recuperer_fond('formulaires/inc-inscriptionmotdepasse', $flux['args']['contexte']);
		
		$flux['data'] = preg_replace(
			'|<li[^>]*saisie_mail_inscription[^>]*>.*?</li>|is',
			"$0$champs_password",
			$flux['data']
		);
	}
	
	return $flux;
}

/**
 * Vérifie les deux champs de mot de passe
 *
 * @param array $flux
 * @return array
 */
function inscriptionmotdepasse_formulaire_verifier($flux){
	if ($flux['args']['form'] == 'inscription'){
		// Si les deux champs de mot de passe sont différents, ce n'est pas bien confirmé
		if (_request('password') != _request('password_confirmation')){
			$flux['data']['password_confirmation'] = _T('inscriptionmotdepasse:erreur_confirmation');
		}
		
		// Mais si l'un des deux champs n'est pas rempli, cette erreur prend le dessus
		if (!_request('password')){
			$flux['data']['password'] = _T('info_obligatoire');
		}
		if (!_request('password_confirmation')){
			$flux['data']['password_confirmation'] = _T('info_obligatoire');
		}
	}
	
	return $flux;
}