cancel
Showing results for 
Search instead for 
Did you mean: 

Customer Groups Mass Delete Action 404

Customer Groups Mass Delete Action 404

I'm working on a mass delete action for customer groups. So far I've copied app/code/core/Mage/Adminhtml/Block/Customer/Group/Grid.php and app/code/core/Mage/Adminhtml/controllers/Customer/GroupController.php to app/code/local/...

I've got the mass delete checkboxes and action to show on the Grid. However when I submit the grid I get a 404 page and I can't figure out why. Here's my code so far:

 

app/code/local/Mage/Adminhtml/Block/Customer/Group/Grid.php

 

class Mage_Adminhtml_Block_Customer_Group_Grid extends Mage_Adminhtml_Block_Widget_Grid
{

    public function __construct()
    {
        parent::__construct();
        $this->setId('customerGroupGrid');
        $this->setDefaultSort('type');
        $this->setDefaultDir('asc');
        $this->setSaveParametersInSession(true);
    }

    /**
     * Init customer groups collection
     * @return void
     */
    protected function _prepareCollection()
    {
        $collection = Mage::getResourceModel('customer/group_collection')
            ->addTaxClass();

        $this->setCollection($collection);
        return parent::_prepareCollection();
    }

    /**
     * Configuration of grid
     */
    protected function _prepareColumns()
    {
        $this->addColumn('time', array(
            'header' => Mage::helper('customer')->__('ID'),
            'width' => '50px',
            'align' => 'right',
            'index' => 'customer_group_id',
        ));

        $this->addColumn('type', array(
            'header' => Mage::helper('customer')->__('Group Name'),
            'index' => 'customer_group_code',
        ));

        $this->addColumn('class_name', array(
            'header' => Mage::helper('customer')->__('Tax Class'),
            'index' => 'class_name',
            'width' => '200px'
        ));

        return parent::_prepareColumns();
    }
	
	protected function _prepareMassaction()
    {
        $this->setMassactionIdField('customer_group_id');
		$this->getMassactionBlock()->setFormFieldName('group_id');
 		$this->getMassactionBlock()->addItem('delete', array(
		'label'=> Mage::helper('customer')->__('Delete'),
		'url'  => $this->getUrl('*/*/massDelete'),
		'confirm' => Mage::helper('customer')->__('Are you sure?')
		));
 
 		return $this;
    }
	
    public function getRowUrl($row)
    {
        return $this->getUrl('*/*/edit', array('id'=>$row->getId()));
    }

}

 

 

app/code/local/Mage/Adminhtml/controllers/Customer/GroupController.php

 

class Mage_Adminhtml_Customer_GroupController extends Mage_Adminhtml_Controller_Action
{
    protected function _initGroup()
    {
        $this->_title($this->__('Customers'))->_title($this->__('Customer Groups'));

        Mage::register('current_group', Mage::getModel('customer/group'));
        $groupId = $this->getRequest()->getParam('id');
        if (!is_null($groupId)) {
            Mage::registry('current_group')->load($groupId);
        }

    }
    /**
     * Customer groups list.
     */
    public function indexAction()
    {
        $this->_title($this->__('Customers'))->_title($this->__('Customer Groups'));

        $this->loadLayout();
        $this->_setActiveMenu('customer/group');
        $this->_addBreadcrumb(Mage::helper('customer')->__('Customers'), Mage::helper('customer')->__('Customers'));
        $this->_addBreadcrumb(Mage::helper('customer')->__('Customer Groups'), Mage::helper('customer')->__('Customer Groups'));
        $this->renderLayout();
    }

    /**
     * Edit or create customer group.
     */
    public function newAction()
    {
        $this->_initGroup();
        $this->loadLayout();
        $this->_setActiveMenu('customer/group');
        $this->_addBreadcrumb(Mage::helper('customer')->__('Customers'), Mage::helper('customer')->__('Customers'));
        $this->_addBreadcrumb(Mage::helper('customer')->__('Customer Groups'), Mage::helper('customer')->__('Customer Groups'), $this->getUrl('*/customer_group'));

        $currentGroup = Mage::registry('current_group');

        if (!is_null($currentGroup->getId())) {
            $this->_addBreadcrumb(Mage::helper('customer')->__('Edit Group'), Mage::helper('customer')->__('Edit Customer Groups'));
        } else {
            $this->_addBreadcrumb(Mage::helper('customer')->__('New Group'), Mage::helper('customer')->__('New Customer Groups'));
        }

        $this->_title($currentGroup->getId() ? $currentGroup->getCode() : $this->__('New Group'));

        $this->getLayout()->getBlock('content')
            ->append($this->getLayout()->createBlock('adminhtml/customer_group_edit', 'group')
                        ->setEditMode((bool)Mage::registry('current_group')->getId()));

        $this->renderLayout();
    }

    /**
     * Edit customer group action. Forward to new action.
     */
    public function editAction()
    {
        $this->_forward('new');
    }

    /**
     * Create or save customer group.
     */
    public function saveAction()
    {
        $customerGroup = Mage::getModel('customer/group');
        $id = $this->getRequest()->getParam('id');
        if (!is_null($id)) {
            $customerGroup->load((int)$id);
        }

        $taxClass = (int)$this->getRequest()->getParam('tax_class');

        if ($taxClass) {
            try {
                $customerGroupCode = (string)$this->getRequest()->getParam('code');

                if (!empty($customerGroupCode)) {
                    $customerGroup->setCode($customerGroupCode);
                }

                $customerGroup->setTaxClassId($taxClass)->save();
                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('customer')->__('The customer group has been saved.'));
                $this->getResponse()->setRedirect($this->getUrl('*/customer_group'));
                return;
            } catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
                Mage::getSingleton('adminhtml/session')->setCustomerGroupData($customerGroup->getData());
                $this->getResponse()->setRedirect($this->getUrl('*/customer_group/edit', array('id' => $id)));
                return;
            }
        } else {
            $this->_forward('new');
        }
    }

    /**
     * Delete customer group action
     */
    public function deleteAction()
    {
        $customerGroup = Mage::getModel('customer/group');
        if ($id = (int)$this->getRequest()->getParam('id')) {
            try {
                $customerGroup->load($id);
                $customerGroup->delete();
                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('customer')->__('The customer group has been deleted.'));
                $this->getResponse()->setRedirect($this->getUrl('*/customer_group'));
                return;
            } catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
                $this->getResponse()->setRedirect($this->getUrl('*/customer_group/edit', array('id' => $id)));
                return;
            }
        }

        $this->_redirect('*/customer_group');
    }

	public function massDeleteAction()
   {
       Mage::log("In Function");
	   $groupIds = $this->getRequest()->getParam('group_id');
	   Mage::log($groupIds);
       if(!is_array($groupIds)) {
       Mage::getSingleton('adminhtml/session')->addError(Mage::helper('customer')->__('Please select group(s).'));
       } else {
               $store_id = "1";
	       $website_id = Mage::app()->getStore()->getWebsiteId();

		foreach ($groupIds as $groupId) {
                   //do something...
   	        }
} } protected function _isAllowed() { return Mage::getSingleton('admin/session')->isAllowed('customer/group'); } }

 

How can I fix this 404 error? There's nothing in var/log/system.log to show anything's wrong and no exception.log

 

 

(And yes I know I should extend the code rather than doing a local overide but I tried that and it wasn't working at all and I'm on a deadline.)

4 REPLIES

Re: Customer Groups Mass Delete Action 404

Hello denialdesign,

 

Did you also pass the form_key field value ? What url you are on after redirecting to the mass action right after clicking Yes option on js alert?

Re: Customer Groups Mass Delete Action 404

Not sure about the form key field. I have this code in my _prepareMassAction function:

$this->setMassactionIdField('customer_group_id');
$this->getMassactionBlock()->setFormFieldName('group_id');

The url I'm getting redirected to is <mydomain>/index.php/admin/customer_group/massDelete/key/<keyvalue>/

Re: Customer Groups Mass Delete Action 404

Hello,

 

Still not sure why you couldn't override this module in a regular way, but I've noticed that you didn't redirect back to the group list at the end of your controller massDeleteAction()  method:

$this->_redirect('*/*/index');

 

Did you enable error logging in your magento instance? Because in case of missing form key magento by default redirects to the dashboard, not gives you 404, so I believe there is still some error under the hood. Please make sure that you have:

1. error reporting set to E_ALL in your php.ini, index.php and / or .htaccess and set $_SERVER['MAGE_IS_DEVELOPER_MODE'] = true;

2. enabled error logging in magento: System > Configuration > Developer > Log Settings

 

Re: Customer Groups Mass Delete Action 404

Still not sure about the answer, but can't see in your _prepareColumns() method of your block columns with name defined as massactioned:

customer_group_id and group_id