Jump to content

[Module] Téléphone obligatoire même pour les anciens clients


Recommended Posts

Voici un module tout bête en réponse à ce post :

Ce module génère un retour avec message d'erreur sur la page de transport, dans le processus de commande, au lieu de passer au paiement.
Un lien direct pour rectifier l'adresse est fourni dans le message d'erreur.

Il est testé 1.3.7 seulement... pas eu le temps de tester ailleurs. Soyez indulgent...et merci de vos retours.

Here you are.

Edit: Mise a jour le 10/11 ... je n'avais pas envoyé la bonne version...!

onephonefororder.zip

Share this post


Link to post
Share on other sites

Bonsoir,

Me revoilà.
Bon j'ai testé le module (Il manque } à la fin ) sur la ver 1.2.5.
J'ai un soucis pour le faire fonctionner correctement et afficher le message d'erreur.
J'ai remplacé pour l'instant:

if(isset($_POST['id_carrier']))
       {
           $address = new Address($cart->id_address_delivery);
           $address->getFields();
           $error = $this->l('Erreur : Nos transporteurs demande qu\'au moins un numéro de téléphone soit présent dans votre adresse');
           $smarty->assign('errors' => $error);
           $cookie->tntError = $this->l('Erreur : Pas de point relais choisi!');
           Tools::redirect('order.php?step=2');
       }



par

if(isset($_POST['id_carrier']))
       {
       $address = new Address($cart->id_address_delivery);
           $address->getFields();
           if (($address->phone)=='0') Tools::redirect('address.php?id_address='.intval($address->id).'');

       }



J'ai remplacé tous les téléphones non présents par 0 car si c'est vide cela me met -> tentative de piratage
et je redirige vers l'adresse en cas de téléphone =0.
Mon dernier soucis et l'affichage du message d'erreur.

Sinon merci pour le module, cela m'a bien aidé.

Eric

Share this post


Link to post
Share on other sites

Merci de ton retour seabird , car le code que tu m'as collé m'a fait réaliser que je n'avais pas envoyé la bonne version !

J'en ai donc profité pour rectifier le bon fichier dans le 1er post

le hookTop que tu peux donc adapter à tes besoins se présente ainsi :

    function hookTop($params)
   {
       global $cart, $smarty;
       if(isset($_POST['id_carrier']))
       {
           $address = new Address($cart->id_address_delivery);

           $address->getFields();

           if(!$this->isPhoneNumber($address->phone) && !$this->isPhoneNumber($address->phone_mobile)) 
               Tools::redirect('order.php?step=2&phonestep;');
       }
       if(Tools::getIsset('phonestep')) 
       {
           $this->_errors[] = $this->l('Nos transporteurs demande qu\'au moins un numéro de téléphone soit présent dans votre adresse.').
           '
'.$this->l('Vous pouvez corriger ceci en cliquant ').'id_address_delivery.'">'.$this->l('sur ce lien').'';
           $smarty->assign('errors' , $this->_errors);
       }
       return;
   }



Comme tu le vois il comprends la gestion d'erreur tel que décrite dans le post, ainsi qu'une fonction avancée de test de numéro de téléphone, car un phone vide est retourné valide par Tools::isPhoneNumber() .

Je ne sais pas du tout comment je me suis débrouillé pour envoyer une version 'prébrouillon'... je comprends que tu galères.
Pour ma décharge il était très très tard ... Le zip initial est celui que j'ai créé à la va vite au tout début pour envoyer sur mon dédié et commencer à tester et developper le truc in situ ...

Pour ta manip de mettre à 0 tous les champs , c'est une mauvaise solution . Si tu as une tentative de piratage , c'est peut être que tu as modifié des éléments dans le processus d'enregistrement, voire dans la classe Address , non ?

Share this post


Link to post
Share on other sites

Une petite info pour ceux qui se le demandent : Il n'est que partiellement compatible avec la 1.4 .
La redirection se fait bien mais pas le message d'erreur. Je règlerais ça dès que j'ia un moment.

Toujours pour info : pour modifier le texte d'erreur ou le traduire en plusieurs langes , utilisez les traductions module dans le BO

Share this post


Link to post
Share on other sites

C'est bon cela marche nickel, merci.



Pour ta manip de mettre à 0 tous les champs , c'est une mauvaise solution . Si tu as une tentative de piratage , c'est peut être que tu as modifié des éléments dans le processus d'enregistrement, voire dans la classe Address , non ?


C'est vrai que j'ai modifié la class address pour rendre le numéro obligatoire.
J'ai mis dedans:
protected    $fieldsRequired = array('id_country', 'alias', 'lastname', 'firstname', 'address1', 'postcode', 'city','phone');



et dans mon thème -> Authentication.tpl j'ai mis

{l s='Home phone'}
               <input type="text" class="text" name="phone" id="phone" value="{if isset($smarty.post.phone)}{$smarty.post.phone}{/if}" />
*(obligatoire pour la livraison)



Visiblement ce n'est pas la bonne méthode.

En tout cas encore merci. Cela m'enlève une bonne épine du pied

Eric

Share this post


Link to post
Share on other sites

En effet la methode est plutot moyenne...
Le fait d'ajouter un champ à $fieldsRequired fait que ce champ ne peut plus avoir la valeur null, .

Ce que je fais moi est beaucoup plus simple et ne crée pas d'effets de bord de ce type .
Je modifie juste authentication.php , comme suit :

if (Tools::isSubmit('submitAccount'))
{
   $create_account = 1;
   $smarty->assign('email_create', 1);
   $validateDni = Validate::isDni(Tools::getValue('dni'));

   if (!Validate::isEmail($email = Tools::getValue('email')))
       $errors[] = Tools::displayError('e-mail not valid');
   if (!Validate::isPasswd(Tools::getValue('passwd')))
       $errors[] = Tools::displayError('invalid password');
   if (Customer::customerExists($email))
       $errors[] = Tools::displayError('someone has already registered with this e-mail address');
   elseif (!Tools::getValue('phone') AND !Tools::getValue('phone_mobile'))
       $errors[] = Tools::displayError('Merci d\'entrer au  moins un numéro de téléphone (Utile en cas de probleme avec votre commande ou par le transporteur au moment de la livraison).');
// ici suffit à générer l'erreur sans poser problème type 'tentative de piratage' 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More