forcer la premiere lettre de l'utilisateur en majuscule
Auteur Sujet

Post 
Le but est de forcer les utilisateurs qui s'inscrivent à mettre une majuscule sur leur pseudo,

  • la premiére solution serait de faire un ucfirst directement dans le code php mais on va devoir appliquer la modification à chaque maj de postnuke. (développeur)

  • La deuxième solution est de le faire en javascript (couplé avec un onkeydown ,ou un Event.observe(document,'keydown',mafonction); pour prototype) (graphiste)

  • la troisième une tache cron qui tourne réguliérement et lance la requête sql suivante (admin systéme)
    1. UPDATE `pn_postnuke`.`pn_users` SET `pn_uname` = CONCAT(UPPER(SUBSTRING(pn_uname, 1, 1)), LOWER(SUBSTRING(pn_uname FROM 2)))  




modifié par : mumuri, 22 Avr 2008 - 14:08
Données personnelles Accueil

Post 
Le soucis est qu'il me semble qu'il faut ensuite que l'user s'authentifie avec la majuscule... et donc pour que celà fonctionne rajouter un bout de code/ javascript modification sql afin de permettre à l'utilisateur qui mettra toto de s'authentifier en Toto.

++


Gilles  ><>°
Données personnelles Accueil

Post 
A mon avis la solution la plus intéressante serait de le faire en ajax vu qu'il y a déjà une vérification ajax sur l'identifiant lors de l'inscription, mais comme tu dis le désavantage est qu'il faut maintenir cette modification en place lorsque l'on fait une maj.

-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil

Post 
En fait, je ne trouve pas tant que le problème soit sur le login que sur le "realname". D'autant que le risque qui va ensuite se poser est que lorsque l'on voudra utiliser OpenID (un système d'identification unique).

La façon dont le visiteur s'identifie, on s'en fout, ce qui peut nous gêner c'est la façon dont son nom apparait sur le site que se soit lorsque l'on liste les membres en ligne ou lorsqu'on indique l'auteur d'une news, d'un post...

Personnellement je préférerais par exemple que l'on puisse avoir (sur certains sites) à la place du "uname" (username), le "realname".

Je suppose qu'il faut alors reprendre les templates et remplacer "uname"... par quelque chose mais j'ai pas trouvé quoi... et google n'est pas mon ami ni la patience sur ce détail.

Ensuite la solution serait d'avoir une fonction pnRender "Initiale en Maj" que l'on pourrait inclure dans les templates et qui permettrait sur n'importe quelle chaîne de forcer la première majuscule (au risque de casser l'effet de certains 933ks)
(Au passage en terme de sécurité, si tu forces la première lettre en majuscule, tu diminues 26 possibilités la probabilité de la première lettres...)
Données personnelles Accueil

Post 
non Gille, j'ai testé sur la 0.8, que tu te loggues en "pseudo" ou "Pseudo" çà passe, d'ou l'intêret de la manip

Données personnelles Accueil

Post 
Citation :
(Au passage en terme de sécurité, si tu forces la première lettre en majuscule, tu diminues 26 possibilités la probabilité de la première lettres...)

j'ai failli poster un truc dans ce genre tout à l'heure mais comme le nom d'user est visible de partout de toute façon, l'user est dispo !

++


Gilles  ><>°
Données personnelles Accueil

Post 
mumuri a écrit :
non Gille, j'ai testé sur la 0.8, que tu te loggues en "pseudo" ou "Pseudo" çà passe, d'ou l'intêret de la manip



Euh les identifiants ne seraient donc plus sensible à la casse ?! icon_rolleyes

Si c'est le cas la solution à ton problème est "toute simple" juste avant l'enregistrement sql mettre la première lettre en majuscule puisque même si l'utilisateur se connecte avec un identifiant tout en minuscule ça fonctionnera.

-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil

Post 
YokaV a écrit :

Euh les identifiants ne seraient donc plus sensible à la casse ?! icon_rolleyes


testé sur une vielle RC2 en admin avec Admin dans la base, et Admin avec admin dans la base

je reteste avec la dernière version du SVN ce soir ...

YokaV a écrit :

Si c'est le cas la solution à ton problème est "toute simple" juste avant l'enregistrement sql mettre la première lettre en majuscule puisque même si l'utilisateur se connecte avec un identifiant tout en minuscule ça fonctionnera.

j'évite de toucher au code du core et je m'y connais pas assez en trigger pour faire çà
Données personnelles Accueil

Post 
mumuri a écrit :
j'évite de toucher au code du core et je m'y connais pas assez en trigger pour faire çà


Boh c'est pas vraiment dans le core.../system/Users/pnuser.php -> fonction users_user_finishnewuser().

Au tout début de la fonction il y a :
  1. $uname          = strtolower(FormUtil::getPassedValue ('uname', null, 'POST')); 


J'ai pas trop regardé la suite mais si ils font un strtolower dés le début il y a peu de chance qu'ils touchent encore à la chaine après, à part pour supprimer les caractères spéciaux, donc après le strtolower tu appelles ta fonction php qui met la première lettre en majuscule et c'est bon. icon_smile

-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil

Post 
te méprend, je sais bien que c'est pas compliqué, mais pour avoir pas mal bidouilé le code ma 0.7, je préfere éviter de toucher à quoi que ce soit, je comprends bien que la méthode que tu proposes est la meilleur pour faire çà, (si tu regarde le feature request sur la noc, tu verras qu'une demande a été posté il y a quelques heures :))
Données personnelles Accueil

Post 
Juste une proposition, pourquoi ne pas prendre le problème a l'envers et utiliser la fonction "capitalize" de smarty dans les template pour afficher la première lettre du login en majuscule?

http://www.smarty.net/manual/fr/lan...fier.capitalize
Données personnelles Accueil

Post 
domo a écrit :
Juste une proposition, pourquoi ne pas prendre le problème a l'envers et utiliser la fonction "capitalize" de smarty dans les template pour afficher la première lettre du login en majuscule?

http://www.smarty.net/manual/fr/lan...fier.capitalize


Je suis du même avis... cela relève plus d'une intention esthétique de la part de l'admin que de l'utilisateur et donc relève de l'affichage en general (templates), non d'une fonction ayant pour but de forcer le choix d'un utilisateur qui voudrait que son pseudo commence par une minuscule. (Pas que je désapprouve l'idée nécessairement toutefois).

Fais un bout de temps que je n'ai pas regardé mais si admin et Admin donne le même résultat sur l'identification, c'est que la requête utilise UPPER pour la comparaison si je me souviens bien.

En passant mumu, si tu veux ton premier "m" en majuscule, je peux t'arranger ça icon_lol


Chestnut !
Administrateur
Aucun Support par message privé...
Même en cas de pensée suicidaire !
Règles à suivre
Données personnelles Accueil

Post 
pour vous répondre, ...

parce qu'il faut se taper les modifs dans tous les templates de tous les modules ^^, et que quand on passe pnforum 2.6 à 2.7 on le sent passer

et pour faire plus joli, dans la mesure ou on nous autorise à faire de la validation sur les champs optionnelles à l'inscription (voir module Profil), je vois pas pourquoi on pourrait pas le faire aussi sur les champs obligatoires via un truc dans le genre [A-Z][A-Za-z0-9]

pour le pseudo, çà ira merci ^^,



modifié par : mumuri, 22 Avr 2008 - 18:10
Données personnelles Accueil

Post 
mumuri a écrit :
pour vous répondre, ...

parce qu'il faut se taper les modifs dans tous les templates de tous les modules ^^, et que quand on passe pnforum 2.6 à 2.7 on le sent passer

pour le pseudo, çà ira merci ^^,


Dans ce cas, vaudrait peut-être y aller moins drastique en changeant pnUserGetVar pour mettre en majuscule la première lettre du pseudo. Sinon, on force un choix de l'admin, non de l'utilisateur. Se faisant, on ne change pas la méthode d'identification puisqu'elle vient avant (au cas où la comparaison devenait... "case-sensitive") mais on obtient le résultat voulu sans toucher au templates ni à l'information inscrite dans la base de données.



Chestnut !
Administrateur
Aucun Support par message privé...
Même en cas de pensée suicidaire !
Règles à suivre
Données personnelles Accueil

Post 
juste une question rapport à çà si on redéfini un smarty pnUserGetVar dans le theme , est ce qu'il override le pnUserGetVar classique ?
EDIT: à priori non

je confirme que çà marche sur la dernière version du svn


pour la partie validation des "optionnal items" (nom réels etc ...)
http://noc.postnuke.com/tracker/ind...p_id=5&atid=103



modifié par : mumuri, 22 Avr 2008 - 22:39
Données personnelles Accueil

Post 
mumuri a écrit :
pour la partie validation des "optionnal items" (nom réels etc ...)
http://noc.postnuke.com/tracker/ind...p_id=5&atid=103


Génial ça, voici enfin un moyen de rendre ce champ "Validation" utile! C'est un peu comme le champ qui est juste au-dessus "Note" je me demande à quoi il peu bien servir! Je vais tester ça de suite... icon_biggrin

-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil

Post 
mumuri a écrit :
pour la partie validation des "optionnal items" (nom réels etc ...)
http://noc.postnuke.com/tracker/ind...p_id=5&atid=103


Ça fonctionne bien avec les éléments qui sont requis, mais pour les optionnels ça ne fonctionne pas.

-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil

Post 
voir

http://noc.postnuke.com/tracker/dow...1/pnuserapi.php
merci

modifié par : mumuri, 23 Avr 2008 - 19:04
Données personnelles Accueil

Post 
Ce dernier code ne va pas, tu oublies le _PASSWORD.

J'ai l'une ou l'autre remarque, pourquoi mettre une expression régulière /(.*)/ pour un champs qui n'en a pas, si pas d'expression régulière pas de test.

  1. $validationRule[0]!='/' && $validationRule[0]!='#' 
sera toujours faut, d'ailleurs pourquoi tester la présence de # ? une expression régulière doit commencer par /^ et non par #...

Enfin je te propose une autre façon de voir les choses et que je préfère mais malheureusement je n'arrive toujours pas à faire fonctionner la validation sur les champs optionnels.

  1. function Profile_userapi_checkrequired($args) 
  2.     // Argument check 
  3.     if (!isset($args['dynadata'])) { 
  4.         return LogUtil::registerError (_MODARGSERROR); 
  5.     } 
  6.  
  7.     // The API function is called. 
  8.     $items = pnModAPIFunc('Profile', 'user', 'getallactive', 
  9.                           array()); 
  10.  
  11.     // Initializing Error check 
  12.     $error = false; 
  13.     pnModLangLoad('Profile', 'user'); 
  14.  
  15.     foreach($items as $item) { 
  16.       
  17.         // add Validation Rule loading 
  18.         $validationRule = $item['prop_validation']; 
  19.       $validationRuleTest = true; 
  20.        
  21.         if (!isset($validationRule) || is_null($validationRule) || trim($validationRule)==""){ 
  22.                  $validationRuleTest = false;  
  23.           } 
  24.        
  25.         if ($validationRule[0]!='/' || $validationRule[0]!='#'){ 
  26.                $validationRule = "/^".$validationRule."$/";  
  27.            } 
  28.              
  29.         if ($item['prop_label'] != '_PASSWORD') { 
  30.             if (is_array($args['dynadata'][$item['prop_label']])) { 
  31.                 while(list(,$value) = each($args['dynadata'][$item['prop_label']])) { 
  32.                     if ((_ProfileIsEmptyValue($value)) && ($item['prop_required'] == 1)) { 
  33.                         $error['result'] = true; 
  34.                         $error['fields'][] = $item['prop_label']; 
  35.                         $error['translatedFields'][] = constant($item['prop_label']); 
  36.                     } 
  37.                      
  38.                     // add validation check 
  39.                     if ($validationRuleTest && !preg_match($validationRule, $value)) { 
  40.                                     $error['result'] = true; 
  41.                               $error['fields'][] = $item['prop_label']; 
  42.                               $error['translatedFields'][] = constant($item['prop_label']); 
  43.                               }  
  44.                 } 
  45.             } else { 
  46.                 if ((_ProfileIsEmptyValue($args['dynadata'][$item['prop_label']])) && ($item['prop_required'] == 1)) { 
  47.                     $error['result'] = true; 
  48.                     $error['fields'][] = $item['prop_label']; 
  49.                     $error['translatedFields'][] = constant($item['prop_label']); 
  50.                 } 
  51.                  
  52.                 // add validation check 
  53.                 if ($validationRuleTest && !preg_match($validationRule, $args['dynadata'][$item['prop_label']])) { 
  54.                       $error['result'] = true; 
  55.                          $error['fields'][] = $item['prop_label']; 
  56.                          $error['translatedFields'][] = constant($item['prop_label']); 
  57.                         } 
  58.             } 
  59.         } 
  60.     } 
  61.      
  62.     if (!empty($error)) 
  63.       $error['translatedFieldsStr'] = join(', ', $error['translatedFields']); 
  64.  
  65.     // Return the result 
  66.     return $error; 


-------------------------------------------
...n'oubliez pas que l'outil Recherche est votre ami !
...bien souvent il répond à nos questions avant même que l'on ne se les pose ! ^^
Données personnelles Accueil
Post 
pourquoi ne pourrait t'on pas faire de validation sur un pass , ca pourrait permettre de forcer les gens à utiliser plusieurs type de caractéres ?

pour /(.*)/ , c'est une expression complètement permissive, donc pas de souci (pour moi c'est du détail, car le test n'est effectué qu'une fois à l'inscription)

pour le second check, pregmatch permet des expressions commenant par des # (voir commentaire)
http://fr3.php.net/preg_match

autrement dit le
  1.         if ($validationRule[0]!='/' && $validationRule[0]!='#'){  


est ok :)

le champs note pourrai servir à afficher un message d'erreur en cas de problème de validation !

modifié par : mumuri, 24 Avr 2008 - 13:50
Données personnelles Accueil