Techievolve/Greenenquire/Block/Enquire.php

<?php

namespace Techievolve\Greenenquire\Block;

use Magento\Framework\View\Element\Template;

class Enquire extends Template {
	/**
	 * @param Template\Context $context
	 * @param array $data
	 */
   public function __construct(Template\Context $context, array $data = &#91;&#93;) {
		
		parent::__construct($context, $data);
   }
   
   protected function _prepareLayout() {
      
      return parent::_prepareLayout();
   }

	/**
	 * Returns action url for Green Enquire
	 * @return string
	 */
   public function getFormAction() {

      return $this->getUrl('greenenquire/index/enquire', ['_secure' => true]);
   }
}

Techievolve/Greenenquire/Controller/Index/Enquire.php

<?php

namespace Techievolve\Greenenquire\Controller\Index;

use Magento\Framework\App\Action\Context;
use Magento\Framework\Translate\Inline\StateInterface;
use Magento\Framework\Mail\Template\TransportBuilder;
use Magento\Framework\Controller\ResultFactory;
use Magento\Framework\App\Config\ScopeConfigInterface;
use Magento\Store\Model\ScopeInterface;
use Techievolve\Greenenquire\Helper\Email;
use Psr\Log\LoggerInterface;

class Enquire extends \Magento\Framework\App\Action\Action {
   
   /**
    *email sender constant
    */
   const XML_PATH_NAME_SENDER = 'trans_email/ident_general/name';
   const XML_PATH_EMAIL_SENDER = 'trans_email/ident_general/email';
   
   /**
    *send email to constant
    */
   const XML_PATH_NAME_SEND_TO = 'techievolve_greenenquire/green_enquire/send_email_to_name';
   const XML_PATH_EMAIL_SEND_TO = 'techievolve_greenenquire/green_enquire/send_email_to';
   
   protected $_inlineTranslation;
   protected $_transportBuilder;
   protected $_scopeConfig;
   protected $_emailHelper;
   protected $_logLoggerInterface;
   
   public function __construct(
      Context $context,
      StateInterface $inlineTranslation,
      TransportBuilder $transportBuilder,
      ScopeConfigInterface $scopeConfig,
      Email $emailHelper,
      LoggerInterface $loggerInterface,
      array $data = &#91;&#93;
   ){
      $this->_inlineTranslation = $inlineTranslation;
      $this->_transportBuilder = $transportBuilder;
      $this->_scopeConfig = $scopeConfig;
      $this->_emailHelper = $emailHelper;
      $this->_logLoggerInterface = $loggerInterface;
      $this->messageManager = $context->getMessageManager();
      parent::__construct($context);
   }
   
   public function execute() {
      
      $resultRedirect = $this->resultFactory->create(ResultFactory::TYPE_REDIRECT);
      $resultRedirect->setUrl($this->_redirect->getRefererUrl());
      $data = $this->getRequest()->getParams();
      $postObject = new \Magento\Framework\DataObject();
      if ($data) {
         try {
            
            /* Receiver Detail  */
            $receiverInfo = [
               'name' => $this->_scopeConfig->getValue(self::XML_PATH_NAME_SEND_TO, ScopeInterface::SCOPE_STORE),
               'email' => $this->_scopeConfig->getValue(self::XML_PATH_EMAIL_SEND_TO, ScopeInterface::SCOPE_STORE)
            ];
            /* Sender Detail  */
            $senderInfo = [
               'name' => $this->_scopeConfig->getValue(self::XML_PATH_NAME_SENDER, ScopeInterface::SCOPE_STORE),
               'email' => $this->_scopeConfig->getValue(self::XML_PATH_EMAIL_SENDER, ScopeInterface::SCOPE_STORE),
            ];
            /* email code for admin */
            $customerName = $data['name'];
            $customerEmail = $data['email'];
            $customerTelephone = $data['telephone'];
            $requestDetail = $data['message'];
            $dataAdmin = [
               'customer_name' => $customerName,
               'customer_email' => $customerEmail,
               'customer_telephone' => $customerTelephone,
               'request_detail' => $requestDetail
            ];
            $postObject->setData($dataAdmin);
            $emailTemplateVariables = ['data' => $postObject];
            $this->_emailHelper->sendAdminEmail($emailTemplateVariables,$senderInfo,$receiverInfo);
            $this->messageManager->addSuccess('Email sent successfully');
            return $resultRedirect;
            /* email code for admin end */
         } catch(\Exception $e){
            $this->messageManager->addError($e->getMessage());
            $this->_logLoggerInterface->debug($e->getMessage());
            return $resultRedirect;
         }
         
      }
   }
}

app/code/Techievolve/Greenenquire/etc/adminhtml/menu.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Backend:etc/menu.xsd">
    <menu>
        <add id="Techievolve_Greenenquire::greenenquire_group" title="Green Enquire" module="Techievolve_Greenenquire" sortOrder="20" resource="Techievolve_Greenenquire::greenenquire" parent="Techievolve_Core::core" />
        
        <add id="Techievolve_Greenenquire::configuration" title="Configuration" module="Techievolve_Greenenquire" sortOrder="10" parent="Techievolve_Greenenquire::greenenquire_group" action="adminhtml/system_config/edit/section/techievolve_greenenquire" resource="Techievolve_Greenenquire::greenenquire"/>
    </menu>
</config>

app/code/Techievolve/Greenenquire/etc/adminhtml/system.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Config:etc/system_file.xsd">
    <system>
        <section id="techievolve_greenenquire" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
            <label>Green Enquire</label>
            <tab>techievolve_core</tab>
            <resource>Techievolve_Greenenquire::greenenquire</resource>
            <group id="green_enquire" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1">
                <label>Green Enquire Configuration</label>
                <field id="send_email_to_name" translate="label" type="text" sortOrder="1" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                    <label>Receiver Name</label>
                    <comment>The email address to which the green enquire request email will be sent</comment>
                </field>
                <field id="send_email_to" translate="label" type="text" sortOrder="2" showInDefault="1" showInWebsite="1" showInStore="1" canRestore="1">
                    <label>Receiver Email</label>
                    <comment>The email address to which the green enquire request email will be sent</comment>
                </field>
                <field id="email_template_admin" translate="label comment" type="select" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
                    <label>Green Enquire Template</label>
                    <source_model>Magento\Config\Model\Config\Source\Email\Template</source_model>
                    <!-- This model return all transactional email template list of magento -->
                </field>
            </group>
        </section>
    </system>
</config>

app/code/Techievolve/Greenenquire/etc/frontend/routes.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:App/etc/routes.xsd">
    <router id="standard">
        <route id="greenenquire" frontName="greenenquire">
            <module name="Techievolve_Greenenquire" before="Magento_Backend"/>
        </route>
    </router>
</config>

app/code/Techievolve/Greenenquire/etc/acl.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
    <acl>
        <resources>
            <resource id="Magento_Backend::admin">
                <resource id="Magento_Backend::stores">
                    <resource id="Magento_Backend::stores_settings">
                        <resource id="Magento_Config::config">
                            <resource id="Techievolve_Greenenquire::greenenquire" title="Techievolve Green Enquire Extension" />
                        </resource>
                    </resource>
                </resource>
            </resource>
        </resources>
    </acl>
</config>

app/code/Techievolve/Greenenquire/etc/email_templates.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Email:etc/email_templates.xsd">
    <template id="techievolve_greenenquire_green_enquire_email_template_admin" label="Admin Email Template" file="green_enquire_admin.html" type="html" module="Techievolve_Greenenquire" area="frontend"/>
</config>

app/code/Techievolve/Greenenquire/etc/module.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Techievolve_Greenenquire" setup_version="1.0.0">
    </module>
</config>

app/code/Techievolve/Greenenquire/Helper/Email.php

<?php

namespace Techievolve\Greenenquire\Helper;

/**
 * Techievolve Greenenquire Email helper
 */
class Email extends \Magento\Framework\App\Helper\AbstractHelper {
	
   const XML_PATH_EMAIL_TEMPLATE_FIELD  = 'techievolve_greenenquire/green_enquire/email_template_admin';
   /**
    * @var \Magento\Framework\App\Config\ScopeConfigInterface
    */
   protected $_scopeConfig;

	/**
	 * Store manager
	 *
	 * @var \Magento\Store\Model\StoreManagerInterface
	 */
	protected $_storeManager;

	/**
	 * @var \Magento\Framework\Translate\Inline\StateInterface
	 */
	protected $inlineTranslation;

	/**
	 * @var \Magento\Framework\Mail\Template\TransportBuilder
	 */
	protected $_transportBuilder;
	
	/**
	 * @var string
	*/
	protected $temp_id;

	/**
	* @param Magento\Framework\App\Helper\Context $context
	* @param Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig
	* @param Magento\Store\Model\StoreManagerInterface $storeManager
	* @param Magento\Framework\Translate\Inline\StateInterface $inlineTranslation
	* @param Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
	*/
	public function __construct(
		 \Magento\Framework\App\Helper\Context $context,
		 \Magento\Store\Model\StoreManagerInterface $storeManager,
		 \Magento\Framework\Translate\Inline\StateInterface $inlineTranslation,
		 \Magento\Framework\Mail\Template\TransportBuilder $transportBuilder
	) {
		 $this->_scopeConfig = $context;
		 parent::__construct($context);
		 $this->_storeManager = $storeManager;
		 $this->inlineTranslation = $inlineTranslation;
		 $this->_transportBuilder = $transportBuilder; 
	}

	/**
	 * Return store configuration value of your template field that which id you set for template
	 *
	 * @param string $path
	 * @param int $storeId
	 * @return mixed
	 */
	protected function getConfigValue($path, $storeId) {
		return $this->scopeConfig->getValue($path, \Magento\Store\Model\ScopeInterface::SCOPE_STORE, $storeId);
	}

	/**
	 * Return store 
	 *
	 * @return Store
	 */
	public function getStore() {
		return $this->_storeManager->getStore();
	}

	/**
	 * Return template id according to store
	 *
	 * @return mixed
	 */
	public function getTemplateId($xmlPath) {
		return $this->getConfigValue($xmlPath, $this->getStore()->getStoreId());
	}

	/**
	 * [generateTemplate description]  with template file and tempaltes variables values                
	 * @param  Mixed $emailTemplateVariables 
	 * @param  Mixed $senderInfo             
	 * @param  Mixed $receiverInfo           
	 * @return void
	 */
	public function generateTemplate($emailTemplateVariables,$senderInfo,$receiverInfo)	{
		 
		$template = $this->_transportBuilder->setTemplateIdentifier($this->temp_id)
						->setTemplateOptions(
							[
								'area' => \Magento\Framework\App\Area::AREA_FRONTEND,
								'store' => $this->_storeManager->getStore()->getId(),
							]
						)
						->setTemplateVars($emailTemplateVariables)
						->setFrom($senderInfo)
						->addTo($receiverInfo['email'],$receiverInfo['name']);
		return $this;        
	}

	/**
	 * [sendInvoicedOrderEmail description]                  
	 * @param  Mixed $emailTemplateVariables 
	 * @param  Mixed $senderInfo             
	 * @param  Mixed $receiverInfo           
	 * @return void
	 */
	/* your send mail method*/
	public function sendAdminEmail($emailTemplateVariables,$senderInfo,$receiverInfo) {

		$this->temp_id = $this->getTemplateId(self::XML_PATH_EMAIL_TEMPLATE_FIELD);
		$this->inlineTranslation->suspend();    
		$this->generateTemplate($emailTemplateVariables,$senderInfo,$receiverInfo);    
		$transport = $this->_transportBuilder->getTransport();
		$transport->sendMessage();        
		$this->inlineTranslation->resume();
	}

}

app/code/Techievolve/Greenenquire/view/frontend/email/green_enquire_admin.html

<!--@subject {{trans "New Green Enquire Request Received"}} @-->
{{template config_path="design/email/header_template"}}

<p>{{trans "Green Enquire Request Details:"}}</p>
<table class="message-details">
    <tr>
        <td><b>{{trans "Name :"}}</b></td>
        <td>{{var data.customer_name}}</td>
    </tr>
    <tr>
        <td><b>{{trans "Email :"}}</b></td>
        <td>{{var data.customer_email}}</td>
    </tr>
    <tr>
        <td><b>{{trans "Phone :"}}</b></td>
        <td>{{var data.customer_telephone}}</td>
    </tr>
    <tr>
        <td><b>{{trans "Message :"}}</b></td>
        <td>{{var data.request_detail}}</td>
    </tr>
</table>
{{template config_path="design/email/footer_template"}}

app/code/Techievolve/Greenenquire/view/frontend/templates/form/enquire.phtml

<?php 
	$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
	$customerSession = $objectManager->create('Magento\Customer\Model\Session');

	if($customerSession->isLoggedIn()) {
		$customerName = $customerSession->getCustomer()->getName();
		$customerEmail = $customerSession->getCustomer()->getEmail();
	}
	else{
		$customerName = "";
		$customerEmail = "";
	}
?>
<div class="callnow-btn"><a href="tel:01 811 89 20"><?php echo __('CALL NOW') ?></a></div>
<div class="sidebar-enquire">
	<form
		class="form enquire"
		id="enquire-form"
		action="<?= $block->escapeUrl($block->getFormAction()) ?>"
		method="post"
		data-hasrequired="<?= $block->escapeHtmlAttr(__('* Required Fields')) ?>"
		data-mage-init='{"validation":{}}'>
		<h5><?php echo __('GO GREEN TODAY ENQUIRE NOW') ?></h5>
		<div class="form-group">
			<input name="name" id="name" title="<?= $block->escapeHtmlAttr(__('Name')) ?>" value="<?= $customerName ?>" class="form-control input-text" type="text" placeholder="NAME" data-validate="{required:true}"/>
		</div>
		<div class="form-group">
			<input name="email" id="email" title="<?= $block->escapeHtmlAttr(__('Email')) ?>" value="<?= $customerEmail ?>" class="form-control input-text" type="email" placeholder="MAIL" data-validate="{required:true, 'validate-email':true}"/>
		</div>
		<div class="form-group">
			<input name="telephone" id="telephone" title="<?= $block->escapeHtmlAttr(__('Phone Number')) ?>" value="<?= $block->escapeHtmlAttr($this->helper('Magento\Contact\Helper\Data')->getPostValue('telephone')) ?>" class="form-control input-text" type="text"  placeholder="Phone Number" data-validate="{required:true, 'validate-number':true}" >
		</div>
		<div class="form-group">
			<textarea name="message" id="message" title="<?= $block->escapeHtmlAttr(__('MESSAGE')) ?>" class="form-control input-text" cols="5" rows="3" data-validate="{required:true}" placeholder="MESSAGE" ><?= $block->escapeHtml($this->helper('Magento\Contact\Helper\Data')->getPostValue('comment')) ?></textarea>
		</div>
		<div class="btn-group">
			<button type="submit" title="<?= $block->escapeHtmlAttr(__('Submit')) ?>" value="SUBMIT" class="btn-submit action submit primary">
				<span><?= $block->escapeHtml(__('Submit')) ?></span>
			</button>
		</div>
   </form>
</div>

Categories: Magento

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *