के बाद से कोई भी एक अच्छा कारण के साथ नहीं आया था कि मैं क्या पूछ रहा था मुझे लगता है कि मेरी विधि सुरक्षित है की तरह है। इसलिए, इस प्रश्न को खुला नहीं छोड़ने के लिए, मैंने एक उत्तर के रूप में कोड को जोड़ने और इसे स्वीकार किए जाने के रूप में चिह्नित करने का निर्णय लिया।
तो मेरे पास एक नई एक्सटेंशन है जिसे Easylife_Simulate
निम्नलिखित फ़ाइलों के साथ बुलाया गया है:
app/etc/modules/Easylife_Simulte.xml
- घोषणा फ़ाइल:
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Simulate>
<codePool>local</codePool>
<active>true</active>
<depends>
<Mage_Customer />
</depends>
</Easylife_Simulate>
</modules>
</config>
app/code/local/Easylife/Simulte/etc/config.xml
- कॉन्फ़िगरेशन फ़ाइल
<?xml version="1.0"?>
<config>
<modules>
<Easylife_Simulate>
<version>0.0.1</version>
</Easylife_Simulate>
</modules>
<global>
<helpers>
<easylife_simulate>
<class>Easylife_Simulate_Helper</class>
</easylife_simulate>
</helpers>
<models>
<easylife_simulate>
<class>Easylife_Simulate_Model</class>
</easylife_simulate>
</models>
<resources>
<easylife_simulate_setup>
<setup>
<module>Easylife_Simulate</module>
<class>Mage_Customer_Model_Resource_Setup</class>
</setup>
</easylife_simulate_setup>
</resources>
</global>
<frontend>
<routers>
<easylife_simulate>
<use>standard</use>
<args>
<module>Easylife_Simulate</module>
<frontName>simulate</frontName>
</args>
</easylife_simulate>
</routers>
</frontend>
<adminhtml>
<events>
<controller_action_layout_render_before_adminhtml_customer_edit>
<observers>
<easylife_simulate>
<class>easylife_simulate/observer</class>
<method>addAutoLoginButton</method>
</easylife_simulate>
</observers>
</controller_action_layout_render_before_adminhtml_customer_edit>
</events>
</adminhtml>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Easylife_Simulate before="Mage_Adminhtml">Easylife_Simulate_Adminhtml</Easylife_Simulate>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
app/code/local/Easylife/Simulate/sql/easylife_simulate_setup/install-0.0.1.php
- स्क्रिप्ट स्थापित करें - एक नई ग्राहक विशेषता जोड़ता है:
<?php
$this->addAttribute('customer', 'login_key', array(
'type' => 'text',
'label' => 'Auto login key',
'input' => 'text',
'position' => 999,
'required' => false
));
app/code/local/Easylife/Simulate/Model/Observer.php
- ग्राहक व्यवस्थापक संपादित फ़ॉर्म में एक बटन जोड़ने के लिए पर्यवेक्षक
<?php
class Easylife_Simulate_Model_Observer extends Mage_ProductAlert_Model_Observer{
public function addAutoLoginButton($observer){
$block = Mage::app()->getLayout()->getBlock('customer_edit');
if ($block){
$customer = Mage::registry('current_customer');
$block->addButton('login', array(
'label' => Mage::helper('customer')->__('Login as this customer'),
'onclick' => 'window.open(\''.Mage::helper('adminhtml')->getUrl('adminhtml/simulate/login', array('id'=>$customer->getId())).'\')',
), 100);
}
}
}
app/code/local/Easylife/Simulate/controllers/Adminhtml/SimulateController.php
- व्यवस्थापक नियंत्रक जो ऊपर उत्पन्न बटन पर क्लिक को संभालता है।
<?php
class Easylife_Simulate_Adminhtml_SimulateController extends Mage_Adminhtml_Controller_Action{
public function loginAction(){
$id = $this->getRequest()->getParam('id');
$customer = Mage::getModel('customer/customer')->load($id);
if (!$customer->getId()){
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('easylife_simulate')->__('Customer does not exist'));
$this->_redirectReferer();
}
else {
$key = Mage::helper('core')->uniqHash();
$customer->setLoginKey($key)->save();
$this->_redirect('simulate/index/index', array('id'=>$customer->getId(), 'login_key'=>$key));
}
}
}
app/code/local/Easylife/Simulate/controllers/IndexController.php
- फ्रंटलाइन कंट्रोलर जो ऑटोलॉगिन बनाता है।
<?php
class Easylife_Simulate_IndexController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
$id = $this->getRequest()->getParam('id');
$key = $this->getRequest()->getParam('login_key');
if (empty($key)){
$this->_redirect('');
}
else{
$customer = Mage::getModel('customer/customer')->load($id);
if ($customer->getId() && $customer->getLoginKey() == $key){
$customer->setLoginKey('')->save();
Mage::getSingleton('customer/session')->setCustomerAsLoggedIn($customer);
Mage::getSingleton('customer/session')->renewSession();
}
$this->_redirect('customer/account/index');
}
}
}
app/code/local/Easylife/Simulte/Helper/Data.php
- मॉड्यूल सहायक
<?php
class Easylife_Simulate_Helper_Data extends Mage_Core_Helper_Abstract{
}
बस। यह मेरे लिए काम करता है। जैसा कि मैंने सवाल में कहा, नकारात्मक पक्ष यह है कि यदि 2 व्यवस्थापक उसी समय (लगभग) एक ही ग्राहक के लिए लॉगिन बटन दबाते हैं, तो उनमें से एक लॉग इन नहीं किया जाएगा। लेकिन वह कुछ सेकंड बाद प्रक्रिया को दोहरा सकता है।