boxalino_plugin - Version 2.10.0

Version Notes

refactoring and bugfixes

- Moved plugin from local to community pool to support custom overrides.
- Adding support for URL export in Magento EE.
- Improving handling of missing/empty images in the autocompletion.
- Refactoring and improving facet block.
- Exclude catalog only items in the search.
- Fixing regressions in the customer synchronization.
- Correcting order total calculation in tracking.

Download this release

Release Info

Developer Szymon Nosal
Extension boxalino_plugin
Version 2.10.0
Comparing to
See all releases


Code changes from version 2.9.0 to 2.10.0

Files changed (90) hide show
  1. app/code/{local → community}/Boxalino/CemSearch/Block/Abstract.php +0 -0
  2. app/code/{local → community}/Boxalino/CemSearch/Block/Autocomplete.php +16 -23
  3. app/code/{local → community}/Boxalino/CemSearch/Block/Cart/Crosssell.php +0 -0
  4. app/code/{local → community}/Boxalino/CemSearch/Block/Facets.php +161 -157
  5. app/code/{local → community}/Boxalino/CemSearch/Block/Product/List.php +0 -0
  6. app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Recommendation.php +0 -0
  7. app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Related.php +0 -0
  8. app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Upsell.php +0 -0
  9. app/code/{local → community}/Boxalino/CemSearch/Block/Script.php +0 -0
  10. app/code/{local → community}/Boxalino/CemSearch/CatalogSearch/Helper/Data.php +0 -0
  11. app/code/{local → community}/Boxalino/CemSearch/Helper/Data.php +0 -0
  12. app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Adapter.php +5 -1
  13. app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Config.php +0 -0
  14. app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Recommendation.php +0 -0
  15. app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Sort.php +0 -0
  16. app/code/{local → community}/Boxalino/CemSearch/Lib/AbstractThrift.php +0 -0
  17. app/code/{local → community}/Boxalino/CemSearch/Lib/P13nService.php +0 -0
  18. app/code/{local → community}/Boxalino/CemSearch/Lib/Types.php +0 -0
  19. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Base/TBase.php +0 -0
  20. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/ClassLoader/ThriftClassLoader.php +0 -0
  21. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TApplicationException.php +0 -0
  22. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TException.php +0 -0
  23. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TProtocolException.php +0 -0
  24. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TTransportException.php +0 -0
  25. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TBinaryProtocolFactory.php +0 -0
  26. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TCompactProtocolFactory.php +0 -0
  27. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TJSONProtocolFactory.php +0 -0
  28. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TProtocolFactory.php +0 -0
  29. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TStringFuncFactory.php +0 -0
  30. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TTransportFactory.php +0 -0
  31. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/HttpP13n.php +0 -0
  32. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/BaseContext.php +0 -0
  33. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/ListContext.php +0 -0
  34. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/LookaheadReader.php +0 -0
  35. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/PairContext.php +0 -0
  36. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocol.php +0 -0
  37. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocolAccelerated.php +0 -0
  38. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TCompactProtocol.php +0 -0
  39. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TJSONProtocol.php +0 -0
  40. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TProtocol.php +0 -0
  41. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Serializer/TBinarySerializer.php +0 -0
  42. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TForkingServer.php +0 -0
  43. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServer.php +0 -0
  44. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerSocket.php +0 -0
  45. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerTransport.php +0 -0
  46. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TSimpleServer.php +0 -0
  47. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Core.php +0 -0
  48. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Mbstring.php +0 -0
  49. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/TStringFunc.php +0 -0
  50. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTCurlClient.php +0 -0
  51. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTHttpClient.php +0 -0
  52. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TBufferedTransport.php +0 -0
  53. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TCurlClient.php +0 -0
  54. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TFramedTransport.php +0 -0
  55. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/THttpClient.php +0 -0
  56. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TMemoryBuffer.php +0 -0
  57. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TNullTransport.php +0 -0
  58. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TPhpStream.php +0 -0
  59. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocket.php +0 -0
  60. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocketPool.php +0 -0
  61. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TTransport.php +0 -0
  62. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TMessageType.php +0 -0
  63. app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TType.php +0 -0
  64. app/code/{local → community}/Boxalino/CemSearch/Model/Advanced.php +0 -0
  65. app/code/{local → community}/Boxalino/CemSearch/Model/Category.php +0 -0
  66. app/code/{local → community}/Boxalino/CemSearch/Model/Logger.php +0 -0
  67. app/code/{local → community}/Boxalino/CemSearch/Model/Observer.php +1 -1
  68. app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced.php +0 -0
  69. app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced/Collection.php +0 -0
  70. app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Fulltext.php +0 -0
  71. app/code/{local → community}/Boxalino/CemSearch/Model/Session.php +0 -0
  72. app/code/{local → community}/Boxalino/CemSearch/controllers/AdvancedController.php +0 -0
  73. app/code/{local → community}/Boxalino/CemSearch/controllers/AjaxController.php +0 -0
  74. app/code/{local → community}/Boxalino/CemSearch/controllers/IndexController.php +0 -0
  75. app/code/{local → community}/Boxalino/CemSearch/controllers/ResultController.php +0 -0
  76. app/code/{local → community}/Boxalino/CemSearch/etc/adminhtml.xml +0 -0
  77. app/code/{local → community}/Boxalino/CemSearch/etc/config.xml +1 -1
  78. app/code/{local → community}/Boxalino/CemSearch/etc/system.xml +0 -0
  79. app/code/{local → community}/Boxalino/Exporter/Helper/Data.php +2 -7
  80. app/code/{local → community}/Boxalino/Exporter/Model/Delta.php +0 -0
  81. app/code/{local → community}/Boxalino/Exporter/Model/Indexer.php +0 -0
  82. app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Delta.php +0 -0
  83. app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Indexer.php +0 -0
  84. app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Indexer.php +48 -31
  85. app/code/{local → community}/Boxalino/Exporter/etc/adminhtml.xml +0 -0
  86. app/code/{local → community}/Boxalino/Exporter/etc/config.xml +2 -1
  87. app/code/{local → community}/Boxalino/Exporter/etc/system.xml +0 -0
  88. app/etc/modules/Boxalino_CemSearch.xml +1 -2
  89. app/etc/modules/Boxalino_Exporter.xml +2 -1
  90. package.xml +14 -7
app/code/{local → community}/Boxalino/CemSearch/Block/Abstract.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Block/Autocomplete.php RENAMED
@@ -32,15 +32,14 @@ require_once "Mage/CatalogSearch/Block/Autocomplete.php";
32
 
33
  class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Autocomplete
34
  {
35
- protected $_suggestData = null;
36
- protected $_suggestDataProducts = null;
37
  protected $_order = array();
38
  protected $_first = null;
39
 
40
  protected function _toHtml()
41
  {
42
-
43
- if (Mage::getStoreConfig('Boxalino_General/general/enabled') == '0') {
44
  return null;
45
  }
46
 
@@ -118,11 +117,11 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
118
  $product = Mage::getModel('catalog/product')->load($prod['id']);
119
  if ($prod['hash'] == $this->_first || empty($this->_first)) {
120
  $html .= '<li data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
121
- } else{
122
  $html .= '<li style="display:none" data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
123
  }
124
  $html .= '<a href="' . $product->getProductUrl() . '" >';
125
- $html .= '<div class="product-image"><img src="' . $product->getThumbnailUrl() . '" alt="' . $product->getName() . '" /></div>';
126
  $html .= '<div class="product-title"><span>' . $product->getName() . '</span></div>';
127
  $html .= '</a>';
128
  $html .= '</li>';
@@ -136,17 +135,15 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
136
  $html .= '</ul>';
137
 
138
  return $html;
139
-
140
  }
141
 
142
- private function prepareProductView($product)
143
  {
144
-
145
  $html = '';
146
 
147
  if ($product['hash'] == $this->_first || empty($this->_first)) {
148
  $html .= '<li style="display:block" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
149
- } else{
150
  $html .= '<li style="display:none" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
151
  }
152
 
@@ -155,10 +152,10 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
155
  unset($product['hash']);
156
  unset($product[Mage::getStoreConfig('Boxalino_General/search/entity_id')]);
157
 
158
- foreach($this->_order as $f) {
159
- if ($f == 'image') {
160
- $html .= '<div class="product-' . $f . '"><img src="' . $product[$f] . '" alt="' . $product['title'] . '" style="max-height:75px; max-width:75px;" /></div>';
161
- } elseif (isset($product[$f])) {
162
  $html .= '<div class="product-' . $f . '"><span>' . $product[$f] . '</span></div>';
163
  }
164
  }
@@ -167,8 +164,6 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
167
  $html .= '</li>';
168
 
169
  return $html;
170
-
171
-
172
  }
173
 
174
  public function getSuggestData()
@@ -195,11 +190,11 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
195
  if ($query) {
196
  if ($htmlConfig['enabled'] == '1') {
197
  $fields = array($generalConfig['entity_id'], 'title', 'score');
198
- } else{
199
  $fields = array($generalConfig['entity_id']);
200
  $map = array($generalConfig['entity_id'] => $generalConfig['entity_id']);
201
  $fi = explode(',', $htmlConfig['items']);
202
- foreach($fi as $f) {
203
  list($attribute, $fieldname) = explode(':', $f);
204
  $fields[] = $fieldname;
205
  $map[$fieldname] = $attribute;
@@ -238,15 +233,13 @@ class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Aut
238
  }
239
 
240
  $this->_suggestData = $data;
 
241
  if ($htmlConfig['enabled'] == '1') {
242
- $this->_suggestDataProducts = $p13n->getAutocompleteProducts($data[0]['facets']);
243
  } else {
244
- $this->_suggestDataProducts = $p13n->getAutocompleteProducts($data[0]['facets'], $map, $fields);
245
  }
246
  }
247
  return $this->_suggestData;
248
  }
249
- /*
250
- *
251
- */
252
  }
32
 
33
  class Boxalino_CemSearch_Block_Autocomplete extends Mage_CatalogSearch_Block_Autocomplete
34
  {
35
+ protected $_suggestData = array();
36
+ protected $_suggestDataProducts = array();
37
  protected $_order = array();
38
  protected $_first = null;
39
 
40
  protected function _toHtml()
41
  {
42
+ if (!Mage::getStoreConfig('Boxalino_General/general/enabled')) {
 
43
  return null;
44
  }
45
 
117
  $product = Mage::getModel('catalog/product')->load($prod['id']);
118
  if ($prod['hash'] == $this->_first || empty($this->_first)) {
119
  $html .= '<li data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
120
+ } else {
121
  $html .= '<li style="display:none" data-word="' . $prod['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product->getName()) . '">';
122
  }
123
  $html .= '<a href="' . $product->getProductUrl() . '" >';
124
+ $html .= '<div class="product-image"><img src="' . $product->getThumbnailUrl() . '" alt="' . $product->getName() . '"></div>';
125
  $html .= '<div class="product-title"><span>' . $product->getName() . '</span></div>';
126
  $html .= '</a>';
127
  $html .= '</li>';
135
  $html .= '</ul>';
136
 
137
  return $html;
 
138
  }
139
 
140
+ protected function prepareProductView($product)
141
  {
 
142
  $html = '';
143
 
144
  if ($product['hash'] == $this->_first || empty($this->_first)) {
145
  $html .= '<li style="display:block" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
146
+ } else {
147
  $html .= '<li style="display:none" data-word="' . $product['hash'] . '" class="product-autocomplete" title="' . $this->escapeHtml($product['title']) . '">';
148
  }
149
 
152
  unset($product['hash']);
153
  unset($product[Mage::getStoreConfig('Boxalino_General/search/entity_id')]);
154
 
155
+ foreach ($this->_order as $f) {
156
+ if ($f == 'image' && isset($product[$f]) && !empty($product[$f])) {
157
+ $html .= '<div class="product-' . $f . '"><img src="' . $product[$f] . '" alt="' . $product['title'] . '" style="max-height:75px; max-width:75px;"></div>';
158
+ } elseif (isset($product[$f]) && !empty($product[$f])) {
159
  $html .= '<div class="product-' . $f . '"><span>' . $product[$f] . '</span></div>';
160
  }
161
  }
164
  $html .= '</li>';
165
 
166
  return $html;
 
 
167
  }
168
 
169
  public function getSuggestData()
190
  if ($query) {
191
  if ($htmlConfig['enabled'] == '1') {
192
  $fields = array($generalConfig['entity_id'], 'title', 'score');
193
+ } else {
194
  $fields = array($generalConfig['entity_id']);
195
  $map = array($generalConfig['entity_id'] => $generalConfig['entity_id']);
196
  $fi = explode(',', $htmlConfig['items']);
197
+ foreach ($fi as $f) {
198
  list($attribute, $fieldname) = explode(':', $f);
199
  $fields[] = $fieldname;
200
  $map[$fieldname] = $attribute;
233
  }
234
 
235
  $this->_suggestData = $data;
236
+ $facets = array_key_exists(0, $data) && is_array($data[0]['facets']) ? $data[0]['facets'] : array();
237
  if ($htmlConfig['enabled'] == '1') {
238
+ $this->_suggestDataProducts = $p13n->getAutocompleteProducts($facets);
239
  } else {
240
+ $this->_suggestDataProducts = $p13n->getAutocompleteProducts($facets, $map, $fields);
241
  }
242
  }
243
  return $this->_suggestData;
244
  }
 
 
 
245
  }
app/code/{local → community}/Boxalino/CemSearch/Block/Cart/Crosssell.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Block/Facets.php RENAMED
@@ -56,18 +56,20 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
56
  public function getTopFilters()
57
  {
58
  $filters = array();
59
- $topFilters = explode(',', Mage::getStoreConfig('Boxalino_General/filter/top_filters'));
60
- $titles = explode(',', Mage::getStoreConfig('Boxalino_General/filter/top_filters_title'));
 
61
  $i = 0;
62
  $allFilters = $this->_allFilters;
63
  foreach ($topFilters as $filter) {
 
64
  if (isset($allFilters[$filter])) {
65
  foreach ($allFilters[$filter] as $key => $values) {
66
- $yes = strtolower($values['stringValue']) == 'yes'?true:false;
67
  if ($values['stringValue'] == 1 || $yes) {
68
  $filters[$filter] = $allFilters[$filter][$key];
69
  $filters[$filter]['title'] = $titles[$i];
70
- $filters[$filter]['url'] = $this->getTopFilterUrl($filter, $yes?$values['stringValue']:'1', $allFilters[$filter][$key]['selected']);
71
  $filters[$filter]['selected'] = $allFilters[$filter][$key]['selected'];
72
  }
73
  }
@@ -77,34 +79,6 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
77
  return $filters;
78
  }
79
 
80
- private function getTopFilterUrl($name, $value, $selected)
81
- {
82
- $multioption = Mage::getStoreConfig('Boxalino_General/filter/top_filters_multioption');
83
- $currentUrl = urldecode(Mage::helper('core/url')->getCurrentUrl());
84
- if (strpos($currentUrl, '?') === FALSE) {
85
- $currentUrl .= '?';
86
- }
87
- if ($multioption == true) {
88
- if ($selected === false) {
89
- $url = $currentUrl . '&bx_' . $name . '[0]' . '=' . $value;
90
- } else {
91
- $url = str_replace('&bx_' . $name . '[0]' . '=' . $value, '', $currentUrl);
92
- }
93
- } else {
94
- $topFilters = explode(',', Mage::getStoreConfig('Boxalino_General/filter/top_filters'));
95
- if ($selected === false) {
96
- foreach ($topFilters as $filter) {
97
- $currentUrl = str_replace('&bx_' . $filter . '[0]' . '=' . $value, '', $currentUrl);
98
- }
99
- $url = $currentUrl . '&bx_' . $name . '[0]' . '=' . urlencode($value);
100
- } else {
101
- $url = str_replace('&bx_' . $name . '[0]' . '=' . urlencode($value), '', $currentUrl);
102
- }
103
- }
104
-
105
- return $url;
106
- }
107
-
108
  public function getLeftFilters()
109
  {
110
  $filters = array();
@@ -118,10 +92,10 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
118
  $filters[$filter[0]] = array('title' => $leftFiltersTitles[$i], 'values' => array());
119
  if (isset($allFilters[$filter[0]])) {
120
  if ($filter[1] == 'hierarchical') {
121
- $filters[$filter[0]]['values'] = $this->returnTree($filter[0]);
122
  } else {
123
  foreach ($allFilters[$filter[0]] as $key => $values) {
124
- $filters[$filter[0]]['values'][] = $this->returnImportantValues($values, $filter[1], $filter[0], $position);
125
  $position++;
126
  }
127
  }
@@ -134,141 +108,123 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
134
  return $filters;
135
  }
136
 
137
- private function returnTree($filter)
138
  {
139
- $results = array();
140
- $parents = $this->returnHierarchy($filter);
141
- $level = 0;
142
- if ($parents['display']['level'] == 2) {
143
- $results = $parents['values'][$parents['display']['level']];
144
- return $results;
145
- } else {
146
- $highestChild = array();
147
- $level = $parents['display']['level'];
148
- $parentId = 0;
149
- if (isset($parents['values'][$level])) {
150
- $highestLevelCount = count($parents['values'][$level]);
151
- foreach ($parents['values'][$level] as $value) {
152
- $parentId = $parents['display']['parentId'];
153
- if ($value['parentId'] == $parentId) {
154
- if ($highestLevelCount == 1) {
155
- $value['selected'] = true;
156
- }
157
- $value['level'] = $level;
158
- $highestChild[] = $value;
159
- }
160
- }
161
- } else {
162
- $level = $level - 1;
163
- foreach ($parents['values'][$level] as $value) {
164
- if ($value['selected'] == true) {
165
- $parentId = $value['parentId'];
166
- $value['level'] = $level;
167
- $highestChild[] = $value;
168
- }
169
- }
170
-
171
- foreach ($parents['values'][$level] as $value) {
172
- if ($parentId == $value['parentId'] && $value['selected'] == false) {
173
- $value['level'] = $level;
174
- $highestChild[] = $value;
175
- }
176
  }
177
  }
178
-
179
- for ($i = $level - 1; $i >= 2; $i--) {
180
- $parents['values'][$i][$parentId]['selected'] = true;
181
- $parents['values'][$i][$parentId]['level'] = $i;
182
- $results[] = $parents['values'][$i][$parentId];
183
- $parentId = $parents['values'][$i][$parentId]['parentId'];
184
- }
185
- $results = array_reverse($results);
186
-
187
-
188
  }
189
- $results = array_merge($results, $highestChild);
190
- $this->setMaxLevel($filter, $level);
191
- return $results;
192
  }
193
 
194
- private function returnHierarchy($filter)
195
  {
196
- $whatToDisplay = array('level' => 2, 'parentId' => '');
197
- $parents = array();
198
- $values = $this->_allFilters[$filter];
 
199
 
200
- $amount = count($values);
201
- for ($i = 0; $i < $amount; $i++) {
202
- $parentLevel = count($values[$i]['hierarchy']);
203
- for ($j = $i + 1; $j < $amount; $j++) {
204
- if ($parentLevel < count($values[$j]['hierarchy'])) {
205
- $level = count($values[$j]['hierarchy']);
206
- $childId = $values[$j]['hierarchyId'];
207
- $parents[$level][$childId] = array(
208
- 'stringValue' => end($values[$j]['hierarchy']),
209
- 'hitCount' => $values[$j]['hitCount'],
210
- 'parentId' => $values[$i]['hierarchyId'],
211
- 'url' => $this->getFilterUrl($filter, $values[$j]['stringValue'], $values[$j]['selected'], false, 0),
212
- 'selected' => $values[$j]['selected']
213
- );
214
- if ($values[$j]['selected'] === true) {
215
- $whatToDisplay = array('level' => $level + 1, 'parentId' => $values[$j]['hierarchyId']);
216
- }
217
- continue;
218
- }
219
- if (count($values[$i]['hierarchy']) == count($values[$j]['hierarchy'])) {
220
- break;
221
- }
222
- }
223
  }
224
- return array('values' => $parents, 'display' => $whatToDisplay);
 
 
 
 
 
 
 
225
  }
226
 
227
- private function getFilterUrl($name, $value, $selected, $ranged = false, $position = 0, $hierarchical = null)
228
  {
229
  $multioption = Mage::getStoreConfig('Boxalino_General/filter/left_filters_multioption');
230
- $currentUrl = urldecode(Mage::helper('core/url')->getCurrentUrl());
231
- if (strpos($currentUrl, '?') === FALSE) {
232
- $currentUrl .= '?';
233
- }
234
  if (!$ranged) {
235
  if ($multioption == true && $hierarchical == null) {
236
  if ($selected === false) {
237
- $url = $currentUrl . '&bx_' . $name . '[' . $position . ']' . '=' . urlencode($value);
238
  } else {
239
- $url = str_replace('&bx_' . $name . '[' . $position . ']' . '=' . urlencode($value), '', $currentUrl);
240
  }
241
  } else {
242
  $position = 0;
243
  if ($selected === false) {
244
- if (isset($_REQUEST['bx_' . $name])) {
245
  foreach ($_REQUEST['bx_' . $name] as $val) {
246
- $currentUrl = str_replace('&bx_' . $name . '[' . $position . ']' . '=' . urlencode($val), '', $currentUrl);
247
  }
248
  }
249
- $url = $currentUrl . '&bx_' . $name . '[' . $position . ']' . '=' . urlencode($value);
250
  } else {
251
- $url = str_replace('&bx_' . $name . '[' . $position . ']' . '=' . urlencode($value), '', $currentUrl);
252
  }
253
  }
254
  } else {
255
  if ($selected === false) {
256
- $url = $currentUrl . '&bx_' . $name . '[' . $position . ']' . '=' . $value['from'] . '-' . $value['to'];
257
  } else {
258
- $url = str_replace('&bx_' . $name . '[' . $position . ']' . '=' . $value['from'] . '-' . $value['to'], '', $currentUrl);
259
  }
260
  }
261
  return $url;
262
  }
263
 
264
- private function returnImportantValues($values, $option, $filter, $position)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
265
  {
266
  $data = array();
267
  if ($option == 'ranged') {
268
  $data['stringValue'] = array('min' => $values['rangeFromInclusive'], 'max' => $values['rangeToExclusive']);
269
- $data['url'] = $this->getFilterUrl($filter, array('from' => $values['rangeFromInclusive'], 'to' => $values['rangeToExclusive']), $values['selected'], true, $position);
270
  } else {
271
- $data['url'] = $this->getFilterUrl($filter, $values['stringValue'], $values['selected'], false, $position);
272
  $data['stringValue'] = $values['stringValue'];
273
  }
274
  $data['hitCount'] = $values['hitCount'];
@@ -276,44 +232,92 @@ class Boxalino_CemSearch_Block_Facets extends Mage_Core_Block_Template
276
  return $data;
277
  }
278
 
279
- public function removeFilterFromUrl($url, $filter, $vals)
280
  {
281
- if (isset($_REQUEST['bx_' . $filter])) {
282
- foreach ($vals as $val) {
283
- $key = array_search($val, $_REQUEST['bx_' . $filter]);
284
- if ($key !== false) {
285
- $filterKey = 'bx_' . $filter . '[' . $key . ']';
286
-
287
- // remove filter from url
288
- $url = str_replace($filterKey . '=' . $vals[$key], '', $url);
289
- $url = str_replace(urlencode($filterKey) . '=' . urlencode($vals[$key]), '', $url);
290
 
291
- // remove resulting duplicate ampersands
292
- $url = trim(str_replace(array('?&', '&&'), array('?', '&'), $url), ' ?&');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
293
  }
294
  }
295
  }
296
- return $url;
297
  }
298
 
299
- public function getMinMaxValues($values)
300
  {
301
- $first = $values[0];
302
- $last = end($values);
303
- return array('min' => round(floor($first['stringValue']['min']), -2), 'max' => round(ceil($last['stringValue']['max'])), 1);
304
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
305
 
306
- private function setMaxLevel($filter, $level)
307
- {
308
- $this->maxLevel[$filter] = $level;
309
- }
 
 
 
310
 
311
- public function getMaxLevel($filter)
312
- {
313
- if (isset($this->maxLevel[$filter])) {
314
- return $this->maxLevel[$filter];
315
- }
 
 
316
 
317
- return 0;
 
 
 
318
  }
319
  }
56
  public function getTopFilters()
57
  {
58
  $filters = array();
59
+ $filterOptions = Mage::getStoreConfig('Boxalino_General/filter');
60
+ $topFilters = explode(',', $filterOptions['top_filters']);
61
+ $titles = explode(',', $filterOptions['top_filters_title']);
62
  $i = 0;
63
  $allFilters = $this->_allFilters;
64
  foreach ($topFilters as $filter) {
65
+ $filter = trim($filter);
66
  if (isset($allFilters[$filter])) {
67
  foreach ($allFilters[$filter] as $key => $values) {
68
+ $yes = (strtolower($values['stringValue']) == 'yes');
69
  if ($values['stringValue'] == 1 || $yes) {
70
  $filters[$filter] = $allFilters[$filter][$key];
71
  $filters[$filter]['title'] = $titles[$i];
72
+ $filters[$filter]['url'] = $this->_getTopFilterUrl($filter, $yes?$values['stringValue']:'1', $allFilters[$filter][$key]['selected']);
73
  $filters[$filter]['selected'] = $allFilters[$filter][$key]['selected'];
74
  }
75
  }
79
  return $filters;
80
  }
81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
  public function getLeftFilters()
83
  {
84
  $filters = array();
92
  $filters[$filter[0]] = array('title' => $leftFiltersTitles[$i], 'values' => array());
93
  if (isset($allFilters[$filter[0]])) {
94
  if ($filter[1] == 'hierarchical') {
95
+ $filters[$filter[0]]['values'] = $this->_returnTree($filter[0]);
96
  } else {
97
  foreach ($allFilters[$filter[0]] as $key => $values) {
98
+ $filters[$filter[0]]['values'][] = $this->_returnImportantValues($values, $filter[1], $filter[0], $position);
99
  $position++;
100
  }
101
  }
108
  return $filters;
109
  }
110
 
111
+ public function removeFilterFromUrl($url, $filter, $vals)
112
  {
113
+ $key = 'bx_' . $filter;
114
+ if (array_key_exists($key, $_REQUEST) && is_array($_REQUEST[$key])) {
115
+ foreach ($vals as $val) {
116
+ $position = array_search($val, $_REQUEST[$key]);
117
+ if ($position !== false) {
118
+ $url = $this->_removeFilterFromUrl($url, $filter, $val, $position);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
119
  }
120
  }
 
 
 
 
 
 
 
 
 
 
121
  }
122
+ return $url;
 
 
123
  }
124
 
125
+ public function getMinMaxValues($values)
126
  {
127
+ $first = $values[0];
128
+ $last = end($values);
129
+ return array('min' => round(floor($first['stringValue']['min']), -2), 'max' => round(ceil($last['stringValue']['max'])), 1);
130
+ }
131
 
132
+ public function getMaxLevel($filter)
133
+ {
134
+ if (isset($this->maxLevel[$filter])) {
135
+ return $this->maxLevel[$filter];
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  }
137
+
138
+ return 0;
139
+ }
140
+
141
+ protected function _addFilterToUrl($url, $filter, $value, $position = 0)
142
+ {
143
+ return $url . (strpos($url, '?') === FALSE ? '?' : '&') .
144
+ 'bx_' . $filter . '[' . $position . ']=' . urlencode($value);
145
  }
146
 
147
+ protected function _getFilterUrl($name, $value, $selected, $ranged = false, $position = 0, $hierarchical = null)
148
  {
149
  $multioption = Mage::getStoreConfig('Boxalino_General/filter/left_filters_multioption');
150
+ $currentUrl = Mage::helper('core/url')->getCurrentUrl();
 
 
 
151
  if (!$ranged) {
152
  if ($multioption == true && $hierarchical == null) {
153
  if ($selected === false) {
154
+ $url = $this->_addFilterToUrl($currentUrl, $name, $value, $position);
155
  } else {
156
+ $url = $this->_removeFilterFromUrl($currentUrl, $name, $value, $position);
157
  }
158
  } else {
159
  $position = 0;
160
  if ($selected === false) {
161
+ if (array_key_exists('bx_' . $name, $_REQUEST) && is_array($_REQUEST['bx_' . $name])) {
162
  foreach ($_REQUEST['bx_' . $name] as $val) {
163
+ $currentUrl = $this->_removeFilterFromUrl($currentUrl, $name, $val, $position);
164
  }
165
  }
166
+ $url = $this->_addFilterToUrl($currentUrl, $name, $value, $position);
167
  } else {
168
+ $url = $this->_removeFilterFromUrl($currentUrl, $name, $value, $position);
169
  }
170
  }
171
  } else {
172
  if ($selected === false) {
173
+ $url = $this->_addFilterToUrl($currentUrl, $name, $value['from'] . '-' . $value['to'], $position);
174
  } else {
175
+ $url = $this->_removeFilterFromUrl($currentUrl, $name, $value['from'] . '-' . $value['to'], $position);
176
  }
177
  }
178
  return $url;
179
  }
180
 
181
+ protected function _getTopFilterUrl($name, $value, $selected)
182
+ {
183
+ $filterOptions = Mage::getStoreConfig('Boxalino_General/filter');
184
+ $multioption = $filterOptions['top_filters_multioption'];
185
+ $currentUrl = Mage::helper('core/url')->getCurrentUrl();
186
+ if ($multioption == true) {
187
+ if ($selected === false) {
188
+ $url = $this->_addFilterToUrl($currentUrl, $name, $value);
189
+ } else {
190
+ $url = $this->_removeFilterFromUrl($currentUrl, $name, $value);
191
+ }
192
+ } else {
193
+ if ($selected === false) {
194
+ $topFilters = explode(',', $filterOptions['top_filters']);
195
+ foreach ($topFilters as $filter) {
196
+ $filter = trim($filter);
197
+ $currentUrl = $this->_removeFilterFromUrl($currentUrl, $filter, $value);
198
+ }
199
+ $url = $this->_addFilterToUrl($currentUrl, $name, $value);
200
+ } else {
201
+ $url = $this->_removeFilterFromUrl($currentUrl, $name, $value);
202
+ }
203
+ }
204
+
205
+ return $url;
206
+ }
207
+
208
+ protected function _removeFilterFromUrl($url, $filter, $value, $position = 0)
209
+ {
210
+ $filter = urlencode($filter);
211
+ $value = urlencode($value);
212
+ return str_replace(
213
+ array(
214
+ '&bx_' . $filter . '[' . $position . ']=' . $value,
215
+ '?bx_' . $filter . '[' . $position . ']=' . $value,
216
+ ), '', $url
217
+ );
218
+ }
219
+
220
+ protected function _returnImportantValues($values, $option, $filter, $position)
221
  {
222
  $data = array();
223
  if ($option == 'ranged') {
224
  $data['stringValue'] = array('min' => $values['rangeFromInclusive'], 'max' => $values['rangeToExclusive']);
225
+ $data['url'] = $this->_getFilterUrl($filter, array('from' => $values['rangeFromInclusive'], 'to' => $values['rangeToExclusive']), $values['selected'], true, $position);
226
  } else {
227
+ $data['url'] = $this->_getFilterUrl($filter, $values['stringValue'], $values['selected'], false, $position);
228
  $data['stringValue'] = $values['stringValue'];
229
  }
230
  $data['hitCount'] = $values['hitCount'];
232
  return $data;
233
  }
234
 
235
+ protected function _returnHierarchy($filter)
236
  {
237
+ $whatToDisplay = array('level' => 2, 'parentId' => '');
238
+ $parents = array();
239
+ $values = $this->_allFilters[$filter];
 
 
 
 
 
 
240
 
241
+ $amount = count($values);
242
+ for ($i = 0; $i < $amount; $i++) {
243
+ $parentLevel = count($values[$i]['hierarchy']);
244
+ for ($j = $i + 1; $j < $amount; $j++) {
245
+ if ($parentLevel < count($values[$j]['hierarchy'])) {
246
+ $level = count($values[$j]['hierarchy']);
247
+ $childId = $values[$j]['hierarchyId'];
248
+ $parents[$level][$childId] = array(
249
+ 'stringValue' => end($values[$j]['hierarchy']),
250
+ 'hitCount' => $values[$j]['hitCount'],
251
+ 'parentId' => $values[$i]['hierarchyId'],
252
+ 'url' => $this->_getFilterUrl($filter, $values[$j]['stringValue'], $values[$j]['selected'], false, 0),
253
+ 'selected' => $values[$j]['selected']
254
+ );
255
+ if ($values[$j]['selected'] === true) {
256
+ $whatToDisplay = array('level' => $level + 1, 'parentId' => $values[$j]['hierarchyId']);
257
+ }
258
+ continue;
259
+ }
260
+ if (count($values[$i]['hierarchy']) == count($values[$j]['hierarchy'])) {
261
+ break;
262
  }
263
  }
264
  }
265
+ return array('values' => $parents, 'display' => $whatToDisplay);
266
  }
267
 
268
+ protected function _returnTree($filter)
269
  {
270
+ $results = array();
271
+ $parents = $this->_returnHierarchy($filter);
272
+ $level = 0;
273
+ if ($parents['display']['level'] == 2) {
274
+ $results = $parents['values'][$parents['display']['level']];
275
+ return $results;
276
+ } else {
277
+ $highestChild = array();
278
+ $level = $parents['display']['level'];
279
+ $parentId = 0;
280
+ if (isset($parents['values'][$level])) {
281
+ $highestLevelCount = count($parents['values'][$level]);
282
+ foreach ($parents['values'][$level] as $value) {
283
+ $parentId = $parents['display']['parentId'];
284
+ if ($value['parentId'] == $parentId) {
285
+ if ($highestLevelCount == 1) {
286
+ $value['selected'] = true;
287
+ }
288
+ $value['level'] = $level;
289
+ $highestChild[] = $value;
290
+ }
291
+ }
292
+ } else {
293
+ $level = $level - 1;
294
+ foreach ($parents['values'][$level] as $value) {
295
+ if ($value['selected'] == true) {
296
+ $parentId = $value['parentId'];
297
+ $value['level'] = $level;
298
+ $highestChild[] = $value;
299
+ }
300
+ }
301
 
302
+ foreach ($parents['values'][$level] as $value) {
303
+ if ($parentId == $value['parentId'] && $value['selected'] == false) {
304
+ $value['level'] = $level;
305
+ $highestChild[] = $value;
306
+ }
307
+ }
308
+ }
309
 
310
+ for ($i = $level - 1; $i >= 2; $i--) {
311
+ $parents['values'][$i][$parentId]['selected'] = true;
312
+ $parents['values'][$i][$parentId]['level'] = $i;
313
+ $results[] = $parents['values'][$i][$parentId];
314
+ $parentId = $parents['values'][$i][$parentId]['parentId'];
315
+ }
316
+ $results = array_reverse($results);
317
 
318
+ }
319
+ $results = array_merge($results, $highestChild);
320
+ $this->maxLevel[$filter] = $level;
321
+ return $results;
322
  }
323
  }
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Recommendation.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Related.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Block/Product/List/Upsell.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Block/Script.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/CatalogSearch/Helper/Data.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Helper/Data.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Adapter.php RENAMED
@@ -386,7 +386,7 @@ class Boxalino_CemSearch_Helper_P13n_Adapter
386
  $filter = new \com\boxalino\p13n\api\thrift\Filter();
387
  $filter->fieldName = 'products_visibility';
388
  $filter->negative = true;
389
- $filter->stringValues = array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE);
390
  return $filter;
391
  }
392
 
@@ -428,6 +428,10 @@ class Boxalino_CemSearch_Helper_P13n_Adapter
428
 
429
  public function getAutocompleteProducts($facets, $map = null, $fields = null)
430
  {
 
 
 
 
431
  $fs = array();
432
  foreach($facets as $f) {
433
  $fs[] = $f['id'];
386
  $filter = new \com\boxalino\p13n\api\thrift\Filter();
387
  $filter->fieldName = 'products_visibility';
388
  $filter->negative = true;
389
+ $filter->stringValues = array(Mage_Catalog_Model_Product_Visibility::VISIBILITY_NOT_VISIBLE, Mage_Catalog_Model_Product_Visibility::VISIBILITY_IN_CATALOG);
390
  return $filter;
391
  }
392
 
428
 
429
  public function getAutocompleteProducts($facets, $map = null, $fields = null)
430
  {
431
+ if (!is_array($facets)) {
432
+ $facets = array();
433
+ }
434
+
435
  $fs = array();
436
  foreach($facets as $f) {
437
  $fs[] = $f['id'];
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Config.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Recommendation.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Helper/P13n/Sort.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/AbstractThrift.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/P13nService.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/Types.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Base/TBase.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/ClassLoader/ThriftClassLoader.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TApplicationException.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TException.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TProtocolException.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Exception/TTransportException.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TBinaryProtocolFactory.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TCompactProtocolFactory.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TJSONProtocolFactory.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TProtocolFactory.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TStringFuncFactory.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Factory/TTransportFactory.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/HttpP13n.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/BaseContext.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/ListContext.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/LookaheadReader.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/JSON/PairContext.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocol.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TBinaryProtocolAccelerated.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TCompactProtocol.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TJSONProtocol.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Protocol/TProtocol.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Serializer/TBinarySerializer.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TForkingServer.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServer.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerSocket.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TServerTransport.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Server/TSimpleServer.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Core.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/Mbstring.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/StringFunc/TStringFunc.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTCurlClient.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/P13nTHttpClient.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TBufferedTransport.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TCurlClient.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TFramedTransport.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/THttpClient.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TMemoryBuffer.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TNullTransport.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TPhpStream.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocket.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TSocketPool.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Transport/TTransport.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TMessageType.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Lib/vendor/Thrift/Type/TType.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Model/Advanced.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Model/Category.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Model/Logger.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Model/Observer.php RENAMED
@@ -45,7 +45,7 @@ class Boxalino_CemSearch_Model_Observer
45
  'quantity' => $item->getData('qty_ordered'),
46
  'price' => $item->getPrice()
47
  );
48
- $fullPrice = $fullPrice + $item->getPrice();
49
  }
50
  }
51
  $script = Mage::helper('Boxalino_CemSearch')->reportPurchase($products, $transactionId, $fullPrice, Mage::app()->getStore()->getCurrentCurrencyCode());
45
  'quantity' => $item->getData('qty_ordered'),
46
  'price' => $item->getPrice()
47
  );
48
+ $fullPrice += $item->getPrice() * $item->getData('qty_ordered');
49
  }
50
  }
51
  $script = Mage::helper('Boxalino_CemSearch')->reportPurchase($products, $transactionId, $fullPrice, Mage::app()->getStore()->getCurrentCurrencyCode());
app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Advanced/Collection.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Model/Resource/Fulltext.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/Model/Session.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/controllers/AdvancedController.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/controllers/AjaxController.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/controllers/IndexController.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/controllers/ResultController.php RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/etc/adminhtml.xml RENAMED
File without changes
app/code/{local → community}/Boxalino/CemSearch/etc/config.xml RENAMED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Boxalino_CemSearch>
5
- <version>1.0.0</version>
6
  </Boxalino_CemSearch>
7
  </modules>
8
  <frontend>
2
  <config>
3
  <modules>
4
  <Boxalino_CemSearch>
5
+ <version>2.10</version>
6
  </Boxalino_CemSearch>
7
  </modules>
8
  <frontend>
app/code/{local → community}/Boxalino/CemSearch/etc/system.xml RENAMED
File without changes
app/code/{local → community}/Boxalino/Exporter/Helper/Data.php RENAMED
@@ -194,16 +194,11 @@ class Boxalino_Exporter_Helper_Data extends Mage_Core_Helper_Data
194
  return rmdir($dir);
195
  }
196
 
197
- public function rewrittenProductUrl($productId, $categoryId, $storeId)
198
  {
199
  $coreUrl = Mage::getModel('core/url_rewrite');
200
- $idPath = sprintf('product/%d', $productId);
201
- if ($categoryId) {
202
- $idPath = sprintf('%s/%d', $idPath, $categoryId);
203
- }
204
  $coreUrl->setStoreId($storeId);
205
- $coreUrl->loadByIdPath($idPath);
206
-
207
  return $coreUrl->getRequestPath();
208
  }
209
 
194
  return rmdir($dir);
195
  }
196
 
197
+ public function rewrittenProductUrl($productId, $storeId)
198
  {
199
  $coreUrl = Mage::getModel('core/url_rewrite');
 
 
 
 
200
  $coreUrl->setStoreId($storeId);
201
+ $coreUrl->loadByIdPath(sprintf('product/%d', $productId));
 
202
  return $coreUrl->getRequestPath();
203
  }
204
 
app/code/{local → community}/Boxalino/Exporter/Model/Delta.php RENAMED
File without changes
app/code/{local → community}/Boxalino/Exporter/Model/Indexer.php RENAMED
File without changes
app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Delta.php RENAMED
File without changes
app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Exporter/Indexer.php RENAMED
File without changes
app/code/{local → community}/Boxalino/Exporter/Model/Mysql4/Indexer.php RENAMED
@@ -232,8 +232,8 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
232
  'special_price',
233
  'special_from_date',
234
  'special_to_date',
235
- 'visibility',
236
  'category_ids',
 
237
  'status'
238
  );
239
 
@@ -279,7 +279,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
279
  if (!in_array($field, $this->_customerAttributes)) {
280
  Mage::throwException("Customer attribute \"$field\" doesn't exist, please update your additional_customer_attributes setting in the Boxalino Exporter settings!");
281
  }
282
- if ($field != null && strlen($field) > 0 && !in_array($field, $customer_attributes)) {
283
  $attributes[] = $field;
284
  }
285
  }
@@ -536,6 +536,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
536
  $count++;
537
  }
538
 
 
539
  self::logMem('Products - get attributes - before');
540
  $columns = array(
541
  'entity_id',
@@ -605,11 +606,10 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
605
  )
606
  ->where('t_d.attribute_id IN(?)', $attrsFromDb['datetime']);
607
 
608
- $select = $db->select()
609
- ->union(
610
- array($select1, $select2, $select3, $select4, $select5),
611
- Zend_Db_Select::SQL_UNION_ALL
612
- );
613
 
614
  $select1 = null;
615
  $select2 = null;
@@ -678,13 +678,33 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
678
  )
679
  )
680
  ->where('product_id IN(?)', $ids);
681
- $ids = null;
682
  foreach ($db->fetchAll($select) as $r) {
683
  $products[$r['product_id']]['categories'][] = $r['category_id'];
684
  }
685
  $select = null;
686
  self::logMem('Products - get categories - after');
687
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
688
  foreach ($products as $product) {
689
  self::logMem('Products - start transform');
690
 
@@ -694,7 +714,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
694
  }
695
 
696
  $id = $product['entity_id'];
697
-
698
  $productParam = array();
699
  $haveParent = false;
700
 
@@ -748,9 +767,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
748
  fputcsv($filesMtM[$attr], array($id, $val), $this->_helperExporter->XML_DELIMITER, $this->_helperExporter->XML_ENCLOSURE);
749
  }
750
 
751
-
752
  $val = null;
753
-
754
  continue;
755
  }
756
 
@@ -803,10 +820,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
803
  $this->_count++;
804
  $localeCount++;
805
 
806
- /**
807
- * Add special fields
808
- */
809
- //Add url to image cache
810
  if ($this->_storeConfig['export_product_images']) {
811
  $_product = Mage::getModel('catalog/product')->load($id);
812
  $media_gallery = $_product->getMediaGallery();
@@ -823,17 +837,21 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
823
  $this->_transformedProducts['products'][$id] = array_merge($this->_transformedProducts['products'][$id], $productParam);
824
  }
825
 
826
- /**
827
- * Add url to product for each languages
828
- */
829
  if ($this->_storeConfig['export_product_url']) {
830
- $this->_transformedProducts['products'][$id] =
831
- array_merge(
832
- $this->_transformedProducts['products'][$id],
833
- array(
834
- 'default_url_' . $lang => $storeBaseUrl . $this->_helperExporter->rewrittenProductUrl($id, null, $storeId) . '?___store=' . $storeCode
835
- )
836
  );
 
 
 
 
 
 
 
837
  }
838
 
839
  $productParam = null;
@@ -841,7 +859,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
841
 
842
  ksort($this->_transformedProducts['products'][$id]);
843
  self::logMem('Products - end transform');
844
-
845
  }
846
  }
847
 
@@ -1579,7 +1596,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
1579
 
1580
  //customer source
1581
  $source = $sources->addChild('source');
1582
- $source->addAttribute('id', 'item_vals');
1583
  $source->addAttribute('type', 'item_data_file');
1584
 
1585
  $source->addChild('file')->addAttribute('value', 'customers.csv');
@@ -1637,7 +1654,7 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
1637
  $source->addChild('file')->addAttribute('value', 'transactions.csv');
1638
  $source->addChild('orderIdColumn')->addAttribute('value', 'order_id');
1639
  $customerIdColumn = $source->addChild('customerIdColumn');
1640
- $customerIdColumn->addAttribute('value', 'order_id');
1641
  $customerIdColumn->addAttribute('customer_property_id', 'customer_id');
1642
  $productIdColumn = $source->addChild('productIdColumn');
1643
  $productIdColumn->addAttribute('value', 'entity_id');
@@ -1692,9 +1709,10 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
1692
  }
1693
 
1694
  foreach ($attrs as $attr) {
1695
- $ptype = 'string';
1696
  // set property type
1697
  switch ($attr) {
 
 
1698
  case 'name':
1699
  $ptype = 'title';
1700
  break;
@@ -1722,6 +1740,8 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
1722
  case 'length':
1723
  $ptype = 'number';
1724
  break;
 
 
1725
  }
1726
 
1727
  if (isset($this->_attributesValuesByName[$attr]) && $attr != 'visibility' && $attr != 'status') {
@@ -1734,8 +1754,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
1734
  'has_lang' => false,
1735
  'reference' => $attr
1736
  );
1737
- } elseif ($attr == 'category_ids') {
1738
- continue;
1739
  } else {
1740
  $ref = null;
1741
  $type = 'direct';
@@ -1751,7 +1769,6 @@ abstract class Boxalino_Exporter_Model_Mysql4_Indexer extends Mage_Core_Model_My
1751
  break;
1752
  default:
1753
  $lang = false;
1754
- break;
1755
  }
1756
  $properties[] = array(
1757
  'id' => $attr,
232
  'special_price',
233
  'special_from_date',
234
  'special_to_date',
 
235
  'category_ids',
236
+ 'visibility',
237
  'status'
238
  );
239
 
279
  if (!in_array($field, $this->_customerAttributes)) {
280
  Mage::throwException("Customer attribute \"$field\" doesn't exist, please update your additional_customer_attributes setting in the Boxalino Exporter settings!");
281
  }
282
+ if ($field != null && strlen($field) > 0 && !in_array($field, $attributes)) {
283
  $attributes[] = $field;
284
  }
285
  }
536
  $count++;
537
  }
538
 
539
+ // we have to check for settings on the different levels: Store(View) & Global
540
  self::logMem('Products - get attributes - before');
541
  $columns = array(
542
  'entity_id',
606
  )
607
  ->where('t_d.attribute_id IN(?)', $attrsFromDb['datetime']);
608
 
609
+ $select = $db->select()->union(
610
+ array($select1, $select2, $select3, $select4, $select5),
611
+ Zend_Db_Select::SQL_UNION_ALL
612
+ );
 
613
 
614
  $select1 = null;
615
  $select2 = null;
678
  )
679
  )
680
  ->where('product_id IN(?)', $ids);
 
681
  foreach ($db->fetchAll($select) as $r) {
682
  $products[$r['product_id']]['categories'][] = $r['category_id'];
683
  }
684
  $select = null;
685
  self::logMem('Products - get categories - after');
686
 
687
+ if (Mage::getEdition() == Mage::EDITION_ENTERPRISE) {
688
+ self::logMem('Products - get EE URL key - before');
689
+ $select = $db->select()
690
+ ->from(
691
+ array('t_g' => $this->_prefix . 'catalog_product_entity_url_key'),
692
+ array('entity_id')
693
+ )
694
+ ->joinLeft(
695
+ array('t_s' => $this->_prefix . 'catalog_product_entity_url_key'),
696
+ $db->quoteInto('t_s.attribute_id = t_g.attribute_id AND t_s.entity_id = t_g.entity_id AND t_s.store_id = ?', $storeId),
697
+ array('value' => 'IF(t_s.store_id IS NULL, t_g.value, t_s.value)')
698
+ )
699
+ ->where('t_g.store_id = ?', 0)
700
+ ->where('t_g.entity_id IN(?)', $ids);
701
+ foreach ($db->fetchAll($select) as $r) {
702
+ $products[$r['entity_id']]['url_key'] = $r['value'];
703
+ }
704
+ self::logMem('Products - get EE URL key - after');
705
+ }
706
+ $ids = null;
707
+
708
  foreach ($products as $product) {
709
  self::logMem('Products - start transform');
710
 
714
  }
715
 
716
  $id = $product['entity_id'];
 
717
  $productParam = array();
718
  $haveParent = false;
719
 
767
  fputcsv($filesMtM[$attr], array($id, $val), $this->_helperExporter->XML_DELIMITER, $this->_helperExporter->XML_ENCLOSURE);
768
  }
769
 
 
770
  $val = null;
 
771
  continue;
772
  }
773
 
820
  $this->_count++;
821
  $localeCount++;
822
 
823
+ // Add url to image cache
 
 
 
824
  if ($this->_storeConfig['export_product_images']) {
825
  $_product = Mage::getModel('catalog/product')->load($id);
826
  $media_gallery = $_product->getMediaGallery();
837
  $this->_transformedProducts['products'][$id] = array_merge($this->_transformedProducts['products'][$id], $productParam);
838
  }
839
 
840
+ // Add url to product for each languages
 
 
841
  if ($this->_storeConfig['export_product_url']) {
842
+ if (array_key_exists('url_key', $product)) {
843
+ $url_path = $product['url_key'] . '.html';
844
+ } else {
845
+ $url_path = $this->_helperExporter->rewrittenProductUrl(
846
+ $id, $storeId
 
847
  );
848
+ }
849
+ $this->_transformedProducts['products'][$id] = array_merge(
850
+ $this->_transformedProducts['products'][$id],
851
+ array('default_url_' . $lang => (
852
+ $storeBaseUrl . $url_path . '?___store=' . $storeCode
853
+ ))
854
+ );
855
  }
856
 
857
  $productParam = null;
859
 
860
  ksort($this->_transformedProducts['products'][$id]);
861
  self::logMem('Products - end transform');
 
862
  }
863
  }
864
 
1596
 
1597
  //customer source
1598
  $source = $sources->addChild('source');
1599
+ $source->addAttribute('id', 'customer_vals');
1600
  $source->addAttribute('type', 'item_data_file');
1601
 
1602
  $source->addChild('file')->addAttribute('value', 'customers.csv');
1654
  $source->addChild('file')->addAttribute('value', 'transactions.csv');
1655
  $source->addChild('orderIdColumn')->addAttribute('value', 'order_id');
1656
  $customerIdColumn = $source->addChild('customerIdColumn');
1657
+ $customerIdColumn->addAttribute('value', 'customer_id');
1658
  $customerIdColumn->addAttribute('customer_property_id', 'customer_id');
1659
  $productIdColumn = $source->addChild('productIdColumn');
1660
  $productIdColumn->addAttribute('value', 'entity_id');
1709
  }
1710
 
1711
  foreach ($attrs as $attr) {
 
1712
  // set property type
1713
  switch ($attr) {
1714
+ case 'category_ids':
1715
+ continue 2;
1716
  case 'name':
1717
  $ptype = 'title';
1718
  break;
1740
  case 'length':
1741
  $ptype = 'number';
1742
  break;
1743
+ default:
1744
+ $ptype = 'string';
1745
  }
1746
 
1747
  if (isset($this->_attributesValuesByName[$attr]) && $attr != 'visibility' && $attr != 'status') {
1754
  'has_lang' => false,
1755
  'reference' => $attr
1756
  );
 
 
1757
  } else {
1758
  $ref = null;
1759
  $type = 'direct';
1769
  break;
1770
  default:
1771
  $lang = false;
 
1772
  }
1773
  $properties[] = array(
1774
  'id' => $attr,
app/code/{local → community}/Boxalino/Exporter/etc/adminhtml.xml RENAMED
File without changes
app/code/{local → community}/Boxalino/Exporter/etc/config.xml RENAMED
@@ -1,7 +1,8 @@
 
1
  <config>
2
  <modules>
3
  <Boxalino_Exporter>
4
- <version>1.0</version>
5
  </Boxalino_Exporter>
6
  </modules>
7
  <global>
1
+ <?xml version="1.0"?>
2
  <config>
3
  <modules>
4
  <Boxalino_Exporter>
5
+ <version>2.10</version>
6
  </Boxalino_Exporter>
7
  </modules>
8
  <global>
app/code/{local → community}/Boxalino/Exporter/etc/system.xml RENAMED
File without changes
app/etc/modules/Boxalino_CemSearch.xml CHANGED
@@ -1,10 +1,9 @@
1
  <?xml version="1.0"?>
2
-
3
  <config>
4
  <modules>
5
  <Boxalino_CemSearch>
6
  <active>true</active>
7
- <codePool>local</codePool>
8
  </Boxalino_CemSearch>
9
  </modules>
10
  </config>
1
  <?xml version="1.0"?>
 
2
  <config>
3
  <modules>
4
  <Boxalino_CemSearch>
5
  <active>true</active>
6
+ <codePool>community</codePool>
7
  </Boxalino_CemSearch>
8
  </modules>
9
  </config>
app/etc/modules/Boxalino_Exporter.xml CHANGED
@@ -1,8 +1,9 @@
 
1
  <config>
2
  <modules>
3
  <Boxalino_Exporter>
4
  <active>true</active>
5
- <codePool>local</codePool>
6
  </Boxalino_Exporter>
7
  </modules>
8
  </config>
1
+ <?xml version="1.0"?>
2
  <config>
3
  <modules>
4
  <Boxalino_Exporter>
5
  <active>true</active>
6
+ <codePool>community</codePool>
7
  </Boxalino_Exporter>
8
  </modules>
9
  </config>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>boxalino_plugin</name>
4
- <version>2.9.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.boxalino.com">boxalino Plugin</license>
7
  <channel>community</channel>
@@ -16,13 +16,20 @@ Boxalino increases the online success of e-commerce companies on the mobile and
16
  Boxalino is the best solution for Conversion Optimization on the market that integrates Testing, AI and Reporting in a way that is really usable for E-Commerce Teams.&#xD;
17
  &#xD;
18
  Check out www.boxalino.com for details or give us a shout at sales@boxalino.com.</description>
19
- <notes>supporting configurable customer attributes&#xD;
20
  &#xD;
21
- - Added support to configure additional customer attributes in export.</notes>
 
 
 
 
 
 
 
22
  <authors><author><name>Szymon Nosal</name><user>szymonnosal</user><email>szymon.nosal@boxalino.com</email></author><author><name>Simon Rupf</name><user>simonrupf</user><email>simon.rupf@boxalino.com</email></author></authors>
23
- <date>2015-06-01</date>
24
- <time>14:10:04</time>
25
- <contents><target name="magelocal"><dir name="Boxalino"><dir name="CemSearch"><dir name="Block"><file name="Abstract.php" hash="45253ec10623b07c67cd623c626ad5f4"/><file name="Autocomplete.php" hash="d5b5bdcad96b7057e91543d57e91e5e2"/><dir name="Cart"><file name="Crosssell.php" hash="cea7a2d6f5b65db2a2f645a1603b4f8d"/></dir><file name="Facets.php" hash="a1615b9a891fc5f00eebd68528e07f0c"/><dir name="Product"><dir name="List"><file name="Recommendation.php" hash="a6a6458eb55c017aca0a6ab5d6576386"/><file name="Related.php" hash="e7586fbc5cab975bc159ea946f367a87"/><file name="Upsell.php" hash="49e506c72b059348d6edab2a56050ec8"/></dir><file name="List.php" hash="2ae8fde63ab299c4ec7a6cff0c31edbc"/></dir><file name="Script.php" hash="a1d73dbf9a6fee9b3146a852072c95bf"/></dir><dir name="CatalogSearch"><dir name="Helper"><file name="Data.php" hash="9257d32c8f117e727333f4f1b4b5ef35"/></dir></dir><dir name="Helper"><file name="Data.php" hash="da6294c7560e3643dd312809cf7fd539"/><dir name="P13n"><file name="Adapter.php" hash="052f92514591a48c614284ac2c9fc5e0"/><file name="Config.php" hash="82597fa7e5fc6695137ad2f96267378a"/><file name="Recommendation.php" hash="32a664921b31680dca74335885b61a54"/><file name="Sort.php" hash="f40c0e1472ed4c75b2dbafc14cc5608c"/></dir></dir><dir name="Lib"><file name="AbstractThrift.php" hash="d6c88b8524dbd810d51ca9b568ca64ee"/><file name="P13nService.php" hash="96bae2ed236b56c93c69c043d61bb1fa"/><file name="Types.php" hash="3b56e03fe225e986511a7abfaab0a84c"/><dir name="vendor"><dir name="Thrift"><dir name="Base"><file name="TBase.php" hash="b383bf43ac76a57e3b1168cfacffbf22"/></dir><dir name="ClassLoader"><file name="ThriftClassLoader.php" hash="13159566c8b2dcc5b260ef9a0844167e"/></dir><dir name="Exception"><file name="TApplicationException.php" hash="1ee65cc5fb3dc82550a85cc18a31850c"/><file name="TException.php" hash="756e6a847c9e6bd1560c24b9a7373d2c"/><file name="TProtocolException.php" hash="148ebd5d8eba2587cd6e039cf70e04ab"/><file name="TTransportException.php" hash="aca39eea001fcbfd452db9ca7d5c218c"/></dir><dir name="Factory"><file name="TBinaryProtocolFactory.php" hash="bcd6e0555d6e2670a3bc7dd39ff3dbaf"/><file name="TCompactProtocolFactory.php" hash="0118b6363e09080548de3c6daf153290"/><file name="TJSONProtocolFactory.php" hash="28af1d10b4133df7f8ad8022ca39d703"/><file name="TProtocolFactory.php" hash="300bf2d805fa4a227cc3dc2b6ed0200c"/><file name="TStringFuncFactory.php" hash="242f32ade732f9c0d9b62a81b6901cd4"/><file name="TTransportFactory.php" hash="8347271458aea0453e774170a5b3e9fd"/></dir><file name="HttpP13n.php" hash="8ab6f5e997fae57430e9634b753fdd46"/><dir name="Protocol"><dir name="JSON"><file name="BaseContext.php" hash="ed1d83fba59a1d04c07416094ece8ee1"/><file name="ListContext.php" hash="9c8a970f54c30be1299c2d38da60ed56"/><file name="LookaheadReader.php" hash="315a96446f0f530ed1b0b1350b37f58d"/><file name="PairContext.php" hash="3fa06b3f7c9698642aefe00cd322f68b"/></dir><file name="TBinaryProtocol.php" hash="933d2be5503504cddd544992a4af0ee3"/><file name="TBinaryProtocolAccelerated.php" hash="444ba8026d73b83fbcf303d9a550cb70"/><file name="TCompactProtocol.php" hash="57b31bf77c29c1e0d1417f018a239505"/><file name="TJSONProtocol.php" hash="fac76e10fbc711cbfbcf6bdbc0b60191"/><file name="TProtocol.php" hash="d9c9a8105ad160bf0b87e8053d4b9d7c"/></dir><dir name="Serializer"><file name="TBinarySerializer.php" hash="e1fef75686b1fbadc28242b7f3697397"/></dir><dir name="Server"><file name="TForkingServer.php" hash="6e319d0d7f45350a03e387fc2f22473d"/><file name="TServer.php" hash="dc87f6a299fb4fb9ab76206f3b6bec72"/><file name="TServerSocket.php" hash="468fc875e7a5e4899e502e95f823455d"/><file name="TServerTransport.php" hash="ca2ab3e25a0760d37eb3538274dfaccb"/><file name="TSimpleServer.php" hash="38d5685001585a0d9f31b9d8c46656d2"/></dir><dir name="StringFunc"><file name="Core.php" hash="4493a096c73f5922316d95cc2c5fb687"/><file name="Mbstring.php" hash="b5ee27dd6bdceee0f2133df01c8d4fcd"/><file name="TStringFunc.php" hash="89fd7900f1b258391e4d4fdc924bc0f0"/></dir><dir name="Transport"><file name="P13nTCurlClient.php" hash="aaa63d036b6920b57e0777f90c08064f"/><file name="P13nTHttpClient.php" hash="8223e00845b717bb55981649d9ce6616"/><file name="TBufferedTransport.php" hash="7ace771173641cf47b3b11ca0bfebcfa"/><file name="TCurlClient.php" hash="16b14d5f643b20c872468dc96218708d"/><file name="TFramedTransport.php" hash="c6fc032e990e4cf3507741ef1d5b83b2"/><file name="THttpClient.php" hash="b299d30eecc318d7dde4d012ebe8a512"/><file name="TMemoryBuffer.php" hash="7367faa512ec8d25489819ca2ed8848f"/><file name="TNullTransport.php" hash="82d683d7d76ef2938fad1c58878f45e5"/><file name="TPhpStream.php" hash="44769e5da4709a4b6c2025137e4898b3"/><file name="TSocket.php" hash="d689b1f877eda19f7caaa9cb46788f96"/><file name="TSocketPool.php" hash="73d86dbd017130fe2aa0778132b42b26"/><file name="TTransport.php" hash="9185e82d3a440d1db97c6983573bd1ab"/></dir><dir name="Type"><file name="TMessageType.php" hash="20a9fb9a1de1ffe03bfac3057c913101"/><file name="TType.php" hash="261cc40ce2573ebf414c0ec06a2ee093"/></dir></dir></dir></dir><dir name="Model"><file name="Advanced.php" hash="d22f70b7cc2a9e599e5b45fbea541750"/><file name="Category.php" hash="37a225843c7ce20966f130480075aa5d"/><file name="Logger.php" hash="a75219dc447c1ebdd41ad312b2ef7f40"/><file name="Observer.php" hash="a255f380058ade19fd3864cb61580480"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="8814272ed16bc3c895bf3320633c0d24"/></dir><file name="Advanced.php" hash="572af318b61552c006b32ce5f5d9eb7e"/><file name="Fulltext.php" hash="cb2dc7ab7e243ea12a5595cfd77dc60a"/></dir><file name="Session.php" hash="f5f6948355cfc10882dd7a4f80e2713f"/></dir><dir name="controllers"><file name="AdvancedController.php" hash="7b22f7b4ffdf1a59448218eb79fca4ad"/><file name="AjaxController.php" hash="8331416b6beee0fb635da991790b8f40"/><file name="IndexController.php" hash="0f9ba5d1ee9bf4d7f9d6868a502738cd"/><file name="ResultController.php" hash="e43539a5921da7db3364b8e70dac2bdc"/></dir><dir name="etc"><file name="adminhtml.xml" hash="13af90d012dc3871c9af59c804d3588f"/><file name="config.xml" hash="2f52a0306ea5cc393eb107d3d467d5b4"/><file name="system.xml" hash="96d9966e52f500a359822e3bb40946a0"/></dir></dir><dir name="Exporter"><dir name="Helper"><file name="Data.php" hash="3aca44b357b96db9151373a9ee1e3daa"/></dir><dir name="Model"><file name="Delta.php" hash="664b8a733751dd7e85169f3c9d99322f"/><file name="Indexer.php" hash="d9c10401971e9544992fbf34594fb600"/><dir name="Mysql4"><dir name="Exporter"><file name="Delta.php" hash="f4175abe070a035fd16399d3dbda1509"/><file name="Indexer.php" hash="bc1524bba09adc0c796872c718d5b6c1"/></dir><file name="Indexer.php" hash="bb00573e9eacd53bd77a3d3ecad640be"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="57e26697c6d9b55a58f6da88b5a8d822"/><file name="config.xml" hash="d5c1b16f57a024ad1fb7f5a9ed1631dc"/><file name="system.xml" hash="3c8e345e2ed5c2c1e01b0b37c9d62f10"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="boxalino.xml" hash="94bdcfdcff2210386d329f396f16b55a"/></dir><dir name="template"><dir name="boxalino"><dir name="catalogsearch"><file name="form.mini.phtml" hash="ac78368a3d53a36f912b5f9ceae4b566"/><file name="relaxation_products.phtml" hash="257908262463f380f098f0158c628899"/><file name="result.phtml" hash="8764361c966bdc64557aee6af4e8e336"/></dir><file name="left_filters.phtml" hash="d49cfedbc38298a1556cdca86b03a192"/><file name="relaxation_suggestion.phtml" hash="2344e747549eb399c219459b842569a0"/><file name="script.phtml" hash="9d5dc83f66114026208446fb0993b004"/><file name="top_filters.phtml" hash="588185dc46825a1415124f84b90ef6c3"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Boxalino_CemSearch.xml" hash="01bf5b3a93e59ab4141658725bd615dd"/><file name="Boxalino_Exporter.xml" hash="b50cc52bc40c36b25677b6ef60bbf376"/></dir></target><target name="magelocale"><dir name="de_DE"><file name="Boxalino.csv" hash="898a7e741c385f6de40705755c7dbac7"/></dir><dir name="en_US"><file name="Boxalino.csv" hash="2fa5b37fa965c1c60e60609918cc953a"/></dir><dir name="fr_FR"><file name="Boxalino.csv" hash="07fc6c55708c4986f21f3196af74a4a3"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="boxalinoCemSearch.css" hash="aa5e2a4ae7f048bc8dc96cc3b15f827d"/></dir><dir name="js"><file name="boxalinoAutocomplete.js" hash="b26c8a5e419c7f2e8da9c0e6efbe04a2"/><file name="jquery-1.10.2.min.js" hash="628072e7212db1e8cdacb22b21752cda"/><file name="jquery-noConflict.js" hash="10bdc1b7f2effa529e5baae786007688"/></dir></dir></dir></dir></target></contents>
26
  <compatible/>
27
- <dependencies><required><php><min>5.2.0</min><max>5.5.9</max></php></required></dependencies>
28
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>boxalino_plugin</name>
4
+ <version>2.10.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.boxalino.com">boxalino Plugin</license>
7
  <channel>community</channel>
16
  Boxalino is the best solution for Conversion Optimization on the market that integrates Testing, AI and Reporting in a way that is really usable for E-Commerce Teams.&#xD;
17
  &#xD;
18
  Check out www.boxalino.com for details or give us a shout at sales@boxalino.com.</description>
19
+ <notes>refactoring and bugfixes&#xD;
20
  &#xD;
21
+ - Moved plugin from local to community pool to support custom overrides.&#xD;
22
+ - Adding support for URL export in Magento EE.&#xD;
23
+ - Improving handling of missing/empty images in the autocompletion.&#xD;
24
+ - Refactoring and improving facet block.&#xD;
25
+ - Exclude catalog only items in the search.&#xD;
26
+ - Fixing regressions in the customer synchronization.&#xD;
27
+ - Correcting order total calculation in tracking.&#xD;
28
+ </notes>
29
  <authors><author><name>Szymon Nosal</name><user>szymonnosal</user><email>szymon.nosal@boxalino.com</email></author><author><name>Simon Rupf</name><user>simonrupf</user><email>simon.rupf@boxalino.com</email></author></authors>
30
+ <date>2015-08-17</date>
31
+ <time>14:35:15</time>
32
+ <contents><target name="magecommunity"><dir name="Boxalino"><dir name="CemSearch"><dir name="Block"><file name="Abstract.php" hash="45253ec10623b07c67cd623c626ad5f4"/><file name="Autocomplete.php" hash="a2218ee667aa6ee4c488a77fc4a1338f"/><dir name="Cart"><file name="Crosssell.php" hash="cea7a2d6f5b65db2a2f645a1603b4f8d"/></dir><file name="Facets.php" hash="27dfddf4b68367ab52c3a24a49edff66"/><dir name="Product"><dir name="List"><file name="Recommendation.php" hash="a6a6458eb55c017aca0a6ab5d6576386"/><file name="Related.php" hash="e7586fbc5cab975bc159ea946f367a87"/><file name="Upsell.php" hash="49e506c72b059348d6edab2a56050ec8"/></dir><file name="List.php" hash="2ae8fde63ab299c4ec7a6cff0c31edbc"/></dir><file name="Script.php" hash="a1d73dbf9a6fee9b3146a852072c95bf"/></dir><dir name="CatalogSearch"><dir name="Helper"><file name="Data.php" hash="9257d32c8f117e727333f4f1b4b5ef35"/></dir></dir><dir name="Helper"><file name="Data.php" hash="da6294c7560e3643dd312809cf7fd539"/><dir name="P13n"><file name="Adapter.php" hash="940d05652c3bc6959dbd116ee53baea3"/><file name="Config.php" hash="82597fa7e5fc6695137ad2f96267378a"/><file name="Recommendation.php" hash="32a664921b31680dca74335885b61a54"/><file name="Sort.php" hash="f40c0e1472ed4c75b2dbafc14cc5608c"/></dir></dir><dir name="Lib"><file name="AbstractThrift.php" hash="d6c88b8524dbd810d51ca9b568ca64ee"/><file name="P13nService.php" hash="96bae2ed236b56c93c69c043d61bb1fa"/><file name="Types.php" hash="3b56e03fe225e986511a7abfaab0a84c"/><dir name="vendor"><dir name="Thrift"><dir name="Base"><file name="TBase.php" hash="b383bf43ac76a57e3b1168cfacffbf22"/></dir><dir name="ClassLoader"><file name="ThriftClassLoader.php" hash="13159566c8b2dcc5b260ef9a0844167e"/></dir><dir name="Exception"><file name="TApplicationException.php" hash="1ee65cc5fb3dc82550a85cc18a31850c"/><file name="TException.php" hash="756e6a847c9e6bd1560c24b9a7373d2c"/><file name="TProtocolException.php" hash="148ebd5d8eba2587cd6e039cf70e04ab"/><file name="TTransportException.php" hash="aca39eea001fcbfd452db9ca7d5c218c"/></dir><dir name="Factory"><file name="TBinaryProtocolFactory.php" hash="bcd6e0555d6e2670a3bc7dd39ff3dbaf"/><file name="TCompactProtocolFactory.php" hash="0118b6363e09080548de3c6daf153290"/><file name="TJSONProtocolFactory.php" hash="28af1d10b4133df7f8ad8022ca39d703"/><file name="TProtocolFactory.php" hash="300bf2d805fa4a227cc3dc2b6ed0200c"/><file name="TStringFuncFactory.php" hash="242f32ade732f9c0d9b62a81b6901cd4"/><file name="TTransportFactory.php" hash="8347271458aea0453e774170a5b3e9fd"/></dir><file name="HttpP13n.php" hash="8ab6f5e997fae57430e9634b753fdd46"/><dir name="Protocol"><dir name="JSON"><file name="BaseContext.php" hash="ed1d83fba59a1d04c07416094ece8ee1"/><file name="ListContext.php" hash="9c8a970f54c30be1299c2d38da60ed56"/><file name="LookaheadReader.php" hash="315a96446f0f530ed1b0b1350b37f58d"/><file name="PairContext.php" hash="3fa06b3f7c9698642aefe00cd322f68b"/></dir><file name="TBinaryProtocol.php" hash="933d2be5503504cddd544992a4af0ee3"/><file name="TBinaryProtocolAccelerated.php" hash="444ba8026d73b83fbcf303d9a550cb70"/><file name="TCompactProtocol.php" hash="57b31bf77c29c1e0d1417f018a239505"/><file name="TJSONProtocol.php" hash="fac76e10fbc711cbfbcf6bdbc0b60191"/><file name="TProtocol.php" hash="d9c9a8105ad160bf0b87e8053d4b9d7c"/></dir><dir name="Serializer"><file name="TBinarySerializer.php" hash="e1fef75686b1fbadc28242b7f3697397"/></dir><dir name="Server"><file name="TForkingServer.php" hash="6e319d0d7f45350a03e387fc2f22473d"/><file name="TServer.php" hash="dc87f6a299fb4fb9ab76206f3b6bec72"/><file name="TServerSocket.php" hash="468fc875e7a5e4899e502e95f823455d"/><file name="TServerTransport.php" hash="ca2ab3e25a0760d37eb3538274dfaccb"/><file name="TSimpleServer.php" hash="38d5685001585a0d9f31b9d8c46656d2"/></dir><dir name="StringFunc"><file name="Core.php" hash="4493a096c73f5922316d95cc2c5fb687"/><file name="Mbstring.php" hash="b5ee27dd6bdceee0f2133df01c8d4fcd"/><file name="TStringFunc.php" hash="89fd7900f1b258391e4d4fdc924bc0f0"/></dir><dir name="Transport"><file name="P13nTCurlClient.php" hash="aaa63d036b6920b57e0777f90c08064f"/><file name="P13nTHttpClient.php" hash="8223e00845b717bb55981649d9ce6616"/><file name="TBufferedTransport.php" hash="7ace771173641cf47b3b11ca0bfebcfa"/><file name="TCurlClient.php" hash="16b14d5f643b20c872468dc96218708d"/><file name="TFramedTransport.php" hash="c6fc032e990e4cf3507741ef1d5b83b2"/><file name="THttpClient.php" hash="b299d30eecc318d7dde4d012ebe8a512"/><file name="TMemoryBuffer.php" hash="7367faa512ec8d25489819ca2ed8848f"/><file name="TNullTransport.php" hash="82d683d7d76ef2938fad1c58878f45e5"/><file name="TPhpStream.php" hash="44769e5da4709a4b6c2025137e4898b3"/><file name="TSocket.php" hash="d689b1f877eda19f7caaa9cb46788f96"/><file name="TSocketPool.php" hash="73d86dbd017130fe2aa0778132b42b26"/><file name="TTransport.php" hash="9185e82d3a440d1db97c6983573bd1ab"/></dir><dir name="Type"><file name="TMessageType.php" hash="20a9fb9a1de1ffe03bfac3057c913101"/><file name="TType.php" hash="261cc40ce2573ebf414c0ec06a2ee093"/></dir></dir></dir></dir><dir name="Model"><file name="Advanced.php" hash="d22f70b7cc2a9e599e5b45fbea541750"/><file name="Category.php" hash="37a225843c7ce20966f130480075aa5d"/><file name="Logger.php" hash="a75219dc447c1ebdd41ad312b2ef7f40"/><file name="Observer.php" hash="769d825a8547191d22d20cdf638b8921"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="8814272ed16bc3c895bf3320633c0d24"/></dir><file name="Advanced.php" hash="572af318b61552c006b32ce5f5d9eb7e"/><file name="Fulltext.php" hash="cb2dc7ab7e243ea12a5595cfd77dc60a"/></dir><file name="Session.php" hash="f5f6948355cfc10882dd7a4f80e2713f"/></dir><dir name="controllers"><file name="AdvancedController.php" hash="7b22f7b4ffdf1a59448218eb79fca4ad"/><file name="AjaxController.php" hash="8331416b6beee0fb635da991790b8f40"/><file name="IndexController.php" hash="0f9ba5d1ee9bf4d7f9d6868a502738cd"/><file name="ResultController.php" hash="e43539a5921da7db3364b8e70dac2bdc"/></dir><dir name="etc"><file name="adminhtml.xml" hash="13af90d012dc3871c9af59c804d3588f"/><file name="config.xml" hash="890e172d0691b24cdc43083e1cf92a91"/><file name="system.xml" hash="96d9966e52f500a359822e3bb40946a0"/></dir></dir><dir name="Exporter"><dir name="Helper"><file name="Data.php" hash="68de11db65d7b0f091ee001d6b5a443c"/></dir><dir name="Model"><file name="Delta.php" hash="664b8a733751dd7e85169f3c9d99322f"/><file name="Indexer.php" hash="d9c10401971e9544992fbf34594fb600"/><dir name="Mysql4"><dir name="Exporter"><file name="Delta.php" hash="f4175abe070a035fd16399d3dbda1509"/><file name="Indexer.php" hash="bc1524bba09adc0c796872c718d5b6c1"/></dir><file name="Indexer.php" hash="2056705d63f3d44f0765db76b73c8850"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="57e26697c6d9b55a58f6da88b5a8d822"/><file name="config.xml" hash="9a3ac9b7ce890e8685bde7e6ba299516"/><file name="system.xml" hash="3c8e345e2ed5c2c1e01b0b37c9d62f10"/></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="boxalino.xml" hash="94bdcfdcff2210386d329f396f16b55a"/></dir><dir name="template"><dir name="boxalino"><dir name="catalogsearch"><file name="form.mini.phtml" hash="ac78368a3d53a36f912b5f9ceae4b566"/><file name="relaxation_products.phtml" hash="257908262463f380f098f0158c628899"/><file name="result.phtml" hash="8764361c966bdc64557aee6af4e8e336"/></dir><file name="left_filters.phtml" hash="d49cfedbc38298a1556cdca86b03a192"/><file name="relaxation_suggestion.phtml" hash="2344e747549eb399c219459b842569a0"/><file name="script.phtml" hash="9d5dc83f66114026208446fb0993b004"/><file name="top_filters.phtml" hash="588185dc46825a1415124f84b90ef6c3"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Boxalino_CemSearch.xml" hash="4c040e0f79d861c68c6cb036d7f58947"/><file name="Boxalino_Exporter.xml" hash="76a7a0be8d1c8caf84247b3ef0beb166"/></dir></target><target name="magelocale"><dir name="de_DE"><file name="Boxalino.csv" hash="898a7e741c385f6de40705755c7dbac7"/></dir><dir name="en_US"><file name="Boxalino.csv" hash="2fa5b37fa965c1c60e60609918cc953a"/></dir><dir name="fr_FR"><file name="Boxalino.csv" hash="07fc6c55708c4986f21f3196af74a4a3"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="boxalinoCemSearch.css" hash="aa5e2a4ae7f048bc8dc96cc3b15f827d"/></dir><dir name="js"><file name="boxalinoAutocomplete.js" hash="b26c8a5e419c7f2e8da9c0e6efbe04a2"/><file name="jquery-1.10.2.min.js" hash="628072e7212db1e8cdacb22b21752cda"/><file name="jquery-noConflict.js" hash="10bdc1b7f2effa529e5baae786007688"/></dir></dir></dir></dir></target></contents>
33
  <compatible/>
34
+ <dependencies><required><php><min>5.2.0</min><max>5.6.9</max></php></required></dependencies>
35
  </package>