{"id":353,"date":"2012-11-08T11:05:24","date_gmt":"2012-11-08T09:05:24","guid":{"rendered":"http:\/\/www.h-hennes.fr\/blog\/?p=353"},"modified":"2013-07-24T21:08:59","modified_gmt":"2013-07-24T19:08:59","slug":"magento-possibilite-de-sidentifier-comme-nimporte-quel-client-sur-le-front-office","status":"publish","type":"post","link":"https:\/\/www.h-hennes.fr\/blog\/2012\/11\/08\/magento-possibilite-de-sidentifier-comme-nimporte-quel-client-sur-le-front-office\/","title":{"rendered":"Magento : Possibilit\u00e9 de s&rsquo;identifier comme n&rsquo;importe quel client sur le front office."},"content":{"rendered":"<p>J&rsquo;ai r\u00e9cemment \u00e9t\u00e9 confront\u00e9 \u00e0 la probl\u00e9matique d&rsquo;afficher des informations de clients non visibles depuis le back office.<br \/>\nPour les voir il \u00e9tait donc n\u00e9cessaire de se connecter comme ce client sur le front office du site avec la restriction de ne pas disposer du mot de passe client.<\/p>\n<p>Apr\u00e8s quelques recherche dans les classes Magento, j&rsquo;ai trouv\u00e9 une fonction qui correspondait parfaitement \u00e0 mon besoin dans le fichier app\/code\/core\/Mage\/Customer\/Model\/Session.php<br \/>\nCette fonction est la suivante :<\/p>\n<pre lang=\"php\">\r\n\/**\r\n* Authorization customer by identifier\r\n*\r\n* @param   int $customerId\r\n* @return  bool\r\n*\/\r\npublic function loginById($customerId)\r\n{\r\n$customer = Mage::getModel('customer\/customer')-&gt;load($customerId);\r\nif ($customer-&gt;getId()) {\r\n$this-&gt;setCustomerAsLoggedIn($customer);\r\nreturn true;\r\n}\r\nreturn false;\r\n}\r\n<\/pre>\n<p>Elle permets de se connecter en tant que client en disposant uniquement de l&rsquo;id client.<br \/>\nMa solution est donc toute trouv\u00e9e en utilisant cette fonction.<\/p>\n<p>Pour rendre cette modification encore plus facile, nous allons faire un module qui nous permettra de nous connecter comme le client de notre choix directement depuis la gestion des clients dans l&rsquo;administration.<\/p>\n<p><a href=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2012\/11\/identifier-client.gif\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2012\/11\/identifier-client.gif\" alt=\"Nouvelle action &quot;M&#039;identifier comme ce client&quot;\" title=\"identifier-client\" width=\"600\" height=\"148\" class=\"aligncenter size-full wp-image-355\" srcset=\"https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2012\/11\/identifier-client.gif 600w, https:\/\/www.h-hennes.fr\/blog\/wp-content\/uploads\/2012\/11\/identifier-client-300x74.gif 300w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Pour commencer cr\u00e9ons le fichier de d\u00e9claration du module dans app\/etc\/modules\/Hhennes_LoginAs.xml<\/p>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\"?>\r\n<config>\r\n    <modules>\r\n        <Hhennes_LoginAs>\r\n            <active>true<\/active>\r\n            <codePool>local<\/codePool>\r\n        <\/Hhennes_LoginAs>\r\n    <\/modules>\r\n<\/config>\r\n<\/pre>\n<p>Voici \u00e0 pr\u00e9sent la structure du module que nous allons cr\u00e9er.<\/p>\n<pre>\r\n -- Hhennes_LoginAs\r\n   -- Helper\r\n    -- Data.php\r\n   -- Model\r\n    -- Observer.php\r\n   -- controllers\r\n\t-- LoginController.php\r\n   -- etc\r\n    -- config.xml\r\n<\/pre>\n<p>Celui-ci sera relativement basique puisqu&rsquo;il sera constitu\u00e9 d&rsquo;un Helper, d&rsquo;un controller Front Office et d&rsquo;un Observer<\/p>\n<p>En premier lieu voici le contenu du fichier de configuration :<\/p>\n<pre lang=\"xml\">\r\n<?xml version=\"1.0\"?>\r\n<config>\r\n \r\n <!-- Configuration de base du Module -->\r\n    <modules>\r\n        <Hhennes_LoginAs>\r\n            <version>0.1<\/version>    \r\n        <\/Hhennes_LoginAs>\r\n    <\/modules>\r\n <!-- Configuration globale -->\r\n    <global>\r\n        <models>\r\n            <hhennes_loginas>\r\n            <class>Hhennes_LoginAs_Model<\/class>\r\n            <\/hhennes_loginas>\r\n        <\/models>\r\n        <helpers>\r\n            <hhennes_loginas>\r\n                <class>Hhennes_LoginAs_Helper<\/class>\r\n            <\/hhennes_loginas>\r\n        <\/helpers>\r\n    <\/global>\r\n  <!-- Configuration Front Office-->\r\n    <frontend>\r\n        <routers>\r\n            <hhennes_loginas>\r\n                <use>standard<\/use>\r\n                <args>\r\n                    <module>Hhennes_LoginAs<\/module>\r\n                    <frontName>hhennes_loginas<\/frontName>\r\n                <\/args>\r\n            <\/hhennes_loginas>\r\n        <\/routers>\r\n        <!-- Traduction du module -->\r\n         <translate>\r\n            <modules>\r\n                <hhennes_LoginAs>\r\n                    <files>\r\n                        <default>Hhennes_LoginAs.csv<\/default>\r\n                    <\/files>\r\n                <\/hhennes_LoginAs>\r\n            <\/modules>\r\n        <\/translate>\r\n    <\/frontend>  \r\n    <!-- Configuration back Office -->\r\n    <adminhtml>\r\n        <events>\r\n            <adminhtml_block_html_before>\r\n                <observers>\r\n                    <mymodule>\r\n                        <!-- Add column to catalog product grid -->\r\n                        <class>hhennes_loginas\/observer<\/class>\r\n                        <method>addCustomerLoginAsColumn<\/method>\r\n                    <\/mymodule>\r\n                <\/observers>\r\n            <\/adminhtml_block_html_before>\r\n        <\/events>\r\n        <!-- Traduction du module -->\r\n         <translate>\r\n            <modules>\r\n                <Hhennes_LoginAs>\r\n                    <files>\r\n                        <default>Hhennes_LoginAs.csv<\/default>\r\n                    <\/files>\r\n                <\/Hhennes_LoginAs>\r\n            <\/modules>\r\n        <\/translate>\r\n    <\/adminhtml>  \r\n<\/config>\r\n<\/pre>\n<p>Comme vous pouvez le constater dans ce fichier de configuration, nous d\u00e9clarons :<br \/>\n&#8211; Nos models et helper<br \/>\n&#8211; le controller Front office<br \/>\n&#8211; l&rsquo;observeur lors de l&rsquo;\u00e9venement \u00ab\u00a0adminhtml_block_html_before\u00a0\u00bb<br \/>\n&#8211; les traductions du module<\/p>\n<p>Voici le contenu du fichier Data.php (Pas de contenu sp\u00e9cifique c&rsquo;est uniquement utils\u00e9 pour les traductions)<\/p>\n<pre lang=\"php\">\r\n<?php\r\nclass hhennes_LoginAs_Helper_Data extends Mage_Core_Helper_Abstract {   \r\n}\r\n?>\r\n<\/pre>\n<p>Passons \u00e0 pr\u00e9sent \u00e0 l&rsquo;Observer, qui sera charg\u00e9 d&rsquo;ajouter notre option \u00ab\u00a0M&rsquo;identifier comme ce client\u00a0\u00bb celui si est appell\u00e9 lors de l&rsquo;\u00e9venement \u00ab\u00a0adminhtml_block_html_before\u00a0\u00bb<\/p>\n<p>( Cette modification serait \u00e9galement possible en surchargeant la Grid initiale de Magento, cependant l&rsquo;utilisation des observers est moins intrusive et permet d&rsquo;\u00e9viter bien des probl\u00e8mes en cas de surcharges multiples)<\/p>\n<pre lang=\"php\">\r\n<?php\r\nclass Hhennes_LoginAs_Model_Observer {\r\n    \r\n      \r\n    \/**\r\n     * Ajout d'une nouvelle colonne dans le Grid Client de Magento\r\n     * @param Varien_Event_Observer $observer \r\n     *\/\r\n    public function addCustomerLoginAsColumn( Varien_Event_Observer $observer ) {\r\n        \r\n        $block = $observer->getBlock();\r\n        \r\n\t\t\/\/Si le block est la grid des clients on fait notre action\r\n        if ( $block instanceof Mage_Adminhtml_Block_Customer_Grid ) {\r\n            \r\n            \/\/On reprends le contenu de la colonne action de base et on rajoute l'option pour s'identifer\r\n            $block->addColumn('action',\r\n            array(\r\n                'header'    =>  Mage::helper('customer')->__('Action'),\r\n                'width'     => '100',\r\n                'type'      => 'action',\r\n                'getter'    => 'getId',\r\n                'actions'   => array(\r\n                    array(\r\n                        'caption'   => Mage::helper('customer')->__('Edit'),\r\n                        'url'       => array('base'=> '*\/*\/edit'),\r\n                        'field'     => 'id'\r\n                    ),\r\n\t\t\t\t\t\/\/Notre nouvelle action\r\n                    array(\r\n                        'caption'   => Mage::helper('hhennes_loginas')->__('Login As'),\r\n                        'url'       => array('base'=> 'hhennes_loginas\/login'), \/\/ Redirection vers le controller Front Office\r\n                        'field'     => 'id'\r\n                    )\r\n                ),\r\n                'filter'    => false,\r\n                'sortable'  => false,\r\n                'index'     => 'stores',\r\n                'is_system' => true,\r\n        ));\r\n            \r\n        }\r\n        \r\n    }\r\n    \r\n}\r\n?>\r\n<\/pre>\n<p>Une fois le processus back office termin\u00e9, nous pouvons \u00e0 pr\u00e9sent passer au controller Front Office dont voici le code<\/p>\n<pre lang=\"php\">\r\n<?php\r\nclass Hhennes_LoginAs_LoginController extends Mage_Core_Controller_Front_Action {\r\n    \r\n       \r\n    \/**\r\n     * Permet de s'identifer comme le client de son choix\r\n     *\/\r\n    public function indexAction(){\r\n         \r\n        \/\/R\u00e9cup\u00e9ration des informations de session\r\n        $customerSession = Mage::getSingleton('customer\/session');\r\n        \r\n        \/\/D\u00e9connexion si un client est d\u00e9j\u00e0 identifi\u00e9\r\n        if ( $customerSession->isLoggedIn() ) {\r\n            $customerSession->logout();\r\n        }\r\n        \r\n        \/\/R\u00e9cup\u00e9ration de l'id du client\r\n        $customerId = $this->getRequest()->getParam('id');\r\n       \r\n        \/\/Identification en tant que client\r\n        $customerSession->loginById($customerId);\r\n        \r\n        \/\/Message de confirmation de l'identification\r\n        Mage::getSingleton('customer\/session')->addSuccess($this->__('You are now identified as the choiced customer'));\r\n       \r\n       \/\/Redirection vers l'accueil du compte client \r\n       $this->_redirect('customer\/account\/');\r\n    }\r\n    \r\n}\r\n\r\n?>\r\n<\/pre>\n<p>Pour finir notre module il faut encore cr\u00e9er le fichier de traduction \u00ab\u00a0Hhennes_LoginAs.csv\u00a0\u00bb dans app\/locale\/FR_fr\/ avec le contenu suivant :<br \/>\n<br \/>\n### Fichier de traduction du module Ei LoginAs ###<br \/>\n\u00ab\u00a0Login As\u00a0\u00bb,\u00a0\u00bbM&rsquo;identifier comme ce client\u00a0\u00bb<br \/>\n\u00ab\u00a0You are now identified as the choiced customer\u00a0\u00bb,\u00a0\u00bbVous \u00eates \u00e0 pr\u00e9sent identif\u00e9 comme le client choisi\u00a0\u00bb<br \/>\n<br \/>\nUne fois le module install\u00e9 il est \u00e0 pr\u00e9sent possible de s&rsquo;identifier facilement et rapidement comme le client de son choix \ud83d\ude42<\/p>\n","protected":false},"excerpt":{"rendered":"<p>J&rsquo;ai r\u00e9cemment \u00e9t\u00e9 confront\u00e9 \u00e0 la probl\u00e9matique d&rsquo;afficher des informations de clients non visibles depuis le back office. Pour les voir il \u00e9tait donc n\u00e9cessaire de se connecter comme ce client sur le front office du site avec la restriction de ne pas disposer du mot de passe client. Apr\u00e8s quelques recherche dans les classes [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[246,6],"tags":[224,150,222,223],"class_list":["post-353","post","type-post","status-publish","format-standard","hentry","category-magento-2","category-trucs-et-astuces","tag-grid-magento","tag-magento","tag-observer-magento","tag-parametre-client-magento"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/353","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/comments?post=353"}],"version-history":[{"count":5,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/353\/revisions"}],"predecessor-version":[{"id":359,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/posts\/353\/revisions\/359"}],"wp:attachment":[{"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/media?parent=353"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/categories?post=353"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.h-hennes.fr\/blog\/wp-json\/wp\/v2\/tags?post=353"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}