IREUS_Recommendation_Engine_Interface - Version 2.2.8

Version Notes

Log out and log in after install to get access to the configuration interface! You will find it in the menu [System -> Configuration -> IREUS Recommendation Engine]

Download this release

Release Info

Developer prudsys IREUS Team
Extension IREUS_Recommendation_Engine_Interface
Version 2.2.8
Comparing to
See all releases


Code changes from version 2.2.7 to 2.2.8

app/code/community/Netresearch/Ireus/Block/Data.php CHANGED
@@ -22,12 +22,12 @@
22
  * @author Stephan Hoyer, Germany
23
  * @author Silvio Steiger, Germany
24
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
- *
26
  * $Id$
27
  */
28
 
29
 
30
- // Register IREUS PHP Framework
31
  require_once('IreusAutoloader.php');
32
  IreusAutoloader::getInstance()->register();
33
 
@@ -44,18 +44,18 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
44
 
45
  /**
46
  * returns current product id
47
- *
48
  * @return int
49
  */
50
  protected function getProductId()
51
  {
52
  return Mage::registry('product')->getId();
53
  }
54
-
55
-
56
  /**
57
  * returns debug mode
58
- *
59
  * @return bool
60
  */
61
  protected function isDebugMode()
@@ -63,43 +63,72 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
63
  return Mage::getStoreConfig('ireus/settings/debug');
64
  }
65
 
66
-
67
  /**
68
  * returns ireus-customer related Recommendation Engine ID
69
- *
70
- * @return string
71
  */
72
  protected function getEngineId()
73
  {
74
  return Mage::getStoreConfig('ireus/settings/re_id');
75
  }
76
-
77
-
78
  /**
79
  * returns current session id
80
- *
81
  * @return string
82
  */
83
  protected function getSessionId()
84
  {
85
  return Mage::getSingleton("customer/session")->getSessionId();
86
  }
87
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
 
89
  /**
90
  * returns current user id
91
- *
92
  * @return string
93
  */
94
  protected function getUserId()
95
  {
96
  return Mage::getSingleton("customer/session")->getCustomer()->getId();
97
- }
 
98
 
99
-
100
  /**
101
  * returns current category id
102
- *
103
  * @return int
104
  */
105
  protected function getCategoryId()
@@ -107,33 +136,33 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
107
  return Mage::registry('current_category')->getId();
108
  }
109
 
110
-
111
  /**
112
  * determines, whether it has been ordered something by current visitor
113
- *
114
  * @return bool
115
  */
116
  protected function hasRecentlyOrdered()
117
  {
118
  $this->latestMultishippingOrderIds = Mage::getSingleton('core/session')->getOrderIds(true);
119
-
120
  //Multishipping
121
  if(count($this->latestMultishippingOrderIds)) {
122
  return true;
123
  }
124
-
125
  //OnePageCheckout
126
  if(Mage::getSingleton('checkout/session')->getLastQuoteId()) {
127
  return true;
128
  }
129
-
130
  return false;
131
  }
132
 
133
-
134
  /**
135
  * returns last ordered quote
136
- *
137
  * @return Mage_Sales_Quote
138
  */
139
  protected function getLatestQuote()
@@ -146,7 +175,7 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
146
  return $this->latestQuote;
147
  }
148
 
149
-
150
  /**
151
  * returns an array of products and theirs ordered qtys like
152
  *
@@ -171,7 +200,19 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
171
  $items = $this->getLatestQuote()->getAllItems();
172
  }
173
  foreach($items as $item) {
174
- $ids[] = $item->getProductId();
 
 
 
 
 
 
 
 
 
 
 
 
175
  $qtys[] = !is_null($item->getQty()) ? $item->getQty() : $item->getQtyOrdered();
176
  }
177
  $this->latestOrderedProducts = array('ids' => $ids, 'qtys' => $qtys);
@@ -179,10 +220,10 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
179
  return $this->latestOrderedProducts;
180
  }
181
 
182
-
183
  /**
184
  * returns array of last ordered product ids
185
- *
186
  * @return array
187
  */
188
  protected function getLatestOrderedProductIds()
@@ -191,7 +232,7 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
191
  return $products['ids'];
192
  }
193
 
194
-
195
  /**
196
  * returns array of last ordered product qtys
197
  *
@@ -203,10 +244,10 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
203
  return $products['qtys'];
204
  }
205
 
206
-
207
  /**
208
  * returns id of latest product added to cart
209
- *
210
  * @return int
211
  */
212
  protected function getLatestAddedProductId()
@@ -218,10 +259,10 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
218
  return $this->latestAddedProduct;
219
  }
220
 
221
-
222
  /**
223
  * determines whether the current visitor has puted something to cart
224
- *
225
  * @return bool
226
  */
227
  protected function hasRecentlyAddedSomethingToCart()
@@ -231,11 +272,11 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
231
  }
232
  return isset($this->latestAddedProduct);
233
  }
234
-
235
-
236
  /**
237
  * determines where Ireus should display something on the current page
238
- *
239
  * @return bool
240
  */
241
  protected function isActive()
@@ -243,7 +284,7 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
243
  if(!Mage::getStoreConfig('ireus/settings/active')) {
244
  return false;
245
  }
246
-
247
  switch(Mage::app()->getRequest()->getControllerName())
248
  {
249
  case 'product': // show product
@@ -289,10 +330,10 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
289
  return false;
290
  }
291
 
292
-
293
  /**
294
  * generates JSON data of parameters needed by Ireus
295
- *
296
  * @return string
297
  */
298
  protected function getJsonData()
@@ -300,11 +341,13 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
300
  if(!Mage::getStoreConfig('ireus/settings/active')) {
301
  return "";
302
  }
303
-
304
  $return = array (
305
  'reid' => $this->getEngineId(),
306
  'sid' => $this->getSessionId(),
307
- 'uid' => $this->getUserId()
 
 
308
  );
309
 
310
  if($this->isDebugMode()) {
@@ -336,12 +379,12 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
336
  break;
337
  case 'cart':
338
  if ($this->getNameInLayout() == 'ireus_databasket'
339
- && $this->hasRecentlyAddedSomethingToCart()
340
  ) {
341
  $return['pid'] = $this->getLatestAddedProductId();
342
  $return['e'] = 'basket';
343
  }
344
- else
345
  {
346
  $return['cid'] = '';
347
  $return['e'] = 'home';
@@ -354,7 +397,7 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
354
  $return['cid'] = '';
355
  $return['e'] = 'home';
356
  }
357
- else
358
  {
359
  $return['pids'] = implode(',', $this->getLatestOrderedProductIds());
360
  $return['qty'] = implode(',', $this->getLatestOrderedQtys());
@@ -364,11 +407,11 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
364
  }
365
  return Zend_Json::encode($return);
366
  }
367
-
368
-
369
  /**
370
  * Gets cached data for noscript fallback
371
- *
372
  * @return string
373
  */
374
  protected function getCachedRecomms()
@@ -376,16 +419,16 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
376
  if(!Mage::getStoreConfig('ireus/settings/active')) {
377
  return '';
378
  }
379
-
380
  $sidparam = Mage::getSingleton('core/session')->getSessionIdQueryParam();
381
-
382
  switch(Mage::app()->getRequest()->getControllerName())
383
  {
384
  case 'product':
385
  $event = 'product';
386
  $id = $this->getProductId();
387
  break;
388
-
389
  case 'category':
390
  $event = 'user';
391
  $id = $this->getCategoryId();
@@ -397,12 +440,12 @@ class Netresearch_Ireus_Block_Data extends Mage_Core_Block_Template
397
  $id = '';
398
  break;
399
  }
400
-
401
  return Ireus_Controller_Cache::getContent(
402
  $this->getEngineId(),
403
  $this->getSessionId(),
404
- $event,
405
- $id,
406
  Mage::getBaseDir('cache') . DIRECTORY_SEPARATOR . 'ireus',
407
  array(
408
  '&'.$sidparam.'=%SID%',
22
  * @author Stephan Hoyer, Germany
23
  * @author Silvio Steiger, Germany
24
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ *
26
  * $Id$
27
  */
28
 
29
 
30
+ // Register IREUS PHP Framework
31
  require_once('IreusAutoloader.php');
32
  IreusAutoloader::getInstance()->register();
33
 
44
 
45
  /**
46
  * returns current product id
47
+ *
48
  * @return int
49
  */
50
  protected function getProductId()
51
  {
52
  return Mage::registry('product')->getId();
53
  }
54
+
55
+
56
  /**
57
  * returns debug mode
58
+ *
59
  * @return bool
60
  */
61
  protected function isDebugMode()
63
  return Mage::getStoreConfig('ireus/settings/debug');
64
  }
65
 
66
+
67
  /**
68
  * returns ireus-customer related Recommendation Engine ID
69
+ *
70
+ * @return string
71
  */
72
  protected function getEngineId()
73
  {
74
  return Mage::getStoreConfig('ireus/settings/re_id');
75
  }
76
+
77
+
78
  /**
79
  * returns current session id
80
+ *
81
  * @return string
82
  */
83
  protected function getSessionId()
84
  {
85
  return Mage::getSingleton("customer/session")->getSessionId();
86
  }
87
+
88
+
89
+ /**
90
+ * returns if session cookies are enabled
91
+ *
92
+ * @return string
93
+ */
94
+ protected function getEnableSessionCookies()
95
+ {
96
+ return (Mage::getStoreConfig('ireus/settings/enable_session_cookies') ? true : false);
97
+ }
98
+
99
+
100
+ /**
101
+ * returns if user permitted cookies according to the EU cookie law
102
+ *
103
+ * @return string
104
+ */
105
+ protected function getEnablePersistentCookies()
106
+ {
107
+ if (class_exists('Mage::helper(\'core/cookie\')->isUserNotAllowSaveCookie()')
108
+ ) {
109
+ return (Mage::helper('core/cookie')->isUserNotAllowSaveCookie() ? false : true);
110
+ }
111
+ else
112
+ {
113
+ return true;
114
+ }
115
+ }
116
+
117
 
118
  /**
119
  * returns current user id
120
+ *
121
  * @return string
122
  */
123
  protected function getUserId()
124
  {
125
  return Mage::getSingleton("customer/session")->getCustomer()->getId();
126
+ }
127
+
128
 
 
129
  /**
130
  * returns current category id
131
+ *
132
  * @return int
133
  */
134
  protected function getCategoryId()
136
  return Mage::registry('current_category')->getId();
137
  }
138
 
139
+
140
  /**
141
  * determines, whether it has been ordered something by current visitor
142
+ *
143
  * @return bool
144
  */
145
  protected function hasRecentlyOrdered()
146
  {
147
  $this->latestMultishippingOrderIds = Mage::getSingleton('core/session')->getOrderIds(true);
148
+
149
  //Multishipping
150
  if(count($this->latestMultishippingOrderIds)) {
151
  return true;
152
  }
153
+
154
  //OnePageCheckout
155
  if(Mage::getSingleton('checkout/session')->getLastQuoteId()) {
156
  return true;
157
  }
158
+
159
  return false;
160
  }
161
 
162
+
163
  /**
164
  * returns last ordered quote
165
+ *
166
  * @return Mage_Sales_Quote
167
  */
168
  protected function getLatestQuote()
175
  return $this->latestQuote;
176
  }
177
 
178
+
179
  /**
180
  * returns an array of products and theirs ordered qtys like
181
  *
200
  $items = $this->getLatestQuote()->getAllItems();
201
  }
202
  foreach($items as $item) {
203
+
204
+ // Grouped product?
205
+ $parentIds = Mage::getModel('catalog/product_type_grouped')
206
+ ->getParentIdsByChild($item->getProductId());
207
+ if (isset($parentIds[0])
208
+ ) {
209
+ $ids[] = $parentIds[0];
210
+ }
211
+ else
212
+ {
213
+ $ids[] = $item->getProductId();
214
+ }
215
+
216
  $qtys[] = !is_null($item->getQty()) ? $item->getQty() : $item->getQtyOrdered();
217
  }
218
  $this->latestOrderedProducts = array('ids' => $ids, 'qtys' => $qtys);
220
  return $this->latestOrderedProducts;
221
  }
222
 
223
+
224
  /**
225
  * returns array of last ordered product ids
226
+ *
227
  * @return array
228
  */
229
  protected function getLatestOrderedProductIds()
232
  return $products['ids'];
233
  }
234
 
235
+
236
  /**
237
  * returns array of last ordered product qtys
238
  *
244
  return $products['qtys'];
245
  }
246
 
247
+
248
  /**
249
  * returns id of latest product added to cart
250
+ *
251
  * @return int
252
  */
253
  protected function getLatestAddedProductId()
259
  return $this->latestAddedProduct;
260
  }
261
 
262
+
263
  /**
264
  * determines whether the current visitor has puted something to cart
265
+ *
266
  * @return bool
267
  */
268
  protected function hasRecentlyAddedSomethingToCart()
272
  }
273
  return isset($this->latestAddedProduct);
274
  }
275
+
276
+
277
  /**
278
  * determines where Ireus should display something on the current page
279
+ *
280
  * @return bool
281
  */
282
  protected function isActive()
284
  if(!Mage::getStoreConfig('ireus/settings/active')) {
285
  return false;
286
  }
287
+
288
  switch(Mage::app()->getRequest()->getControllerName())
289
  {
290
  case 'product': // show product
330
  return false;
331
  }
332
 
333
+
334
  /**
335
  * generates JSON data of parameters needed by Ireus
336
+ *
337
  * @return string
338
  */
339
  protected function getJsonData()
341
  if(!Mage::getStoreConfig('ireus/settings/active')) {
342
  return "";
343
  }
344
+
345
  $return = array (
346
  'reid' => $this->getEngineId(),
347
  'sid' => $this->getSessionId(),
348
+ 'uid' => $this->getUserId(),
349
+ 'session' => $this->getEnableSessionCookies(),
350
+ 'cookie' => $this->getEnablePersistentCookies()
351
  );
352
 
353
  if($this->isDebugMode()) {
379
  break;
380
  case 'cart':
381
  if ($this->getNameInLayout() == 'ireus_databasket'
382
+ && $this->hasRecentlyAddedSomethingToCart()
383
  ) {
384
  $return['pid'] = $this->getLatestAddedProductId();
385
  $return['e'] = 'basket';
386
  }
387
+ else
388
  {
389
  $return['cid'] = '';
390
  $return['e'] = 'home';
397
  $return['cid'] = '';
398
  $return['e'] = 'home';
399
  }
400
+ else
401
  {
402
  $return['pids'] = implode(',', $this->getLatestOrderedProductIds());
403
  $return['qty'] = implode(',', $this->getLatestOrderedQtys());
407
  }
408
  return Zend_Json::encode($return);
409
  }
410
+
411
+
412
  /**
413
  * Gets cached data for noscript fallback
414
+ *
415
  * @return string
416
  */
417
  protected function getCachedRecomms()
419
  if(!Mage::getStoreConfig('ireus/settings/active')) {
420
  return '';
421
  }
422
+
423
  $sidparam = Mage::getSingleton('core/session')->getSessionIdQueryParam();
424
+
425
  switch(Mage::app()->getRequest()->getControllerName())
426
  {
427
  case 'product':
428
  $event = 'product';
429
  $id = $this->getProductId();
430
  break;
431
+
432
  case 'category':
433
  $event = 'user';
434
  $id = $this->getCategoryId();
440
  $id = '';
441
  break;
442
  }
443
+
444
  return Ireus_Controller_Cache::getContent(
445
  $this->getEngineId(),
446
  $this->getSessionId(),
447
+ $event,
448
+ $id,
449
  Mage::getBaseDir('cache') . DIRECTORY_SEPARATOR . 'ireus',
450
  array(
451
  '&'.$sidparam.'=%SID%',
app/code/community/Netresearch/Ireus/Model/Observer.php CHANGED
@@ -33,6 +33,8 @@ class Netresearch_Ireus_Model_Observer
33
  {
34
  Mage::getSingleton('checkout/session')
35
  ->setData('latestAddedProductsId', $observer['product']->getId());
 
 
36
  return $this;
37
  }
38
- }
33
  {
34
  Mage::getSingleton('checkout/session')
35
  ->setData('latestAddedProductsId', $observer['product']->getId());
36
+ Mage::getSingleton('checkout/session')
37
+ ->setData('callBasket', true);
38
  return $this;
39
  }
40
+ }
app/code/community/Netresearch/Ireus/controllers/ExportController.php CHANGED
@@ -59,7 +59,7 @@ class Netresearch_Ireus_ExportController extends Mage_Core_Controller_Front_Acti
59
  'imageURL' => 'images_url',
60
  'netUnitPrice' => 'price',
61
  'onlineFlag' => 'is_salable',
62
- 'quantity' => 'qty',
63
  'strikeOutPrice' => 'special_price'
64
  );
65
 
@@ -302,6 +302,16 @@ class Netresearch_Ireus_ExportController extends Mage_Core_Controller_Front_Acti
302
 
303
  // Add parameters manually
304
  $productarray = $product->getData();
 
 
 
 
 
 
 
 
 
 
305
  $productarray['is_salable'] = $product->isSaleable();
306
 
307
  // Stream result in parts of 10
59
  'imageURL' => 'images_url',
60
  'netUnitPrice' => 'price',
61
  'onlineFlag' => 'is_salable',
62
+ 'stock' => 'qty',
63
  'strikeOutPrice' => 'special_price'
64
  );
65
 
302
 
303
  // Add parameters manually
304
  $productarray = $product->getData();
305
+ if ($product->getTypeId() == 'simple'
306
+ || $product->getTypeId() == 'virtual'
307
+ || $product->getTypeId() == 'downloadable'
308
+ ) {
309
+ $finalprice = $product->getFinalPrice();
310
+ if ($productarray['price'] != $finalprice
311
+ ) {
312
+ $productarray['special_price'] = $finalprice;
313
+ }
314
+ }
315
  $productarray['is_salable'] = $product->isSaleable();
316
 
317
  // Stream result in parts of 10
app/code/community/Netresearch/Ireus/controllers/ExportController_fast.php ADDED
@@ -0,0 +1,338 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * IREUS
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain the license through the world-wide-web,
11
+ * please send an email to support@ireus.net so we can send you a copy.
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade Ireus to newer
16
+ * versions in the future. If you wish to customize Ireus for your
17
+ * needs please refer to http://www.ireus.net for more information.
18
+ *
19
+ * @category IREUS Recommendation Engine
20
+ * @package Ireus
21
+ * @copyright Copyright (c) 2010 prudsys AG (http://www.prudsys.com)
22
+ * @author Stephan Hoyer, Germany
23
+ * @author Silvio Steiger, Germany
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ *
26
+ * $Id$
27
+ */
28
+
29
+
30
+ // Register IREUS PHP Framework
31
+ require_once('IreusAutoloader.php');
32
+ IreusAutoloader::getInstance()->register();
33
+
34
+
35
+ class Netresearch_Ireus_ExportController extends Mage_Core_Controller_Front_Action
36
+ {
37
+ const CONFIG_SECURITY_CODE = 'ireus/settings/security_code';
38
+ const CONFIG_EXPORT_DISABLED_CATEGORIES = 'ireus/settings/export_disabled_categories';
39
+ const CONFIG_IMAGE_WIDTH = 'ireus/settings/image_width';
40
+ const CONFIG_IMAGE_HEIGHT = 'ireus/settings/image_height';
41
+ const PAGE_SIZE = 1;
42
+
43
+ var $_storeId ='admin';
44
+
45
+ var $_ordersColumns = array(
46
+ 'tid' => 'order_id',
47
+ 'pid' => 'product_id'
48
+ );
49
+
50
+ var $_productsColumns = array(
51
+ 'pid' => 'entity_id',
52
+ 'sku' => 'sku',
53
+ 'name' => 'name',
54
+ 'brand' => 'brand',
55
+ 'manufacturer' => 'manufacturer',
56
+ 'description' => 'short_description',
57
+ 'param1' => 'add_to_cart_url',
58
+ 'URL' => 'url',
59
+ 'imageURL' => 'images_url',
60
+ 'netUnitPrice' => 'price',
61
+ 'onlineFlag' => 'is_salable',
62
+ 'quantity' => 'qty',
63
+ 'strikeOutPrice' => 'special_price'
64
+ );
65
+
66
+ static $_sessionId;
67
+
68
+ static $_sessionIdQueryParam;
69
+
70
+ static $_ireusplaceholder = '%SID%';
71
+
72
+
73
+ /**
74
+ * Check security code and redirect to 404 if not given or wrong
75
+ *
76
+ * @return Netresearch_Ireus_ExportController
77
+ */
78
+ public function preDispatch()
79
+ {
80
+ parent::preDispatch();
81
+ $security_code = Mage::App()->getRequest()->getParam('code');
82
+ if(
83
+ is_null($security_code) or
84
+ $security_code != Mage::getStoreConfig(self::CONFIG_SECURITY_CODE)
85
+ ) {
86
+ $this->_redirect('noroute');
87
+ $this->setFlag('',self::FLAG_NO_DISPATCH,true);
88
+ }
89
+
90
+ if ($this->getRequest()->getParam('store')
91
+ ) {
92
+ $this->_setActiveStore($this->getRequest()->getParam('store'));
93
+ }
94
+
95
+ $this->_storeId = Mage::App()->getStore()->getCode();
96
+ self::$_sessionId = Mage::getSingleton('core/session')->getSessionId();
97
+ self::$_sessionIdQueryParam = Mage::getSingleton('core/session')->getSessionIdQueryParam();
98
+
99
+ return $this;
100
+ }
101
+
102
+
103
+ /**
104
+ * Output a CSV of all products with their
105
+ * categories and all parent categories,
106
+ *
107
+ * @return null
108
+ */
109
+ public function categoriesAction()
110
+ {
111
+ // Change maximum execution time
112
+ set_time_limit(0);
113
+
114
+ foreach(Mage::getModel('Catalog/Category')
115
+ ->getCollection()
116
+ ->addFieldToFilter('is_active', 1)
117
+ ->addFieldToFilter('level', array('gt' => 1))
118
+ ->addAttributeToSelect('name') as $category
119
+ ) {
120
+ if($category->getProductCount()
121
+ ) {
122
+ $collection = Mage::getModel('Catalog/Category')
123
+ ->getCollection()
124
+ ->addFieldToFilter('entity_id', array(
125
+ 'in' => $category->getPathIds()))
126
+ ->addAttributeToSelect('entity_id')
127
+ ->addAttributeToSelect('name');
128
+
129
+ foreach ($category->getProductCollection()
130
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
131
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
132
+ ->addAttributeToFilter('status',
133
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
134
+ ->addAttributeToFilter('visibility', array('in'=>array(
135
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
136
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
137
+ )))
138
+ ->addAttributeToFilter('price', array('gt' => 0)) as $product
139
+ ) {
140
+ $productsWithCategories = array();
141
+ $pid = $product->getId();
142
+ foreach ($collection as $currentcategory
143
+ ) {
144
+ $cid = $currentcategory->getId();
145
+ $productsWithCategories[$pid.$cid] = array(
146
+ 'pid' => $pid,
147
+ 'cid' => $cid,
148
+ 'cidparent' => $currentcategory->getParentId(),
149
+ 'cname' => $currentcategory->getName()
150
+ );
151
+ }
152
+
153
+ // Stream output product wise
154
+ echo Ireus_Controller_Export::getInstance()
155
+ ->createCategoriesCsv($productsWithCategories);
156
+ flush();
157
+ }
158
+ }
159
+ }
160
+
161
+ exit;
162
+ }
163
+
164
+
165
+ /**
166
+ * Output a CSV of all orders
167
+ *
168
+ * @return null
169
+ */
170
+ public function ordersAction()
171
+ {
172
+ // Change maximum execution time
173
+ set_time_limit(0);
174
+
175
+ echo Ireus_Controller_Export::getInstance()
176
+ ->setOrderColumns($this->_ordersColumns)
177
+ ->exportOrdersCsv(Mage::getModel('Sales/Order_Item')->getCollection()->getData());
178
+
179
+ exit;
180
+ }
181
+
182
+
183
+ /**
184
+ * Output a CSV of all products with their attributes
185
+ *
186
+ * @return null
187
+ */
188
+ public function productsAction()
189
+ {
190
+ // Change maximum execution time
191
+ set_time_limit(0);
192
+
193
+ // Prepare the prudsys IREUS Export Controller
194
+ Ireus_Controller_Export::getInstance()
195
+ ->setProductColumns($this->_productsColumns);
196
+
197
+ // Get products from database
198
+ $collection = Mage::getModel('Catalog/Product')
199
+ ->getCollection()
200
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
201
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
202
+ ->addAttributeToFilter('status',
203
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
204
+ ->addAttributeToFilter('price', array('gt' => 0))
205
+ ->addAttributeToFilter(
206
+ 'visibility',
207
+ array(
208
+ 'in' => array(
209
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
210
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
211
+ )
212
+ )
213
+ )
214
+ ->addAttributeToSelect('small_image');
215
+ foreach($this->_productsColumns as $key) {
216
+ $collection->addAttributeToSelect($key);
217
+ }
218
+
219
+ // Add missing information to the collection
220
+ // which cannot be requested directly from database.
221
+ // Here is the most time wasted
222
+ $products = array();
223
+ foreach ($collection as $product)
224
+ {
225
+ $product_url = $product->getProductUrl();
226
+ //$product->setManufacturer($product->getAttributeText('manufacturer'));
227
+ $product->setUrl(self::setSidPlaceholder($product_url));
228
+ $product->setImagesUrl(Mage::helper('Catalog/Image')
229
+ ->init($product,'small_image')->resize(
230
+ Mage::getStoreConfig(self::CONFIG_IMAGE_WIDTH),
231
+ Mage::getStoreConfig(self::CONFIG_IMAGE_HEIGHT)
232
+ )->__toString());
233
+ $product->setAddToCartUrl(self::getAddToCartUrl($product, $product_url));
234
+
235
+ // Stream result in parts of 10
236
+ $products[] = $product->getData();
237
+
238
+ if (count($products) > 9
239
+ ) {
240
+ echo Ireus_Controller_Export::getInstance()
241
+ ->createProductsCsv($products);
242
+ flush();
243
+ $products = array();
244
+ }
245
+ }
246
+
247
+ // Stream remaining items
248
+ if (count($products) > 0
249
+ ) {
250
+ echo Ireus_Controller_Export::getInstance()
251
+ ->createProductsCsv($products);
252
+ flush();
253
+ }
254
+
255
+ // Delete cached recommendations
256
+ Ireus_Controller_Cache::deleteCache(Mage::getBaseDir('cache') . DIRECTORY_SEPARATOR . 'ireus');
257
+
258
+ exit;
259
+ }
260
+
261
+
262
+ /**
263
+ * Create "add this product to cart" url
264
+ *
265
+ * @param object $collection
266
+ * @param array $additional
267
+ * @return array
268
+ */
269
+ protected static function getAddToCartUrl($product, $product_url, $additional = array())
270
+ {
271
+ if ($product->getTypeInstance(true)->hasRequiredOptions($product)
272
+ ) {
273
+ $url = $product_url;
274
+ $link = (strpos($url, '?') !== false) ? '&' : '?';
275
+ $result = $url . $link . 'options=cart';
276
+ }
277
+ else
278
+ {
279
+ $result = Mage::helper('checkout/cart')->getAddUrl($product, $additional);
280
+ }
281
+
282
+ return self::setSidPlaceholder($result);
283
+ }
284
+
285
+
286
+ /**
287
+ * Sets SessionID placeholder in urls for dynamic SessionID adjustments done by IREUS
288
+ *
289
+ * @param string $url
290
+ * @return string
291
+ */
292
+ protected static function setSidPlaceholder ($url)
293
+ {
294
+ if (strpos($url, self::$_sessionId)
295
+ ) {
296
+ $url = str_replace(self::$_sessionId, self::$_ireusplaceholder, $url);
297
+ }
298
+ else
299
+ {
300
+ $url .= ((strpos($url, '?') !== false) ? '&' : '?')
301
+ . self::$_sessionIdQueryParam
302
+ . '='
303
+ . self::$_ireusplaceholder;
304
+ }
305
+
306
+ return $url;
307
+ }
308
+
309
+
310
+ /**
311
+ * Sets a different store if needed
312
+ *
313
+ * @param Mixed $storeCode can be either storeId or storeCode of store to set
314
+ * @return Mage_Core_Controller_Front_Action
315
+ */
316
+ protected function _setActiveStore($storeCode)
317
+ {
318
+ if (!$storeCode
319
+ ) {
320
+ $storeCode = $this->_storeCode;
321
+ }
322
+
323
+ // if storeId is used convert to storeCode
324
+ if (is_numeric($storeCode)) {
325
+ $storeCode = Mage::app()->getStore($storeCode)->getCode();
326
+ }
327
+
328
+ // if current store is ok return
329
+ if (Mage::app()->getStore()->getCode() == $storeCode) {
330
+ return $this;
331
+ }
332
+
333
+ // set active store
334
+ Mage::app()->setCurrentStore($storeCode);
335
+
336
+ return $this;
337
+ }
338
+ }
app/code/community/Netresearch/Ireus/controllers/ExportController_final.php ADDED
@@ -0,0 +1,380 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * IREUS
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain the license through the world-wide-web,
11
+ * please send an email to support@ireus.net so we can send you a copy.
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade Ireus to newer
16
+ * versions in the future. If you wish to customize Ireus for your
17
+ * needs please refer to http://www.ireus.net for more information.
18
+ *
19
+ * @category IREUS Recommendation Engine
20
+ * @package Ireus
21
+ * @copyright Copyright (c) 2010 prudsys AG (http://www.prudsys.com)
22
+ * @author Stephan Hoyer, Germany
23
+ * @author Silvio Steiger, Germany
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ *
26
+ * $Id$
27
+ */
28
+
29
+
30
+ // Register IREUS PHP Framework
31
+ require_once('IreusAutoloader.php');
32
+ IreusAutoloader::getInstance()->register();
33
+
34
+
35
+ class Netresearch_Ireus_ExportController extends Mage_Core_Controller_Front_Action
36
+ {
37
+ const CONFIG_SECURITY_CODE = 'ireus/settings/security_code';
38
+ const CONFIG_EXPORT_DISABLED_CATEGORIES = 'ireus/settings/export_disabled_categories';
39
+ const CONFIG_IMAGE_WIDTH = 'ireus/settings/image_width';
40
+ const CONFIG_IMAGE_HEIGHT = 'ireus/settings/image_height';
41
+ const PAGE_SIZE = 500;
42
+
43
+ var $_storeId ='admin';
44
+
45
+ var $_ordersColumns = array(
46
+ 'tid' => 'order_id',
47
+ 'pid' => 'product_id'
48
+ );
49
+
50
+ var $_productsColumns = array(
51
+ 'pid' => 'entity_id',
52
+ 'sku' => 'sku',
53
+ 'name' => 'name',
54
+ 'brand' => 'brand',
55
+ 'manufacturer' => 'manufacturer',
56
+ 'description' => 'short_description',
57
+ 'param1' => 'add_to_cart_url',
58
+ 'URL' => 'url',
59
+ 'imageURL' => 'images_url',
60
+ 'netUnitPrice' => 'price',
61
+ 'onlineFlag' => 'is_salable',
62
+ 'quantity' => 'qty',
63
+ 'strikeOutPrice' => 'special_price'
64
+ );
65
+
66
+ static $_sessionId;
67
+
68
+ static $_sessionIdQueryParam;
69
+
70
+ static $_ireusplaceholder = '%SID%';
71
+
72
+
73
+ /**
74
+ * Check security code and redirect to 404 if not given or wrong
75
+ *
76
+ * @return Netresearch_Ireus_ExportController
77
+ */
78
+ public function preDispatch()
79
+ {
80
+ parent::preDispatch();
81
+ $security_code = Mage::App()->getRequest()->getParam('code');
82
+ if(
83
+ is_null($security_code) or
84
+ $security_code != Mage::getStoreConfig(self::CONFIG_SECURITY_CODE)
85
+ ) {
86
+ $this->_redirect('noroute');
87
+ $this->setFlag('',self::FLAG_NO_DISPATCH,true);
88
+ }
89
+
90
+ if ($this->getRequest()->getParam('store')
91
+ ) {
92
+ $this->_setActiveStore($this->getRequest()->getParam('store'));
93
+ }
94
+
95
+ $this->_storeId = Mage::App()->getStore()->getCode();
96
+ self::$_sessionId = Mage::getSingleton('core/session')->getSessionId();
97
+ self::$_sessionIdQueryParam = Mage::getSingleton('core/session')->getSessionIdQueryParam();
98
+
99
+ return $this;
100
+ }
101
+
102
+
103
+ /**
104
+ * Output a CSV of all products with their
105
+ * categories and all parent categories,
106
+ *
107
+ * @return null
108
+ */
109
+ public function categoriesAction()
110
+ {
111
+ // Change maximum execution time
112
+ set_time_limit(0);
113
+
114
+ $product = Mage::getModel('catalog/product');
115
+
116
+ foreach(Mage::getModel('Catalog/Category')
117
+ ->getCollection()
118
+ ->addFieldToFilter('is_active', 1)
119
+ ->addFieldToFilter('level', array('gt' => 1))
120
+ ->addAttributeToSelect('name') as $category
121
+ ) {
122
+ if($category->getProductCount()
123
+ ) {
124
+ $productcategories = Mage::getModel('Catalog/Category')
125
+ ->getCollection()
126
+ ->addFieldToFilter('entity_id', array(
127
+ 'in' => $category->getPathIds()))
128
+ ->addAttributeToSelect('entity_id')
129
+ ->addAttributeToSelect('name');
130
+
131
+ $collection = $category->getProductCollection()
132
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
133
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
134
+ ->addAttributeToFilter('status',
135
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
136
+ ->addAttributeToFilter('visibility', array('in'=>array(
137
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
138
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
139
+ )))
140
+ ->addAttributeToFilter('price', array('gt' => 0));
141
+
142
+ Mage::getSingleton('core/resource_iterator')
143
+ ->walk(
144
+ $collection->getSelect(),
145
+ array(
146
+ array(
147
+ $this,
148
+ 'callbackCategoriesAction'
149
+ )
150
+ ),
151
+ array(
152
+ 'product' => $product,
153
+ 'productcategories' => $productcategories
154
+ )
155
+ );
156
+ }
157
+ }
158
+
159
+ exit;
160
+ }
161
+
162
+
163
+ /**
164
+ * Callback function for the resource iterator of the categories Action
165
+ *
166
+ * @param array $args
167
+ * @return void
168
+ */
169
+ public function callbackCategoriesAction ($args)
170
+ {
171
+ $product = $args['product'];
172
+ $productcategories = $args['productcategories'];
173
+ $product->setData($args['row']);
174
+
175
+ $productsWithCategories = array();
176
+ $pid = $product->getId();
177
+ foreach ($productcategories as $currentcategory
178
+ ) {
179
+ $cid = $currentcategory->getId();
180
+ $productsWithCategories[$pid.$cid] = array(
181
+ 'pid' => $pid,
182
+ 'cid' => $cid,
183
+ 'cidparent' => $currentcategory->getParentId(),
184
+ 'cname' => $currentcategory->getName()
185
+ );
186
+ }
187
+
188
+ // Stream output product wise
189
+ echo Ireus_Controller_Export::getInstance()
190
+ ->createCategoriesCsv($productsWithCategories);
191
+ flush();
192
+ }
193
+
194
+
195
+ /**
196
+ * Output a CSV of all orders
197
+ *
198
+ * @return null
199
+ */
200
+ public function ordersAction()
201
+ {
202
+ // Change maximum execution time
203
+ set_time_limit(0);
204
+
205
+ echo Ireus_Controller_Export::getInstance()
206
+ ->setOrderColumns($this->_ordersColumns)
207
+ ->exportOrdersCsv(Mage::getModel('Sales/Order_Item')->getCollection()->getData());
208
+
209
+ exit;
210
+ }
211
+
212
+
213
+ /**
214
+ * Output a CSV of all products with their attributes
215
+ *
216
+ * @return null
217
+ */
218
+ public function productsAction()
219
+ {
220
+ // Change maximum execution time
221
+ set_time_limit(0);
222
+
223
+ // Prepare the prudsys IREUS Export Controller
224
+ Ireus_Controller_Export::getInstance()
225
+ ->setProductColumns($this->_productsColumns);
226
+
227
+ // Get products from database
228
+ $collection = Mage::getModel('Catalog/Product')
229
+ ->getCollection()
230
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
231
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
232
+ ->addAttributeToFilter('status',
233
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
234
+ ->addAttributeToFilter('price', array('gt' => 0))
235
+ ->addAttributeToFilter(
236
+ 'visibility',
237
+ array(
238
+ 'in' => array(
239
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
240
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
241
+ )
242
+ )
243
+ )
244
+ ->addAttributeToSelect('small_image');
245
+ foreach($this->_productsColumns as $value
246
+ ) {
247
+ $collection->addAttributeToSelect($value);
248
+ }
249
+
250
+ // Walk through collection page wise
251
+ $countCollection = clone $collection;
252
+ $count = $countCollection->count();
253
+ unset ($countCollection);
254
+ $i=0;
255
+ do {
256
+ $i++;
257
+ $products = array();
258
+ $pageCollection = clone $collection;
259
+ $pageCollection->setPage($i, self::PAGE_SIZE);
260
+ foreach ($pageCollection as $product
261
+ ) {
262
+ $product_url = $product->getProductUrl();
263
+ $product->setManufacturer($product->getAttributeText('manufacturer'));
264
+ $product->setUrl(self::setSidPlaceholder($product_url));
265
+ $product->setImagesUrl(Mage::helper('Catalog/Image')
266
+ ->init($product,'small_image')
267
+ ->resize(
268
+ Mage::getStoreConfig(self::CONFIG_IMAGE_WIDTH),
269
+ Mage::getStoreConfig(self::CONFIG_IMAGE_HEIGHT)
270
+ )
271
+ ->__toString());
272
+ $product->setAddToCartUrl(self::getAddToCartUrl($product, $product_url));
273
+
274
+ // Stream result in parts of 10
275
+ $products[] = $product->getData();
276
+ if (count($products) > 9
277
+ ) {
278
+ echo Ireus_Controller_Export::getInstance()
279
+ ->createProductsCsv($products);
280
+ flush();
281
+ $products = array();
282
+ }
283
+ }
284
+
285
+ // Stream remaining items
286
+ if (count($products) > 0
287
+ ) {
288
+ echo Ireus_Controller_Export::getInstance()
289
+ ->createProductsCsv($products);
290
+ flush();
291
+ }
292
+
293
+ $count -= $pageCollection->count();
294
+
295
+ } while($count > 0);
296
+
297
+ // Delete cached recommendations
298
+ Ireus_Controller_Cache::deleteCache(Mage::getBaseDir('cache') . DIRECTORY_SEPARATOR . 'ireus');
299
+
300
+ exit;
301
+ }
302
+
303
+
304
+ /**
305
+ * Create "add this product to cart" url
306
+ *
307
+ * @param object $collection
308
+ * @param array $additional
309
+ * @return array
310
+ */
311
+ protected static function getAddToCartUrl($product, $product_url, $additional = array())
312
+ {
313
+ if ($product->getTypeInstance(true)->hasRequiredOptions($product)
314
+ ) {
315
+ $url = $product_url;
316
+ $link = (strpos($url, '?') !== false) ? '&' : '?';
317
+ $result = $url . $link . 'options=cart';
318
+ }
319
+ else
320
+ {
321
+ $result = Mage::helper('checkout/cart')->getAddUrl($product, $additional);
322
+ }
323
+
324
+ return self::setSidPlaceholder($result);
325
+ }
326
+
327
+
328
+ /**
329
+ * Sets SessionID placeholder in urls for dynamic SessionID adjustments done by IREUS
330
+ *
331
+ * @param string $url
332
+ * @return string
333
+ */
334
+ protected static function setSidPlaceholder ($url)
335
+ {
336
+ if (strpos($url, self::$_sessionId)
337
+ ) {
338
+ $url = str_replace(self::$_sessionId, self::$_ireusplaceholder, $url);
339
+ }
340
+ else
341
+ {
342
+ $url .= ((strpos($url, '?') !== false) ? '&' : '?')
343
+ . self::$_sessionIdQueryParam
344
+ . '='
345
+ . self::$_ireusplaceholder;
346
+ }
347
+
348
+ return $url;
349
+ }
350
+
351
+
352
+ /**
353
+ * Sets a different store if needed
354
+ *
355
+ * @param Mixed $storeCode can be either storeId or storeCode of store to set
356
+ * @return Mage_Core_Controller_Front_Action
357
+ */
358
+ protected function _setActiveStore($storeCode)
359
+ {
360
+ if (!$storeCode
361
+ ) {
362
+ $storeCode = $this->_storeCode;
363
+ }
364
+
365
+ // if storeId is used convert to storeCode
366
+ if (is_numeric($storeCode)) {
367
+ $storeCode = Mage::app()->getStore($storeCode)->getCode();
368
+ }
369
+
370
+ // if current store is ok return
371
+ if (Mage::app()->getStore()->getCode() == $storeCode) {
372
+ return $this;
373
+ }
374
+
375
+ // set active store
376
+ Mage::app()->setCurrentStore($storeCode);
377
+
378
+ return $this;
379
+ }
380
+ }
app/code/community/Netresearch/Ireus/controllers/ExportController_noprice.php ADDED
@@ -0,0 +1,397 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * IREUS
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain the license through the world-wide-web,
11
+ * please send an email to support@ireus.net so we can send you a copy.
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade Ireus to newer
16
+ * versions in the future. If you wish to customize Ireus for your
17
+ * needs please refer to http://www.ireus.net for more information.
18
+ *
19
+ * @category IREUS Recommendation Engine
20
+ * @package Ireus
21
+ * @copyright Copyright (c) 2010 prudsys AG (http://www.prudsys.com)
22
+ * @author Stephan Hoyer, Germany
23
+ * @author Silvio Steiger, Germany
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ *
26
+ * $Id$
27
+ */
28
+
29
+
30
+ // Register IREUS PHP Framework
31
+ require_once('IreusAutoloader.php');
32
+ IreusAutoloader::getInstance()->register();
33
+
34
+
35
+ class Netresearch_Ireus_ExportController extends Mage_Core_Controller_Front_Action
36
+ {
37
+ const CONFIG_SECURITY_CODE = 'ireus/settings/security_code';
38
+ const CONFIG_EXPORT_DISABLED_CATEGORIES = 'ireus/settings/export_disabled_categories';
39
+ const CONFIG_IMAGE_WIDTH = 'ireus/settings/image_width';
40
+ const CONFIG_IMAGE_HEIGHT = 'ireus/settings/image_height';
41
+ const PAGE_SIZE = 500;
42
+
43
+ var $_storeId ='admin';
44
+
45
+ var $_ordersColumns = array(
46
+ 'tid' => 'order_id',
47
+ 'pid' => 'product_id'
48
+ );
49
+
50
+ var $_productsColumns = array(
51
+ 'pid' => 'entity_id',
52
+ 'sku' => 'sku',
53
+ 'name' => 'name',
54
+ 'brand' => 'brand',
55
+ 'manufacturer' => 'manufacturer',
56
+ 'description' => 'short_description',
57
+ 'param1' => 'add_to_cart_url',
58
+ 'URL' => 'url',
59
+ 'imageURL' => 'images_url',
60
+ 'netUnitPrice' => 'price',
61
+ 'onlineFlag' => 'is_salable',
62
+ 'quantity' => 'qty',
63
+ 'strikeOutPrice' => 'special_price'
64
+ );
65
+
66
+ static $_sessionId;
67
+
68
+ static $_sessionIdQueryParam;
69
+
70
+ static $_ireusplaceholder = '%SID%';
71
+
72
+ var $products = array();
73
+
74
+
75
+ /**
76
+ * Check security code and redirect to 404 if not given or wrong
77
+ *
78
+ * @return Netresearch_Ireus_ExportController
79
+ */
80
+ public function preDispatch()
81
+ {
82
+ parent::preDispatch();
83
+ $security_code = Mage::App()->getRequest()->getParam('code');
84
+ if(
85
+ is_null($security_code) or
86
+ $security_code != Mage::getStoreConfig(self::CONFIG_SECURITY_CODE)
87
+ ) {
88
+ $this->_redirect('noroute');
89
+ $this->setFlag('',self::FLAG_NO_DISPATCH,true);
90
+ }
91
+
92
+ if ($this->getRequest()->getParam('store')
93
+ ) {
94
+ $this->_setActiveStore($this->getRequest()->getParam('store'));
95
+ }
96
+
97
+ $this->_storeId = Mage::App()->getStore()->getCode();
98
+ self::$_sessionId = Mage::getSingleton('core/session')->getSessionId();
99
+ self::$_sessionIdQueryParam = Mage::getSingleton('core/session')->getSessionIdQueryParam();
100
+
101
+ return $this;
102
+ }
103
+
104
+
105
+ /**
106
+ * Output a CSV of all products with their
107
+ * categories and all parent categories,
108
+ *
109
+ * @return null
110
+ */
111
+ public function categoriesAction()
112
+ {
113
+ // Change maximum execution time
114
+ set_time_limit(0);
115
+
116
+ $product = Mage::getModel('catalog/product');
117
+
118
+ foreach(Mage::getModel('Catalog/Category')
119
+ ->getCollection()
120
+ ->addFieldToFilter('is_active', 1)
121
+ ->addFieldToFilter('level', array('gt' => 1))
122
+ ->addAttributeToSelect('name') as $category
123
+ ) {
124
+ if($category->getProductCount()
125
+ ) {
126
+ $productcategories = Mage::getModel('Catalog/Category')
127
+ ->getCollection()
128
+ ->addFieldToFilter('entity_id', array(
129
+ 'in' => $category->getPathIds()))
130
+ ->addAttributeToSelect('entity_id')
131
+ ->addAttributeToSelect('name');
132
+
133
+ $collection = $category->getProductCollection()
134
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
135
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
136
+ ->addAttributeToFilter('status',
137
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
138
+ ->addAttributeToFilter('visibility', array('in'=>array(
139
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
140
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
141
+ )))
142
+ ->addAttributeToFilter('price', array('gt' => 0));
143
+
144
+ Mage::getSingleton('core/resource_iterator')
145
+ ->walk(
146
+ $collection->getSelect(),
147
+ array(
148
+ array(
149
+ $this,
150
+ 'callbackCategoriesAction'
151
+ )
152
+ ),
153
+ array(
154
+ 'product' => $product,
155
+ 'productcategories' => $productcategories
156
+ )
157
+ );
158
+ }
159
+ }
160
+
161
+ exit;
162
+ }
163
+
164
+
165
+ /**
166
+ * Callback function for the resource iterator of the categories Action
167
+ *
168
+ * @param array $args
169
+ * @return void
170
+ */
171
+ public function callbackCategoriesAction ($args)
172
+ {
173
+ $product = $args['product'];
174
+ $productcategories = $args['productcategories'];
175
+ $product->setData($args['row']);
176
+
177
+ $productsWithCategories = array();
178
+ $pid = $product->getId();
179
+ foreach ($productcategories as $currentcategory
180
+ ) {
181
+ $cid = $currentcategory->getId();
182
+ $productsWithCategories[$pid.$cid] = array(
183
+ 'pid' => $pid,
184
+ 'cid' => $cid,
185
+ 'cidparent' => $currentcategory->getParentId(),
186
+ 'cname' => $currentcategory->getName()
187
+ );
188
+ }
189
+
190
+ // Stream output product wise
191
+ echo Ireus_Controller_Export::getInstance()
192
+ ->createCategoriesCsv($productsWithCategories);
193
+ flush();
194
+ }
195
+
196
+
197
+ /**
198
+ * Output a CSV of all orders
199
+ *
200
+ * @return null
201
+ */
202
+ public function ordersAction()
203
+ {
204
+ // Change maximum execution time
205
+ set_time_limit(0);
206
+
207
+ echo Ireus_Controller_Export::getInstance()
208
+ ->setOrderColumns($this->_ordersColumns)
209
+ ->exportOrdersCsv(Mage::getModel('Sales/Order_Item')->getCollection()->getData());
210
+
211
+ exit;
212
+ }
213
+
214
+
215
+ /**
216
+ * Output a CSV of all products with their attributes
217
+ *
218
+ * @return null
219
+ */
220
+ public function productsAction()
221
+ {
222
+ // Change maximum execution time
223
+ set_time_limit(0);
224
+
225
+ // Prepare the prudsys IREUS Export Controller
226
+ Ireus_Controller_Export::getInstance()
227
+ ->setProductColumns($this->_productsColumns);
228
+
229
+ $product = Mage::getModel('catalog/product');
230
+
231
+ // Get products from database
232
+ $collection = Mage::getModel('Catalog/Product')
233
+ ->getCollection()
234
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
235
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
236
+ ->addAttributeToSelect(array('name', 'short_description'), 'inner')
237
+ ->addAttributeToSelect(array('special_price', 'manufacturer', 'small_image'), 'left')
238
+ ->addAttributeToFilter('status',
239
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
240
+ ->addAttributeToFilter('price', array('gt' => 0))
241
+ ->addAttributeToFilter(
242
+ 'visibility',
243
+ array(
244
+ 'in' => array(
245
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
246
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
247
+ )
248
+ )
249
+ )
250
+ ->addAttributeToSelect('small_image');
251
+
252
+ Mage::getSingleton('core/resource_iterator')
253
+ ->walk(
254
+ $collection->getSelect(),
255
+ array(
256
+ array(
257
+ $this,
258
+ 'callbackProductsAction'
259
+ )
260
+ ),
261
+ array(
262
+ 'product' => $product
263
+ )
264
+ );
265
+
266
+ // Stream remaining items
267
+ if (count($this->products) > 0
268
+ ) {
269
+ echo Ireus_Controller_Export::getInstance()
270
+ ->createProductsCsv($this->products);
271
+ flush();
272
+ }
273
+
274
+ // Delete cached recommendations
275
+ Ireus_Controller_Cache::deleteCache(Mage::getBaseDir('cache') . DIRECTORY_SEPARATOR . 'ireus');
276
+
277
+ exit;
278
+ }
279
+
280
+
281
+ /**
282
+ * Callback function for the resource iterator of the categories Action
283
+ *
284
+ * @param array $args
285
+ * @return void
286
+ */
287
+ public function callbackProductsAction ($args)
288
+ {
289
+ $product = $args['product'];
290
+ $product->setData($args['row']);
291
+
292
+ $product_url = $product->getProductUrl();
293
+ $product->setUrl(self::setSidPlaceholder($product_url));
294
+ $product->setImagesUrl(Mage::helper('Catalog/Image')
295
+ ->init($product, 'small_image')
296
+ ->resize(
297
+ Mage::getStoreConfig(self::CONFIG_IMAGE_WIDTH),
298
+ Mage::getStoreConfig(self::CONFIG_IMAGE_HEIGHT)
299
+ )
300
+ ->__toString());
301
+ $product->setAddToCartUrl(self::getAddToCartUrl($product, $product_url));
302
+
303
+ // Add parameters manually
304
+ $productarray = $product->getData();
305
+ $productarray['is_salable'] = $product->isSaleable();
306
+ $productarray['param2'] = $productarray['price'];
307
+ $productarray['price'] = 1;
308
+
309
+ // Stream result in parts of 10
310
+ $this->products[] = $productarray;
311
+ if (count($this->products) > 9
312
+ ) {
313
+ echo Ireus_Controller_Export::getInstance()
314
+ ->createProductsCsv($this->products);
315
+ flush();
316
+ $this->products = array();
317
+ }
318
+ }
319
+
320
+
321
+ /**
322
+ * Create "add this product to cart" url
323
+ *
324
+ * @param object $collection
325
+ * @param array $additional
326
+ * @return array
327
+ */
328
+ protected static function getAddToCartUrl($product, $product_url, $additional = array())
329
+ {
330
+ if ($product->getTypeInstance(true)->hasRequiredOptions($product)
331
+ ) {
332
+ $url = $product_url;
333
+ $link = (strpos($url, '?') !== false) ? '&' : '?';
334
+ $result = $url . $link . 'options=cart';
335
+ }
336
+ else
337
+ {
338
+ $result = Mage::helper('checkout/cart')->getAddUrl($product, $additional);
339
+ }
340
+
341
+ return self::setSidPlaceholder($result);
342
+ }
343
+
344
+
345
+ /**
346
+ * Sets SessionID placeholder in urls for dynamic SessionID adjustments done by IREUS
347
+ *
348
+ * @param string $url
349
+ * @return string
350
+ */
351
+ protected static function setSidPlaceholder ($url)
352
+ {
353
+ if (strpos($url, self::$_sessionId)
354
+ ) {
355
+ $url = str_replace(self::$_sessionId, self::$_ireusplaceholder, $url);
356
+ }
357
+ else
358
+ {
359
+ $url .= ((strpos($url, '?') !== false) ? '&' : '?')
360
+ . self::$_sessionIdQueryParam
361
+ . '='
362
+ . self::$_ireusplaceholder;
363
+ }
364
+
365
+ return $url;
366
+ }
367
+
368
+
369
+ /**
370
+ * Sets a different store if needed
371
+ *
372
+ * @param Mixed $storeCode can be either storeId or storeCode of store to set
373
+ * @return Mage_Core_Controller_Front_Action
374
+ */
375
+ protected function _setActiveStore($storeCode)
376
+ {
377
+ if (!$storeCode
378
+ ) {
379
+ $storeCode = $this->_storeCode;
380
+ }
381
+
382
+ // if storeId is used convert to storeCode
383
+ if (is_numeric($storeCode)) {
384
+ $storeCode = Mage::app()->getStore($storeCode)->getCode();
385
+ }
386
+
387
+ // if current store is ok return
388
+ if (Mage::app()->getStore()->getCode() == $storeCode) {
389
+ return $this;
390
+ }
391
+
392
+ // set active store
393
+ Mage::app()->setCurrentStore($storeCode);
394
+
395
+ return $this;
396
+ }
397
+ }
app/code/community/Netresearch/Ireus/controllers/ExportController_singlerow.php ADDED
@@ -0,0 +1,417 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * IREUS
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0).
8
+ * It is available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ * If you are unable to obtain the license through the world-wide-web,
11
+ * please send an email to support@ireus.net so we can send you a copy.
12
+ *
13
+ * DISCLAIMER
14
+ *
15
+ * Do not edit or add to this file if you wish to upgrade Ireus to newer
16
+ * versions in the future. If you wish to customize Ireus for your
17
+ * needs please refer to http://www.ireus.net for more information.
18
+ *
19
+ * @category IREUS Recommendation Engine
20
+ * @package Ireus
21
+ * @copyright Copyright (c) 2010 prudsys AG (http://www.prudsys.com)
22
+ * @author Stephan Hoyer, Germany
23
+ * @author Silvio Steiger, Germany
24
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
25
+ *
26
+ * $Id$
27
+ */
28
+
29
+
30
+ // Register IREUS PHP Framework
31
+ require_once('IreusAutoloader.php');
32
+ IreusAutoloader::getInstance()->register();
33
+
34
+
35
+ class Netresearch_Ireus_ExportController extends Mage_Core_Controller_Front_Action
36
+ {
37
+ const CONFIG_SECURITY_CODE = 'ireus/settings/security_code';
38
+ const CONFIG_EXPORT_DISABLED_CATEGORIES = 'ireus/settings/export_disabled_categories';
39
+ const CONFIG_IMAGE_WIDTH = 'ireus/settings/image_width';
40
+ const CONFIG_IMAGE_HEIGHT = 'ireus/settings/image_height';
41
+ const PAGE_SIZE = 1;
42
+
43
+ var $_storeId ='admin';
44
+
45
+ var $_ordersColumns = array(
46
+ 'tid' => 'order_id',
47
+ 'pid' => 'product_id'
48
+ );
49
+
50
+ var $_productsColumns = array(
51
+ 'pid' => 'entity_id',
52
+ 'sku' => 'sku',
53
+ 'name' => 'name',
54
+ 'brand' => 'brand',
55
+ 'manufacturer' => 'manufacturer',
56
+ 'description' => 'short_description',
57
+ 'param1' => 'add_to_cart_url',
58
+ 'URL' => 'url',
59
+ 'imageURL' => 'images_url',
60
+ 'netUnitPrice' => 'price',
61
+ 'onlineFlag' => 'is_salable',
62
+ 'quantity' => 'qty',
63
+ 'strikeOutPrice' => 'special_price'
64
+ );
65
+
66
+ static $_sessionId;
67
+
68
+ static $_sessionIdQueryParam;
69
+
70
+ static $_ireusplaceholder = '%SID%';
71
+
72
+ var $products = array();
73
+
74
+
75
+ /**
76
+ * Check security code and redirect to 404 if not given or wrong
77
+ *
78
+ * @return Netresearch_Ireus_ExportController
79
+ */
80
+ public function preDispatch()
81
+ {
82
+ parent::preDispatch();
83
+ $security_code = Mage::App()->getRequest()->getParam('code');
84
+ if(
85
+ is_null($security_code) or
86
+ $security_code != Mage::getStoreConfig(self::CONFIG_SECURITY_CODE)
87
+ ) {
88
+ $this->_redirect('noroute');
89
+ $this->setFlag('',self::FLAG_NO_DISPATCH,true);
90
+ }
91
+
92
+ if ($this->getRequest()->getParam('store')
93
+ ) {
94
+ $this->_setActiveStore($this->getRequest()->getParam('store'));
95
+ }
96
+
97
+ $this->_storeId = Mage::App()->getStore()->getCode();
98
+ self::$_sessionId = Mage::getSingleton('core/session')->getSessionId();
99
+ self::$_sessionIdQueryParam = Mage::getSingleton('core/session')->getSessionIdQueryParam();
100
+
101
+ return $this;
102
+ }
103
+
104
+
105
+ /**
106
+ * Output a CSV of all products with their
107
+ * categories and all parent categories,
108
+ *
109
+ * @return null
110
+ */
111
+ public function categoriesAction()
112
+ {
113
+ $iStartTime = microtime(true);
114
+
115
+ // Change maximum execution time
116
+ set_time_limit(0);
117
+
118
+ $product = Mage::getModel('catalog/product');
119
+
120
+ foreach(Mage::getModel('Catalog/Category')
121
+ ->getCollection()
122
+ ->addFieldToFilter('is_active', 1)
123
+ ->addFieldToFilter('level', array('gt' => 1))
124
+ ->addAttributeToSelect('name') as $category
125
+ ) {
126
+ if($category->getProductCount()
127
+ ) {
128
+ $productcategories = Mage::getModel('Catalog/Category')
129
+ ->getCollection()
130
+ ->addFieldToFilter('entity_id', array(
131
+ 'in' => $category->getPathIds()))
132
+ ->addAttributeToSelect('entity_id')
133
+ ->addAttributeToSelect('name');
134
+
135
+ $collection = $category->getProductCollection()
136
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
137
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
138
+ ->addAttributeToFilter('status',
139
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
140
+ ->addAttributeToFilter('visibility', array('in'=>array(
141
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
142
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
143
+ )))
144
+ ->addAttributeToFilter('price', array('gt' => 0));
145
+
146
+ Mage::getSingleton('core/resource_iterator')
147
+ ->walk(
148
+ $collection->getSelect(),
149
+ array(
150
+ array(
151
+ $this,
152
+ 'callbackCategoriesAction'
153
+ )
154
+ ),
155
+ array(
156
+ 'product' => $product,
157
+ 'productcategories' => $productcategories
158
+ )
159
+ );
160
+ }
161
+ }
162
+
163
+ $iTotalTime = microtime(true) - $iStartTime;
164
+ echo "Total time: " . sprintf("%02d:%02d:%02.3f", ($iTotalTime/3600), ($iTotalTime/60)%60, $iTotalTime-(floor($iTotalTime/60)*60));
165
+ exit;
166
+ }
167
+
168
+
169
+ /**
170
+ * Callback function for the resource iterator of the categories Action
171
+ *
172
+ * @param array $args
173
+ * @return void
174
+ */
175
+ public function callbackCategoriesAction ($args)
176
+ {
177
+ $product = $args['product'];
178
+ $productcategories = $args['productcategories'];
179
+ $product->setData($args['row']);
180
+
181
+ $productsWithCategories = array();
182
+ $pid = $product->getId();
183
+ foreach ($productcategories as $currentcategory
184
+ ) {
185
+ $cid = $currentcategory->getId();
186
+ $productsWithCategories[$pid.$cid] = array(
187
+ 'pid' => $pid,
188
+ 'cid' => $cid,
189
+ 'cidparent' => $currentcategory->getParentId(),
190
+ 'cname' => $currentcategory->getName()
191
+ );
192
+ }
193
+
194
+ // Stream output product wise
195
+ echo Ireus_Controller_Export::getInstance()
196
+ ->createCategoriesCsv($productsWithCategories);
197
+ flush();
198
+ }
199
+
200
+
201
+ /**
202
+ * Output a CSV of all orders
203
+ *
204
+ * @return null
205
+ */
206
+ public function ordersAction()
207
+ {
208
+ // Change maximum execution time
209
+ set_time_limit(0);
210
+
211
+ echo Ireus_Controller_Export::getInstance()
212
+ ->setOrderColumns($this->_ordersColumns)
213
+ ->exportOrdersCsv(Mage::getModel('Sales/Order_Item')->getCollection()->getData());
214
+
215
+ exit;
216
+ }
217
+
218
+
219
+ /**
220
+ * Output a CSV of all products with their attributes
221
+ *
222
+ * @return null
223
+ */
224
+ public function productsAction()
225
+ {
226
+ $iStartTime = microtime(true);
227
+
228
+ // Change maximum execution time
229
+ set_time_limit(0);
230
+
231
+ // Prepare the prudsys IREUS Export Controller
232
+ Ireus_Controller_Export::getInstance()
233
+ ->setProductColumns($this->_productsColumns);
234
+
235
+ // Get products from database
236
+ $product = Mage::getModel('catalog/product');
237
+ $collection = Mage::getModel('Catalog/Product')
238
+ ->getCollection()
239
+ ->joinField('qty', 'cataloginventory/stock_item', '*',
240
+ 'product_id=entity_id', '{{table}}.stock_id=1', 'left')
241
+ ->addAttributeToFilter('status',
242
+ Mage_Catalog_Model_Product_Status::STATUS_ENABLED)
243
+ ->addAttributeToFilter('price', array('gt' => 0))
244
+ ->addAttributeToFilter(
245
+ 'visibility',
246
+ array(
247
+ 'in' => array(
248
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH,
249
+ Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG
250
+ )
251
+ )
252
+ )
253
+ ->addAttributeToSelect('entity_id', true)
254
+ ->addAttributeToSelect('sku', true)
255
+ ->addAttributeToSelect('name', true)
256
+ ->addAttributeToSelect('brand')
257
+ ->addAttributeToSelect('manufacturer', true)
258
+ ->addAttributeToSelect('short_description', true)
259
+ ->addAttributeToSelect('add_to_cart_url')
260
+ ->addAttributeToSelect('url')
261
+ ->addAttributeToSelect('small_image', true)
262
+ ->addAttributeToSelect('price', true)
263
+ ->addAttributeToSelect('is_salable')
264
+ ->addAttributeToSelect('qty')
265
+ ->addAttributeToSelect('special_price', true);
266
+
267
+ Mage::getSingleton('core/resource_iterator')
268
+ ->walk(
269
+ $collection->getSelect(),
270
+ array(
271
+ array(
272
+ $this,
273
+ 'callbackProductsAction'
274
+ )
275
+ ),
276
+ array(
277
+ 'product' => $product
278
+ )
279
+ );
280
+
281
+ // Stream remaining items
282
+ if (count($this->products) > 0
283
+ ) {
284
+ echo Ireus_Controller_Export::getInstance()
285
+ ->createProductsCsv($this->products);
286
+ flush();
287
+ }
288
+
289
+ // Delete cached recommendations
290
+ Ireus_Controller_Cache::deleteCache(Mage::getBaseDir('cache') . DIRECTORY_SEPARATOR . 'ireus');
291
+
292
+ $iTotalTime = microtime(true) - $iStartTime;
293
+ echo "Total time: " . sprintf("%02d:%02d:%02.3f", ($iTotalTime/3600), ($iTotalTime/60)%60, $iTotalTime-(floor($iTotalTime/60)*60));
294
+ exit;
295
+ }
296
+
297
+
298
+ /**
299
+ * Callback function for the resource iterator of the products Action
300
+ *
301
+ * @param array $args
302
+ * @return void
303
+ */
304
+ public function callbackProductsAction ($args)
305
+ {
306
+ $product = $args['product'];
307
+ $product->setData($args['row']);
308
+
309
+ // Add missing information to the collection
310
+ // which cannot be requested directly from database.
311
+ // Here is the most time wasted
312
+ $product_url = $product->getProductUrl();
313
+ //$product->setManufacturer($product->getAttributeText('manufacturer'));
314
+ $product->setUrl(self::setSidPlaceholder($product_url));
315
+ $product->setData('is_salable', $product->isSalable());
316
+ $product->setImagesUrl(Mage::helper('Catalog/Image')
317
+ ->init(
318
+ $product,
319
+ 'small_image'
320
+ )
321
+ ->resize(
322
+ Mage::getStoreConfig(self::CONFIG_IMAGE_WIDTH),
323
+ Mage::getStoreConfig(self::CONFIG_IMAGE_HEIGHT)
324
+ )
325
+ ->__toString()
326
+ );
327
+ $product->setAddToCartUrl(self::getAddToCartUrl($product, $product_url));
328
+
329
+ // Stream result in groups of 10
330
+ $this->products[] = $product->getData();
331
+ if (count($this->products) > 9
332
+ ) {
333
+ echo Ireus_Controller_Export::getInstance()
334
+ ->createProductsCsv($this->products);
335
+ flush();
336
+ $this->products = array();
337
+ }
338
+ }
339
+
340
+
341
+ /**
342
+ * Create "add this product to cart" url
343
+ *
344
+ * @param object $collection
345
+ * @param array $additional
346
+ * @return array
347
+ */
348
+ protected static function getAddToCartUrl($product, $product_url, $additional = array())
349
+ {
350
+ if ($product->getTypeInstance(true)->hasRequiredOptions($product)
351
+ ) {
352
+ $url = $product_url;
353
+ $link = (strpos($url, '?') !== false) ? '&' : '?';
354
+ $result = $url . $link . 'options=cart';
355
+ }
356
+ else
357
+ {
358
+ $result = Mage::helper('checkout/cart')->getAddUrl($product, $additional);
359
+ }
360
+
361
+ return self::setSidPlaceholder($result);
362
+ }
363
+
364
+
365
+ /**
366
+ * Sets SessionID placeholder in urls for dynamic SessionID adjustments done by IREUS
367
+ *
368
+ * @param string $url
369
+ * @return string
370
+ */
371
+ protected static function setSidPlaceholder ($url)
372
+ {
373
+ if (strpos($url, self::$_sessionId)
374
+ ) {
375
+ $url = str_replace(self::$_sessionId, self::$_ireusplaceholder, $url);
376
+ }
377
+ else
378
+ {
379
+ $url .= ((strpos($url, '?') !== false) ? '&' : '?')
380
+ . self::$_sessionIdQueryParam
381
+ . '='
382
+ . self::$_ireusplaceholder;
383
+ }
384
+
385
+ return $url;
386
+ }
387
+
388
+
389
+ /**
390
+ * Sets a different store if needed
391
+ *
392
+ * @param Mixed $storeCode can be either storeId or storeCode of store to set
393
+ * @return Mage_Core_Controller_Front_Action
394
+ */
395
+ protected function _setActiveStore($storeCode)
396
+ {
397
+ if (!$storeCode
398
+ ) {
399
+ $storeCode = $this->_storeCode;
400
+ }
401
+
402
+ // if storeId is used convert to storeCode
403
+ if (is_numeric($storeCode)) {
404
+ $storeCode = Mage::app()->getStore($storeCode)->getCode();
405
+ }
406
+
407
+ // if current store is ok return
408
+ if (Mage::app()->getStore()->getCode() == $storeCode) {
409
+ return $this;
410
+ }
411
+
412
+ // set active store
413
+ Mage::app()->setCurrentStore($storeCode);
414
+
415
+ return $this;
416
+ }
417
+ }
app/code/community/Netresearch/Ireus/etc/config.xml CHANGED
@@ -97,6 +97,15 @@
97
  </resources>
98
  </acl>
99
  </adminhtml>
 
 
 
 
 
 
 
 
 
100
 
101
  <frontend>
102
  <routers>
@@ -136,4 +145,4 @@
136
  </checkout_cart_add_product_complete>
137
  </events>
138
  </frontend>
139
- </config>
97
  </resources>
98
  </acl>
99
  </adminhtml>
100
+
101
+ <default>
102
+ <ireus>
103
+ <settings>
104
+ <enable_session_cookies>1</enable_session_cookies>
105
+ <disable_magento_upsell>1</disable_magento_upsell>
106
+ </settings>
107
+ </ireus>
108
+ </default>
109
 
110
  <frontend>
111
  <routers>
145
  </checkout_cart_add_product_complete>
146
  </events>
147
  </frontend>
148
+ </config>
app/code/community/Netresearch/Ireus/etc/system.xml CHANGED
@@ -92,11 +92,21 @@
92
  <show_in_website>1</show_in_website>
93
  <show_in_store>1</show_in_store>
94
  </image_height>
 
 
 
 
 
 
 
 
 
 
95
  <disable_magento_upsell translate="label comment">
96
  <label>Disable Magento Upsell:</label>
97
  <frontend_type>select</frontend_type>
98
  <source_model>adminhtml/system_config_source_yesno</source_model>
99
- <sort_order>600</sort_order>
100
  <show_in_default>1</show_in_default>
101
  <show_in_website>1</show_in_website>
102
  <show_in_store>1</show_in_store>
92
  <show_in_website>1</show_in_website>
93
  <show_in_store>1</show_in_store>
94
  </image_height>
95
+ <enable_session_cookies translate="label comment">
96
+ <label>Enable Session Cookies:</label>
97
+ <frontend_type>select</frontend_type>
98
+ <source_model>adminhtml/system_config_source_yesno</source_model>
99
+ <comment><![CDATA[Enables IREUS-Session-only-Cookies for session personalization even when the respective user doesn't allow cookies. No user-profiles or persistent cookies will be stored! Enable this if IREUS features are strictly necessary for the service requested by your users.]]></comment>
100
+ <sort_order>600</sort_order>
101
+ <show_in_default>1</show_in_default>
102
+ <show_in_website>1</show_in_website>
103
+ <show_in_store>1</show_in_store>
104
+ </enable_session_cookies>
105
  <disable_magento_upsell translate="label comment">
106
  <label>Disable Magento Upsell:</label>
107
  <frontend_type>select</frontend_type>
108
  <source_model>adminhtml/system_config_source_yesno</source_model>
109
+ <sort_order>700</sort_order>
110
  <show_in_default>1</show_in_default>
111
  <show_in_website>1</show_in_website>
112
  <show_in_store>1</show_in_store>
app/design/frontend/default/default/layout/ireus.xml CHANGED
@@ -78,26 +78,21 @@
78
  </reference>
79
  <reference name="before_body_end">
80
  <block type="ireus/data" name="ireus_data" before="ireus_footer" as="ireus_data" template="ireus/data.phtml"/>
81
- <block type="ireus/data" name="ireus_footer" after="-" as="ireus_footer" template="ireus/footer.phtml"/>
82
  </reference>
83
  </cms_index_index>
84
 
85
  <checkout_onepage_success>
86
- <reference name="content">
87
- <block type="ireus/data" name="ireus_products" as="ireus_products" template="ireus/userrecomm.phtml"/>
88
- </reference>
89
  <reference name="before_body_end">
90
- <block type="ireus/data" name="ireus_datauser" before="ireus_footer" as="ireus_datauser" template="ireus/data.phtml"/>
91
- <block type="ireus/data" name="ireus_dataorder" before="ireus_datauser" as="ireus_dataorder" template="ireus/data.phtml"/>
92
- <block type="ireus/data" name="ireus_footer" after="-" as="ireus_footer" template="ireus/footer.phtml"/>
93
  </reference>
94
  </checkout_onepage_success>
95
 
96
  <checkout_multishipping_success>
97
  <reference name="before_body_end">
98
  <block type="ireus/data" name="ireus_data" before="ireus_footer" as="ireus_data" template="ireus/data.phtml"/>
99
- <block type="ireus/data" name="ireus_footer" after="-" as="ireus_footer" template="ireus/footer.phtml"/>
100
  </reference>
101
  </checkout_multishipping_success>
102
-
103
  </layout>
78
  </reference>
79
  <reference name="before_body_end">
80
  <block type="ireus/data" name="ireus_data" before="ireus_footer" as="ireus_data" template="ireus/data.phtml"/>
81
+ <block type="ireus/data" name="ireus_footer" after="ireus_data" as="ireus_footer" template="ireus/footer.phtml"/>
82
  </reference>
83
  </cms_index_index>
84
 
85
  <checkout_onepage_success>
 
 
 
86
  <reference name="before_body_end">
87
+ <block type="ireus/data" name="ireus_data" before="ireus_footer" as="ireus_data" template="ireus/data.phtml"/>
88
+ <block type="ireus/data" name="ireus_footer" after="ireus_data" as="ireus_footer" template="ireus/footer.phtml"/>
 
89
  </reference>
90
  </checkout_onepage_success>
91
 
92
  <checkout_multishipping_success>
93
  <reference name="before_body_end">
94
  <block type="ireus/data" name="ireus_data" before="ireus_footer" as="ireus_data" template="ireus/data.phtml"/>
95
+ <block type="ireus/data" name="ireus_footer" after="ireus_data" as="ireus_footer" template="ireus/footer.phtml"/>
96
  </reference>
97
  </checkout_multishipping_success>
 
98
  </layout>
lib/Ireus/Controller/Cache.php CHANGED
@@ -67,7 +67,7 @@ class Ireus_Controller_Cache extends Ireus_Object
67
  *
68
  * @var string
69
  */
70
- protected static $_servleturl = 'http://www.ireus.net/ireus-server';
71
 
72
 
73
  /**
67
  *
68
  * @var string
69
  */
70
+ protected static $_servleturl = 'http://www.ireus.net/ireus-server'; //http://salieri.prudsys.com:8180/rde_server
71
 
72
 
73
  /**
lib/Ireus/Controller/Export.php CHANGED
@@ -105,7 +105,7 @@ class Ireus_Controller_Export extends Ireus_Object
105
  'param3' => array(2000, 'string'),
106
  'param4' => array(2000, 'string'),
107
  'param5' => array(2000, 'string'),
108
- //'stock' => array(0, 'integer'),
109
  //'type' => array(0, 'string'),
110
  //'rank' => array(0, 'float'),
111
  //'initstock' => array(0, 'float')
@@ -185,14 +185,14 @@ class Ireus_Controller_Export extends Ireus_Object
185
 
186
  foreach($lines as $linekey => $line
187
  ) {
188
- if ($pids[$line[$pidname]] == null
189
- ) {
190
- $pids[$line[$pidname]] = true;
191
- }
192
- else
193
- {
194
- unset($lines[$linekey]);
195
- }
196
  }
197
 
198
  return $lines;
@@ -325,20 +325,20 @@ class Ireus_Controller_Export extends Ireus_Object
325
  '/^\/*/',
326
  '/',
327
  preg_replace(
328
- array('/^((https?)\:\/\/)(([a-z0-9-.]*)\.([a-z]{2,3})|localhost)/', '/'.$this->_base.'/'),
329
  '',
330
  $shopurl,
331
  1
332
  )
333
  );
334
  }
335
- elseif (preg_match('/^(([a-z0-9-.]*)\.([a-z]{2,3})|localhost)/', $shopurl)) {
336
 
337
  return preg_replace(
338
  '/^\/*/',
339
  '/',
340
  preg_replace(
341
- array('/^(([a-z0-9-.]*)\.([a-z]{2,3})|localhost)/', '/'.$this->_base.'/'),
342
  '',
343
  $shopurl,
344
  1
105
  'param3' => array(2000, 'string'),
106
  'param4' => array(2000, 'string'),
107
  'param5' => array(2000, 'string'),
108
+ 'stock' => array(0, 'integer'),
109
  //'type' => array(0, 'string'),
110
  //'rank' => array(0, 'float'),
111
  //'initstock' => array(0, 'float')
185
 
186
  foreach($lines as $linekey => $line
187
  ) {
188
+ if (!in_array($line[$pidname], $pids)
189
+ ) {
190
+ $pids[] = $line[$pidname];
191
+ }
192
+ else
193
+ {
194
+ unset($lines[$linekey]);
195
+ }
196
  }
197
 
198
  return $lines;
325
  '/^\/*/',
326
  '/',
327
  preg_replace(
328
+ array('/^((https?)\:\/\/)(([A-Za-z0-9-.]*)\.([a-z]{2,3})|localhost)/', '/'.$this->_base.'/'),
329
  '',
330
  $shopurl,
331
  1
332
  )
333
  );
334
  }
335
+ elseif (preg_match('/^(([A-Za-z0-9-.]*)\.([a-z]{2,3})|localhost)/', $shopurl)) {
336
 
337
  return preg_replace(
338
  '/^\/*/',
339
  '/',
340
  preg_replace(
341
+ array('/^(([A-Za-z0-9-.]*)\.([a-z]{2,3})|localhost)/', '/'.$this->_base.'/'),
342
  '',
343
  $shopurl,
344
  1
lib/Ireus/Model/Csv.php CHANGED
@@ -34,7 +34,7 @@ class Ireus_Model_Csv extends Ireus_Object
34
  * @param string $filename
35
  * @return array
36
  */
37
- public static function readFile ($file, $quoting = '"', $delimiter = '|', $lineending = "\r\n", $keymap = null)
38
  {
39
  # Check file
40
  if (!file_exists($file)) {
@@ -49,28 +49,14 @@ class Ireus_Model_Csv extends Ireus_Object
49
  $header = fgetcsv($handle, 0, $delimiter);
50
  $headercount = count($header);
51
 
52
- # Flip keymap
53
- if ($keymap
54
- ) {
55
- $keymap = array_flip($keymap);
56
- }
57
-
58
  # Read the rest of the csv file to catch the data
59
  while (!feof($handle)) {
60
  $line = fgetcsv($handle, 0, $delimiter, $quoting);
61
-
62
  if (count($line) == $headercount
63
  ) {
64
- $line = array_combine($header, $line);
65
-
66
- # Reduce line to needed fields
67
- if ($keymap
68
- ) {
69
- $line = array_intersect_key($line, $keymap);
70
- }
71
-
72
  # built array
73
- $data[] = $line;
74
  }
75
  }
76
 
34
  * @param string $filename
35
  * @return array
36
  */
37
+ public static function readFile ($file, $quoting = '"', $delimiter = '|', $lineending = "\r\n")
38
  {
39
  # Check file
40
  if (!file_exists($file)) {
49
  $header = fgetcsv($handle, 0, $delimiter);
50
  $headercount = count($header);
51
 
 
 
 
 
 
 
52
  # Read the rest of the csv file to catch the data
53
  while (!feof($handle)) {
54
  $line = fgetcsv($handle, 0, $delimiter, $quoting);
55
+
56
  if (count($line) == $headercount
57
  ) {
 
 
 
 
 
 
 
 
58
  # built array
59
+ $data[] = array_combine($header, $line);
60
  }
61
  }
62
 
lib/Ireus/View/Client/event.tpl.php CHANGED
@@ -1,6 +1,6 @@
1
  <script type="text/javascript">
2
  //<![CDATA[
3
- if(typeof(ireus_events) == 'undefined') var ireus_events = new Array();
4
  var ireus = new Object([[+IreusEventParams]]);
5
  ireus_events.push(ireus);
6
  //]]>
1
  <script type="text/javascript">
2
  //<![CDATA[
3
+ if(typeof(ireus_events) == 'undefined') ireus_events = new Array();
4
  var ireus = new Object([[+IreusEventParams]]);
5
  ireus_events.push(ireus);
6
  //]]>
lib/Ireus/View/Client/home.tpl.php CHANGED
@@ -1,5 +1 @@
1
- <div id="ireus_userrecomm">
2
- <noscript>
3
- [[+IreusCachedRecomms]]
4
- </noscript>
5
- </div>
1
+ <div id="ireus_userrecomm"></div>
 
 
 
 
lib/Ireus/View/Client/product.tpl.php CHANGED
@@ -1,5 +1 @@
1
- <div id="ireus_recomm">
2
- <noscript>
3
- [[+IreusCachedRecomms]]
4
- </noscript>
5
- </div>
1
+ <div id="ireus_recomm"></div>
 
 
 
 
lib/Ireus/View/Client/user.tpl.php CHANGED
@@ -1,5 +1 @@
1
- <div id="ireus_userrecomm">
2
- <noscript>
3
- [[+IreusCachedRecomms]]
4
- </noscript>
5
- </div>
1
+ <div id="ireus_userrecomm"></div>
 
 
 
 
package.xml CHANGED
@@ -1,26 +1,23 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>IREUS_Recommendation_Engine_Interface</name>
4
- <version>2.2.7</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL V3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>prudsys IREUS Online Recommendation Engine Connector</summary>
10
- <description>With prudsys IREUS - the real-time recommendation engine of the Data Mining specialist prudsys - you can customise the product recommendations in your online shop. Using the click behaviour prudsys IREUS can determine each visitor's current buying interest in real-time and recommend products that are highly relevant based on this.&#xD;
 
11
  &#xD;
12
- Your benefit: Increasing the conversion rate and revenue from your online shop.&#xD;
13
- &#xD;
14
- Additionally prudsys IREUS optimises the quality of the recommendations on an ongoing basis in real-time by analysing the responses of the users to the recommendations. Integrated statistics show the acceptance of the recommendations and the revenue thus generated.&#xD;
15
- &#xD;
16
- prudsys IREUS is based on the prudsys Realtime Decisioning Engine (prudsys RDE), the leading real-time analytics application in Germany. With the prudsys IREUS Magento connector you benefit from the easy integration of the prudsys IREUS recommendation engine in your own online shop.&#xD;
17
- &#xD;
18
- The registration for prudsys IREUS is free of charge at: www.ireus.net.</description>
19
  <notes>Log out and log in after install to get access to the configuration interface! You will find it in the menu [System -&gt; Configuration -&gt; IREUS Recommendation Engine]</notes>
20
- <authors><author><name>prudsys IREUS Support Team</name><user>auto-converted</user><email>support@ireus.net</email></author></authors>
21
- <date>2011-06-06</date>
22
- <time>09:04:04</time>
23
- <contents><target name="magecommunity"><dir name="Netresearch"><dir name="Ireus"><dir name="Block"><dir name="Catalog"><dir name="Product"><dir name="List"><file name="Upsell.php" hash="2063a8463153a5e74ab11333f6112c74"/></dir></dir></dir><dir name="Checkout"><dir name="Multishipping"><file name="Success.php" hash="72495e9ef43ab32d78ac9b225ad25e7b"/></dir></dir><file name="Data.php" hash="5e70d80aee3cef928db721cd3062e539"/></dir><dir name="Helper"><file name="Data.php" hash="166807c6ae52889ee30ae9d5d9760f06"/></dir><dir name="Model"><file name="Observer.php" hash="1722435a09f1ec005ea85831f1efd9b8"/></dir><dir name="controllers"><file name="ExportController.php" hash="04e9a5e2feb4bdcdecf081788d802c95"/></dir><dir name="etc"><file name="config.xml" hash="7f84d0b692e329b9c3b9bedbad2af2b9"/><file name="system.xml" hash="e16445be0775c0d7928080f6a8f20c12"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="ireus.xml" hash="7e16aaac49ae2e0939e61a4ad2a6b5fc"/></dir><dir name="template"><dir name="ireus"><file name="data.phtml" hash="914c75fc9f1f09b3ec914a5aa12e1a71"/><file name="footer.phtml" hash="4f8718b50744c98cec9d1ffce31e2242"/><file name="recomm.phtml" hash="c56c8aa10531782cb0237a5cd7a715ad"/><file name="userrecomm.phtml" hash="879f8c79109f82ceff8a3c03d0c3ce1b"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Netresearch_Ireus.xml" hash="51f0d7dfc505541ad5bbd81cac334a4c"/></dir></target><target name="mage"><dir name="lib"><dir name="Ireus"><dir name="Controller"><file name="Cache.php" hash="72e71d12109e5195e6f6a9e47883f863"/><file name="Export.php" hash="5599e6775872dd7a469198968790b48e"/></dir><dir name="Model"><file name="Csv.php" hash="b8a7f587ea6b2154fcf10d8361b590a4"/><file name="File.php" hash="70a796322ba8c1dcbd1c60944b7e95db"/></dir><dir name="View"><dir name="Client"><file name="call.tpl.php" hash="75da798d5fd4d21208fe636a12b3085c"/><file name="event.tpl.php" hash="d3ae7d342b6805f94e61b10aff601c10"/><file name="home.tpl.php" hash="966b74dae389541a20366d54fb8cb63c"/><file name="product.tpl.php" hash="ceba16f08b72b43f84378cdc22094492"/><file name="user.tpl.php" hash="966b74dae389541a20366d54fb8cb63c"/></dir><file name="Client.php" hash="c1739c7d943f63863a2bd7b546db3a6a"/></dir><file name="Object.php" hash="cf2c29389d0ae7c04858d763e074e4f3"/></dir><file name="IreusAutoloader.php" hash="4c6d6bec65a2d8f196e3a9d3b94114b8"/></dir></target></contents>
24
  <compatible/>
25
- <dependencies/>
26
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>IREUS_Recommendation_Engine_Interface</name>
4
+ <version>2.2.8</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">OSL V3.0</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>prudsys IREUS Online Recommendation Engine Connector</summary>
10
+ <description>New features:&#xD;
11
+ - Uses the magento Cookie Restriction Mode of Magento 1.7.0.0 or higher for EU cookie policy compliance&#xD;
12
  &#xD;
13
+ Bug fixes:&#xD;
14
+ - Order tracking for grouped products is working now&#xD;
15
+ - Several additional minor bug fixes</description>
 
 
 
 
16
  <notes>Log out and log in after install to get access to the configuration interface! You will find it in the menu [System -&gt; Configuration -&gt; IREUS Recommendation Engine]</notes>
17
+ <authors><author><name>prudsys IREUS Team</name><user>ireus</user><email>support@ireus.net</email></author></authors>
18
+ <date>2012-06-08</date>
19
+ <time>08:27:15</time>
20
+ <contents><target name="magecommunity"><dir><dir name="Netresearch"><dir name="Ireus"><dir name="Block"><dir name="Catalog"><dir name="Product"><dir name="List"><file name="Upsell.php" hash="2063a8463153a5e74ab11333f6112c74"/></dir></dir></dir><dir name="Checkout"><dir name="Multishipping"><file name="Success.php" hash="72495e9ef43ab32d78ac9b225ad25e7b"/></dir></dir><file name="Data.php" hash="4ec619023cf595c9cf340a9cb206cfa9"/></dir><dir name="Helper"><file name="Data.php" hash="166807c6ae52889ee30ae9d5d9760f06"/></dir><dir name="Model"><file name="Observer.php" hash="4fd4fb15426f06d1600c8b3077a3f654"/></dir><dir name="controllers"><file name="ExportController.php" hash="47bee89251ba880d8637e84d91b4f1c7"/><file name="ExportController_fast.php" hash="fe1fe7099822093daccbbb80f8869c8c"/><file name="ExportController_final.php" hash="b4ee2c7737a2977d042b3ce64785898d"/><file name="ExportController_noprice.php" hash="0a4ed9db5d898a948005272119efbb83"/><file name="ExportController_singlerow.php" hash="66f5046202e18bb127e008f32aef329d"/></dir><dir name="etc"><file name="config.xml" hash="427543517a58add407579b3422328f4a"/><file name="system.xml" hash="bbcfa1c9d53dfbca4c323b7cfcb62a78"/></dir></dir></dir></dir></target><target name="magedesign"><dir><dir name="frontend"><dir name="default"><dir name="default"><dir name="layout"><file name="ireus.xml" hash="fa76c0766d2a2a74b1a28dac87240ced"/></dir><dir name="template"><dir name="ireus"><file name="data.phtml" hash="914c75fc9f1f09b3ec914a5aa12e1a71"/><file name="footer.phtml" hash="4f8718b50744c98cec9d1ffce31e2242"/><file name="recomm.phtml" hash="c56c8aa10531782cb0237a5cd7a715ad"/><file name="userrecomm.phtml" hash="879f8c79109f82ceff8a3c03d0c3ce1b"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir><dir name="modules"><file name="Netresearch_Ireus.xml" hash="51f0d7dfc505541ad5bbd81cac334a4c"/></dir></dir></target><target name="mage"><dir><dir name="lib"><dir name="Ireus"><dir name="Controller"><file name="Cache.php" hash="4c0843da6f3b6a96c1327efd78b3c734"/><file name="Export.php" hash="308c96a7cbbf2fc84156a08967779d55"/></dir><dir name="Model"><file name="Csv.php" hash="dfaab91056524008fe28853609bef31d"/><file name="File.php" hash="70a796322ba8c1dcbd1c60944b7e95db"/></dir><file name="Object.php" hash="cf2c29389d0ae7c04858d763e074e4f3"/><dir name="View"><dir name="Client"><file name="call.tpl.php" hash="75da798d5fd4d21208fe636a12b3085c"/><file name="event.tpl.php" hash="811de7acc963000255d36d77d626c2ce"/><file name="home.tpl.php" hash="ffda3ac0b5957cbbe0988bd7159835d0"/><file name="product.tpl.php" hash="08b9f0d4bf23f6546956b6db8add2120"/><file name="user.tpl.php" hash="ffda3ac0b5957cbbe0988bd7159835d0"/></dir><file name="Client.php" hash="c1739c7d943f63863a2bd7b546db3a6a"/></dir></dir><file name="IreusAutoloader.php" hash="4c6d6bec65a2d8f196e3a9d3b94114b8"/></dir></dir></target></contents>
21
  <compatible/>
22
+ <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
23
  </package>