Magento – Admin Form not submit redirected to dashboard page

edit-orderformsmagento-1.9module

I have created a small module to add new tab on order view page. right now tab is showing a static phtml file with a form in it:

<?php
class MageSf_OrderCustom_Block_Adminhtml_Order_View_Tab_OrderCustom
extends Mage_Adminhtml_Block_Template
implements Mage_Adminhtml_Block_Widget_Tab_Interface
{    

public function _construct()
{
    parent::_construct();
    $this->setTemplate('magsf/ordercustom/order/view/tab/ordercustom.phtml');
}

public function getTabLabel() {
    return $this->__('Order Attachment');
}

public function getTabTitle() {
    return $this->__('Order Attachment');
}

public function canShowTab() {
    return true;
}

public function isHidden() {
    return false;
}

public function getOrder(){
    return Mage::registry('current_order');
  }
 } 

ordercustom.phtml includes the following:

if(isset($_POST['docname']))
   {
     try
   {      
    $path = Mage::getBaseDir().DS.'customer_documents'.DS;  //desitnation directory    
    $fname = $_FILES['docname']['name']; //file name                       
    $uploader = new Varien_File_Uploader('docname'); //load class
    $uploader->setAllowedExtensions(array('doc','pdf','txt','docx')); //Allowed extension for file
    $uploader->setAllowCreateFolders(true); //for creating the directory if not exists
    $uploader->setAllowRenameFiles(false); //if true, uploaded file's name will be changed, if file with the same name already exists directory.
    $uploader->setFilesDispersion(false);
    $uploader->save($path,$fname); //save the file on the specified path

}
catch (Exception $e)
{
    echo 'Error Message: '.$e->getMessage();
}
}

 <form id="doc-form" name="doc-form" method="post" action="" enctype="multipart/form-data">
 <label>Upload Document</label>
 <input type="file" title="File" name="docname">
 <button type="submit" title="Save"><span>Upload</span></button>                    
 </form>

Here is the config.xml

<?xml version="1.0"?>
<config>
<modules>
    <MageSf_OrderCustom>
        <version>1.0.1</version>
    </MageSf_OrderCustom>
</modules>
<global>
    <blocks>
        <ordercustom>
            <class>MageSf_OrderCustom_Block</class>
        </ordercustom>
    </blocks>
</global>       
<adminhtml>
   <layout>
        <updates>
            <ordercustom>
                <file>magsf_ordercustom.xml</file>
            </ordercustom>
        </updates>
    </layout>
</adminhtml>
<admin> 
<routers>
     <adminhtml> 
         <args> 
             <modules> 
            <MageSf_OrderCustom after="Mage_Adminhtml">MageSf_OrderCustom_Adminhtml</MageSf_OrderCustom> 
            </modules> 
        </args>
   </adminhtml>

And my module configuration file is as:

<?xml version="1.0"?>
<layout>
<adminhtml_sales_order_view>
    <reference name="sales_order_tabs">
        <action method="addTab">
            <name>order_view_tab_ordercustom</name>
               <block>ordercustom/adminhtml_order_view_tab_ordercustom</block>
        </action>
    </reference>
   </adminhtml_sales_order_view>
  </layout>

But issue is this when i submit the form nothing happens and page redirected to the dashboard page. what wrong i am doing and how i can fix this.

Want something like this:
enter image description here

Best Answer

Create a controller file SfuploadController.php under MageSf/OrderCustom/controllers/Adminhtml

<?php
class MageSf_OrderCustom_Adminhtml_SfuploadController extends Mage_Adminhtml_Controller_Action {  
    public function uploadAction() {
        if (isset($_FILES['docname']['name']) && $_FILES['docname']['name'] != '') {
            try {
                $uploader = new Varien_File_Uploader('docname');
                $uploader->setAllowedExtensions(array('doc','pdf','txt','docx'));
                $uploader->setAllowCreateFolders(true);
                $uploader->setAllowRenameFiles(false);
                $uploader->setFilesDispersion(false);
                $newDir = "customer_documents";

                $newdirPath = Mage::getBaseDir('media') . DS . "customer_documents";

                if (!file_exists($newdirPath)) {
                    mkdir($newdirPath, 0777);
                }

                $path = Mage::getBaseDir('media') . DS . $newDir . DS;
                $resizedPath = Mage::getBaseDir('media') . DS . $newDir;
                $uploader->save($path, $_FILES['docname']['name']);
                $filename = $uploader->getUploadedFileName(); // Uploaded File name
                Mage::getSingleton('adminhtml/session')->addSuccess(Mage::helper('core')->__('File uploaded successfully.'));
            } catch (Exception $e) {
                Mage::getSingleton('adminhtml/session')->addError(Mage::helper('core')->__('Unable to find item to save'));
            }
        }

        $this->_redirectReferer();
    }
}

Update your config.xml and add below code

<admin> 
    <routers>
         <adminhtml> 
             <args> 
                 <modules> 
                <MageSf_OrderCustom after="Mage_Adminhtml">MageSf_OrderCustom_Adminhtml</MageSf_OrderCustom> 
                </modules> 
            </args>
       </adminhtml>
   </routers> 
</admin>

Update your ordercustom.phtml You need to remove all other code from this file.

<form id="doc-form" name="doc-form" method="post" action="<?php echo Mage::helper('adminhtml')->getUrl('adminhtml/sfupload/upload',array('form_key' => Mage::getSingleton('core/session')->getFormKey())); ?>" enctype="multipart/form-data">
 <label>Upload Document</label>
 <input type="file" title="File" name="docname">
 <button type="submit" title="Save"><span>Upload</span></button>                    
 </form>
Related Topic