Prestashop : créer un utilisateur et son adresse en PHP

Petite article pour vous montrer comment créer un utilisateur et son adresse en PHP pour Prestashop 1.6.x. J'ai du le faire pour cette version. Je ne l'ai pas testé pour les autres versions mais les classes Customer et Addresses ne sont pas le genre de classes qui changent souvent.

Pour mon besoin, j'ai acheté le module ultra réputé de création de formulaire (Form Builder) pour Prestashop. Si cela est aussi le cas pour vous, vous devrez modifier le fichier /modules/gformbuilderpro/controllers/front/form.php pour intercepter la publication du formulaire afin de créer un utilisateur avec les champs de ce dernier.

Dans cet exemple, le client a mis un formulaire de devis en page d'accueil (site vide, produit créé au cas par cas pour devis). Le formulaire contient des informations du visiteur et de sa commande. Lors de la validation du formulaire, j'intercepte les données pour créer un utilisateur et une adresse afin de pouvoir établir une commande plus rapidement dans le back-office de Prestashop.

Sans plus attendre, voici le code :

$user_lastname = $params['{input_1541113524}'];
$user_firstname = $params['{input_1541113549}'];
$user_email = $params['{input_1541114133}'];
$user_address = $params['{input_1541113571}'];
$user_cp = $params['{input_1541113619}'];
$user_city = $params['{input_1541113948}'];
$user_phone = $params['{input_1541113991}'];
$user_password = '00000000';

$existing_customer = new Customer();
$is_exist = $existing_customer->customerExists(strtolower(trim($user_email)));

if(!$is_exist) {

// créer l'utilisateur
$customer = new Customer();
$customer->lastname = trim($user_lastname);
$customer->firstname = trim($user_firstname);
$customer->passwd = md5(pSQL(_COOKIE_KEY_ . $user_password));
$customer->email = strtolower(trim($user_email));
$customer->is_guest = 0;
$customer->active = 1;

if($customer->add()) {

// connecter l'utilisateur
global $context;
$context->customer = $customer;
$context->smarty->assign('confirmation', 1);
$context->cookie->id_customer = (int)$customer->id;
$context->cookie->customer_lastname = $customer->lastname;
$context->cookie->customer_firstname = $customer->firstname;
$context->cookie->passwd = $customer->passwd;
$context->cookie->logged = 1;
$customer->logged = 1;
$context->cookie->email = $customer->email;
$context->cookie->is_guest = 0;
$context->cart->secure_key = $customer->secure_key;

// creation adresse
$address = new Address();
$address->id_customer = (int)$customer->id;
$address->id_country = 8;
$address->alias = 'Mon adresse';
$address->lastname = $customer->lastname;
$address->firstname = $customer->firstname;
$address->address1 = trim($user_address);
$address->postcode = trim($user_cp);
$address->phone = trim($user_phone);
$address->city = trim($user_city);
$address->add();

}

}

Cela marche bien si vous utilisez ce code à l'intérieur d'un fichier déjà intégré à Prestashop. Si vous créez un fichier à la racine du serveur pour importer en masse des utilisateurs depuis un fichier csv par exemple, il faudra faire un include du fichier config.inc.php pour que cela fonctionne.

Explication

Pour les non développeurs, voici comment procède le script :

  • Il récupère dans un premier temps les variables du client.
  • Puis il va tester si un utilisateur existe déjà avec l'adresse email qui lui a été donné. Si l'utilisateur existe, il laisse tomber la création et passe à la suite.
  • Si l'utilisateur n'existe pas, il va le créer avec un mot de passe composé de huit fois le chiffre 0.
  • Si la création se passe bien, le script va mettre à jour le contexte actuel (connexion de l'utilisateur) puis il va créer une adresse liée à ce nouvel utilisateur.
  • Dans ce cas de figure, l'ID country 8 correspond à la France car seuls ceux là sont intéressants pour mon client. A vous d'adapter suivant votre cas de figure.

Naturellement, les premières lignes du script sont à adapter suivant la manière dont vous récupérez vos valeurs (POST, fichier externes, base de données, etc).

OnCrawl et VPS Planethoster : upload de vos logs

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *