Version Notes
First release
Download this release
Release Info
Developer | KRYD GmbH |
Extension | KRYD |
Version | 1.1.0 |
Comparing to | |
See all releases |
Code changes from version 1.0.0 to 1.1.0
- app/code/community/KRYD/Observer/Model/Observer.php +242 -7
- app/code/community/KRYD/Observer/controllers/ExportController.php +83 -0
- app/code/community/KRYD/Observer/etc/config.xml +36 -3
- app/code/community/KRYD/api.php +124 -3
- app/code/community/KRYD/kryd_include.php +1 -1
- kryd_export/items.php +0 -38
- package.xml +13 -10
app/code/community/KRYD/Observer/Model/Observer.php
CHANGED
@@ -3,31 +3,266 @@ require_once(dirname(__FILE__)."/../../kryd_include.php");
|
|
3 |
|
4 |
class KRYD_Observer_Model_Observer {
|
5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
public function catalog_controller_product_view(Varien_Event_Observer $observer) {
|
|
|
7 |
KRYD::event('itemview',Array("itemid"=>$observer->event->product->sku));
|
8 |
}
|
9 |
|
10 |
public function customer_register_success(Varien_Event_Observer $observer) {
|
|
|
11 |
KRYD::event('register');
|
12 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
|
14 |
public function checkout_type_onepage_save_order_after(Varien_Event_Observer $observer) {
|
15 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16 |
}
|
17 |
|
18 |
-
public function
|
|
|
19 |
$quote=Mage::getSingleton('checkout/session')->getQuote();
|
20 |
$items=$quote->getAllVisibleItems();
|
21 |
-
|
22 |
-
|
23 |
-
$
|
24 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
}
|
26 |
|
27 |
public function customer_login(Varien_Event_Observer $observer) {
|
|
|
|
|
28 |
$customer=$observer->event->customer;
|
29 |
-
|
|
|
|
|
|
|
|
|
|
|
30 |
KRYD::event('login');
|
|
|
31 |
}
|
32 |
|
33 |
|
3 |
|
4 |
class KRYD_Observer_Model_Observer {
|
5 |
|
6 |
+
private function init_api() {
|
7 |
+
$cookie=Mage::getSingleton('core/cookie');
|
8 |
+
KRYD::messageid($cookie->get("kryd_messageid"));
|
9 |
+
$sessionid=$cookie->get("kryd_sessionid");
|
10 |
+
if (!$sessionid) {
|
11 |
+
$sessionid=md5(uniqid("",true));
|
12 |
+
$cookie->set('kryd_sessionid',$sessionid,0,'/');
|
13 |
+
}
|
14 |
+
KRYD::sessionid($sessionid);
|
15 |
+
}
|
16 |
+
|
17 |
+
private function getBundleItemOptions($item) {
|
18 |
+
$product=$item->getProduct();
|
19 |
+
$options=$product->getTypeInstance(true)->getOrderOptions($product);
|
20 |
+
$optionIds=array_keys($options['info_buyRequest']['bundle_option']);
|
21 |
+
$types=Mage_Catalog_Model_Product_Type::getTypes();
|
22 |
+
$typemodel=Mage::getSingleton($types[Mage_Catalog_Model_Product_Type::TYPE_BUNDLE]['model']);
|
23 |
+
$typemodel->setConfig($types[Mage_Catalog_Model_Product_Type::TYPE_BUNDLE]);
|
24 |
+
$selections=$typemodel->getSelectionsCollection($optionIds,$item);
|
25 |
+
$selection_map=array();
|
26 |
+
foreach ($selections->getData() as $selection) {
|
27 |
+
$option_id=$selection['option_id'];
|
28 |
+
$selection_id=$selection['selection_id'];
|
29 |
+
if (!isset($selection_map[$option_id])) $selection_map[$option_id]=array();
|
30 |
+
$selection_map[$option_id][$selection_id]=$selection;
|
31 |
+
}
|
32 |
+
|
33 |
+
$result=array();
|
34 |
+
|
35 |
+
$req=$options['info_buyRequest'];
|
36 |
+
|
37 |
+
$qtys=$req['bundle_option_qty'];
|
38 |
+
|
39 |
+
foreach($req['bundle_option'] as $op => $sel) {
|
40 |
+
$sel=(array)$sel;
|
41 |
+
foreach ($sel as $itm) {
|
42 |
+
$sinfo=$selection_map[$op][$itm];
|
43 |
+
if (!isset($sinfo)) continue;
|
44 |
+
$amount=$qtys[$op];
|
45 |
+
if (!isset($amount)) $amount=1;
|
46 |
+
$sku=$sinfo['sku'];
|
47 |
+
$result[]=Array("amount"=>$amount,"id"=>$sku);
|
48 |
+
}
|
49 |
+
}
|
50 |
+
|
51 |
+
return $result;
|
52 |
+
}
|
53 |
+
|
54 |
+
public function controller_action_predispatch(Varien_Event_Observer $observer) {
|
55 |
+
|
56 |
+
if ($_GET["kryd_action"]=="basket_restore") {
|
57 |
+
|
58 |
+
$basket=KRYD::get_basket($_GET["kryd_messageid"]);
|
59 |
+
|
60 |
+
$cart=Mage::getModel('checkout/cart');
|
61 |
+
$cart->init();
|
62 |
+
$cart->truncate();
|
63 |
+
|
64 |
+
foreach ($basket as $bitem) {
|
65 |
+
|
66 |
+
$sku=$bitem["parentid"]?:$bitem["id"];
|
67 |
+
|
68 |
+
$params=Array();
|
69 |
+
|
70 |
+
$params['qty']=$bitem["amount"];
|
71 |
+
|
72 |
+
$products=Mage::getModel('catalog/product');
|
73 |
+
$itemid=$products->getIdBySku($sku);
|
74 |
+
$item=$products->load($itemid);
|
75 |
+
|
76 |
+
if ($item->getTypeId()==='configurable') {
|
77 |
+
|
78 |
+
$products2=Mage::getModel('catalog/product');
|
79 |
+
|
80 |
+
$subitemid=$products2->getIdBySku($bitem["id"]);
|
81 |
+
$subitem=$products2->load($subitemid);
|
82 |
+
|
83 |
+
$attrs=$item->getTypeInstance(true)->getConfigurableAttributesAsArray($item);
|
84 |
+
|
85 |
+
foreach ($attrs as $attr) {
|
86 |
+
$code=$attr["attribute_code"];
|
87 |
+
$attrid=$attr["attribute_id"];
|
88 |
+
$values=$attr["values"];
|
89 |
+
$avalue=$subitem->getAttributeText($code);
|
90 |
+
foreach ($values as $value) {
|
91 |
+
if ($value["label"]!=$avalue) continue;
|
92 |
+
$vindex=$value["value_index"];
|
93 |
+
//echo $attrid." (".$code."): ".$avalue." (".$vindex.")<br />";
|
94 |
+
$params['super_attribute'][$attrid]=$vindex;
|
95 |
+
}
|
96 |
+
}
|
97 |
+
|
98 |
+
}
|
99 |
+
|
100 |
+
if ($item->getTypeId()==='bundle') {
|
101 |
+
|
102 |
+
$params['bundle_option']=Array();
|
103 |
+
$params['bundle_option_qty']=Array();
|
104 |
+
|
105 |
+
$selection=$item->getTypeInstance()->getSelectionsCollection($item->getTypeInstance()->getOptionsIds());
|
106 |
+
foreach ($selection as $sel) {
|
107 |
+
foreach ($bitem["subitems"] as $subitem) {
|
108 |
+
if ($subitem["id"]==$sel->getSku()) {
|
109 |
+
$optid=$sel->getOptionId();
|
110 |
+
$selid=$sel->getSelectionId();
|
111 |
+
$params['bundle_option'][$optid]=$selid;
|
112 |
+
if ($subitem["amount"]>1) $params['bundle_option_qty'][$optid]=$subitem["amount"];
|
113 |
+
}
|
114 |
+
}
|
115 |
+
}
|
116 |
+
|
117 |
+
} //if bundle
|
118 |
+
|
119 |
+
$cart->addProduct($item, $params);
|
120 |
+
|
121 |
+
} //foreach basket
|
122 |
+
|
123 |
+
$cart->save();
|
124 |
+
}
|
125 |
+
|
126 |
+
if ($_GET["kryd_messageid"]) {
|
127 |
+
$cookie=Mage::getSingleton('core/cookie');
|
128 |
+
|
129 |
+
$cookie->set("kryd_messageid",$_GET["kryd_messageid"],0,"/");
|
130 |
+
$this->init_api();
|
131 |
+
KRYD::event("click");
|
132 |
+
parse_str($_SERVER["QUERY_STRING"],$query);
|
133 |
+
unset($query["kryd_messageid"]);
|
134 |
+
unset($query["kryd_action"]);
|
135 |
+
$query=http_build_query($query);
|
136 |
+
if ($query!=="") $query="?".$query;
|
137 |
+
$url=(isset($_SERVER['HTTPS'])=='on'?'https':'http').'://'.$_SERVER['HTTP_HOST'].strtok($_SERVER['REQUEST_URI'],'?').$query;
|
138 |
+
header("Location: ".$url);
|
139 |
+
exit;
|
140 |
+
}
|
141 |
+
|
142 |
+
}
|
143 |
+
|
144 |
public function catalog_controller_product_view(Varien_Event_Observer $observer) {
|
145 |
+
$this->init_api();
|
146 |
KRYD::event('itemview',Array("itemid"=>$observer->event->product->sku));
|
147 |
}
|
148 |
|
149 |
public function customer_register_success(Varien_Event_Observer $observer) {
|
150 |
+
$this->init_api();
|
151 |
KRYD::event('register');
|
152 |
}
|
153 |
+
|
154 |
+
protected function getTotalOrderInfo() {
|
155 |
+
$customerid=Mage::getSingleton('customer/session')->getCustomer()->getId();
|
156 |
+
$orders=Mage::getModel("sales/order")->getCollection();
|
157 |
+
$orders->addFieldToFilter('customer_id',$customerid);
|
158 |
+
$value=0;
|
159 |
+
$count=0;
|
160 |
+
foreach ($orders as $order) {
|
161 |
+
$count++;
|
162 |
+
$value+=$order->getGrandTotal();
|
163 |
+
}
|
164 |
+
|
165 |
+
$arr=Array();
|
166 |
+
$arr["count"]=$count;
|
167 |
+
$arr["value"]=$value;
|
168 |
+
|
169 |
+
return $arr;
|
170 |
+
}
|
171 |
|
172 |
public function checkout_type_onepage_save_order_after(Varien_Event_Observer $observer) {
|
173 |
+
$this->init_api();
|
174 |
+
$order=$observer->getEvent()->getOrder();
|
175 |
+
|
176 |
+
$orderid=$order->getIncrementId();
|
177 |
+
|
178 |
+
$items=$order->getAllVisibleItems();
|
179 |
+
|
180 |
+
$price=0;
|
181 |
+
$arr=Array();
|
182 |
+
|
183 |
+
foreach ($items as $item) {
|
184 |
+
$sku=$item->getSku();
|
185 |
+
|
186 |
+
$product=Mage::getModel('catalog/product')->load($item->getProductId());
|
187 |
+
$parentsku=$product->getSku();
|
188 |
+
|
189 |
+
$row=Array();
|
190 |
+
$row["amount"]=$item->getQtyOrdered();
|
191 |
+
$row["price"]=$item->getPrice();
|
192 |
+
$row["id"]=$sku;
|
193 |
+
|
194 |
+
if ($parentsku!=$sku) $row["parentid"]=$parentsku;
|
195 |
+
|
196 |
+
$subitems=$this->getBundleItemOptions($item);
|
197 |
+
if ($subitems) $row["subitems"]=$subitems;
|
198 |
+
|
199 |
+
$arr[]=$row;
|
200 |
+
|
201 |
+
$price+=$item->getPrice();
|
202 |
+
}
|
203 |
+
|
204 |
+
$info=$this->getTotalOrderInfo();
|
205 |
+
|
206 |
+
if ($code=$order->getCouponCode()) KRYD::event('voucher',Array("voucherid"=>$code));
|
207 |
+
|
208 |
+
KRYD::event('complete',Array("orderid"=>$orderid,"order_count_total"=>$info["count"],"order_value_total"=>$info["value"],"order_value"=>$price,"items"=>$arr));
|
209 |
}
|
210 |
|
211 |
+
public function checkout_cart_add_product_complete(Varien_Event_Observer $observer) {
|
212 |
+
$this->init_api();
|
213 |
$quote=Mage::getSingleton('checkout/session')->getQuote();
|
214 |
$items=$quote->getAllVisibleItems();
|
215 |
+
|
216 |
+
$price=0;
|
217 |
+
$arr=Array();
|
218 |
+
|
219 |
+
foreach ($items as $item) {
|
220 |
+
$sku=$item->getSku();
|
221 |
+
|
222 |
+
$product=Mage::getModel('catalog/product')->load($item->getProductId());
|
223 |
+
$parentsku=$product->getSku();
|
224 |
+
|
225 |
+
$row=Array();
|
226 |
+
$row["amount"]=$item->getQty();
|
227 |
+
$row["price"]=$item->getPrice();
|
228 |
+
$row["id"]=$sku;
|
229 |
+
|
230 |
+
if ($parentsku!=$sku) $row["parentid"]=$parentsku;
|
231 |
+
|
232 |
+
$subitems=$this->getBundleItemOptions($item);
|
233 |
+
if ($subitems) $row["subitems"]=$subitems;
|
234 |
+
|
235 |
+
$arr[]=$row;
|
236 |
+
|
237 |
+
$price+=$item->getPrice();
|
238 |
+
}
|
239 |
+
|
240 |
+
KRYD::event("basket",Array("items"=>$arr,"value"=>$price));
|
241 |
+
}
|
242 |
+
|
243 |
+
public function controller_action_postdispatch_checkout_onepage_saveBilling(Varien_Event_Observer $observer) {
|
244 |
+
$post=Mage::app()->getRequest()->getPost();
|
245 |
+
$billing=$post["billing"];
|
246 |
+
if (!isset($billing)) return;
|
247 |
+
|
248 |
+
if (!$billing["email"]) return;
|
249 |
+
|
250 |
+
$this->init_api();
|
251 |
+
KRYD::event("identify",Array("email"=>$billing["email"],"firstname"=>$billing["firstname"],"lastname"=>$billing["lastname"]));
|
252 |
}
|
253 |
|
254 |
public function customer_login(Varien_Event_Observer $observer) {
|
255 |
+
$this->init_api();
|
256 |
+
|
257 |
$customer=$observer->event->customer;
|
258 |
+
|
259 |
+
$subscriber=Mage::getModel('newsletter/subscriber')->loadByCustomer($customer);
|
260 |
+
$optin=$subscriber->isSubscribed()?"yes":"no";
|
261 |
+
|
262 |
+
$this->init_api();
|
263 |
+
KRYD::event("identify",Array("email"=>$customer->email,"firstname"=>$customer->firstname,"lastname"=>$customer->lastname,"optin"=>$optin));
|
264 |
KRYD::event('login');
|
265 |
+
|
266 |
}
|
267 |
|
268 |
|
app/code/community/KRYD/Observer/controllers/ExportController.php
ADDED
@@ -0,0 +1,83 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
|
3 |
+
class KRYD_Observer_ExportController extends Mage_Core_Controller_Front_Action {
|
4 |
+
|
5 |
+
private function xmlentities($string) {
|
6 |
+
return str_replace(array('&','"',"'",'<', '>'),array('&','"',''','<','>'),$string);
|
7 |
+
}
|
8 |
+
|
9 |
+
public function createItem($args) {
|
10 |
+
$product=Mage::getModel('catalog/product');
|
11 |
+
$product->setData($args['row']);
|
12 |
+
|
13 |
+
unset($parentProduct);
|
14 |
+
unset($parentSku);
|
15 |
+
|
16 |
+
$parentIds = Mage::getResourceSingleton('catalog/product_type_configurable')->getParentIdsByChild($product->getId());
|
17 |
+
$parentSkus=Mage::getModel('catalog/product')->getResource()->getProductsSku($parentIds);
|
18 |
+
|
19 |
+
if (count($parentSkus)==1) {
|
20 |
+
$parentSku=$parentSkus[0]["sku"];
|
21 |
+
$parentProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', $parentSku);
|
22 |
+
}
|
23 |
+
|
24 |
+
|
25 |
+
echo " <item>\n";
|
26 |
+
echo " <id>".$this->xmlentities($product->getSku())."</id>\n";
|
27 |
+
|
28 |
+
if ($parentProduct) {
|
29 |
+
$parentSku=$parentSkus[0]["sku"];
|
30 |
+
if ($parentSku) echo " <parentid>".$this->xmlentities($parentSku)."</parentid>\n";
|
31 |
+
}
|
32 |
+
|
33 |
+
echo " <name>".$this->xmlentities($product->getName())."</name>\n";
|
34 |
+
echo " <price>".$this->xmlentities($product->getPrice())."</price>\n";
|
35 |
+
|
36 |
+
$si=$product->getSmallImage();
|
37 |
+
if ($si && $si!="no_selection" && is_file("media/catalog/product".$si)) {
|
38 |
+
$imageurl=(string)Mage::helper('catalog/image')->init($product,'small_image')->resize(135);
|
39 |
+
echo " <thumb>".$this->xmlentities($imageurl)."</thumb>\n";
|
40 |
+
} else {
|
41 |
+
if ($parentSku) {
|
42 |
+
$parentProduct = Mage::getModel('catalog/product')->loadByAttribute('sku', $parentSku);
|
43 |
+
if ($parentProduct) {
|
44 |
+
$parentImageurl=(string)Mage::helper('catalog/image')->init($parentProduct,'small_image')->resize(135);
|
45 |
+
echo " <thumb>".$this->xmlentities($parentImageurl)."</thumb>\n";
|
46 |
+
}
|
47 |
+
}
|
48 |
+
}
|
49 |
+
|
50 |
+
if ($parentProduct) {
|
51 |
+
echo " <url>".$parentProduct->getProductURL(false)."</url>\n";
|
52 |
+
} else {
|
53 |
+
echo " <url>".$product->getProductURL(false)."</url>\n";
|
54 |
+
}
|
55 |
+
|
56 |
+
echo " </item>\n";
|
57 |
+
flush();
|
58 |
+
}
|
59 |
+
|
60 |
+
public function exportAction () {
|
61 |
+
|
62 |
+
header("Content-type:text/xml");
|
63 |
+
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
|
64 |
+
echo "<items>\n";
|
65 |
+
|
66 |
+
$products=Mage::getModel('catalog/product')->getCollection();
|
67 |
+
|
68 |
+
$products->addAttributeToSelect(Array('sku','name','price','small_image'),'left');
|
69 |
+
|
70 |
+
$that=$this;
|
71 |
+
|
72 |
+
$func=function ($args) use($that) {
|
73 |
+
$that->createItem($args);
|
74 |
+
};
|
75 |
+
|
76 |
+
Mage::getSingleton('core/resource_iterator')->walk($products->getSelect(),array($func));
|
77 |
+
|
78 |
+
echo '</items>';
|
79 |
+
exit;
|
80 |
+
|
81 |
+
}
|
82 |
+
|
83 |
+
}
|
app/code/community/KRYD/Observer/etc/config.xml
CHANGED
@@ -10,6 +10,19 @@
|
|
10 |
<class>KRYD_Observer_Model_Observer</class>
|
11 |
</KRYD_Observer_Model_Observer>
|
12 |
</models>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
<global>
|
14 |
|
15 |
<models>
|
@@ -25,6 +38,26 @@
|
|
25 |
</helpers>
|
26 |
|
27 |
<events>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
29 |
<catalog_controller_product_view>
|
30 |
<observers>
|
@@ -56,15 +89,15 @@
|
|
56 |
</observers>
|
57 |
</customer_login>
|
58 |
|
59 |
-
<
|
60 |
<observers>
|
61 |
<kryd_observer>
|
62 |
<type>singleton</type>
|
63 |
<class>KRYD_Observer_Model_Observer</class>
|
64 |
-
<method>
|
65 |
</kryd_observer>
|
66 |
</observers>
|
67 |
-
</
|
68 |
|
69 |
<checkout_type_onepage_save_order_after>
|
70 |
<observers>
|
10 |
<class>KRYD_Observer_Model_Observer</class>
|
11 |
</KRYD_Observer_Model_Observer>
|
12 |
</models>
|
13 |
+
|
14 |
+
<frontend>
|
15 |
+
<routers>
|
16 |
+
<productexport>
|
17 |
+
<use>standard</use>
|
18 |
+
<args>
|
19 |
+
<module>KRYD_Observer</module>
|
20 |
+
<frontName>kryd</frontName>
|
21 |
+
</args>
|
22 |
+
</productexport>
|
23 |
+
</routers>
|
24 |
+
</frontend>
|
25 |
+
|
26 |
<global>
|
27 |
|
28 |
<models>
|
38 |
</helpers>
|
39 |
|
40 |
<events>
|
41 |
+
|
42 |
+
<controller_action_postdispatch_checkout_onepage_saveBilling>
|
43 |
+
<observers>
|
44 |
+
<kryd_observer>
|
45 |
+
<type>singleton</type>
|
46 |
+
<class>KRYD_Observer_Model_Observer</class>
|
47 |
+
<method>controller_action_postdispatch_checkout_onepage_saveBilling</method>
|
48 |
+
</kryd_observer>
|
49 |
+
</observers>
|
50 |
+
</controller_action_postdispatch_checkout_onepage_saveBilling>
|
51 |
+
|
52 |
+
<controller_action_predispatch>
|
53 |
+
<observers>
|
54 |
+
<kryd_observer>
|
55 |
+
<type>singleton</type>
|
56 |
+
<class>KRYD_Observer_Model_Observer</class>
|
57 |
+
<method>controller_action_predispatch</method>
|
58 |
+
</kryd_observer>
|
59 |
+
</observers>
|
60 |
+
</controller_action_predispatch>
|
61 |
|
62 |
<catalog_controller_product_view>
|
63 |
<observers>
|
89 |
</observers>
|
90 |
</customer_login>
|
91 |
|
92 |
+
<checkout_cart_add_product_complete>
|
93 |
<observers>
|
94 |
<kryd_observer>
|
95 |
<type>singleton</type>
|
96 |
<class>KRYD_Observer_Model_Observer</class>
|
97 |
+
<method>checkout_cart_add_product_complete</method>
|
98 |
</kryd_observer>
|
99 |
</observers>
|
100 |
+
</checkout_cart_add_product_complete>
|
101 |
|
102 |
<checkout_type_onepage_save_order_after>
|
103 |
<observers>
|
app/code/community/KRYD/api.php
CHANGED
@@ -1,34 +1,154 @@
|
|
1 |
<?php
|
|
|
|
|
|
|
|
|
2 |
class KRYD {
|
3 |
|
4 |
-
private static $script_included=false;
|
5 |
private static $id;
|
6 |
private static $key;
|
|
|
|
|
7 |
private static $last_error;
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
public static function last_error() {
|
10 |
return self::$last_error;
|
11 |
}
|
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
public static function id($id) {
|
14 |
self::$id=$id;
|
|
|
15 |
}
|
16 |
|
|
|
|
|
|
|
|
|
|
|
17 |
public static function key($key) {
|
18 |
self::$key=$key;
|
|
|
19 |
}
|
20 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
public static function has_settings() {
|
22 |
return is_file(dirname(__FILE__)."/settings.php");
|
23 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
24 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
25 |
public static function event($eventtype,$options=Array()) {
|
26 |
|
27 |
if (!self::$id) {self::$last_error=Array('code'=>'accountid_missing','message'=>'KRYD account id missing.');return false;}
|
28 |
if (!self::$key) {self::$key_missing=Array('code'=>'key_missing','message'=>'KRYD API key missing.');return false;}
|
29 |
|
30 |
-
|
|
|
|
|
|
|
|
|
31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
$post=Array(
|
33 |
'accountid'=>self::$id,
|
34 |
'sessionid'=>$sessionid,
|
@@ -44,6 +164,7 @@ class KRYD {
|
|
44 |
}
|
45 |
|
46 |
$ch=curl_init('https://api.kryd.com/event.lua');
|
|
|
47 |
curl_setopt($ch,CURLOPT_POST,true);
|
48 |
curl_setopt($ch,CURLOPT_POSTFIELDS,$query);
|
49 |
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
|
@@ -60,5 +181,5 @@ class KRYD {
|
|
60 |
|
61 |
}
|
62 |
|
63 |
-
|
64 |
?>
|
1 |
<?php
|
2 |
+
/**
|
3 |
+
* PHP-API for KRYD. This class is responsible for sending events to the KRYD event server.
|
4 |
+
*
|
5 |
+
*/
|
6 |
class KRYD {
|
7 |
|
|
|
8 |
private static $id;
|
9 |
private static $key;
|
10 |
+
private static $sessionid;
|
11 |
+
private static $messageid;
|
12 |
private static $last_error;
|
13 |
+
private static $ready=false;
|
14 |
|
15 |
+
/**
|
16 |
+
* Handles click-tracking. Saves the kryd_messageid in a cookie and reloads the page without the respective query string key
|
17 |
+
*
|
18 |
+
*/
|
19 |
+
private static function handle_tracking() {
|
20 |
+
// Handled by Magento observer
|
21 |
+
}
|
22 |
+
|
23 |
+
/**
|
24 |
+
* Returns the last error that occured
|
25 |
+
*
|
26 |
+
* @return Array
|
27 |
+
*/
|
28 |
public static function last_error() {
|
29 |
return self::$last_error;
|
30 |
}
|
31 |
|
32 |
+
/**
|
33 |
+
* Checks whether credentials are ready yet, and if yes, starts tracking handling
|
34 |
+
*
|
35 |
+
*/
|
36 |
+
private static function ready() {
|
37 |
+
if (self::$ready or !self::$id or !self::$key) return;
|
38 |
+
self::$ready=true;
|
39 |
+
self::handle_tracking();
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Sets the KRYD account ID
|
44 |
+
*
|
45 |
+
* @param string $id
|
46 |
+
*/
|
47 |
public static function id($id) {
|
48 |
self::$id=$id;
|
49 |
+
self::ready();
|
50 |
}
|
51 |
|
52 |
+
/**
|
53 |
+
* Sets the KRYD API key
|
54 |
+
*
|
55 |
+
* @param string $key
|
56 |
+
*/
|
57 |
public static function key($key) {
|
58 |
self::$key=$key;
|
59 |
+
self::ready();
|
60 |
}
|
61 |
|
62 |
+
/**
|
63 |
+
* Sets a custom sessionid
|
64 |
+
*
|
65 |
+
* @param string $sessionid
|
66 |
+
*/
|
67 |
+
public static function sessionid($sessionid) {
|
68 |
+
self::$sessionid=$sessionid;
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Sets a custom messageid
|
73 |
+
*
|
74 |
+
* @param string $messageid
|
75 |
+
*/
|
76 |
+
public static function messageid($messageid) {
|
77 |
+
self::$messageid=$messageid;
|
78 |
+
}
|
79 |
+
|
80 |
+
#$has_settings_start
|
81 |
+
/**
|
82 |
+
* Finds out whether a fixed settings file exists
|
83 |
+
*
|
84 |
+
* @return bool
|
85 |
+
*/
|
86 |
public static function has_settings() {
|
87 |
return is_file(dirname(__FILE__)."/settings.php");
|
88 |
}
|
89 |
+
#$has_settings_end
|
90 |
+
|
91 |
+
/**
|
92 |
+
* Loads settings
|
93 |
+
*
|
94 |
+
*/
|
95 |
+
public static function load_settings() {
|
96 |
+
#$load_settings_start
|
97 |
+
if (KRYD::has_settings()) include(dirname(__FILE__)."/settings.php");
|
98 |
+
#$load_settings_end
|
99 |
+
}
|
100 |
+
|
101 |
+
/**
|
102 |
+
* Looks up a user's basket by a given message ID
|
103 |
+
*
|
104 |
+
* @param string $messageid
|
105 |
+
* @return array
|
106 |
+
*/
|
107 |
+
public function get_basket($messageid) {
|
108 |
+
|
109 |
+
if (!self::$id) {self::$last_error=Array('code'=>'accountid_missing','message'=>'KRYD account id missing.');return false;}
|
110 |
+
if (!self::$key) {self::$key_missing=Array('code'=>'key_missing','message'=>'KRYD API key missing.');return false;}
|
111 |
+
|
112 |
+
$signature=md5(self::$id.$messageid.self::$key);
|
113 |
+
|
114 |
+
$url="http://feedback.kryd.com/basket.lua?accountid=".rawurlencode(self::$id)."&messageid=".rawurlencode($messageid).'&signature='.$signature;
|
115 |
+
|
116 |
+
$ch = curl_init();
|
117 |
+
|
118 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
119 |
+
curl_setopt($ch, CURLOPT_URL, $url);
|
120 |
+
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
|
121 |
+
|
122 |
+
$response = curl_exec($ch);
|
123 |
+
|
124 |
+
return json_decode($response,true);
|
125 |
+
}
|
126 |
|
127 |
+
/**
|
128 |
+
* Sends an event with associated options, return true on success and false on error.
|
129 |
+
* In case of an error you can receive the error message via last_error()
|
130 |
+
*
|
131 |
+
* @param string $eventtype
|
132 |
+
* @param array $options
|
133 |
+
* @return bool
|
134 |
+
*/
|
135 |
public static function event($eventtype,$options=Array()) {
|
136 |
|
137 |
if (!self::$id) {self::$last_error=Array('code'=>'accountid_missing','message'=>'KRYD account id missing.');return false;}
|
138 |
if (!self::$key) {self::$key_missing=Array('code'=>'key_missing','message'=>'KRYD API key missing.');return false;}
|
139 |
|
140 |
+
if (self::$sessionid) {
|
141 |
+
$sessionid=self::$sessionid;
|
142 |
+
} else {
|
143 |
+
$sessionid=md5(session_id());
|
144 |
+
}
|
145 |
|
146 |
+
if (self::$messageid) {
|
147 |
+
$options["messageid"]=self::$messageid;
|
148 |
+
} else {
|
149 |
+
if (isset($_COOKIE["kryd_messageid"])) $options["messageid"]=$_COOKIE["kryd_messageid"];
|
150 |
+
}
|
151 |
+
|
152 |
$post=Array(
|
153 |
'accountid'=>self::$id,
|
154 |
'sessionid'=>$sessionid,
|
164 |
}
|
165 |
|
166 |
$ch=curl_init('https://api.kryd.com/event.lua');
|
167 |
+
curl_setopt($ch,CURLOPT_TIMEOUT,2);
|
168 |
curl_setopt($ch,CURLOPT_POST,true);
|
169 |
curl_setopt($ch,CURLOPT_POSTFIELDS,$query);
|
170 |
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
|
181 |
|
182 |
}
|
183 |
|
184 |
+
KRYD::load_settings();
|
185 |
?>
|
app/code/community/KRYD/kryd_include.php
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
<?
|
2 |
require_once(dirname(__FILE__)."/api.php");
|
3 |
|
4 |
if (!KRYD::has_settings()) {
|
1 |
+
<?php
|
2 |
require_once(dirname(__FILE__)."/api.php");
|
3 |
|
4 |
if (!KRYD::has_settings()) {
|
kryd_export/items.php
DELETED
@@ -1,38 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
require('../app/Mage.php');
|
3 |
-
@set_time_limit(0);
|
4 |
-
Mage::app();
|
5 |
-
|
6 |
-
function xmlentities($string) {
|
7 |
-
return str_replace(array('&','"',"'",'<', '>'),array('&','"',''','<','>'),$string);
|
8 |
-
}
|
9 |
-
|
10 |
-
function createItem($args) {
|
11 |
-
$product=Mage::getModel('catalog/product');
|
12 |
-
$product->setData($args['row']);
|
13 |
-
|
14 |
-
echo " <item>\n";
|
15 |
-
echo " <id>".xmlentities($product->getSku())."</id>\n";
|
16 |
-
echo " <name>".xmlentities($product->getName())."</name>\n";
|
17 |
-
echo " <price>".xmlentities($product->getPrice())."</price>\n";
|
18 |
-
|
19 |
-
$imageurl=(string)Mage::helper('catalog/image')->init($product,'small_image')->resize(135);
|
20 |
-
|
21 |
-
echo " <thumb>".xmlentities($imageurl)."</thumb>\n";
|
22 |
-
echo " </item>\n";
|
23 |
-
flush();
|
24 |
-
}
|
25 |
-
|
26 |
-
header("Content-type:text/xml");
|
27 |
-
echo '<?xml version="1.0" encoding="UTF-8" ?>'."\n";
|
28 |
-
echo "<items>\n";
|
29 |
-
|
30 |
-
$products=Mage::getModel('catalog/product')->getCollection();
|
31 |
-
$products->addAttributeToSelect(Array('sku'),'inner');
|
32 |
-
$products->addAttributeToSelect(Array('name'),'inner');
|
33 |
-
$products->addAttributeToSelect(Array('price'),'inner');
|
34 |
-
$products->addAttributeToSelect(Array('small_image'),'inner');
|
35 |
-
|
36 |
-
Mage::getSingleton('core/resource_iterator')->walk($products->getSelect(),array('createItem'));
|
37 |
-
|
38 |
-
echo '</items>';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package.xml
CHANGED
@@ -1,7 +1,7 @@
|
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>KRYD</name>
|
4 |
-
<version>1.
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.kryd.com/partner/license.php">Proprietary</license>
|
7 |
<channel>community</channel>
|
@@ -27,25 +27,28 @@ With KRYD, you utilize it optimally. KRYD analyzes your customers' behavior and
|
|
27 |
<email>info@kryd.com</email>
|
28 |
</author>
|
29 |
</authors>
|
30 |
-
<date>
|
31 |
-
<time>
|
32 |
<contents>
|
33 |
<target name="magecommunity">
|
34 |
<dir name="KRYD">
|
|
|
35 |
<dir name="Observer">
|
36 |
-
<dir name="
|
37 |
-
<file name="
|
38 |
-
</dir>
|
39 |
-
<dir name="Helper">
|
40 |
-
<file name="Data.php" hash="8cdfd25ace7de949d068d500d6dd730f"/>
|
41 |
</dir>
|
42 |
<dir name="etc">
|
43 |
-
<file name="config.xml" hash="4764fa9d9c2fbd6f3dfc1d56048b988a"/>
|
44 |
<file name="adminhtml.xml" hash="3bdbeb1348a24faf29710ed344f93a2b"/>
|
|
|
45 |
<file name="system.xml" hash="47e63f155a100fe269038e9cc998e760"/>
|
46 |
</dir>
|
|
|
|
|
|
|
|
|
|
|
|
|
47 |
</dir>
|
48 |
-
<file name="kryd_include.php" hash="423fd3f4590f09fbff09ec973dddb689"/>
|
49 |
</dir>
|
50 |
</target>
|
51 |
</contents>
|
1 |
<?xml version="1.0"?>
|
2 |
<package>
|
3 |
<name>KRYD</name>
|
4 |
+
<version>1.1.0</version>
|
5 |
<stability>stable</stability>
|
6 |
<license uri="http://www.kryd.com/partner/license.php">Proprietary</license>
|
7 |
<channel>community</channel>
|
27 |
<email>info@kryd.com</email>
|
28 |
</author>
|
29 |
</authors>
|
30 |
+
<date>2014-08-20</date>
|
31 |
+
<time>13:58:52</time>
|
32 |
<contents>
|
33 |
<target name="magecommunity">
|
34 |
<dir name="KRYD">
|
35 |
+
<file name="kryd_include.php" hash="0d0a89622d7ea9c9e0f8ce6f50bc06c7"/>
|
36 |
<dir name="Observer">
|
37 |
+
<dir name="controllers">
|
38 |
+
<file name="ExportController.php" hash="94f54a383b3632373b11a1c9d0b24574"/>
|
|
|
|
|
|
|
39 |
</dir>
|
40 |
<dir name="etc">
|
|
|
41 |
<file name="adminhtml.xml" hash="3bdbeb1348a24faf29710ed344f93a2b"/>
|
42 |
+
<file name="config.xml" hash="063d8d27d02386079ec6c5396bcd6a4f"/>
|
43 |
<file name="system.xml" hash="47e63f155a100fe269038e9cc998e760"/>
|
44 |
</dir>
|
45 |
+
<dir name="Model">
|
46 |
+
<file name="Observer.php" hash="5cb82761c625708164bfa2371da2e859"/>
|
47 |
+
</dir>
|
48 |
+
<dir name="Helper">
|
49 |
+
<file name="Data.php" hash="fff38f9d8c87a7cfac6b259c8402d9c9"/>
|
50 |
+
</dir>
|
51 |
</dir>
|
|
|
52 |
</dir>
|
53 |
</target>
|
54 |
</contents>
|