Version Notes
Performance updates to data gathering.
Download this release
Release Info
| Developer | Radoslaw Gliniecki |
| Extension | cartdefender_actions |
| Version | 2.2.0 |
| Comparing to | |
| See all releases | |
Code changes from version 2.1.9 to 2.2.0
app/code/community/CartDefender/Actions/Model/EventBuilder.php
CHANGED
|
@@ -27,7 +27,7 @@ class CartDefender_Actions_Model_EventBuilder
|
|
| 27 |
$store = Mage::app()->getStore();
|
| 28 |
|
| 29 |
$sessionData = $this->captureSessionData();
|
| 30 |
-
$cart = $this->captureCartData();
|
| 31 |
$fullOrders = $this->captureOrderData($observerData);
|
| 32 |
$visitorData = $sessionData['visitor_data'];
|
| 33 |
$event = array(
|
|
@@ -111,15 +111,30 @@ class CartDefender_Actions_Model_EventBuilder
|
|
| 111 |
* obtained from the Magento cart.
|
| 112 |
*
|
| 113 |
* @return array various bits of data to be sent on each event,
|
| 114 |
-
*
|
| 115 |
*/
|
| 116 |
-
private function captureCartData()
|
| 117 |
{
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
}
|
| 124 |
|
| 125 |
/**
|
|
@@ -197,36 +212,53 @@ class CartDefender_Actions_Model_EventBuilder
|
|
| 197 |
private function captureOrderData($observerData)
|
| 198 |
{
|
| 199 |
$fullOrders = array(CDData::MISSING_VALUE);
|
| 200 |
-
if (!session_id() || !isset($observerData['order_ids'])) {
|
| 201 |
return $fullOrders;
|
| 202 |
}
|
| 203 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 204 |
$orderIds = $observerData['order_ids'];
|
| 205 |
foreach ($orderIds as $orderId) {
|
| 206 |
-
$oneFullOrder = array();
|
| 207 |
-
$oneFullOrder['order_id'] = $orderId;
|
| 208 |
-
|
| 209 |
$order = Mage::getModel('sales/order')->load($orderId);
|
| 210 |
-
$
|
| 211 |
-
$oneFullOrder['order_data'] = $orderData;
|
| 212 |
-
|
| 213 |
-
$quoteId = $orderData['quote_id'];
|
| 214 |
-
$cartFromOrder = Mage::getModel('sales/quote')->load($quoteId);
|
| 215 |
-
$oneFullOrder['cart'] = $this->getCartFromQuote($cartFromOrder);
|
| 216 |
-
|
| 217 |
-
$items = $order->getAllVisibleItems();
|
| 218 |
-
$orderItems = array();
|
| 219 |
-
foreach ($items as $item) {
|
| 220 |
-
$itemData = $item->getData();
|
| 221 |
-
$orderItems[] = $itemData;
|
| 222 |
-
}
|
| 223 |
-
$oneFullOrder['order_items'] = $orderItems;
|
| 224 |
-
|
| 225 |
-
$fullOrders[] = $oneFullOrder;
|
| 226 |
}
|
| 227 |
return $fullOrders;
|
| 228 |
}
|
| 229 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 230 |
/**
|
| 231 |
* Removes sensitive data from the input array and returns it.
|
| 232 |
*
|
| 27 |
$store = Mage::app()->getStore();
|
| 28 |
|
| 29 |
$sessionData = $this->captureSessionData();
|
| 30 |
+
$cart = $this->captureCartData($eventName, $observerData);
|
| 31 |
$fullOrders = $this->captureOrderData($observerData);
|
| 32 |
$visitorData = $sessionData['visitor_data'];
|
| 33 |
$event = array(
|
| 111 |
* obtained from the Magento cart.
|
| 112 |
*
|
| 113 |
* @return array various bits of data to be sent on each event,
|
| 114 |
+
* obtained from the Magento cart.
|
| 115 |
*/
|
| 116 |
+
private function captureCartData ($eventName, $observerData)
|
| 117 |
{
|
| 118 |
+
if (session_id()) {
|
| 119 |
+
if ($eventName === 'checkout_cart_save_after') {
|
| 120 |
+
$cart = $observerData['cart'];
|
| 121 |
+
$quote = $cart->getQuote();
|
| 122 |
+
} elseif ($eventName === 'sales_quote_collect_totals_after') {
|
| 123 |
+
$quote = $observerData['quote'];
|
| 124 |
+
} elseif ($eventName === 'sales_quote_product_add_after') {
|
| 125 |
+
$items = $observerData['items'];
|
| 126 |
+
$firstItem = $items[0];
|
| 127 |
+
$quote = $firstItem->getQuote();
|
| 128 |
+
} else {
|
| 129 |
+
$quote = Mage::getSingleton('checkout/cart')->getQuote();
|
| 130 |
+
}
|
| 131 |
+
$cartFromQuote = $this->getCartFromQuote($quote);
|
| 132 |
+
return $cartFromQuote;
|
| 133 |
+
} else {
|
| 134 |
+
return array(
|
| 135 |
+
CDData::MISSING_VALUE
|
| 136 |
+
);
|
| 137 |
+
}
|
| 138 |
}
|
| 139 |
|
| 140 |
/**
|
| 212 |
private function captureOrderData($observerData)
|
| 213 |
{
|
| 214 |
$fullOrders = array(CDData::MISSING_VALUE);
|
| 215 |
+
if (!session_id() || (!isset($observerData['order_ids']) && !isset($observerData['order'])) ) {
|
| 216 |
return $fullOrders;
|
| 217 |
}
|
| 218 |
+
|
| 219 |
+
if (!isset($observerData['order_ids'])) {
|
| 220 |
+
$order = $observerData['order'];
|
| 221 |
+
$fullOrders[] = $this->getFullOrder($order);
|
| 222 |
+
|
| 223 |
+
return $fullOrders;
|
| 224 |
+
}
|
| 225 |
+
|
| 226 |
$orderIds = $observerData['order_ids'];
|
| 227 |
foreach ($orderIds as $orderId) {
|
|
|
|
|
|
|
|
|
|
| 228 |
$order = Mage::getModel('sales/order')->load($orderId);
|
| 229 |
+
$fullOrders[] = $this->getFullOrder($order);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 230 |
}
|
| 231 |
return $fullOrders;
|
| 232 |
}
|
| 233 |
|
| 234 |
+
/**
|
| 235 |
+
* Return order data as an array including items and the related shopping cart.
|
| 236 |
+
* @param $order
|
| 237 |
+
* @return array various bits of data obtained from the Magento orders.
|
| 238 |
+
*/
|
| 239 |
+
private function getFullOrder($order)
|
| 240 |
+
{
|
| 241 |
+
$oneFullOrder = array();
|
| 242 |
+
$oneFullOrder['order_id'] = $order->getId();
|
| 243 |
+
|
| 244 |
+
$orderData = $this->removePersonalData($order->getData());
|
| 245 |
+
$oneFullOrder['order_data'] = $orderData;
|
| 246 |
+
|
| 247 |
+
$quoteId = $orderData['quote_id'];
|
| 248 |
+
$cartFromOrder = Mage::getModel('sales/quote')->load($quoteId);
|
| 249 |
+
$oneFullOrder['cart'] = $this->getCartFromQuote($cartFromOrder);
|
| 250 |
+
|
| 251 |
+
$items = $order->getAllVisibleItems();
|
| 252 |
+
$orderItems = array();
|
| 253 |
+
foreach ($items as $item) {
|
| 254 |
+
$itemData = $item->getData();
|
| 255 |
+
$orderItems[] = $itemData;
|
| 256 |
+
}
|
| 257 |
+
$oneFullOrder['order_items'] = $orderItems;
|
| 258 |
+
|
| 259 |
+
return $oneFullOrder;
|
| 260 |
+
}
|
| 261 |
+
|
| 262 |
/**
|
| 263 |
* Removes sensitive data from the input array and returns it.
|
| 264 |
*
|
app/code/community/CartDefender/Actions/etc/config.xml
CHANGED
|
@@ -12,7 +12,7 @@
|
|
| 12 |
<config>
|
| 13 |
<modules>
|
| 14 |
<CartDefender_Actions>
|
| 15 |
-
<version>2.
|
| 16 |
</CartDefender_Actions>
|
| 17 |
</modules>
|
| 18 |
|
|
@@ -117,6 +117,15 @@
|
|
| 117 |
</cartdefender_order_cancel_after>
|
| 118 |
</observers>
|
| 119 |
</order_cancel_after>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
<sales_order_place_after>
|
| 121 |
<observers>
|
| 122 |
<cartdefender_sales_order_place_after>
|
| 12 |
<config>
|
| 13 |
<modules>
|
| 14 |
<CartDefender_Actions>
|
| 15 |
+
<version>2.2.0</version>
|
| 16 |
</CartDefender_Actions>
|
| 17 |
</modules>
|
| 18 |
|
| 117 |
</cartdefender_order_cancel_after>
|
| 118 |
</observers>
|
| 119 |
</order_cancel_after>
|
| 120 |
+
<sales_quote_product_add_after>
|
| 121 |
+
<observers>
|
| 122 |
+
<cartdefender_sales_quote_product_add_after>
|
| 123 |
+
<type>singleton</type>
|
| 124 |
+
<class>CartDefender_Actions_Model_Observer</class>
|
| 125 |
+
<method>captureEvent</method>
|
| 126 |
+
</cartdefender_sales_quote_product_add_after>
|
| 127 |
+
</observers>
|
| 128 |
+
</sales_quote_product_add_after>
|
| 129 |
<sales_order_place_after>
|
| 130 |
<observers>
|
| 131 |
<cartdefender_sales_order_place_after>
|
package.xml
CHANGED
|
@@ -1,20 +1,18 @@
|
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>cartdefender_actions</name>
|
| 4 |
-
<version>2.
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
|
| 7 |
<channel>community</channel>
|
| 8 |
<extends/>
|
| 9 |
<summary>Increase sales with this state-of-the-art product recommendations and targeted popups, including a FREE exit intent message. Engage your visitors in real time or later via email!</summary>
|
| 10 |
<description>You can instantly use product recommendations, messages and offers which convert your visitors into customers. Start with FREE exit intent messages. Do it without A/B tests, because Cart Defender learns which messages convert the best and adjusts itself automatically.</description>
|
| 11 |
-
<notes>
|
| 12 |
-
Minor fixes.
|
| 13 |
-
</notes>
|
| 14 |
<authors><author><name>Radoslaw Gliniecki</name><user>Cart_Defender</user><email>radek@cartdefender.com</email></author><author><name>Jan Zankowski</name><user>janzankowski</user><email>jan@cartdefender.com</email></author><author><name>Przemyslaw Gliniecki</name><user>psgliniecki</user><email>psg@cartdefender.com</email></author></authors>
|
| 15 |
-
<date>2017-05-
|
| 16 |
-
<time>
|
| 17 |
-
<contents><target name="magecommunity"><dir name="CartDefender"><dir name="Actions"><dir name="Block"><file name="Script.php" hash="247305c63594b6442e94122b226e3bb2"/></dir><dir name="Helper"><file name="Data.php" hash="f6da7288d3b111b4e9d82aeee64aebb6"/><file name="Logger.php" hash="aca3233298074d3cf8f436e668969bb9"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="64b8b03a84578a6f9a1fbf1321e109f2"/></dir><file name="Api.php" hash="a2d9ede9d01bb14ff31ebd792c9bbc51"/><file name="AsyncLocalSender.php" hash="2e22d4c07c7f983d98687d6faa6fe413"/><file name="CorrelationIdManager.php" hash="56f619241fdec54bcc4457937af893b8"/><file name="EventAsyncLocalSender.php" hash="4bcc43959212d0610e3e4b653d01c6cc"/><file name="EventBuilder.php" hash="
|
| 18 |
<compatible/>
|
| 19 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.7.0.2</min><max>1.9.3.2</max></package><extension><name>openssl</name><min>0.9.6</min><max>1.1.0</max></extension></required></dependencies>
|
| 20 |
</package>
|
| 1 |
<?xml version="1.0"?>
|
| 2 |
<package>
|
| 3 |
<name>cartdefender_actions</name>
|
| 4 |
+
<version>2.2.0</version>
|
| 5 |
<stability>stable</stability>
|
| 6 |
<license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License (OSL)</license>
|
| 7 |
<channel>community</channel>
|
| 8 |
<extends/>
|
| 9 |
<summary>Increase sales with this state-of-the-art product recommendations and targeted popups, including a FREE exit intent message. Engage your visitors in real time or later via email!</summary>
|
| 10 |
<description>You can instantly use product recommendations, messages and offers which convert your visitors into customers. Start with FREE exit intent messages. Do it without A/B tests, because Cart Defender learns which messages convert the best and adjusts itself automatically.</description>
|
| 11 |
+
<notes>Performance updates to data gathering.</notes>
|
|
|
|
|
|
|
| 12 |
<authors><author><name>Radoslaw Gliniecki</name><user>Cart_Defender</user><email>radek@cartdefender.com</email></author><author><name>Jan Zankowski</name><user>janzankowski</user><email>jan@cartdefender.com</email></author><author><name>Przemyslaw Gliniecki</name><user>psgliniecki</user><email>psg@cartdefender.com</email></author></authors>
|
| 13 |
+
<date>2017-05-10</date>
|
| 14 |
+
<time>13:02:15</time>
|
| 15 |
+
<contents><target name="magecommunity"><dir name="CartDefender"><dir name="Actions"><dir name="Block"><file name="Script.php" hash="247305c63594b6442e94122b226e3bb2"/></dir><dir name="Helper"><file name="Data.php" hash="f6da7288d3b111b4e9d82aeee64aebb6"/><file name="Logger.php" hash="aca3233298074d3cf8f436e668969bb9"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="64b8b03a84578a6f9a1fbf1321e109f2"/></dir><file name="Api.php" hash="a2d9ede9d01bb14ff31ebd792c9bbc51"/><file name="AsyncLocalSender.php" hash="2e22d4c07c7f983d98687d6faa6fe413"/><file name="CorrelationIdManager.php" hash="56f619241fdec54bcc4457937af893b8"/><file name="EventAsyncLocalSender.php" hash="4bcc43959212d0610e3e4b653d01c6cc"/><file name="EventBuilder.php" hash="d75b16474b9cfceb5b94178ac0e7b0b8"/><file name="Observer.php" hash="44922ecc47fdf4a60fa86b929c5877c8"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Transport.php" hash="f63ca41ae1242de7bb18854d0f450b00"/></dir></dir></dir></dir><dir name="controllers"><file name="CartDefenderSenderController.php" hash="c3fb495d4ad88ac658867c77447d2b2b"/></dir><dir name="etc"><file name="api.xml" hash="3d9558fa5df621470460d4c9d62ba7f3"/><file name="config.xml" hash="4f90c41dddce88e16f169aa05067c41d"/><file name="system.xml" hash="3bc66fa6869648811f2283f54abac2f5"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="CartDefender_Actions.xml" hash="f9e77235e41f79ac086160ef2e494837"/></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="actions"><file name="script.phtml" hash="4de68c84b01a9532595d2d13c494ef6c"/></dir></dir><dir name="layout"><file name="actions.xml" hash="e6a4b2f6d8132a833a1b5f8b9fce7166"/></dir></dir></dir></dir></target></contents>
|
| 16 |
<compatible/>
|
| 17 |
<dependencies><required><php><min>5.3.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.7.0.2</min><max>1.9.3.2</max></package><extension><name>openssl</name><min>0.9.6</min><max>1.1.0</max></extension></required></dependencies>
|
| 18 |
</package>
|
