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

Pfiou après plusieurs revirements, enfin une nouvelle option (au départ je...

Pfiou après plusieurs revirements, enfin une nouvelle option (au départ je pensais qu'il en fallait deux) : on peut désormais interdire complètement d'avoir plusieurs comptes avec le même email, quand on utilise Profils. Par défaut SPIP fait déjà une erreur dans le form d'inscription quand l'email existe déjà. Mais en revanche rien n'interdit de modifier après-coup son email pour un qui existe dans un autre compte ! Avec cette option ça fait une erreur aussi quand on utilise #FORMULAIRE_PROFIL. Par ailleurs, dans le cas où on traite une nouvelle fiche profil SANS id_auteur, si l'email était trouvé dans un compte, ça mettait à jour les infos liées au compte existant MAIS seulement si le profil principal était le même que celui édité (ce qui permet par défaut d'avoir effectivement plusieurs fois le même email dans deux comptes différents SI c'est pour des profils différents). Avec cette option, on met à jour/écrase les infos liées au compte ayant le même email, même si profil différent (donc réfléchissez suivant votre utilisation).
parent a39f1b8f
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+10 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -14,6 +14,16 @@ function formulaires_configurer_profils_saisies_dist() {
				'defaut' => lire_config('profils/id_profil_defaut'),
			),
		),
		array(
			'saisie' => 'case',
			'options' => array(
				'nom' => 'email_unique',
				'label_case' => _T('profils:configurer_email_unique_label_case'),
				'explication' => _T('profils:configurer_email_unique_explication'),
				'conteneur_class' => 'pleine_largeur',
				'defaut' => lire_config('profils/email_unique'),
			),
		),
	);
	
	return $saisies;
+35 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -161,7 +161,34 @@ function formulaires_profil_charger_dist($id_auteur = 'new', $id_ou_identifiant_
 *     Tableau des erreurs
 */
function formulaires_profil_verifier_dist($id_auteur = 'new', $id_ou_identifiant_profil = '', $retour = '', $options=array()) {
	include_spip('inc/config');
	$erreurs = array();
	$id_auteur = intval($id_auteur);
	
	// Si on a interdit d'avoir plusieurs fois les mêmes emails ET qu'on édite un compte existant
	if (lire_config('profils/email_unique') and $id_auteur > 0) {
		// Récupérer les objets liés au profil utilisateur
		extract(profils_chercher_ids_profil($id_auteur, $id_ou_identifiant_profil));
		
		// On cherche le bon profil
		$id_ou_identifiant_profil = profils_selectionner_profil($id_ou_identifiant_profil, $id_auteur);
		if ($profil = profils_recuperer_profil($id_ou_identifiant_profil) and $config = $profil['config']) {
			// Email principal
			if ($champ_email_principal = profils_chercher_champ_email_principal($config) and is_array($champ_email_principal)) {
				$champ = array_shift($champ_email_principal);
				$email_principal = _request($champ);
				foreach ($champ_email_principal as $cle) {
					$email_principal = $email_principal[$cle];
					$champ .= "[$cle]";
				}
			}
			
			// Si l'email existe déjà dans un autre compte, on s'arrête
			if ($sql = sql_getfetsel('id_auteur', 'spip_auteurs', array('id_auteur != '.$id_auteur, 'email = '.sql_quote($email_principal)))) {
				$erreurs[$champ] = _T('profils:erreur_email_unique');
			}
		}
	}
	
	return $erreurs;
}
@@ -190,6 +217,7 @@ function formulaires_profil_traiter_dist($id_auteur = 'new', $id_ou_identifiant_
	if ($retour) {
		refuser_traiter_formulaire_ajax();
	}
	include_spip('inc/config');
	$retours = array();
	$champs_auteur = _request('auteur');
	$champs_organisation = _request('organisation');
@@ -252,15 +280,17 @@ function formulaires_profil_traiter_dist($id_auteur = 'new', $id_ou_identifiant_
			}
			// Sinon c'est qu'une personne crée un profil pour une autre, donc édition classique
			else {
				// MAIS AVANT on cherche si cette personne existe déjà, identifiée par son email ou son nom et avec le même profil
				// MAIS AVANT on cherche si cette personne existe déjà, identifiée par son email ou son nom en fallback
				// par défaut on accepte qu'il y ait des comptes avec le même email si c'est un profil différent
				// si l'option email_unique est cochée, alors même si c'est un profil différent, on va mettre à jour/écraser les informations liées à ce compte
				if (
					(
						$email_principal
						and $auteur = sql_fetsel(
							'id_auteur',
							'spip_auteurs',
							// même email et même profil
							array('email='.sql_quote($email_principal), 'id_profil='.$profil['id_profil'])
							// même email et possiblement même profil
							array('email='.sql_quote($email_principal), lire_config('profils/email_unique') ? '1=1' : 'id_profil='.$profil['id_profil'])
						)
					)
					or (
@@ -269,8 +299,8 @@ function formulaires_profil_traiter_dist($id_auteur = 'new', $id_ou_identifiant_
						and $auteur = sql_fetsel(
							'id_auteur',
							'spip_auteurs',
							// même nom exactement et même profil et email VIDE
							array('nom='.sql_quote($nom_principal), 'email=""', 'id_profil='.$profil['id_profil'])
							// même nom exactement et possiblement même profil et email VIDE
							array('nom='.sql_quote($nom_principal), 'email=""', lire_config('profils/email_unique') ? '1=1' : 'id_profil='.$profil['id_profil'])
						)
					)
				) {
+3 −0
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -8,11 +8,14 @@ if (!defined('_ECRIRE_INC_VERSION')) {
$GLOBALS[$GLOBALS['idx_lang']] = array(

	// C
	'configurer_email_unique_explication' => 'SPIP bloque déjà l’inscription d’une personne lorsque l’email est utilisé dans autre un compte. Cette option permet en plus d’interdire le changement après-coup de son email pour un déjà utilisé ailleurs, lorsqu’on met à jour son profil.',
	'configurer_email_unique_label_case' => 'Interdire l’utilisation du même email dans plusieurs comptes',
	'configurer_id_profil_defaut_label' => 'Profil par défaut',
	'configurer_titre' => 'Configuration des Profils',

	// E
	'erreur_autoriser_profil' => 'Ce compte n’existe pas ou vous n’avez pas le droit de le modifier',
	'erreur_email_unique' => 'Cette adresse est déjà utilisée dans un compte existant. Veuillez en saisir une autre.',

	// P
	'profils_titre' => 'Profils'
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
<paquet
	prefix="profils"
	categorie="auteur"
	version="1.7.2"
	version="1.8.0"
	schema="1.0.2"
	etat="stable"
	compatibilite="[3.2.0;3.2.*]"