0

I nave a issue with customer login event. I have application (flex app) outside magento and there is a form for customer login. I use this code to login customers:

require_once '../../app/Mage.php';
umask(0);
Mage::app();

Mage::getSingleton('core/session', array('name'=>'frontend'));
$session = Mage::getSingleton('customer/session');

try {
    $session->login ( $_REQUEST['username'], $_REQUEST['password'] );
    $return .= '<userid>'.$session->getCustomer()->getId().'</userid>'; 

} catch (Exception $e) {
    $return .= '<error>'.$e->getMessage().'</error>'; 
}

Everything works well and the customer is logged in. The issue is that the event is dispatched but Mage::Visitor and Mage::Reports does't catch the event and if I return from flex to product view page it gets MySQL errors in the "report_viewed_product_index" table. Can anyone help with this.

Thank you!

Deskin
  • 91
  • 1
  • 6

1 Answers1

0

Solved my issue reading How do I create a Magento session outside of Magento?

Here is what I've done

require_once '../../app/Mage.php';
    umask(0);
    Mage::app($_REQUEST['store_id'])->init();

    $core_session = Mage::getSingleton('core/session', array('name'=>'frontend'));
    $session = Mage::getSingleton('customer/session');

    $return = '<user>';

        $write = Mage::getSingleton ( 'core/resource' )->getConnection ( 'core_write' );
        $url = Mage::getUrl ( '*/*/*', array ('_current' => true ) );
        Mage::getSingleton ( 'core/session' )->setLastUrl ( $url );
        $visitor_id = $_SESSION ['core'] ['visitor_data'] ['visitor_id'];

        if (! empty ( $visitor_id )) {
            Mage::getSingleton ( 'log/visitor' )->setId ( $visitor_id );
        } else {
            Mage::getSingleton ( 'customer/session' )->setWishlistItemCount ( 0 );
            Mage::getSingleton ( 'catalog/session' )->setCatalogCompareItemsCount ( 0 );

            $write->query ( "INSERT INTO log_url_info (url, referer) VALUES (?, ?)", array ($url, Mage::helper ( 'core/http' )->getHttpReferer ( true ) ) );
            $url_id = $write->lastInsertId ();
            $log_visitor = Mage::getSingleton ( 'log/visitor' )->initServerData ()->setFirstVisitAt ( now () )->setIsNewVisitor ( true )->setLastVisitAt ( now () )->setLastUrlId ( $url_id )->save ();
            $write->query ( "INSERT INTO log_url (url_id, visitor_id, visit_time) VALUES (?, ?, ?)", array ($url_id, $log_visitor->getId (), now () ) );
            $core_session->setVisitorData ( $log_visitor->getData () );

            $visitor_id = $log_visitor->getId ();
        }

        try {
            $session->login ( $_REQUEST['username_cl_mag'], $_REQUEST['password_cl_mag'] );
            //$session->setCustomerAsLoggedIn($session->getCustomer());
            //$customer = Mage::getModel('customer/customer')->setWebsiteId(Mage::app()->getStore()->getWebsiteId());

            $customerId = $session->getCustomerId();
            $eventModel = Mage::getModel('reports/event');
            $eventModel->updateCustomerType($visitor_id, $customerId);

            Mage::getModel('reports/product_index_compared')
                ->updateCustomerFromVisitor()
                ->calculate();
            Mage::getModel('reports/product_index_viewed')
                ->updateCustomerFromVisitor()
                ->calculate();

            $return .= '<userid>'.$session->getCustomerId().'</userid>'; 

        } catch (Exception $e) {
            $return .= '<error>'.$e->getMessage().'</error>'; 
        }

    print $return .= "</user>";
Community
  • 1
  • 1
Deskin
  • 91
  • 1
  • 6