Version Notes
Release version 1.0.0
Download this release
Release Info
| Developer | SSTech |
| Extension | SSTech_Abandcart |
| Version | 1.0.0 |
| Comparing to | |
| See all releases | |
Version 1.0.0
- app/code/community/SSTech/Abandcart/Block/Debug/Report.php +41 -0
- app/code/community/SSTech/Abandcart/Helper/Data.php +9 -0
- app/code/community/SSTech/Abandcart/Model/Cron.php +22 -0
- app/code/community/SSTech/Abandcart/Model/Report.php +300 -0
- app/code/community/SSTech/Abandcart/controllers/Adminhtml/DebugController.php +33 -0
- app/code/community/SSTech/Abandcart/controllers/IndexController.php +119 -0
- app/code/community/SSTech/Abandcart/etc/adminhtml.xml +28 -0
- app/code/community/SSTech/Abandcart/etc/config.xml +87 -0
- app/code/community/SSTech/Abandcart/etc/system.xml +104 -0
- app/etc/modules/SSTech_Abandcart.xml +9 -0
- app/locale/en_US/template/email/abandcart/emailreport.html +65 -0
- package.xml +26 -0
app/code/community/SSTech/Abandcart/Block/Debug/Report.php
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Get debug report button and link in the admin backend
|
| 4 |
+
*
|
| 5 |
+
* Stech Abandcart Debug Report Block
|
| 6 |
+
*
|
| 7 |
+
* @category SSTech
|
| 8 |
+
* @package SSTech_Abandcart
|
| 9 |
+
* @author SSTech
|
| 10 |
+
* */
|
| 11 |
+
|
| 12 |
+
class SSTech_Abandcart_Block_Debug_Report extends Mage_Adminhtml_Block_System_Config_Form_Field
|
| 13 |
+
{
|
| 14 |
+
/**
|
| 15 |
+
* get html element for button
|
| 16 |
+
*
|
| 17 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
| 18 |
+
* @return Mage_Adminhtml_Block_System_Config_Form_Field
|
| 19 |
+
*/
|
| 20 |
+
protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
|
| 21 |
+
$this->setElement($element);
|
| 22 |
+
return $this->_getAddRowButtonHtml($this->__('Send Email Now'));
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
/**
|
| 26 |
+
* get row button html for button
|
| 27 |
+
*
|
| 28 |
+
* @param Varien_Data_Form_Element_Abstract $element
|
| 29 |
+
* @return String $html
|
| 30 |
+
*/
|
| 31 |
+
|
| 32 |
+
protected function _getAddRowButtonHtml($title) {
|
| 33 |
+
$url = Mage::helper('adminhtml')->getUrl("abandcart/debug/sendreport");
|
| 34 |
+
return $this->getLayout()->createBlock('adminhtml/widget_button')
|
| 35 |
+
->setType('button')
|
| 36 |
+
->setLabel($this->__($title))
|
| 37 |
+
->setOnClick("window.location.href='" . $url . "'")
|
| 38 |
+
->toHtml();
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
}
|
app/code/community/SSTech/Abandcart/Helper/Data.php
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
@package SSTech_Abandcart
|
| 4 |
+
@author SSTech
|
| 5 |
+
Empty helper to keep admin from breaking
|
| 6 |
+
*/
|
| 7 |
+
class SSTech_abandcart_Helper_Data extends Mage_Core_Helper_Abstract
|
| 8 |
+
{
|
| 9 |
+
}
|
app/code/community/SSTech/Abandcart/Model/Cron.php
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Run cron for abandoned cart
|
| 4 |
+
*
|
| 5 |
+
* Stech Abandcart Cron Model
|
| 6 |
+
*
|
| 7 |
+
* @category SSTech
|
| 8 |
+
* @package SSTech_Abandcart
|
| 9 |
+
* @author SSTech
|
| 10 |
+
* */
|
| 11 |
+
class SSTech_Abandcart_Model_Cron
|
| 12 |
+
{
|
| 13 |
+
/**
|
| 14 |
+
* Send email report to users
|
| 15 |
+
*/
|
| 16 |
+
public function emailreport()
|
| 17 |
+
{
|
| 18 |
+
$reporter = Mage::getModel('sstech_abandcart/report');
|
| 19 |
+
// If disabled don't send the email
|
| 20 |
+
if ($reporter->isEnabled()) Mage::log($reporter->sendReport());;
|
| 21 |
+
}
|
| 22 |
+
}
|
app/code/community/SSTech/Abandcart/Model/Report.php
ADDED
|
@@ -0,0 +1,300 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Stech Abandcart Report
|
| 4 |
+
*
|
| 5 |
+
* @category SSTech
|
| 6 |
+
* @package SSTech_Abandcart
|
| 7 |
+
* @author Developer
|
| 8 |
+
*/
|
| 9 |
+
class SSTech_Abandcart_Model_Report extends Mage_Core_Model_Abstract
|
| 10 |
+
{
|
| 11 |
+
|
| 12 |
+
private $_enabled = null;
|
| 13 |
+
private $_from_email = null;
|
| 14 |
+
private $_to_email = null;
|
| 15 |
+
private $_template = null;
|
| 16 |
+
private $_days = 7; /* to calculate the number of days*/
|
| 17 |
+
private $_currency = null;
|
| 18 |
+
private $_store_url = null;
|
| 19 |
+
private $_success_count = 0;
|
| 20 |
+
private $_unsuccess_count = 0;
|
| 21 |
+
private $_skin_url = null;
|
| 22 |
+
private $_recepient_email = null;
|
| 23 |
+
private $_recepient_found = null;
|
| 24 |
+
private $_customer_name=null;
|
| 25 |
+
private $_return_cart = null;
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* (non-PHPdoc)
|
| 29 |
+
* @see Mage_Shell_Abstract::_construct()
|
| 30 |
+
*/
|
| 31 |
+
public function _construct() {
|
| 32 |
+
$this->_enabled = Mage::getStoreConfig('sstech_abandcart/sstech_abandcart_settings/report_enabled');
|
| 33 |
+
$this->_from_email = Mage::getStoreConfig('sstech_abandcart/sstech_abandcart_settings/report_from_email');
|
| 34 |
+
$this->_template = Mage::getStoreConfig('sstech_abandcart/sstech_abandcart_settings/report_template');
|
| 35 |
+
$this->_days = Mage::getStoreConfig('sstech_abandcart/sstech_abandcart_settings/report_days');
|
| 36 |
+
$this->_currency = Mage::app()->getLocale()->currency(Mage::app()->getStore()->getCurrentCurrencyCode())->getSymbol();
|
| 37 |
+
$this->_store_url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB);
|
| 38 |
+
$this->_skin_url = Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_SKIN);
|
| 39 |
+
$this->_recepient_email = Mage::getStoreConfig('sstech_abandcart/sstech_abandcart_settings/report_to_email');
|
| 40 |
+
} // end
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* check if email reporting is enabled
|
| 44 |
+
*
|
| 45 |
+
* @return boolean
|
| 46 |
+
*/
|
| 47 |
+
|
| 48 |
+
public function isEnabled() {
|
| 49 |
+
return $this->_enabled;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* send email for abandoned cart to the shopping cart users
|
| 54 |
+
*
|
| 55 |
+
* @return String $fresult
|
| 56 |
+
*/
|
| 57 |
+
|
| 58 |
+
public function sendReport() {
|
| 59 |
+
|
| 60 |
+
$html = "";
|
| 61 |
+
$core_helper = Mage::helper('core');
|
| 62 |
+
$image_helper = Mage::helper('catalog/image');
|
| 63 |
+
/* Date Default Function use to calculate the Difference*/
|
| 64 |
+
date_default_timezone_set(date_default_timezone_get());
|
| 65 |
+
$timezone=date_default_timezone_get();
|
| 66 |
+
$datetime = Zend_Date::now();
|
| 67 |
+
$now = $datetime->get('yyyy-MM-dd HH:mm:ss');
|
| 68 |
+
|
| 69 |
+
$from = strtotime($now)-(60*60*24*30); // 30 days before today
|
| 70 |
+
$to = strtotime($now)-(60*60*24*$this->_days);
|
| 71 |
+
$from = date('Y-m-d H:i:s', $from);
|
| 72 |
+
$to = date('Y-m-d H:i:s', $to);
|
| 73 |
+
|
| 74 |
+
try {
|
| 75 |
+
$abandon = $this->_getAllAbandonedCart($now , $from);
|
| 76 |
+
if(empty($abandon)) { return "NOTICE|There is no Abandoned cart present";}
|
| 77 |
+
$products = Mage::getModel('catalog/product');
|
| 78 |
+
foreach($abandon as $a){
|
| 79 |
+
$quotes_item = Mage::getModel('sales/quote_item')->getCollection()->addFieldToFilter('quote_id',$a['entity_id']);
|
| 80 |
+
$b = $quotes_item->getData();
|
| 81 |
+
if($this->isRecepient($a['customer_email'])){
|
| 82 |
+
foreach($b as $c){
|
| 83 |
+
$price = $c['qty']*$c['price'];
|
| 84 |
+
if($c['parent_item_id'] == null){
|
| 85 |
+
$pcache = $products->loadByAttribute('sku', $c['sku']);
|
| 86 |
+
$name = $pcache->getName();
|
| 87 |
+
$thumb = $image_helper->init($pcache, 'thumbnail')->resize(60,60);
|
| 88 |
+
$eurl = $this->_store_url.$this->_getParent($pcache)->getUrlKey();
|
| 89 |
+
$html .= "<tr>";
|
| 90 |
+
$html .= "<td><img src='".$thumb."'></td><td><a href='".$eurl."'>".$name."</a></td><td>".$c['sku']."</td><td>".intval($c['qty'])."</td><td>".$core_helper->formatPrice($price, FALSE)."</td>";
|
| 91 |
+
$html .= "</tr>";
|
| 92 |
+
}
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
$html .= "<tr><td></td><td></td><td></td><td>Subtotal</td><td align='right'>".$core_helper->formatprice($a['subtotal'],false)."</td></tr>";
|
| 96 |
+
$html .= $this->_shippingCost($a['subtotal'],$a['grand_total']);
|
| 97 |
+
$html .= "<tr><td></td><td></td><td></td><td><b>Grand Total</b></td><td><b>".$core_helper->formatprice($a['grand_total'],false)."</b></td></tr>";
|
| 98 |
+
$this->_customer_name = $a['customer_firstname'];
|
| 99 |
+
$this->_return_cart = $this->_getReturnCartForm($a['customer_id']);
|
| 100 |
+
$res = $this->sendEmail($html,$this->_store_url,$this->_customer_name,$this->_return_cart,$a['customer_email']);
|
| 101 |
+
$html=""; //reset html
|
| 102 |
+
$this->_success_count = ($res == "YES") ? ($this->_success_count+1) : $this->_success_count;
|
| 103 |
+
$this->_unsuccess_count = ($res == "NO") ? ($this->_unsuccess_count+1) : $this->_unsuccess_count;
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
if(!is_null($this->_recepient_found) && $this->_recepient_found == "no")
|
| 108 |
+
{
|
| 109 |
+
throw new Exception(' - Provided Recepient does not have abandoned cart');
|
| 110 |
+
}
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
catch (Exception $e)
|
| 114 |
+
{
|
| 115 |
+
return "ERROR|There was a problem sending the email".$e->getMessage();
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
$fresult ="NOTICE|".$this->_success_count." mails sent successfully ".$this->_unsuccess_count." were not delivered";
|
| 119 |
+
return $fresult;
|
| 120 |
+
|
| 121 |
+
} // end
|
| 122 |
+
|
| 123 |
+
|
| 124 |
+
|
| 125 |
+
|
| 126 |
+
/**
|
| 127 |
+
* create return to cart form
|
| 128 |
+
*
|
| 129 |
+
* @param int $id
|
| 130 |
+
* @return String
|
| 131 |
+
*/
|
| 132 |
+
private function _getReturnCartForm($id){
|
| 133 |
+
|
| 134 |
+
$customer = Mage::getModel('customer/customer')->load($id);
|
| 135 |
+
|
| 136 |
+
$form = "";
|
| 137 |
+
|
| 138 |
+
$form .= "<form action='http://www.testvitality4life.com.au/vl4/autologin/' method='post'>";
|
| 139 |
+
|
| 140 |
+
$form .= "<input type='hidden' name='login[username]' value='".$customer->getEmail()."'>";
|
| 141 |
+
|
| 142 |
+
$form .= "<input type='hidden' name='login[password]' value='".$customer->getPasswordHash()."'>";
|
| 143 |
+
|
| 144 |
+
$form .= "<input type='submit' value='Return to your cart'>";
|
| 145 |
+
|
| 146 |
+
$form .= "</form>";
|
| 147 |
+
|
| 148 |
+
return $form;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
/**
|
| 152 |
+
* check if a shipping cost is applied
|
| 153 |
+
*
|
| 154 |
+
* @param double $subtotal
|
| 155 |
+
* @param double $grandtotal
|
| 156 |
+
* @return String
|
| 157 |
+
*/
|
| 158 |
+
|
| 159 |
+
private function _shippingCost($subtotal , $grandtotal){
|
| 160 |
+
|
| 161 |
+
$shipping = $grandtotal - $subtotal;
|
| 162 |
+
|
| 163 |
+
if($shipping > 0)
|
| 164 |
+
|
| 165 |
+
{
|
| 166 |
+
|
| 167 |
+
return "<tr><td></td><td></td><td></td><td>Shipping Cost</td><td align='right'>".Mage::helper('core')->formatprice($shipping,false)."</td></tr>";
|
| 168 |
+
|
| 169 |
+
} else {
|
| 170 |
+
|
| 171 |
+
return "";
|
| 172 |
+
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
/**
|
| 178 |
+
* check if a specific cart user needs to be sent email
|
| 179 |
+
*
|
| 180 |
+
* @param String $email
|
| 181 |
+
* @return boolean
|
| 182 |
+
*/
|
| 183 |
+
|
| 184 |
+
private function isRecepient($email){
|
| 185 |
+
if(is_null($this->_recepient_email) || empty($this->_recepient_email)){
|
| 186 |
+
return true;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
$emails = explode(';',$this->_recepient_email);
|
| 190 |
+
|
| 191 |
+
foreach($emails as $e)
|
| 192 |
+
{
|
| 193 |
+
if($e == $email)
|
| 194 |
+
{
|
| 195 |
+
$this->_recepient_found = "yes";
|
| 196 |
+
return true;
|
| 197 |
+
} else {
|
| 198 |
+
$this->_recepient_found = "no";
|
| 199 |
+
return false;
|
| 200 |
+
}
|
| 201 |
+
}
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
/**
|
| 205 |
+
* get all abandoned cart in given date range
|
| 206 |
+
*
|
| 207 |
+
* @param datetime $to
|
| 208 |
+
* @param datetime $from
|
| 209 |
+
* @return array
|
| 210 |
+
*/
|
| 211 |
+
|
| 212 |
+
private function _getAllAbandonedCart( $to , $from){
|
| 213 |
+
$quotes = Mage::getModel('sales/quote')->getCollection();
|
| 214 |
+
|
| 215 |
+
$quotes->addFieldToFilter('updated_at',array('to'=>$to ,'from'=>$from , 'date'=>true));
|
| 216 |
+
|
| 217 |
+
$quotes->addFieldToFilter('is_active', 1);
|
| 218 |
+
|
| 219 |
+
$quotes->addFieldToFilter('customer_email', array('notnull'=>true));
|
| 220 |
+
$quotes->addFieldToFilter('items_count',array('gt'=> 0));
|
| 221 |
+
|
| 222 |
+
$quotes->setOrder('entity_id', 'DESC');
|
| 223 |
+
|
| 224 |
+
#$quotes->setPageSize(1);
|
| 225 |
+
|
| 226 |
+
return $quotes->getData();
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
/**
|
| 230 |
+
* get parent product of the product
|
| 231 |
+
*
|
| 232 |
+
* @param Mage_Catalog_Model_Product $product
|
| 233 |
+
* @return Mage_Catalog_Model_Product $parent
|
| 234 |
+
*/
|
| 235 |
+
|
| 236 |
+
private function _getParent($product){
|
| 237 |
+
|
| 238 |
+
if($product->getTypeId() == "simple"){
|
| 239 |
+
|
| 240 |
+
$parentIds = Mage::getModel('catalog/product_type_grouped')->getParentIdsByChild($product->getId());
|
| 241 |
+
|
| 242 |
+
if(!$parentIds)
|
| 243 |
+
|
| 244 |
+
$parentIds = Mage::getModel('catalog/product_type_configurable')->getParentIdsByChild($product->getId());
|
| 245 |
+
|
| 246 |
+
if(isset($parentIds[0])){
|
| 247 |
+
|
| 248 |
+
$parent = Mage::getModel('catalog/product')->load($parentIds[0]);
|
| 249 |
+
|
| 250 |
+
return $parent;
|
| 251 |
+
|
| 252 |
+
} else {
|
| 253 |
+
|
| 254 |
+
return $product;
|
| 255 |
+
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
}
|
| 261 |
+
|
| 262 |
+
/**
|
| 263 |
+
* send email
|
| 264 |
+
*
|
| 265 |
+
* @param String $html
|
| 266 |
+
* @param String $email
|
| 267 |
+
* @return String YES|NO
|
| 268 |
+
*/
|
| 269 |
+
|
| 270 |
+
private function sendEmail($html ,$url,$name, $returncart,$email) {
|
| 271 |
+
|
| 272 |
+
$result = true;
|
| 273 |
+
|
| 274 |
+
try {
|
| 275 |
+
|
| 276 |
+
// send mail to each recipient
|
| 277 |
+
$mail = Mage::getModel('core/email_template');
|
| 278 |
+
$mail->setDesignConfig(array('area' => 'frontend', 'store' => Mage::app()->getStore()->getId()))
|
| 279 |
+
->sendTransactional(
|
| 280 |
+
$this->_template,
|
| 281 |
+
$this->_from_email,
|
| 282 |
+
trim($email),
|
| 283 |
+
null,
|
| 284 |
+
array('items'=>$html,'store_url'=>$url,'customer_name'=>$name,'return_cart'=>$returncart));
|
| 285 |
+
|
| 286 |
+
$result = $mail->getSentSuccess() ? $result : false;
|
| 287 |
+
|
| 288 |
+
}
|
| 289 |
+
catch (Exception $e)
|
| 290 |
+
{
|
| 291 |
+
log($e->getMessage());
|
| 292 |
+
$exception = $e.getMessage();
|
| 293 |
+
throw new Exception($exception);
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
return $result ? "YES" : "NO";
|
| 297 |
+
|
| 298 |
+
}
|
| 299 |
+
|
| 300 |
+
} // end class
|
app/code/community/SSTech/Abandcart/controllers/Adminhtml/DebugController.php
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* To change this template, choose Tools | Templates
|
| 5 |
+
* and open the template in the editor.
|
| 6 |
+
*
|
| 7 |
+
*
|
| 8 |
+
* sStech Abandcart Adminhtml Debug Controller
|
| 9 |
+
*
|
| 10 |
+
* @category SSTech
|
| 11 |
+
* @package SSTech Abandcart
|
| 12 |
+
* @author SSTech
|
| 13 |
+
*/
|
| 14 |
+
class SSTech_Abandcart_Adminhtml_DebugController extends Mage_Adminhtml_Controller_Action
|
| 15 |
+
{
|
| 16 |
+
/**
|
| 17 |
+
* Generate and send instant report for abandoned cart
|
| 18 |
+
*/
|
| 19 |
+
public function sendreportAction()
|
| 20 |
+
{
|
| 21 |
+
$returnVal = Mage::getModel('sstech_abandcart/report')->sendReport();
|
| 22 |
+
$result = explode('|',$returnVal);
|
| 23 |
+
$success = ($result[0] == "NOTICE") ? true : false;
|
| 24 |
+
$msg = $result[1];
|
| 25 |
+
if ($success) {
|
| 26 |
+
Mage::getSingleton('adminhtml/session')->addSuccess($this->__($msg));
|
| 27 |
+
}
|
| 28 |
+
else{
|
| 29 |
+
Mage::getSingleton('adminhtml/session')->addError($this->__($msg));
|
| 30 |
+
}
|
| 31 |
+
$this->_redirectReferer();
|
| 32 |
+
}
|
| 33 |
+
}
|
app/code/community/SSTech/Abandcart/controllers/IndexController.php
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* To autologin via email
|
| 4 |
+
*
|
| 5 |
+
* SSTech Autologin controller
|
| 6 |
+
*
|
| 7 |
+
* @category SSTech
|
| 8 |
+
* @package SSTech_Abandcart
|
| 9 |
+
* @author SSTech
|
| 10 |
+
* */
|
| 11 |
+
class SSTech_Abandcart_IndexController extends Mage_Core_Controller_Front_Action{
|
| 12 |
+
|
| 13 |
+
const EXCEPTION_EMAIL_NOT_CONFIRMED = 1;
|
| 14 |
+
const EXCEPTION_INVALID_EMAIL_OR_PASSWORD = 2;
|
| 15 |
+
|
| 16 |
+
public function indexAction(){
|
| 17 |
+
if ($this->_getSession()->isLoggedIn()) {
|
| 18 |
+
$this->_redirect('checkout/cart');
|
| 19 |
+
return;
|
| 20 |
+
}
|
| 21 |
+
$session = $this->_getSession();
|
| 22 |
+
|
| 23 |
+
if ($this->getRequest()->isPost()) {
|
| 24 |
+
$login = $this->getRequest()->getPost('login');
|
| 25 |
+
if (!empty($login['username']) && !empty($login['password'])) {
|
| 26 |
+
try {
|
| 27 |
+
$this->login($login['username'], $login['password']);
|
| 28 |
+
} catch (Mage_Core_Exception $e) {
|
| 29 |
+
switch ($e->getCode()) {
|
| 30 |
+
case Mage_Customer_Model_Customer::EXCEPTION_EMAIL_NOT_CONFIRMED:
|
| 31 |
+
$value = Mage::helper('customer')->getEmailConfirmationUrl($login['username']);
|
| 32 |
+
$message = Mage::helper('customer')->__('This account is not confirmed. <a href="%s">Click here</a> to resend confirmation email.', $value);
|
| 33 |
+
break;
|
| 34 |
+
case Mage_Customer_Model_Customer::EXCEPTION_INVALID_EMAIL_OR_PASSWORD:
|
| 35 |
+
$message = $e->getMessage();
|
| 36 |
+
break;
|
| 37 |
+
default:
|
| 38 |
+
$message = $e->getMessage();
|
| 39 |
+
}
|
| 40 |
+
$session->addError($message);
|
| 41 |
+
$session->setUsername($login['username']);
|
| 42 |
+
} catch (Exception $e) {
|
| 43 |
+
// Mage::logException($e); // PA DSS violation: this exception log can disclose customer password
|
| 44 |
+
}
|
| 45 |
+
} else {
|
| 46 |
+
$session->addError($this->__('Login and password are required.'));
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
$this->_redirect('checkout/cart');
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* Retrieve customer session model object
|
| 55 |
+
*
|
| 56 |
+
* @return Mage_Customer_Model_Session
|
| 57 |
+
*/
|
| 58 |
+
protected function _getSession()
|
| 59 |
+
{
|
| 60 |
+
return Mage::getSingleton('customer/session');
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
public function login($username, $password)
|
| 64 |
+
{
|
| 65 |
+
/** @var $customer Mage_Customer_Model_Customer */
|
| 66 |
+
$session = $this->_getSession();
|
| 67 |
+
$customer = Mage::getModel('customer/customer')
|
| 68 |
+
->setWebsiteId(Mage::app()->getStore()->getWebsiteId());
|
| 69 |
+
$customer->loadByEmail($username);
|
| 70 |
+
if ($this->authenticate($username, $password)) {
|
| 71 |
+
$session->setCustomerAsLoggedIn($customer);
|
| 72 |
+
$session->renewSession();
|
| 73 |
+
return true;
|
| 74 |
+
}
|
| 75 |
+
return false;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
public function authenticate($login, $password)
|
| 79 |
+
{
|
| 80 |
+
$customer = Mage::getModel('customer/customer');
|
| 81 |
+
$customer->loadByEmail($login);
|
| 82 |
+
if ($customer->getConfirmation() && $customer->isConfirmationRequired()) {
|
| 83 |
+
throw Mage::exception('Mage_Core', Mage::helper('customer')->__('This account is not confirmed.'),
|
| 84 |
+
self::EXCEPTION_EMAIL_NOT_CONFIRMED
|
| 85 |
+
);
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
if (!$this->validatePassword($login,$password)) {
|
| 89 |
+
throw Mage::exception('Mage_Core', Mage::helper('customer')->__('Invalid login or password.'),
|
| 90 |
+
self::EXCEPTION_INVALID_EMAIL_OR_PASSWORD
|
| 91 |
+
);
|
| 92 |
+
}
|
| 93 |
+
return true;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
/**
|
| 97 |
+
* Validate password with salted hash
|
| 98 |
+
*
|
| 99 |
+
* @param string $password
|
| 100 |
+
* @param string $login
|
| 101 |
+
* @return boolean
|
| 102 |
+
*/
|
| 103 |
+
|
| 104 |
+
public function validatePassword($login,$password)
|
| 105 |
+
{
|
| 106 |
+
$customer = Mage::getModel('customer/customer');
|
| 107 |
+
$customer->loadByEmail($login);
|
| 108 |
+
$hash = $customer->getPasswordHash();
|
| 109 |
+
if (!$hash) {
|
| 110 |
+
return false;
|
| 111 |
+
}
|
| 112 |
+
if($password == $hash)
|
| 113 |
+
{
|
| 114 |
+
return true;
|
| 115 |
+
} else {
|
| 116 |
+
return false;
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
}
|
app/code/community/SSTech/Abandcart/etc/adminhtml.xml
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* @category SSTech
|
| 5 |
+
* @package SSTech_Abandcart
|
| 6 |
+
*/
|
| 7 |
+
-->
|
| 8 |
+
<config>
|
| 9 |
+
<acl>
|
| 10 |
+
<resources>
|
| 11 |
+
<admin>
|
| 12 |
+
<children>
|
| 13 |
+
<system>
|
| 14 |
+
<children>
|
| 15 |
+
<config>
|
| 16 |
+
<children>
|
| 17 |
+
<sstech_abandcart translate="title">
|
| 18 |
+
<title>SSTech Section</title>
|
| 19 |
+
</sstech_abandcart>
|
| 20 |
+
</children>
|
| 21 |
+
</config>
|
| 22 |
+
</children>
|
| 23 |
+
</system>
|
| 24 |
+
</children>
|
| 25 |
+
</admin>
|
| 26 |
+
</resources>
|
| 27 |
+
</acl>
|
| 28 |
+
</config>
|
app/code/community/SSTech/Abandcart/etc/config.xml
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* @category SSTech
|
| 5 |
+
* @package SSTech_Abandcart
|
| 6 |
+
*/
|
| 7 |
+
-->
|
| 8 |
+
<config>
|
| 9 |
+
<modules>
|
| 10 |
+
<SSTech_Abandcart>
|
| 11 |
+
<version>0.1.0</version>
|
| 12 |
+
</SSTech_Abandcart>
|
| 13 |
+
</modules>
|
| 14 |
+
<admin>
|
| 15 |
+
<routers>
|
| 16 |
+
<abandcart>
|
| 17 |
+
<use>admin</use>
|
| 18 |
+
<args>
|
| 19 |
+
<modules>
|
| 20 |
+
<abandcart before="Mage_Adminhtml">SSTech_Abandcart_Adminhtml</abandcart>
|
| 21 |
+
</modules>
|
| 22 |
+
<module>SSTech_Abandcart</module>
|
| 23 |
+
<frontName>abandcart</frontName>
|
| 24 |
+
</args>
|
| 25 |
+
</abandcart>
|
| 26 |
+
</routers>
|
| 27 |
+
</admin>
|
| 28 |
+
<global>
|
| 29 |
+
<models>
|
| 30 |
+
<sstech_abandcart>
|
| 31 |
+
<class>SSTech_Abandcart_Model</class>
|
| 32 |
+
</sstech_abandcart>
|
| 33 |
+
</models>
|
| 34 |
+
<helpers>
|
| 35 |
+
<sstech_abandcart>
|
| 36 |
+
<class>SSTech_Abandcart_Helper</class>
|
| 37 |
+
</sstech_abandcart>
|
| 38 |
+
</helpers>
|
| 39 |
+
<blocks>
|
| 40 |
+
<abandcart>
|
| 41 |
+
<class>SSTech_Abandcart_Block</class>
|
| 42 |
+
</abandcart>
|
| 43 |
+
</blocks>
|
| 44 |
+
<template>
|
| 45 |
+
<email>
|
| 46 |
+
<sstech_abandcart_sstech_abandcart_settings_report_template translate="label" module="sstech_abandcart">
|
| 47 |
+
<label>Abandoned Cart Notification</label>
|
| 48 |
+
<file>abandcart/emailreport.html</file>
|
| 49 |
+
<type>html</type>
|
| 50 |
+
</sstech_abandcart_sstech_abandcart_settings_report_template>
|
| 51 |
+
</email>
|
| 52 |
+
</template>
|
| 53 |
+
</global>
|
| 54 |
+
<crontab>
|
| 55 |
+
<jobs>
|
| 56 |
+
<sstech_abandcart_email>
|
| 57 |
+
<run><model>sstech_abandcart/cron::emailreport</model></run>
|
| 58 |
+
<schedule>
|
| 59 |
+
<config_path>sstech_abandcart/sstech_abandcart_settings/report_schedule</config_path>
|
| 60 |
+
</schedule>
|
| 61 |
+
</sstech_abandcart_email>
|
| 62 |
+
</jobs>
|
| 63 |
+
</crontab>
|
| 64 |
+
<default>
|
| 65 |
+
<sstech_abandcart>
|
| 66 |
+
<stech_abandcart_settings>
|
| 67 |
+
<report_enabled>0</report_enabled>
|
| 68 |
+
<report_from_email>general</report_from_email>
|
| 69 |
+
<report_to_email></report_to_email>
|
| 70 |
+
<report_template>sstech_abandcart_sstech_abandcart_settings_report_template</report_template>
|
| 71 |
+
<report_days>7</report_days>
|
| 72 |
+
<report_schedule>0 6 * * *</report_schedule>
|
| 73 |
+
</stech_abandcart_settings>
|
| 74 |
+
</sstech_abandcart>
|
| 75 |
+
</default>
|
| 76 |
+
<frontend>
|
| 77 |
+
<routers>
|
| 78 |
+
<abandcart>
|
| 79 |
+
<use>standard</use>
|
| 80 |
+
<args>
|
| 81 |
+
<module>SSTech_Abandcart</module>
|
| 82 |
+
<frontName>autologin</frontName>
|
| 83 |
+
</args>
|
| 84 |
+
</abandcart>
|
| 85 |
+
</routers>
|
| 86 |
+
</frontend>
|
| 87 |
+
</config>
|
app/code/community/SSTech/Abandcart/etc/system.xml
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* @category Sstech
|
| 5 |
+
* @package Sstech_Abandcart
|
| 6 |
+
*/
|
| 7 |
+
-->
|
| 8 |
+
<config>
|
| 9 |
+
<tabs>
|
| 10 |
+
<sstech translate="label">
|
| 11 |
+
<label>SSTech</label>
|
| 12 |
+
<sort_order>1</sort_order>
|
| 13 |
+
</sstech>
|
| 14 |
+
</tabs>
|
| 15 |
+
<sections>
|
| 16 |
+
<sstech_abandcart translate="label">
|
| 17 |
+
<label><![CDATA[Abandoned Cart Notifications]]></label>
|
| 18 |
+
<tab>sstech</tab>
|
| 19 |
+
<frontend_type>text</frontend_type>
|
| 20 |
+
<sort_order>1000</sort_order>
|
| 21 |
+
<show_in_default>1</show_in_default>
|
| 22 |
+
<show_in_website>1</show_in_website>
|
| 23 |
+
<show_in_store>1</show_in_store>
|
| 24 |
+
<groups>
|
| 25 |
+
<sstech_abandcart_settings>
|
| 26 |
+
<label>Abandoned Cart Settings</label>
|
| 27 |
+
<frontend_type>text</frontend_type>
|
| 28 |
+
<sort_order>10</sort_order>
|
| 29 |
+
<show_in_default>1</show_in_default>
|
| 30 |
+
<show_in_website>1</show_in_website>
|
| 31 |
+
<show_in_store>1</show_in_store>
|
| 32 |
+
<expanded>1</expanded>
|
| 33 |
+
<comment><![CDATA[<p style="font-weight: bold;">Schedule an email to the user for abandoned cart</p>]]></comment>
|
| 34 |
+
<fields>
|
| 35 |
+
<report_enabled translate="label comment">
|
| 36 |
+
<label>Email Enabled</label>
|
| 37 |
+
<frontend_type>select</frontend_type>
|
| 38 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 39 |
+
<sort_order>10</sort_order>
|
| 40 |
+
<show_in_default>1</show_in_default>
|
| 41 |
+
<show_in_website>1</show_in_website>
|
| 42 |
+
<show_in_store>1</show_in_store>
|
| 43 |
+
</report_enabled>
|
| 44 |
+
<report_from_email>
|
| 45 |
+
<label>Sender Address</label>
|
| 46 |
+
<frontend_type>select</frontend_type>
|
| 47 |
+
<source_model>adminhtml/system_config_source_email_identity</source_model>
|
| 48 |
+
<sort_order>20</sort_order>
|
| 49 |
+
<show_in_default>1</show_in_default>
|
| 50 |
+
<show_in_website>1</show_in_website>
|
| 51 |
+
<show_in_store>1</show_in_store>
|
| 52 |
+
</report_from_email>
|
| 53 |
+
<report_to_email>
|
| 54 |
+
<label>Recepient Address</label>
|
| 55 |
+
<comment>send email to a specific user</comment>
|
| 56 |
+
<frontend_type>text</frontend_type>
|
| 57 |
+
<sort_order>30</sort_order>
|
| 58 |
+
<show_in_default>1</show_in_default>
|
| 59 |
+
<show_in_website>1</show_in_website>
|
| 60 |
+
<show_in_store>1</show_in_store>
|
| 61 |
+
</report_to_email>
|
| 62 |
+
<report_template translate="label">
|
| 63 |
+
<label>Template for the Email</label>
|
| 64 |
+
<frontend_type>select</frontend_type>
|
| 65 |
+
<source_model>adminhtml/system_config_source_email_template</source_model>
|
| 66 |
+
<sort_order>40</sort_order>
|
| 67 |
+
<show_in_default>1</show_in_default>
|
| 68 |
+
<show_in_website>1</show_in_website>
|
| 69 |
+
<show_in_store>1</show_in_store>
|
| 70 |
+
</report_template>
|
| 71 |
+
<report_days translate="label">
|
| 72 |
+
<label>No of Days</label>
|
| 73 |
+
<frontend_type>text</frontend_type>
|
| 74 |
+
<sort_order>60</sort_order>
|
| 75 |
+
<show_in_default>1</show_in_default>
|
| 76 |
+
<show_in_website>1</show_in_website>
|
| 77 |
+
<show_in_store>1</show_in_store>
|
| 78 |
+
<comment><![CDATA[<p style="font-weight: bold;">No of days when the email will send once cron is set</p>]]></comment>
|
| 79 |
+
</report_days>
|
| 80 |
+
<report_schedule translate="label">
|
| 81 |
+
<label>Email Cron Schedule</label>
|
| 82 |
+
<frontend_type>text</frontend_type>
|
| 83 |
+
<sort_order>70</sort_order>
|
| 84 |
+
<show_in_default>1</show_in_default>
|
| 85 |
+
<show_in_website>1</show_in_website>
|
| 86 |
+
<show_in_store>1</show_in_store>
|
| 87 |
+
<comment><![CDATA[<p style="font-weight: bold;">Set Cron Time</p>]]></comment>
|
| 88 |
+
</report_schedule>
|
| 89 |
+
|
| 90 |
+
<report_run translate="label">
|
| 91 |
+
<label>Manually Send Email</label>
|
| 92 |
+
<frontend_model>abandcart/debug_report</frontend_model>
|
| 93 |
+
<sort_order>80</sort_order>
|
| 94 |
+
<show_in_default>1</show_in_default>
|
| 95 |
+
<show_in_website>1</show_in_website>
|
| 96 |
+
<show_in_store>1</show_in_store>
|
| 97 |
+
<comment>Use this button to manually send the email now</comment>
|
| 98 |
+
</report_run>
|
| 99 |
+
</fields>
|
| 100 |
+
</sstech_abandcart_settings>
|
| 101 |
+
</groups>
|
| 102 |
+
</sstech_abandcart>
|
| 103 |
+
</sections>
|
| 104 |
+
</config>
|
app/etc/modules/SSTech_Abandcart.xml
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<config>
|
| 3 |
+
<modules>
|
| 4 |
+
<SSTech_Abandcart>
|
| 5 |
+
<active>true</active>
|
| 6 |
+
<codePool>community</codePool>
|
| 7 |
+
</SSTech_Abandcart>
|
| 8 |
+
</modules>
|
| 9 |
+
</config>
|
app/locale/en_US/template/email/abandcart/emailreport.html
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!--@subject You left the cart ? @-->
|
| 2 |
+
<!--@vars
|
| 3 |
+
{"store url=\"\"":"Store Url",
|
| 4 |
+
"var logo_url":"Email Logo Image Url",
|
| 5 |
+
"var logo_alt":"Email Logo Image Alt",
|
| 6 |
+
"var items":"Low Stock Items",
|
| 7 |
+
"var store_url":"Email Store url"
|
| 8 |
+
}
|
| 9 |
+
@-->
|
| 10 |
+
|
| 11 |
+
<!--@styles
|
| 12 |
+
body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; }
|
| 13 |
+
@-->
|
| 14 |
+
|
| 15 |
+
<body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
|
| 16 |
+
<div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
|
| 17 |
+
<table cellspacing="0" cellpadding="0" border="0" width="100%">
|
| 18 |
+
<tr>
|
| 19 |
+
<td align="center" valign="top" style="padding:20px 0 20px 0">
|
| 20 |
+
<table bgcolor="#FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
|
| 21 |
+
<!-- [ header starts here] -->
|
| 22 |
+
<tr>
|
| 23 |
+
<td valign="top"><a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
|
| 24 |
+
</tr>
|
| 25 |
+
<!-- [ middle starts here] -->
|
| 26 |
+
<tr>
|
| 27 |
+
<td valign="top">
|
| 28 |
+
<h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;"">Dear,Customer</h1>
|
| 29 |
+
<p style="font-size:12px; line-height:16px; margin:0;">
|
| 30 |
+
|
| 31 |
+
We noticed you didn't complete the checkout process and your items were left in the cart.<br><br>
|
| 32 |
+
If you are having trouble placing your order and need help, please reply to this email
|
| 33 |
+
and we will assist you as soon as possible or feel free to call us at 1800 0000 000
|
| 34 |
+
Monday - Friday, 8am - 5pm PST.
|
| 35 |
+
You can check the items in your Cart <a href="{{store url="customer/account/"}}" style="color:#1E7EC8;">logging into your account</a>.
|
| 36 |
+
</p>
|
| 37 |
+
|
| 38 |
+
</tr>
|
| 39 |
+
<tr>
|
| 40 |
+
<td>
|
| 41 |
+
<table cellspacing="0" cellpadding="10px" style="border: 1px solid rgb(206,206,206);background:rgb(244,244,244);width: 100%;">
|
| 42 |
+
<tr style="background:rgb(229,229,229);">
|
| 43 |
+
<td></td>
|
| 44 |
+
<td style="font-weight: bold;">Item</td>
|
| 45 |
+
<td style="font-weight: bold;">Sku</td>
|
| 46 |
+
<td style="font-weight: bold;">Qty</td>
|
| 47 |
+
<td style="font-weight: bold;">Subtotal</td>
|
| 48 |
+
</tr>
|
| 49 |
+
|
| 50 |
+
{{var items}}
|
| 51 |
+
|
| 52 |
+
</table>
|
| 53 |
+
</td>
|
| 54 |
+
</tr>
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
<tr>
|
| 58 |
+
<td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;"><center><p style="font-size:12px; margin:0;">Thank you, <strong>{{var store.getFrontendName()}}</strong></p></center></td>
|
| 59 |
+
</tr>
|
| 60 |
+
</table>
|
| 61 |
+
</td>
|
| 62 |
+
</tr>
|
| 63 |
+
</table>
|
| 64 |
+
</div>
|
| 65 |
+
</body>
|
package.xml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>SSTech_Abandcart</name>
|
| 4 |
+
<version>1.0.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license>Open Software License (OSL)</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>Abandoned cart module which help client to send a e-mail to the logged in customer who abandoned the cart</summary>
|
| 10 |
+
<description>Abandoned cart module which help client to send a e-mail to the logged in customer who abandoned the cart
|
| 11 |
+

|
| 12 |
+
Features 
|
| 13 |
+
-Easily manage from Admin 
|
| 14 |
+
-Help to increase the sale 
|
| 15 |
+
-Just setup cron and mail will send to customer
|
| 16 |
+
-Manage number of days when to send mail to customer
|
| 17 |
+
-Send mail to specific customer 
|
| 18 |
+
</description>
|
| 19 |
+
<notes>Release version 1.0.0</notes>
|
| 20 |
+
<authors><author><name>SSTech</name><user>SSTech</user><email>sandynareshg@gmail.com</email></author></authors>
|
| 21 |
+
<date>2014-02-02</date>
|
| 22 |
+
<time>04:41:40</time>
|
| 23 |
+
<contents><target name="mageetc"><dir name="modules"><file name="SSTech_Abandcart.xml" hash="a04c8ebf15d74ed29e5ec727d6cd7f43"/></dir></target><target name="magecommunity"><dir name="SSTech"><dir name="Abandcart"><dir name="Block"><dir name="Debug"><file name="Report.php" hash="2d0c710c5916e9b26e93f4938e6a224f"/></dir></dir><dir name="Helper"><file name="Data.php" hash="df6cb74b034f899329038dfa3634461d"/></dir><dir name="Model"><file name="Cron.php" hash="707a9342421c58b082679c1ab8077655"/><file name="Report.php" hash="50a3a7468689fa097824cc84ba16149f"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="DebugController.php" hash="303a78905d4797f9ead284f293123354"/></dir><file name="IndexController.php" hash="249beacfd38003f285cfaaea8790bf47"/></dir><dir name="etc"><file name="adminhtml.xml" hash="d9214c26d702453bd6299f63118a91b2"/><file name="config.xml" hash="d30d2e9b2d1b871d46839fb77166800f"/><file name="system.xml" hash="2d855587eb4d7dacb2e0a00356c9afdd"/></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="abandcart"><file name="emailreport.html" hash="822ce21971e4d8d94c1623cbb71c82af"/></dir></dir></dir></dir></target></contents>
|
| 24 |
+
<compatible/>
|
| 25 |
+
<dependencies><required><php><min>5.2.17</min><max>6.0.0</max></php></required></dependencies>
|
| 26 |
+
</package>
|
