Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rebuild checkout page in opencart on passing registered email as querystring to checkout/cart [closed]

Tags:

php

opencart

I have a requirement to rebuild checkout page, containing latest abandoned products.

If you are already logged into opencart consumer site and hit this url - http://www.example.com/index.php?route=checkout/cart, it will definitely list all products in cart ( that are yet to be purchased).

Without logging into consumer website, if someone directly hits this url - http://www.example.com/index.php?route=checkout/cart&[email protected] - it will list all products that are yet to be purchased by [email protected] (also known as abandoned products/cart), provided [email protected] is a registered user of opencart website.

I want to pass that email address from the url as a querystring to the checkout/cart page and use that to return abandoned products for that customer email.

How can I take that email in checkout/cart page and show the user the abandoned cart products?

I am very much new to opencart, i don't know much about core functionality, so i searched how to achieve this, but landed with extensions ( such as THIS) that are paid, my requirement is to have it build within URL, that i explained above.

Provided : Opencart installation is a stock version, no other addon/plugins are installed.

EDIT

I have tried following.

if(isset($this->request->get['email'])) 
{ 
    $email = $this->request->get['email']; 
    $cart_details = $this->db->query("SELECT cart FROM " . DB_PREFIX . "customer c where c.email = '" . $email . "'"); // just for tesing, i will fix this to prevent SQL injection.
    $this->session->data['cart']= $cart_details->row['cart']; 
}

when i do echo with "$cart_details->row['cart']", it got required value, but even after setting that value to session checkout page is not rebuilding list of abandoned products.

like image 438
Arindam Nayak Avatar asked Sep 05 '14 10:09

Arindam Nayak


1 Answers

I have changed checkout/controller/checkout/cart.php index method, and added a check to see if the custom url contains "cmail". Then I validate the email address supplied in the url. At this point, I query the DB to get the customer's "cart" column ( note i have used escape to prevent SQL injection), which is then decoded and put into session. If you hit the site with the url "localhost/index.php?route=checkout/cart&[email protected]", you will get the cart rebuilt in the page. I have used following code.

if(isset($this->request->get['cmail']))
{
    $email = $this->request->get['cmail'];  
    if(filter_var($email, FILTER_VALIDATE_EMAIL))
    {
        $cart_details = $this->db->query("SELECT cart,customer_id FROM " . DB_PREFIX . "customer WHERE LOWER(email) = '" . $this->db->escape(utf8_strtolower($email)) . "'");

         if($cart_details->num_rows > 0)
         {
             $cart_data = $cart_details->row['cart'];
             if ($cart_data && is_string($cart_data)) {
                 $cart = unserialize($cart_data);

                 foreach ($cart as $key => $value) {
                    $this->session->data['cart'][$key] = $value;
                 }          
             }
         }
    }
}
like image 109
Arindam Nayak Avatar answered Sep 19 '22 19:09

Arindam Nayak