0
votes

I have my custom module Customer feedback/Inquiry form in which customer can ask Inquiry related to product or they can able to give feedback related to store.In admin side i listed out all the feedbacks in admin grid.

Now I want to integrate the Mail functionality like when I click on particular feedback edit section there will be separate section for mail body where i will enter the reply, click on send button and mail goes to particular customer which mail Id has been already present in that particular edit section.

Here is code for my AdminHtml controller file

<?php
class Foo_Bar_Adminhtml_BazController extends Mage_Adminhtml_Controller_Action
  {
public function indexAction()
{
    // Let's call our initAction method which will set some basic params for each action

    $this->_initAction()
    ->renderLayout();
}

public function newAction()
{
    // We just forward the new action to a blank edit form
    $this->_forward('edit');
}

public function editAction()
{
    $this->_initAction();

    // Get id if available
    $id  = $this->getRequest()->getParam('id');
    $model = Mage::getModel('foo_bar/baz');

    if ($id) {
        // Load record
        $model->load($id);

        // Check if record is loaded
        if (!$model->getId()) {
            Mage::getSingleton('adminhtml/session')->addError($this->__('This baz no longer exists.'));
            $this->_redirect('*/*/');

            return;
        }
    }

    $this->_title($model->getId() ? $model->getName() : $this->__('New Baz'));

    $data = Mage::getSingleton('adminhtml/session')->getBazData(true);
    if (!empty($data)) {
        $model->setData($data);
    }

    Mage::register('foo_bar', $model);

    $this->_initAction()
    ->_addBreadcrumb($id ? $this->__('Edit Baz') : $this->__('New Baz'), $id ? $this->__('Edit Baz') : $this->__('New Baz'))
    ->_addContent($this->getLayout()->createBlock('foo_bar/adminhtml_baz_edit')->setData('action', $this->getUrl('*/*/save')))
    ->renderLayout();
}

public function saveAction()
{
    if ($postData = $this->getRequest()->getPost()) {

        $model = Mage::getSingleton('foo_bar/baz');
        $model->setData($postData);

        try {
            $model->save();

            Mage::getSingleton('adminhtml/session')->addSuccess($this->__('The baz has been saved.'));
            $this->_redirect('*/*/');

            return;
        }
        catch (Mage_Core_Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
        }
        catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($this->__('An error occurred while saving this baz.'));
        }

        Mage::getSingleton('adminhtml/session')->setBazData($postData);
        $this->_redirectReferer();
    }
}
public function deleteAction()
{
    // check if we know what should be deleted
    $itemId = $this->getRequest()->getParam('id');
    if ($itemId) {
        try {
            // init model and delete
            /** @var $model Magentostudy_News_Model_Item */
            $model = Mage::getModel('foo_bar/baz');
            $model->load($itemId);
            if (!$model->getId()) {
                Mage::throwException(Mage::helper('foo_bar')->__('Unable to find a Baz.'));
            }
            $model->delete();

            // display success message
            $this->_getSession()->addSuccess(
                    Mage::helper('foo_bar')->__('The Baz has been deleted.')
            );
        } catch (Mage_Core_Exception $e) {
            $this->_getSession()->addError($e->getMessage());
        } catch (Exception $e) {
            $this->_getSession()->addException($e,
                    Mage::helper('foo_bar')->__('An error occurred while deleting the baz.')
            );
        }
    }

    // go to grid
    $this->_redirect('*/*/');
}
public function messageAction()
{
    $data = Mage::getModel('foo_bar/baz')->load($this->getRequest()->getParam('id'));
    echo $data->getContent();
}

/**
 * Initialize action
 *
 * Here, we set the breadcrumbs and the active menu
 *
 * @return Mage_Adminhtml_Controller_Action
 */
protected function _initAction()
{
    $this->loadLayout()
    // Make the active menu match the menu config nodes (without 'children' inbetween)
    ->_setActiveMenu('sales/foo_bar_baz')
    ->_title($this->__('Sales'))->_title($this->__('Baz'))
    ->_addBreadcrumb($this->__('Sales'), $this->__('Sales'))
    ->_addBreadcrumb($this->__('Baz'), $this->__('Baz'));

    return $this;
}

/**
 * Check currently called action by permissions for current user
 *
 * @return bool
 */
protected function _isAllowed()
{
    return Mage::getSingleton('admin/session')->isAllowed('sales/foo_bar_baz');
}

}

I want some hooks from which i will able to send mail to particular customer. Here is the image of my admin grid section

admin grid image

1

1 Answers

0
votes

The most easiest way is to create a new transactional mail and set the subject to a placeholder and the same for the body.

this is the transactional mail function:

/**
 * Send transactional email to recipient
 *
 * @param   int $templateId
 * @param   string|array $sender sneder informatio, can be declared as part of config path
 * @param   string $email recipient email
 * @param   string $name recipient name
 * @param   array $vars varianles which can be used in template
 * @param   int|null $storeId
 * @return  Mage_Core_Model_Email_Template
 */
public function sendTransactional($templateId, $sender, $email, $name, $vars=array(), $storeId=null)

so the first to do is, create a new transactional mail under System->Transactional Mails. Just fill it with some random stuff for now. then go to where ever you want to send the email and add

Mage::getModel('core/email_template')
    ->sendTransactional(
        {the transactional email id we just created}, 
        $sender, 
        $recepientEmail, 
        $recepientName,   
        array(
            'subject' => '{your subject}',
            'body' => '{you body}'
        )
    );

replace {your subject} and {your body} with the corresponding from you input fields.

after doing that go back to your transactional email template and replace our random stuff with that: enter {{var subject}} in the subject field and {{var body}} in die content field of the transactional mail

i didn't tried this but it should work.

hope that helps