ukvapeclub Posted March 12, 2015 Share Posted March 12, 2015 Hi guys! Ok, so basically what I'm trying to achieve is a module that will add a customer to a group called "MembersOnly" (ID: 5) when their first order is confirmed. This will grant access to a "Members Only" category page for existing customers. This is my first attempt at making a module, and basically I've been cutting, pasting and adapting code from elsewhere to meet the needs of the module. I think I'm right in assuming I've used the "actionValidateOrder" hook properly. At this point I think I just need to know the code that will add the customer to group ID 5. Here's what I've got so far... <?php if (!defined('_PS_VERSION_')) exit; class MembersOnly extends Module { public function __construct() { $this->name = 'membersonly'; $this->tab = 'front_office_features'; $this->version = '1.0.0'; $this->author = 'Ctrl-V'; $this->need_instance = 1; $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Members Only'); $this->description = $this->l('Add paying customers to new group'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); if (!Configuration::get('MEMBERSONLY_NAME')) $this->warning = $this->l('No name provided'); } public function install() { if (!parent::install() OR !$this->registerHook('actionValidateOrder')) return false; return true; } public function uninstall() { if (!parent::uninstall()) return false; return true; } $context = Context::getContext(); $id_lang = $context->cart->id_lang; $customer = $context->customer; $id_customer = $customer->id; $groups = Db::getInstance()->executeS("SELECT " ._DB_PREFIX_. "customer_group.id_group , " ._DB_PREFIX_. "group_lang.name FROM " ._DB_PREFIX_. "customer_group LEFT JOIN " ._DB_PREFIX_. "group_lang ON " ._DB_PREFIX_. "group_lang.id_group = " ._DB_PREFIX_. "customer_group.id_group WHERE " ._DB_PREFIX_. "customer_group.id_customer = '$id_customer' AND " ._DB_PREFIX_. "group_lang.id_lang = '$id_lang'"); if(!isset($groups[0])) $groups = FALSE; } Now this should return the array $groups containing all groups that the current customer belongs to, I should be able to figure out how to query the array to check if group 5 is already present, I just need to know how to add group 5 if not. I'm assuming it's some kind of SQL wizardry. Hope someone can help me out, and thanks in advance Link to comment Share on other sites More sharing options...
rocky Posted March 13, 2015 Share Posted March 13, 2015 Try replacing lines 42-50 with following code: public function hookActionValidateOrder($params) { $this->context->customer->addGroups(array(5)); } This should add the customer to group 5 after an order is completed. It appears the Customer::addGroups function uses INSERT IGNORE in its query, so it shouldn't matter if the customer is already in the group. Link to comment Share on other sites More sharing options...
ukvapeclub Posted March 13, 2015 Author Share Posted March 13, 2015 Rocky, your title of "PrestaShop Legend" is well deserved, works like a charm. Many thanks, Stu Link to comment Share on other sites More sharing options...
nguigno Posted May 20, 2020 Share Posted May 20, 2020 (edited) Hi ! I'm trying to do the same thing, when the user finish his subscription to our website, but my module seams to do nothing at all ! Here my code : <?php if (!defined('_PS_VERSION_')) { exit; } class AttachToClientGroup extends Module { public function __construct() { $this->name = 'attachtoclientgroup'; $this->tab = 'others'; $this->version = '1.0.1'; $this->author = 'Quentin'; $this->need_instance = 0; $this->ps_versions_compliancy = [ 'min' => '1.6', 'max' => _PS_VERSION_ ]; $this->bootstrap = true; parent::__construct(); $this->displayName = $this->l('Attach To Client Group'); $this->description = $this->l('When a customer subscribe to our website, hes attached to the customer group Particuliers TTC, This module add him also into Client group.'); $this->confirmUninstall = $this->l('Are you sure you want to uninstall?'); if (!Configuration::get('MYMODULE_NAME')) { $this->warning = $this->l('No name provided'); } } } public function install() { return parent::install(); } public function uninstall() { return parent::uninstall(); } public function hookcreateAccount($params) { $this->context->customer->addGroups(array(3)); $this->context->customer->update(); //$this->context->customer->addGroups(3); print_r("print_r TEST"); } ?> the print_r does not display the test message 😕 This is pretty simple did i miss something ? Thanks in advance ! edit : prestashop 1.7.6.5 Edited May 20, 2020 by nguigno (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now