cancel
Showing results for 
Search instead for 
Did you mean: 

Customer Groups Mass Delete Action 404

   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

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 4

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