Jump to content

Import clients oscommerce : récupération du mot de passe


rasdri

Recommended Posts

Bonjour,
aprés avoir lu avec attention ces 2 posts :
http://www.prestashop.com/forums/viewthread/10016/installatie___configuratie/migratie_vanaf_oscommerce
http://www.prestashop.com/forums/viewthread/4872/general_discussion/solvedresolu_import_customer_and_encrypt_password
je ne troouve pas de solutions à mon problème:
je cherche à importer mes clients de mon ancien oscommerce vers prestashop. Le problème que certains ont déjà du rencontrer est que les mots de passe dans oscommerce sont crypté différemment que sur prestashop. Est ce que quelqu'un aurait déjà réussi à récupérer les mots de passe oscommerce pour quils soient valides prestashop.
J ai bien saisi que sur presta, les mots de passe sont crypté de cette facon :
md5(_COOKIE_KEY_.mot_de_passe_du_client)
le pb serait de décrypter les mot de passe de oscommerce pour les obtenir et les réencrypter à la sauce prestashop mais je vois mal comment réussir à décrypter du md5.
Quelqu'un a t il déjà fait cela ?? si oui merci de poster votre solution

Link to comment
Share on other sites

Tu ne peux pas décrypter.
L'astuce consiste donc à rajouter un bout de code dans le login qui crypte les mots de passe entrés par les utilisateurs comme OSC. Si la comparaison est bonne, hop tu le ré-enregistres comme PrestaShop.
C'est donc l'utilisateur qui rempli automatiquement son mot de passe à la prochaine identification.

Link to comment
Share on other sites

merci pour la réponse rapide
je suis pas sur d avoir tout compris...peux tu me détailler un tout petit peu stp :

>>L’astuce consiste donc à rajouter un bout de code dans le login qui crypte les mots de passe entrés par les utilisateurs comme OSC
C'est sur quelle page qu'il faut que je fasse ca stp je vois pas bien là...? moi je cherche à importer les clients via l'import de presta qui marche trés bien; que doiis je renseigner pour le mot de passe lors de l'import car c est un champ obligatoire?

>>Si la comparaison est bonne, hop tu le ré-enregistres comme PrestaShop.
tu veux dire qu'il faut que je vérifie sur mon ancienne table de clients??

si tu peux me détailler un tout petit peu ca serait trés sympa, je te demande pas de m'écrire le code mais juste les étapes avec les peges correspondantes si possible...
merci d'avance

Link to comment
Share on other sites

Ok alors je me répond pour ceux que ca interresse...merci pour le tuyau Damien j ai fini par comprendre, dis moi si je me trompe ou s'il y a plus simple...
dans la classe customer.php j ai donc rajouté une vérification.
j ai importé ma table customer de oscommerce dans la base prestashop
si le pwd est pas bon pour la table customer de presta, je regarde s'il existe un client avec cet email sur customer de osc, si oui, je recupère son pwd, je regarde si le pwd renseigné correspond avec le pwd oscommerce en utilisant la fonction tep_validate_password de osc.
si c est bon je prend le pwd renseigné par le client et je l'encode à la manière prestashop, et j insère le client avec les données que j avais sur la table customer de osc.
La prochaine étape : récupérer ses commandes !!!

à+

Link to comment
Share on other sites

Bonsoir
Cela me parait bien compliqué il n'y a pas plus simple ??

Pour ma part j'avais penser d'envoyer un mail aux clients en leur signalant que n'ayant pas accès à leurs mots passe, il clique sur le lien "j'ai oublié mon mot de passe" , bien entendu j'aurais mis leurs mails en login , mais je l'avoue c'est pas très professionnel :-S

D'où je suis prneur pour une explication un peu plus détaillée :-)
Merci

Link to comment
Share on other sites

ce n'est pas si compliqué que ça de décrypter du md5. T'as combien de client dans ta base ? Je me souviens que j'avais un site sous OsCommerce, à chaque fois j'oubliais mon mot de passe, du coup j'avais l'habitude de récupérer mon mot de passe en md5 sans souci. Donne moi un md5 que je test d'abord (avec un mot de passe test) pour être sur de ne pas raconter de bétises.

Pour les commandes, ça serait très complexe... Moi je ne m'y aventurerai pas. D'ailleurs si ta boutique fonctionne bien sous OsCommerce, pourquoi tu veux changer ? Prestashop c'est cool pour les nouveaux sites et il y'a le panier en ajax mais sinon ça fait la même chose que OsCommerce en moins bien (j'insiste, si ta boutique est déjà en production, car pour la création de boutique, j'ai mis un mois avant de prendre en main OsCommerce contre 1 semaine pour Prestashop). C'est un avis.

N'oublie pas de me donner le nombre de client que t'as dans ta base, si y'a trop, ce sera très très long !

Link to comment
Share on other sites

Bonjour
@ whitespirit moi aussi je suis en creloaded , je vais changer à la sortie de prestashop 1.2.
Je trouve que Osc et la creloaded n'avance plus , la ms3 sortira-t-elle un jour et la creloaded 6.3 c'est pas génial.

L'avantage de prestashop c'est la langue française et les système de module , sans compter que les forums sont plus dynamiques , je veux dire par là qu'on obtient beaucoup plus vite un renseignement valable.

Link to comment
Share on other sites

@ Marc :
c'est sur que si y a plus simple, je suis preneur...j'ai pas trouvé mieux pour l'instant...si Damien veut nous proposer gentillement dans le détail une autre de ses nombreuses manières de faire ca serait sympa pour la communauté...;-)
et puis comme tu le dis , je trouve pas ça pro de dire aux client qu'ils doivent générer un autre mdp; je pense que ça doit être transparent pour eux le changement de plateforme.

@ whitespirit
alors déjà j ai 1200 clients
tiens par exemple décodes moi ce pwd : a5ccbafbe9ce2ee34fecd729b17ec50a et dis moi combien de temps tu met...parce qu'avec mes 1200 clients si le script met 1 mois pour décoder tous les pwd ça m'intéresse moyen..lol
Pour le changement, comme le dit Marc oscommerce n'avance plus , y a plein de ptits modules et fonctionnalités de prestashop qui sont bien sympa et c'est aussi pour me faire la main sur presta , apprendre comment ca fonctionne et pouvoir l'utiliser rapidement pour d'autres sites futurs
Pour les commandes j'ai lu sur quelques posts que certains y sont parvenus, ca doit etre faisable...je vous dirais si j'y arrive

Link to comment
Share on other sites

Donne moi un md5 que je test d'abord (avec un mot de passe test) pour être sur de ne pas raconter de bétises.


J'ai testé, ça n'a pas marché ! Etant donné que j'ai eu le même problème que toi, et que j'utilisais aussi la Creloaded 6.2, normalement ça devrait passer (et crois moi mes mots de passes n'étaient pas du genre "citron" ou "spiritwhite" (tiens, c'est pas bête comme mot de passe spiritewhite ceci dit) et j'ai pu décrypter. Est-ce que les mots de passes sont codés en dur dans la base de données en md5 ou est-ce qu'il sont d'abord codé avec une clé (comme prestashop) ? Au cas ou donne moi en d'autre si t'es sûr que t'as pas de clé intermediaire.

Petite parenthèse: comme je disais, j'étais aussi sous la Creload, c'est sûr que c'est un CMS des années 2000 et si je ne me trompe pas OsCommerce date de 2002. Moi aussi j'ai attendu longtemps la version 3 et c'est clair qu'elle date de l'antiquité. Par contre, elle avait l'avantage d'être complète et tous les modules étaient entièrement gratuit (surtout les modules de payement, chronopost, etc.). Ca reste le gros avantage pour moi face à Prestashop. Mais bon, pour mettre en production une boutique, fallait être bien entouré, d'un graphiste et d'un développeur, sinon qu'est-ce que c'est moche !
Link to comment
Share on other sites

@marc: oui t'as tout à fait raison, trop pénible. C'est pour ça que j'ai pris la Creload qui comprenait déjà pas mal de modules intéressant. Mais c'est sûr que plus bidouillage que OSCommerce, tu meurs. C'est horrible. En plus c'est codé en cochon, sans tabulation, sans commentaire, sans classes en pure PHP3... Arf, ça me rappel de mauvais souvenir... C'est pour cette raison que je disais que quand t'as fini et t'as boutique est en prod, t'as un résultat super... Quel cauchemar pour arriver à ce point. En plus le moteur de template, la BTS... Sans commentaire ! Mais au final j'avais un très beau résultat (c'était une boutique pour un client)

Link to comment
Share on other sites

  • 1 month later...

Je suis moi aussi en pleine migration de oscommerce vers prestashop, pour moi osc commence à s'éssouffler(même si c'est un très bon CMS) et il est codé sous forme de tableaux là où PS utilise les div(oui je sais c'est pas là que réside la différence entre ces 2 CMS) ce qui est normalement recommandé pour le réf. Je voulais aussi me faire la main sur PS, bref c'est pas l'topic.

Je n'arrive pas à importer ma bdd client non plus(enfin le transfert de mdp), j'ai testé la solution donnée, sans succès(pê m'y suis-je mal pris).

Je relance la demande si quelqu'un à une autre solution...

Merci d'avance.

Link to comment
Share on other sites

  • 4 months later...
  • 3 months later...
  • 4 weeks later...
  • 2 weeks later...
  • 1 month later...

Bonjour

Je suis également en train d'importer ma base de clients OSC vers prestashop 1.2.5 et comme tout le monde, ou presque, je bute sur l'importation des mots de passe du fait des deux protocoles d'encryption différents utilisés par OSC et Prestahop...

[Je pense sincèrement que la PrestaTeam aurait d'excellentes retombées si elle publiait ce petit bout de code que Damien décrit plus haut - c'est commercialement très sensé car un énorme réservoir d'utilisateurs d'OSC existe qui ne demande qu'à passer le pas vers Prestashop, si les barrières ne sont pas trop nombreuses. Récupérer son précieux fichier client est un impératif stratégique de premier ordre]

Ceci dit - J'ai utilisé ta classe customer.php Fugu, après avoir créé au préalable, dans la base de prestashop, la table customer de ma base oscommerce.

J'ai également importé ma base OSC via la fonction import de prestashop

Tout fonctionne très bien à deux détails près :

Si un client d'Osc clique 'J"ai oublié mon mot de passe' et rentre son adresse mail pour le récupérer, alors Prestashop indique "il n'y a aucun compte enregistré avec cette adresse e-mail" alors même que ce compte existe à la fois dans la table customer importée et aussi dans la table ps_customers native

Autre point que j'ai remarqué dans le comportement de ce script : même si le client change son ancien mot de passe OSC par un nouveau, il suffit qu'à n'importe quel moment, il retape son ancien mot de passe - et cela réinitialisera le processus, à savoir : c'est le vieux mot de passe OSC qui lui permettra de se logger, tandis que l'autre est invalidé.

Merci pour votre aide;

Link to comment
Share on other sites

  • 4 weeks later...

Je rencontre la même problématique avec un client qui veut récupérer son fichier clients OSC mais en même temps n'a qu'un tout petit budget pour la migration, donc pas trop le temps de tester des trucs expérimentaux ni de peaufiner.

J'ai donc choisi une solution très simple:

1) importer la base OSC soit avec l'un des scripts existants postés dans les threads sur ce sujet, soit avec un script fait main puis mettre tous les mots de passe en blanc (passwd = '')
2) Faire un petit script maison qui boucle sur la table clients de Presta (ps_customer) et pour chacun:

- Génèrer un mot de passe aléatoire et l'encrypte façon Presta pour le mettre à jour en base
- Envoyer un mail au client pour l'informer que le site a migré et l'inviter à venir découvrir la nouvelle boutique, et en profiter pour lui communiquer son nouveau mot de passe (non-encrypté bien sûr). Ca permet en plus de relancer au passage des clients qui n'auraient visité la boutique depuis longtemps... ;-)

Le client peut ensuite aller changer son mot de passe dans son compte lors de sa première identification.

Voilou, c'est hyper simpliste, et peut-être que ça ne conviendra pas pour certaines boutiques, mais ça à l'avantage d'être facile et rapide à faire, sans risque de bugs.

Link to comment
Share on other sites

Bonjour.

Il y a un module payant de Grazulex qui envoi un mail avec un reset de mot de passe à tout les clients.
Je ne l’ai pas testé mais cela lui a servie après une importation de clients.

Voir le module en question : Pas de lien direct sur site externe pour des prestation. merci -yoya971

Et pour plus d’infos voir ce poste.
[MODULE] Divers nouveaux/adaptations de modules

Je ne sais pas si cela peut vous servir.

Cordialement.
Melki-Tsedeq

Link to comment
Share on other sites

  • 1 month later...

Bonjour,

Je viens d'utiliser la technique de FUGU adaptée à un Joomla et cela s'est parfaitement déroulé.
Concernant le problème évoqué par samos421 (même si l'utilisateur change son mot de passe il peut toujours utiliser son ancien mot de passe), je l'ai résolu en "bloquant" l'utilisateur de l'ancienne base une fois que celui-ci a été identifié.

Voici mon code du fichier classes/Customer.php :

    
public function getByEmail($email, $passwd = NULL)
   {
        if (!Validate::isEmail($email) OR ($passwd AND !Validate::isPasswd($passwd)))
            die (Tools::displayError());

       /* !Gestion anciens password joomla - START */
       // Récup des infos clients
       $result1 = Db::getInstance()->GetRow('
       SELECT *
       FROM `'._DB_PREFIX_    .'customer`
       WHERE `active` = 1
       AND `email` = \''.pSQL($email).'\'');

       // Si le mdp existe mais qu'il ne correspond pas à celui de prestashop
       if (empty($result1['passwd']) || $result1['passwd'] != md5(pSQL(_COOKIE_KEY_.$passwd)))
       {
           // Récupération des anciennes infos client
           $result_old = Db::getInstance()->GetRow('
           SELECT *
           FROM `jos_users`
           WHERE `email` = \''.pSQL($email).'\' AND `block` = 0');

           // Encodage du password envoyé selon la méthode Joomla
           $salt = explode(':', $result_old['password']);
           $new = md5($passwd.$salt[1]);

           // Si les mots de passe sont tjrs différents
           if ($new != $salt[0]) 
               return false;

           // On met à jour le mot de passe prestashop
           Db::getInstance()->Execute('
           UPDATE `'._DB_PREFIX_    .'customer`
           SET `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\' 
           WHERE `email` = \''.pSQL($email).'\'');

           // On bloque l'ancien compte
           Db::getInstance()->Execute('
           UPDATE `jos_users`
           SET `block` = 1 
           WHERE `id` = '.pSQL($result_old['id']));
       }
       /* !Gestion anciens password joomla - END */

       $result = Db::getInstance()->GetRow('
       SELECT *
       FROM `'._DB_PREFIX_    .'customer`
       WHERE `active` = 1
       AND `email` = \''.pSQL($email).'\''.(isset($passwd) ? 'AND `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'
       AND `deleted` = 0' : ''));

       if (!$result)
           return false;
       $this->id = $result['id_customer'];
       foreach ($result AS $key => $value)
           if (key_exists($key, $this))
               $this->{$key} = $value;

       return $this;
   }



J'aime quand un plan se déroule sans accrocs! ;)

Link to comment
Share on other sites

  • 1 month later...

Bonjour,
je déterre un peu ce topic suite à ma compilation / contribution de tout ce qui a été fait / dit au sujet de l'import de clients d'oscommerce vers prestashop, compte tenu du fait que j'en avais besoin.

Comme le soulignait samos421, les modifications de Fugu sur la classe customer sont bonnes, mais 2 problèmes restaient :
- quand un client change son mot de passe, l'ancien reste valide
- quand on fait une demande de nouveau mot de passe, aucun compte associé au mail fourni n'est trouvé (même si celui-ci existe, bien entendu)

Les modifications de Tafou corrigent le soucis de l'ancien mot de passe (une fois qu'un client importé se log sur PS, son "ancien" compte osc est désactivé sur la table parallèle, et son compte est définitivement migré sur PS). Les modifications pour son Joomla ont été adaptées à un OSC.

Restait le soucis de la demande de nouveau mot de passe, réglé avec un petit isset().

Les tests sont bons, pas de soucis avec un nouveau client indépendant d'osc etc

voici le bout de classes/Customer.php concerné :

/////// modif pour OSC

   static public function tep_validate_password($plain, $encrypted) 
   {
       if (!empty($plain) && !empty($encrypted)) {
         $stack = explode(':', $encrypted);

         if (count($stack) != 2) return false;

         if (md5($stack[1] . $plain) == $stack[0]) {
           return true;
         }
       }

       return false;
     }
/////// fin modif pour OSC 



   /**
     * Return customer instance from its e-mail (optionnaly check password)
     *
     * @param string $email e-mail
     * @param string $passwd Password is also checked if specified
     * @return Customer instance
     */
   public function getByEmail($email, $passwd = NULL)
   {
        if (!Validate::isEmail($email) OR ($passwd AND !Validate::isPasswd($passwd)))
            die (Tools::displayError());

/////// modif pour OSC

       if (isset($passwd)) { // on esquive le cas ou un utilisateur envoie son mail sans pass défini : demande de nouveau mot de passe

       $result1 = Db::getInstance()->GetRow('
       SELECT *
       FROM `'._DB_PREFIX_    .'customer`
       WHERE `active` = 1
       AND `email` = \''.pSQL($email).'\'');

       // Si le mdp existe mais qu'il ne correspond pas à celui de prestashop

       if (empty($result1['passwd']) || $result1['passwd'] != md5(pSQL(_COOKIE_KEY_.$passwd)) )
       {            
           // récupération des anciennes infos client, en partant du principe que la table de clients OSC s appelle customers
           $result_old = Db::getInstance()->GetRow('
           SELECT *
           FROM `customers`
           WHERE `customers_email_address` = \''.pSQL($email).'\' AND `block`= 0');

           if (!self::tep_validate_password($passwd, $result_old['customers_password'])) 
               return false;

           // On met à jour le mot de passe prestashop    
           Db::getInstance()->Execute('
           UPDATE `'._DB_PREFIX_    .'customer`
           SET `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\' 
           WHERE `email` = \''.pSQL($email).'\'');


           // On bloque l'ancien compte - toujours sur la table clients OSC
           Db::getInstance()->Execute('
           UPDATE `customers`
           SET `block` = 1 
           WHERE `customers_id` = '.pSQL($result_old['customers_id']));

       } 

   }
/////// fin modif pour OSC 

       $result = Db::getInstance()->GetRow('
       SELECT *
       FROM `'._DB_PREFIX_    .'customer`
       WHERE `active` = 1
       AND `email` = \''.pSQL($email).'\' 
       '.(isset($passwd) ? 'AND `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'' : '').'
       AND `deleted` = 0');

       if (!$result)
           return false;
       $this->id = $result['id_customer'];
       foreach ($result AS $key => $value)
           if (key_exists($key, $this))
               $this->{$key} = $value;

       return $this;
   }



Notez qu'il faut votre table customers qui vient d'OSC dans votre db pour PS, qu'il faut ajouter un champ "block", mettre tous les clients à 0 sur ce champ, et qu'il faut avoir importé (en adaptant) vos clients dans votre table ps_customer.
Je pense avoir testé l'ensemble des cas de figures pouvant éventuellement survenir avec ces modifications, hésitez pas à le signaler s'il y a un soucis.

  • Like 1
Link to comment
Share on other sites

  • 1 month later...

Merci beaucoup pour cette petite passerelle, simple et facile à adapter pour toute importation de clients de n'importe quelle autre gestionnaire eshop, il suffit d'implémenter la fonction de check login de l'ancien. Top :snake: !

Link to comment
Share on other sites

  • 2 months later...
  • 3 months later...

Alteration for oscomerce importer prestashop 1.4 final

   /**
     * Return customers list
     *
     * @return array Customers
     */
   static public function getCustomers()
   {
       return Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
       SELECT `id_customer`, `email`, `firstname`, `lastname`
       FROM `'._DB_PREFIX_.'customer`
       ORDER BY `id_customer` ASC');
   }


/** alteration for oscommerce password prestashop 1.4 final */
   static public function tep_validate_password($plain, $encrypted) 
   {
       if (!empty($plain) && !empty($encrypted)) {
         $stack = explode(':', $encrypted);

         if (count($stack) != 2) return false;

         if (md5($stack[1] . $plain) == $stack[0]) {
           return true;
         }
       }

       return false;
     }

   /**
     * Return customer instance from its e-mail (optionnaly check password)
     *
     * @param string $email e-mail
     * @param string $passwd Password is also checked if specified
     * @return Customer instance
     */
   public function getByEmail($email, $passwd = NULL)
   {
        if (!Validate::isEmail($email) OR ($passwd AND !Validate::isPasswd($passwd)))
            die (Tools::displayError());

//  alteration for oscommerce password prestashop 1.4 final 

       $result1 = Db::getInstance()->GetRow('
       SELECT *
       FROM `'._DB_PREFIX_    .'customer`
       WHERE `active` = 1
       AND `email` = \''.pSQL($email).'\'');

       if (empty($result1['passwd']) || $result1['passwd'] != md5(pSQL(_COOKIE_KEY_.$passwd)))
       {

           if (!self::tep_validate_password($passwd, $result1['passwd_importerosc'])) 
               return false;

           Db::getInstance()->Execute('
           UPDATE `'._DB_PREFIX_    .'customer`
           SET `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\' 
           WHERE `email` = \''.pSQL($email).'\'');
       }
/////// eof osc importer 1.4 final

       $result = Db::getInstance()->getRow('
       SELECT *
       FROM `'._DB_PREFIX_    .'customer`
       WHERE `active` = 1
       AND `email` = \''.pSQL($email).'\'
       '.(isset($passwd) ? 'AND `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'' : '').'
       AND `deleted` = 0
       AND `is_guest` = 0');

       if (!$result)
           return false;
       $this->id = $result['id_customer'];
       foreach ($result AS $key => $value)
           if (key_exists($key, $this))
               $this->{$key} = $value;

       return $this;
   }



Thanks Schilling

http://www.casadorock.com

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,
je reviens un peu sur le sujet, je ne parviens pas à récupérer les mots de passe clients depuis oscommerce et ce malgré la modif de la classe customer dans ps et ajout de la table customer de osc dans la base ps.
Pour l'importation, j'utilise l'outil de la version 1.4 . Les clients sont bien importés mais le password ne fonctionne toujours pas à l'authentification sur le fo.
J'ai constaté cependant qu'après import, dans la table concernée, un morceau du hash de ps est identique à celui de la table customer de osc à ceci près qu'il manque les 6 derniers caracteres et ceci meme en incrémentant le varchar qui ne comptait que 32 caractères dans la table ps contre 40 dans la table de osc.
Alors si quelqu'un peux me mettre sur la voie .....ou alors j'ai rien compris à la manip...
merci d'avance

Link to comment
Share on other sites

J'ai enfin pu avancer un peu a force de bidouillage mais il reste encore quelques bugs.
Pour l'import clients ça fonctionne mot de passe compris mais j'ai encore un souci avec le carnet d'adresses.
En effet les adresses sont bonnes mais le pays lui n'est pas bon. Pour mon adresse personnelle par exemple, je me retrouve avec "allemagne(alabama)" comme pays , pourtant sur osc c'est bien la france.J'ai egalement importé, les pays et les zones pensant que ça pouvait venir de là mais j'ai toujours le meme problème. Pour toutes les adresses en france c'est "allemagne(alabama)" qui s'affiche.
Une idée ??
Merci d'avance

Link to comment
Share on other sites

  • 1 year later...
Bonjour,

je déterre un peu ce topic suite à ma compilation / contribution de tout ce qui a été fait / dit au sujet de l'import de clients d'oscommerce vers prestashop, compte tenu du fait que j'en avais besoin.

 

Comme le soulignait samos421, les modifications de Fugu sur la classe customer sont bonnes, mais 2 problèmes restaient :

- quand un client change son mot de passe, l'ancien reste valide

- quand on fait une demande de nouveau mot de passe, aucun compte associé au mail fourni n'est trouvé (même si celui-ci existe, bien entendu)

 

Les modifications de Tafou corrigent le soucis de l'ancien mot de passe (une fois qu'un client importé se log sur PS, son "ancien" compte osc est désactivé sur la table parallèle, et son compte est définitivement migré sur PS). Les modifications pour son Joomla ont été adaptées à un OSC.

 

Restait le soucis de la demande de nouveau mot de passe, réglé avec un petit isset().

 

Les tests sont bons, pas de soucis avec un nouveau client indépendant d'osc etc

 

voici le bout de classes/Customer.php concerné :

/////// modif pour OSC

static public function tep_validate_password($plain, $encrypted)
{
if (!empty($plain) && !empty($encrypted)) {
$stack = explode(':', $encrypted);

if (count($stack) != 2) return false;

if (md5($stack[1] . $plain) == $stack[0]) {
return true;
}
}

return false;
}
/////// fin modif pour OSC



/**
* Return customer instance from its e-mail (optionnaly check password)
*
* @param string $email e-mail
* @param string $passwd Password is also checked if specified
* @return Customer instance
*/
public function getByEmail($email, $passwd = NULL)
{
if (!Validate::isEmail($email) OR ($passwd AND !Validate::isPasswd($passwd)))
die (Tools::displayError());

/////// modif pour OSC

if (isset($passwd)) { // on esquive le cas ou un utilisateur envoie son mail sans pass défini : demande de nouveau mot de passe

$result1 = Db::getInstance()->GetRow('
SELECT *
FROM `'._DB_PREFIX_ .'customer`
WHERE `active` = 1
AND `email` = \''.pSQL($email).'\'');

// Si le mdp existe mais qu'il ne correspond pas à celui de prestashop

if (empty($result1['passwd']) || $result1['passwd'] != md5(pSQL(_COOKIE_KEY_.$passwd)) )
{
// récupération des anciennes infos client, en partant du principe que la table de clients OSC s appelle customers
$result_old = Db::getInstance()->GetRow('
SELECT *
FROM `customers`
WHERE `customers_email_address` = \''.pSQL($email).'\' AND `block`= 0');

if (!self::tep_validate_password($passwd, $result_old['customers_password']))
return false;

// On met à jour le mot de passe prestashop
Db::getInstance()->Execute('
UPDATE `'._DB_PREFIX_ .'customer`
SET `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'
WHERE `email` = \''.pSQL($email).'\'');


// On bloque l'ancien compte - toujours sur la table clients OSC
Db::getInstance()->Execute('
UPDATE `customers`
SET `block` = 1
WHERE `customers_id` = '.pSQL($result_old['customers_id']));

}

}
/////// fin modif pour OSC

$result = Db::getInstance()->GetRow('
SELECT *
FROM `'._DB_PREFIX_ .'customer`
WHERE `active` = 1
AND `email` = \''.pSQL($email).'\'
'.(isset($passwd) ? 'AND `passwd` = \''.md5(pSQL(_COOKIE_KEY_.$passwd)).'\'' : '').'
AND `deleted` = 0');

if (!$result)
return false;
$this->id = $result['id_customer'];
foreach ($result AS $key => $value)
if (key_exists($key, $this))
$this->{$key} = $value;

return $this;
}

 

Notez qu'il faut votre table customers qui vient d'OSC dans votre db pour PS, qu'il faut ajouter un champ "block", mettre tous les clients à 0 sur ce champ, et qu'il faut avoir importé (en adaptant) vos clients dans votre table ps_customer.

Je pense avoir testé l'ensemble des cas de figures pouvant éventuellement survenir avec ces modifications, hésitez pas à le signaler s'il y a un soucis.

Simple et efficace ! Merci ;)
Link to comment
Share on other sites

  • 2 years later...

Bonjour, je ne sais pas si cela peut encore servir à quelqu'un ?

 

Voici la solution que j'apporte sur mon blog :

http://www.prestamod.fr/blog/2014/11/mots-de-passe-et-migration-oscommerce-vers-prestashop/

 

Cordialement.

Bonjour

 

Évitez de déterrer des topic datant de plus de 2 ans. Merci de créer un nouveau topic pour les actualités récentes.

A partir qu'il existe une nouvelle version 1.3 _1.4 _1.5 _1.6  etc..

Link to comment
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
×
×
  • Create New...