Changeset 122458 in spip-zone


Ignore:
Timestamp:
Feb 13, 2020, 2:25:39 PM (12 days ago)
Author:
rastapopoulos@…
Message:

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).

Location:
_plugins_/profils/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/profils/trunk/formulaires/configurer_profils.php

    r118760 r122458  
    1515                        ),
    1616                ),
     17                array(
     18                        'saisie' => 'case',
     19                        'options' => array(
     20                                'nom' => 'email_unique',
     21                                'label_case' => _T('profils:configurer_email_unique_label_case'),
     22                                'explication' => _T('profils:configurer_email_unique_explication'),
     23                                'conteneur_class' => 'pleine_largeur',
     24                                'defaut' => lire_config('profils/email_unique'),
     25                        ),
     26                ),
    1727        );
    1828       
  • _plugins_/profils/trunk/formulaires/profil.php

    r117953 r122458  
    162162 */
    163163function formulaires_profil_verifier_dist($id_auteur = 'new', $id_ou_identifiant_profil = '', $retour = '', $options=array()) {
     164        include_spip('inc/config');
    164165        $erreurs = array();
     166        $id_auteur = intval($id_auteur);
     167       
     168        // Si on a interdit d'avoir plusieurs fois les mêmes emails ET qu'on édite un compte existant
     169        if (lire_config('profils/email_unique') and $id_auteur > 0) {
     170                // Récupérer les objets liés au profil utilisateur
     171                extract(profils_chercher_ids_profil($id_auteur, $id_ou_identifiant_profil));
     172               
     173                // On cherche le bon profil
     174                $id_ou_identifiant_profil = profils_selectionner_profil($id_ou_identifiant_profil, $id_auteur);
     175                if ($profil = profils_recuperer_profil($id_ou_identifiant_profil) and $config = $profil['config']) {
     176                        // Email principal
     177                        if ($champ_email_principal = profils_chercher_champ_email_principal($config) and is_array($champ_email_principal)) {
     178                                $champ = array_shift($champ_email_principal);
     179                                $email_principal = _request($champ);
     180                                foreach ($champ_email_principal as $cle) {
     181                                        $email_principal = $email_principal[$cle];
     182                                        $champ .= "[$cle]";
     183                                }
     184                        }
     185                       
     186                        // Si l'email existe déjà dans un autre compte, on s'arrête
     187                        if ($sql = sql_getfetsel('id_auteur', 'spip_auteurs', array('id_auteur != '.$id_auteur, 'email = '.sql_quote($email_principal)))) {
     188                                $erreurs[$champ] = _T('profils:erreur_email_unique');
     189                        }
     190                }
     191        }
    165192       
    166193        return $erreurs;
     
    191218                refuser_traiter_formulaire_ajax();
    192219        }
     220        include_spip('inc/config');
    193221        $retours = array();
    194222        $champs_auteur = _request('auteur');
     
    253281                        // Sinon c'est qu'une personne crée un profil pour une autre, donc édition classique
    254282                        else {
    255                                 // MAIS AVANT on cherche si cette personne existe déjà, identifiée par son email ou son nom et avec le même profil
     283                                // MAIS AVANT on cherche si cette personne existe déjà, identifiée par son email ou son nom en fallback
     284                                // par défaut on accepte qu'il y ait des comptes avec le même email si c'est un profil différent
     285                                // 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
    256286                                if (
    257287                                        (
     
    260290                                                        'id_auteur',
    261291                                                        'spip_auteurs',
    262                                                         // même email et même profil
    263                                                         array('email='.sql_quote($email_principal), 'id_profil='.$profil['id_profil'])
     292                                                        // même email et possiblement même profil
     293                                                        array('email='.sql_quote($email_principal), lire_config('profils/email_unique') ? '1=1' : 'id_profil='.$profil['id_profil'])
    264294                                                )
    265295                                        )
     
    270300                                                        'id_auteur',
    271301                                                        'spip_auteurs',
    272                                                         // même nom exactement et même profil et email VIDE
    273                                                         array('nom='.sql_quote($nom_principal), 'email=""', 'id_profil='.$profil['id_profil'])
     302                                                        // même nom exactement et possiblement même profil et email VIDE
     303                                                        array('nom='.sql_quote($nom_principal), 'email=""', lire_config('profils/email_unique') ? '1=1' : 'id_profil='.$profil['id_profil'])
    274304                                                )
    275305                                        )
  • _plugins_/profils/trunk/lang/profils_fr.php

    r121952 r122458  
    99
    1010        // C
     11        '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.',
     12        'configurer_email_unique_label_case' => 'Interdire l’utilisation du même email dans plusieurs comptes',
    1113        'configurer_id_profil_defaut_label' => 'Profil par défaut',
    1214        'configurer_titre' => 'Configuration des Profils',
     
    1416        // E
    1517        'erreur_autoriser_profil' => 'Ce compte n’existe pas ou vous n’avez pas le droit de le modifier',
     18        'erreur_email_unique' => 'Cette adresse est déjà utilisée dans un compte existant. Veuillez en saisir une autre.',
    1619
    1720        // P
  • _plugins_/profils/trunk/paquet.xml

    r119477 r122458  
    22        prefix="profils"
    33        categorie="auteur"
    4         version="1.7.2"
     4        version="1.8.0"
    55        schema="1.0.2"
    66        etat="stable"
Note: See TracChangeset for help on using the changeset viewer.