0

I'm trying to modify Netzarbeiter's Customer Activation module so the extension only flags a certain customer group for admin approval. The following is the block of code I have been modifying.

/**
 * Flag new accounts as such
 *
 * @param Varien_Event_Observer $observer
 */
public function customerSaveBefore($observer)
{

    $customer = $observer->getEvent()->getCustomer();
    //$customer_group_id=$customer->getCustomerGroupId();
    $customer_group_id = Mage::getSingleton('customer/session')->getCustomerGroupId(); 

    Mage::log('The customer group id is'. $customer_group_id , null, 'caitlin.log');

    if ($customer_group_id=1)
        Mage::log('I have a General group ID \n',null,'caitlin.log');
    else if ($customer_group_id=5)
        Mage::log('I have a Test group ID \n',null,'caitlin.log');
    else
        Mage::log('I dont understand! \n',null,'caitlin.log');

    $storeId = Mage::helper('customeractivation')->getCustomerStoreId($customer);

    if (Mage::getStoreConfig(self::XML_PATH_MODULE_DISABLED, $storeId))
    {
        return;
    }

    if (!$customer->getId())
    {
        if ($customer_group_id =5){
            $defaultStatus = Mage::getStoreConfig(self::XML_PATH_DEFAULT_STATUS, $storeId);
            $customer->setCustomerActivated($defaultStatus);
            $customer->setCustomerActivationNewAccount(true);
        }
        else{
            $customer->setCustomerActivated('Yes');
            $customer->setCustomerActivationNewAccount(false);
            Mage::log('This block initiated',null,'caitlin.log');
        }
    }
}

So far, the customer ID is being logged correctly, but when registering a customer of the customer group ID "1" the program is not entering into the else statement with the "This block has been initiated" log. Can anyone see what I am doing wrong or has another idea for getting the program to automatically flag a particular customer group for approval only?

The whole model below:

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magentocommerce.com so we can send you a copy immediately.
 *
 * package    Netzarbeiter_CustomerActivation
 * copyright  Copyright (c) 2012 Vinai Kopp http://netzarbeiter.com/
 * license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

class Netzarbeiter_CustomerActivation_Model_Observer extends Mage_Core_Model_Abstract
{
    const XML_PATH_MODULE_DISABLED = 'customer/customeractivation/disable_ext';

    const XML_PATH_DEFAULT_STATUS = 'customer/customeractivation/activation_status_default';

    const XML_PATH_ALWAYS_NOTIFY_ADMIN = 'customer/customeractivation/always_send_admin_email';

    /**
     * Fired on customer_login event
     * Check if the customer has been activated (via adminhtml)
     * If not, through login error
     *
     * @param Varien_Event_Observer $observer
     */
    public function customerLogin($observer)
    {
        if (Mage::getStoreConfig(self::XML_PATH_MODULE_DISABLED))
        {
            return;
        }

        if ($this->_isApiRequest())
        {
            return;
        }

        $customer = $observer->getEvent()->getCustomer();
        $session = Mage::getSingleton('customer/session');

        if (!$customer->getCustomerActivated())
        {
            /*
             * Fake the old logout() method without deleting the session and all messages
             */
            $session->setCustomer(Mage::getModel('customer/customer'))->setId(null);

            if ($this->_checkRequestRoute('customer', 'account', 'createpost'))
            {
                /*
                 * If this is a regular registration, simply display message
                 */
                $message = Mage::helper('customeractivation')->__('Please wait for your account to be activated');

                $session->addSuccess($message);
            }
            else
            {
                /*
                 * All other types of login
                 */
                Mage::throwException(Mage::helper('customeractivation')->__('This account is not activated.'));
            }
        }
    }

    /**
     * Flag new accounts as such
     *
     * @param Varien_Event_Observer $observer
     */
    public function customerSaveBefore($observer)
    {

        $customer = $observer->getEvent()->getCustomer();
        //$customer_group_id=$customer->getCustomerGroupId();
        $customer_group_id = Mage::getSingleton('customer/session')->getCustomerGroupId(); 

        Mage::log('The customer group id is'. $customer_group_id , null, 'caitlin.log');

        if ($customer_group_id=1)
            Mage::log('I have a General group ID \n',null,'caitlin.log');
        else if ($customer_group_id=5)
            Mage::log('I have a Test group ID \n',null,'caitlin.log');
        else
            Mage::log('I dont understand! \n',null,'caitlin.log');

        $storeId = Mage::helper('customeractivation')->getCustomerStoreId($customer);

        if (Mage::getStoreConfig(self::XML_PATH_MODULE_DISABLED, $storeId))
        {
            return;
        }

        if (!$customer->getId())
        {
            if ($customer_group_id =5){
                $defaultStatus = Mage::getStoreConfig(self::XML_PATH_DEFAULT_STATUS, $storeId);
                $customer->setCustomerActivated($defaultStatus);
                $customer->setCustomerActivationNewAccount(true);
            }
            else{
                $customer->setCustomerActivated('Yes');
                $customer->setCustomerActivationNewAccount(false);
                Mage::log('This block initiated',null,'caitlin.log');
            }
        }
    }

    /**
     * Send out emails
     *
     * @param Varien_Event_Observer $observer
     */
    public function customerSaveAfter($observer)
    {
        $customer = $observer->getEvent()->getCustomer();

        $storeId = Mage::helper('customeractivation')->getCustomerStoreId($customer);

        if (Mage::getStoreConfig(self::XML_PATH_MODULE_DISABLED, $storeId))
        {
            return;
        }

        $defaultStatus = Mage::getStoreConfig(self::XML_PATH_DEFAULT_STATUS, $storeId);

        try
        {
            if (Mage::app()->getStore()->isAdmin())
            {
                if (!$customer->getOrigData('customer_activated') && $customer->getCustomerActivated())
                {
                    // Send customer email only if it isn't a new account and it isn't activated by default
                    if (!($customer->getCustomerActivationNewAccount() && $defaultStatus))
                    {
                        Mage::helper('customeractivation')->sendCustomerNotificationEmail($customer);
                    }
                }
            }
            else
            {
                if ($customer->getCustomerActivationNewAccount())
                {
                    // Only notify the admin if the default is deactivated or the "always notify" flag is configured
                    $alwaysNotify = Mage::getStoreConfig(self::XML_PATH_ALWAYS_NOTIFY_ADMIN, $storeId);
                    if (!$defaultStatus || $alwaysNotify)
                    {
                        Mage::helper('customeractivation')->sendAdminNotificationEmail($customer);
                    }
                }
                $customer->setCustomerActivationNewAccount(false);
            }
        }
        catch (Exception $e)
        {
            Mage::throwException($e->getMessage());
        }
    }

    public function salesCovertQuoteAddressToOrder(Varien_Event_Observer $observer)
    {
        /** @var $address Mage_Sales_Model_Quote_Address */
        $address = $observer->getEvent()->getAddress();
        $this->_abortCheckoutRegistration($address->getQuote());
    }

    /**
     * Abort registration during checkout if default activation status is false.
     *
     * Should work with: onepage checkout, multishipping checkout and custom
     * checkout types, as long as they use the standard converter model
     * Mage_Sales_Model_Convert_Quote.
     *
     * Expected state after checkout:
     * - Customer saved
     * - No order placed
     * - Guest quote still contains items
     * - Customer quote contains no items
     * - Customer redirected to login page
     * - Customer sees message
     *
     * @param Varien_Event_Observer $observer
     */
    protected function _abortCheckoutRegistration(Mage_Sales_Model_Quote $quote)
    {
        if (Mage::getStoreConfig(self::XML_PATH_MODULE_DISABLED, $quote->getStoreId()))
        {
            return;
        }

        if ($this->_isApiRequest())
        {
            return;
        }

        if (!Mage::getSingleton('customer/session')->isLoggedIn() && !$quote->getCustomerIsGuest())
        {
            // Order is being created by non-activated customer
            $customer = $quote->getCustomer()->save();
            if (! $customer->getCustomerActivated()) {
                // Abort order placement
                // Exception handling can not be assumed to be useful

                // Todo: merge guest quote to customer quote and save customer quote, but don't log customer in

                // Add message
                $message = Mage::helper('customeractivation')->__(
                    'Please wait for your account to be activated, then log in and continue with the checkout'
                );
                Mage::getSingleton('core/session')->addSuccess($message);

                // Handle redirect to login page
                $targetUrl = Mage::getUrl('customer/account/login');
                $response = Mage::app()->getResponse();

                if (Mage::app()->getRequest()->isAjax()) {
                    // Assume one page checkout
                    $result = array('redirect' => $targetUrl);
                    $response->setBody(Mage::helper('core')->jsonEncode($result));
                } else if ($response->canSendHeaders(true)) {
                    // Assume multishipping checkout
                    $response->clearHeader('location')
                        ->setRedirect($targetUrl);
                }
                $response->sendResponse();
                /* ugly, but we need to stop the further order processing */
                exit();
            }
        }
    }

    /**
     * Return true if the reqest is made via the api
     *
     * @return boolean
     */
    protected function _isApiRequest()
    {
        return Mage::app()->getRequest()->getModuleName() === 'api';
    }

    /**
     * Check the current module, controller and action against the given values.
     *
     * @param string $module
     * @param string $controller
     * @param string $action
     * @return bool
     */
    protected function _checkRequestRoute($module, $controller, $action)
    {
        $req = Mage::app()->getRequest();
        if (strtolower($req->getModuleName()) == $module
            && strtolower($req->getControllerName()) == $controller
            && strtolower($req->getActionName()) == $action
        )
        {
            return true;
        }
        return false;
    }

    /**
     * Add customer_activated attribute to grid.
     *
     * Thanks to Rouven Alexander Rieker <rouven.rieker@itabs.de> for the base code.
     *
     * @param Varien_Event_Observer $observer
     */
    public function coreBlockAbstractToHtmlBefore(Varien_Event_Observer $observer)
    {
        if (Mage::getStoreConfig(self::XML_PATH_MODULE_DISABLED))
        {
            return;
        }

        /** @var $block Mage_Core_Block_Abstract */
        $block = $observer->getEvent()->getBlock();
        if ($block->getId() == 'customerGrid')
        {
            /** @var $helper Netzarbeiter_CustomerActivation_Helper_Data */
            $helper = Mage::helper('customeractivation');

            // Add the attribute as a column to the grid
            $block->addColumnAfter(
                'customer_activated',
                array(
                    'header' => $helper->__('Customer Activated'),
                    'align' => 'center',
                    'width' => '80px',
                    'type' => 'options',
                    'options' => array(
                        '0' => $helper->__('No'),
                        '1' => $helper->__('Yes')
                    ),
                    'default' => '0',
                    'index' => 'customer_activated',
                    'renderer' => 'customeractivation/adminhtml_widget_grid_column_renderer_boolean'
                ),
                'customer_since'
            );

            // Set the new columns order.. otherwise our column would be the last one
            $block->sortColumnsByOrder();

        }

    }

    /**
     * Add customer activation option to the mass action block.
     *
     * This can't be done during the block abstract e
     *
     * @param Varien_Event_Observer $observer
     */
    public function adminhtmlBlockHtmlBefore(Varien_Event_Observer $observer)
    {
        // Check the grid is the customer grid
        if ($observer->getBlock()->getId() != 'customerGrid')
        {
            return;
        }

        // Check if there is a massaction block and if yes, add the massaction for customeractivation
        $massBlock = $observer->getBlock()->getMassactionBlock();
        if ($massBlock)
        {
            /** @var $helper Netzarbeiter_CustomerActivation_Helper_Data */
            $helper = Mage::helper('customeractivation');

            $massBlock->addItem(
                'customer_activated',
                array(
                    'label' => $helper->__('Customer Activated'),
                    'url' => Mage::getUrl('customeractivation/admin/massActivation'),
                    'additional' => array(
                        'status' => array(
                            'name' => 'customer_activated',
                            'type' => 'select',
                            'class' => 'required-entry',
                            'label' => $helper->__('Customer Activated'),
                            'values' => array(
                                '1' => $helper->__('Yes'),
                                '0' => $helper->__('No')
                            )
                        )
                    )
                )
            );
        }
    }

    /**
     * Add the customer_activated attribute to the customer grid collection
     *
     * @param Varien_Event_Observer $observer
     */
    public function eavCollectionAbstractLoadBefore(Varien_Event_Observer $observer)
    {
        if (Mage::getStoreConfig(self::XML_PATH_MODULE_DISABLED))
        {
            return;
        }

        // Cheap check to reduce overhead on product and category collections
        if (Mage::app()->getRequest()->getControllerName() !== 'customer')
        {
            return;
        }

        /** @var $collection Mage_Customer_Model_Resource_Customer_Collection */
        $collection = $observer->getEvent()->getCollection();

        // Only add attribute to customer collections
        $customerTypeId = Mage::getSingleton('eav/config')->getEntityType('customer')->getId();
        $collectionTypeId = $collection->getEntity()->getTypeId();
        if ($customerTypeId == $collectionTypeId)
        {
            $collection->addAttributeToSelect('customer_activated');
        }
    }
}
  • 2
    Maybe the problem is that you use if ($customer_group_id =5){ instead of if ($customer_group_id == 5){? I think you forgot an '=' sign. This way you just set the value for $customer_group_id to 5 and this always returns true. – Marius Apr 18 '13 at 6:56
  • Yes you are right, I was able to figure that out shortly after. – CaitlinHavener Apr 18 '13 at 18:12
  • It does not have registration page but even after adding the file it does not load in magento 2.3 any idea what can be the reason – insoftservice Aug 8 at 9:45
1

If you're looking for an all-in-one solution, @vinai has been maintaining the Netzarbeiter_CustomerActivation module at https://github.com/Vinai/customer-activation - not sure if you're using the most recent, updated module (updated 4/21/13).

Aside from that, your above code contains an assignment operator rather than a comparison operator:

$customer_group_id == 5

Some reading:

http://php.net/manual/en/language.operators.assignment.php

http://php.net/manual/en/language.operators.comparison.php

  • i am unable to add this module latest one has no registration page so i guess its partially done for magento2.3 – insoftservice Aug 8 at 7:46
0

@Marius is right! I forgot to use use

if ($customer_group_id =5){ instead of if ($customer_group_id == 5)

DOH!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.