Simtech_Searchanise - Version 1.1.4

Version Notes

The new version introduces the long-awaited tax-included prices, other new features and important fixes.



Features:

[+] Basic support for taxed prices added: taxes and prices are calculated as for a guest customer.

[+] If Searchanise is used for search and advanced search, all the "items per page" variants over 100 (including "All") are hidden.

[+] Sync method updated for better stability.



Fixes:

[!] Price filter step could be calculated incorrectly. Fixed.

[!] Server sync could stop if a product image was missing in the filesystem. Fixed.

[!] Server sync could stop if a product link contained the & character.



Other:

[-] The cron sync init method has been hidden from the Magento admin panel. It can only be enabled by manually editing the config file.

[~] Cron namespace changed from to

Download this release

Release Info

Developer Simbirsk Technologies, Ltd.
Extension Simtech_Searchanise
Version 1.1.4
Comparing to
See all releases


Code changes from version 1.1.3 to 1.1.4

app/code/community/Simtech/Searchanise/Block/Async.php CHANGED
@@ -55,18 +55,21 @@ class Simtech_Searchanise_Block_Async extends Mage_Core_Block_Text
55
  }
56
  }
57
 
58
- if (Mage::helper('searchanise/ApiSe')->checkAjaxAsync()) {
59
  $asyncUrl = Mage::helper('searchanise/ApiSe')->getAsyncUrl(false);
60
- $html .= "\n<object data=\"$asyncUrl\" width=\"0\" height=\"0\"></object>\n";
61
 
62
- // code for ajax async
63
- // not need in current version
64
- // $html .=
65
- // "<script type=\"text/javascript\">
66
- // //<![CDATA[
67
- // new Ajax.Request('$asyncUrl', {method: 'get', asynchronous: true});
68
- // //]]>
69
- // </script>";
 
 
 
 
70
  }
71
  }
72
 
55
  }
56
  }
57
 
58
+ if (Mage::helper('searchanise/ApiSe')->checkStartAsync()) {
59
  $asyncUrl = Mage::helper('searchanise/ApiSe')->getAsyncUrl(false);
 
60
 
61
+ if (Mage::helper('searchanise/ApiSe')->checkObjectAsync()) {
62
+ $html .= "\n<object data=\"$asyncUrl\" width=\"0\" height=\"0\"></object>\n";
63
+ }
64
+
65
+ if (Mage::helper('searchanise/ApiSe')->checkAjaxAsync()) {
66
+ $html .=
67
+ "<script type=\"text/javascript\">
68
+ //<![CDATA[
69
+ new Ajax.Request('$asyncUrl', {method: 'get', asynchronous: true});
70
+ //]]>
71
+ </script>";
72
+ }
73
  }
74
  }
75
 
app/code/community/Simtech/Searchanise/Block/Product/List/Toolbar.php CHANGED
@@ -22,21 +22,35 @@ class Simtech_Searchanise_Block_Product_List_Toolbar extends Mage_Catalog_Block_
22
  public function getAvailableLimit()
23
  {
24
  $availableLimit = parent::getAvailableLimit();
 
25
 
26
- if ($availableLimit) {
27
- if (array_key_exists('all', $availableLimit)) {
28
- unset($availableLimit['all']);
29
  $maxPageSize = Mage::helper('searchanise/ApiSe')->getMaxPageSize();
30
- if (!array_key_exists($maxPageSize, $availableLimit)) {
31
- $availableLimit[$maxPageSize] = $maxPageSize;
32
- }
33
 
34
- $currentMode = $this->getCurrentMode();
35
- if (in_array($currentMode, array('list', 'grid'))) {
36
- $this->_availableLimit[$currentMode] = $availableLimit;
37
- } else {
38
- $this->_defaultAvailableLimit = $availableLimit;
39
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
41
  }
42
 
22
  public function getAvailableLimit()
23
  {
24
  $availableLimit = parent::getAvailableLimit();
25
+ $flChange = false;
26
 
27
+ if (Mage::helper('searchanise')->checkSearchaniseIsRunning()) {
28
+ if ($availableLimit) {
 
29
  $maxPageSize = Mage::helper('searchanise/ApiSe')->getMaxPageSize();
 
 
 
30
 
31
+ if (array_key_exists('all', $availableLimit)) {
32
+ unset($availableLimit['all']);
33
+ $flChange = true;
 
 
34
  }
35
+ foreach ($availableLimit as $key => $value) {
36
+ if ($value > $maxPageSize) {
37
+ unset($availableLimit[$key]);
38
+ $flChange = true;
39
+ }
40
+ }
41
+ }
42
+ }
43
+
44
+ if ($flChange) {
45
+ if (!array_key_exists($maxPageSize, $availableLimit)) {
46
+ $availableLimit[$maxPageSize] = $maxPageSize;
47
+ }
48
+
49
+ $currentMode = $this->getCurrentMode();
50
+ if (in_array($currentMode, array('list', 'grid'))) {
51
+ $this->_availableLimit[$currentMode] = $availableLimit;
52
+ } else {
53
+ $this->_defaultAvailableLimit = $availableLimit;
54
  }
55
  }
56
 
app/code/community/Simtech/Searchanise/Helper/ApiSe.php CHANGED
@@ -83,29 +83,29 @@ class Simtech_Searchanise_Helper_ApiSe
83
  return true;
84
  }
85
 
86
- public static function getCronEnabled()
87
  {
88
- return self::getSetting('cron_enabled');
89
  }
90
-
91
- public static function getInputIdSearch()
92
  {
93
- return self::getSetting('input_id_search');
94
  }
95
 
96
- public static function getTypeAsync()
97
  {
98
- return self::getSetting('type_async');
99
  }
100
-
101
- public static function getEnabledSearchaniseSearch()
102
  {
103
- return self::getSetting('enabled_searchanise_search');
104
  }
105
 
106
- public static function checkAjaxAsync()
107
  {
108
- return self::getTypeAsync() == 2;
109
  }
110
 
111
  public static function getLabelForPricesUsergroup() {
@@ -1787,11 +1787,11 @@ class Simtech_Searchanise_Helper_ApiSe
1787
  public static function changeAmpersand($str = '')
1788
  {
1789
  if (!empty($str)) {
1790
- if (strpos('&amp;', $str) !== false) {
1791
  return $str;
1792
  }
1793
 
1794
- if (strpos('&', $str) !== false) {
1795
  return str_replace('&','&amp;',$str);
1796
  }
1797
  }
83
  return true;
84
  }
85
 
86
+ public static function checkCronAsync()
87
  {
88
+ return self::getSetting('cron_async_enabled');
89
  }
90
+
91
+ public static function checkAjaxAsync()
92
  {
93
+ return self::getSetting('ajax_async_enabled');
94
  }
95
 
96
+ public static function checkObjectAsync()
97
  {
98
+ return self::getSetting('object_async_enabled');
99
  }
100
+
101
+ public static function getInputIdSearch()
102
  {
103
+ return self::getSetting('input_id_search');
104
  }
105
 
106
+ public static function getEnabledSearchaniseSearch()
107
  {
108
+ return self::getSetting('enabled_searchanise_search');
109
  }
110
 
111
  public static function getLabelForPricesUsergroup() {
1787
  public static function changeAmpersand($str = '')
1788
  {
1789
  if (!empty($str)) {
1790
+ if (strpos($str, '&amp;') !== false) {
1791
  return $str;
1792
  }
1793
 
1794
+ if (strpos($str, '&') !== false) {
1795
  return str_replace('&','&amp;',$str);
1796
  }
1797
  }
app/code/community/Simtech/Searchanise/Helper/ApiXML.php CHANGED
@@ -80,12 +80,17 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
80
  $smallImage = $product->getData('small_image');
81
 
82
  if (!empty($smallImage) && $smallImage != 'no_selection') {
83
- $imageLink = Mage::helper('catalog/image')
84
- ->init($product, 'small_image')
85
- ->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
86
- ->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
87
- ->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
88
- ->resize($width, $height);
 
 
 
 
 
89
  }
90
  }
91
 
@@ -93,12 +98,17 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
93
  $image = $product->getData('image');
94
 
95
  if (!empty($image) && $image != 'no_selection') {
96
- $imageLink = Mage::helper('catalog/image')
97
- ->init($product, 'image')
98
- ->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
99
- ->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
100
- ->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
101
- ->resize($width, $height);
 
 
 
 
 
102
  }
103
  }
104
 
@@ -106,12 +116,17 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
106
  $thumbnail = $product->getData('thumbnail');
107
 
108
  if (!empty($thumbnail) && $thumbnail != 'no_selection') {
109
- $imageLink = Mage::helper('catalog/image')
110
- ->init($product, 'thumbnail')
111
- ->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
112
- ->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
113
- ->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
114
- ->resize($width, $height);
 
 
 
 
 
115
  }
116
  }
117
  }
@@ -154,22 +169,25 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
154
  // if CONFIGURABLE OR GROUPED OR BUNDLE
155
  if (($product->getData('type_id') == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) ||
156
  ($product->isSuper())) {
157
- $quantity = 1;
158
 
159
  // fixme in the future
160
  // maybe exist simple solution get `quantity` for TYPE_BUNDLE or TYPE_CONFIGURABLE product
161
  if ($typeInstance = $product->getTypeInstance()) {
162
  $requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
163
  if ($requiredChildrenIds) {
164
- $quantity = 0;
165
  $childrenIds = array();
 
 
166
  foreach ($requiredChildrenIds as $groupedChildrenIds) {
167
  $childrenIds = array_merge($childrenIds, $groupedChildrenIds);
168
  }
169
-
170
- $childrenProducts = self::getProducts($childrenIds, $store);
 
 
171
 
172
  if ($childrenProducts) {
 
173
  foreach ($childrenProducts as $childrenProductsKey => $childrenProduct) {
174
  if ($childrenProduct) {
175
  $quantity += self::getProductQty($childrenProduct, $store, false);
@@ -189,7 +207,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
189
  }
190
 
191
  /**
192
- * getProductMinimalPrice
193
  *
194
  * @param Mage_Catalog_Model_Product $product
195
  * @param Mage_Core_Model_Store $store
@@ -198,12 +216,19 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
198
  */
199
  private static function getProductMinimalPrice($product, $store, $flagWithChildrenProducts = true, $customerGroupId = null)
200
  {
201
- $minimalPrice = $product->getMinimalPrice();
 
 
202
 
203
  if ($minimalPrice == '') {
204
  $minimalPrice = $product->getFinalPrice();
205
  }
206
 
 
 
 
 
 
207
  if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) {
208
  $_priceModel = $product->getPriceModel();
209
  if ($_priceModel) {
@@ -226,11 +251,15 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
226
  $requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
227
  if ($requiredChildrenIds) {
228
  $childrenIds = array();
 
 
229
  foreach ($requiredChildrenIds as $groupedChildrenIds) {
230
  $childrenIds = array_merge($childrenIds, $groupedChildrenIds);
231
  }
232
-
233
- $childrenProducts = self::getProducts($childrenIds, $store, false, $customerGroupId);
 
 
234
 
235
  if ($childrenProducts) {
236
  $minimalPrice = '';
@@ -375,7 +404,7 @@ class Simtech_Searchanise_Helper_ApiXML extends Mage_Core_Helper_Data
375
 
376
  } elseif ($attributeCode == 'price') {
377
  // nothing
378
- // defined in the '<cs:price>' field
379
 
380
  } elseif ($attributeCode == 'group_price') {
381
  // nothing
80
  $smallImage = $product->getData('small_image');
81
 
82
  if (!empty($smallImage) && $smallImage != 'no_selection') {
83
+ try {
84
+ $imageLink = Mage::helper('catalog/image')
85
+ ->init($product, 'small_image')
86
+ ->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
87
+ ->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
88
+ ->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
89
+ ->resize($width, $height);
90
+ } catch (Exception $e) {
91
+ // image not exists
92
+ $imageLink = '';
93
+ }
94
  }
95
  }
96
 
98
  $image = $product->getData('image');
99
 
100
  if (!empty($image) && $image != 'no_selection') {
101
+ try {
102
+ $imageLink = Mage::helper('catalog/image')
103
+ ->init($product, 'image')
104
+ ->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
105
+ ->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
106
+ ->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
107
+ ->resize($width, $height);
108
+ } catch (Exception $e) {
109
+ // image not exists
110
+ $imageLink = '';
111
+ }
112
  }
113
  }
114
 
116
  $thumbnail = $product->getData('thumbnail');
117
 
118
  if (!empty($thumbnail) && $thumbnail != 'no_selection') {
119
+ try {
120
+ $imageLink = Mage::helper('catalog/image')
121
+ ->init($product, 'thumbnail')
122
+ ->constrainOnly(true) // Guarantee, that image picture will not be bigger, than it was.
123
+ ->keepAspectRatio(true) // Guarantee, that image picture width/height will not be distorted.
124
+ ->keepFrame($flagKeepFrame) // Guarantee, that image will have dimensions, set in $width/$height
125
+ ->resize($width, $height);
126
+ } catch (Exception $e) {
127
+ // image not exists
128
+ $imageLink = '';
129
+ }
130
  }
131
  }
132
  }
169
  // if CONFIGURABLE OR GROUPED OR BUNDLE
170
  if (($product->getData('type_id') == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) ||
171
  ($product->isSuper())) {
 
172
 
173
  // fixme in the future
174
  // maybe exist simple solution get `quantity` for TYPE_BUNDLE or TYPE_CONFIGURABLE product
175
  if ($typeInstance = $product->getTypeInstance()) {
176
  $requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
177
  if ($requiredChildrenIds) {
 
178
  $childrenIds = array();
179
+ $childrenProducts = null;
180
+
181
  foreach ($requiredChildrenIds as $groupedChildrenIds) {
182
  $childrenIds = array_merge($childrenIds, $groupedChildrenIds);
183
  }
184
+
185
+ if ($childrenIds) {
186
+ $childrenProducts = self::getProducts($childrenIds, $store);
187
+ }
188
 
189
  if ($childrenProducts) {
190
+ $quantity = 0;
191
  foreach ($childrenProducts as $childrenProductsKey => $childrenProduct) {
192
  if ($childrenProduct) {
193
  $quantity += self::getProductQty($childrenProduct, $store, false);
207
  }
208
 
209
  /**
210
+ * Get product minimal price without "Tier Price" (quantity discount)
211
  *
212
  * @param Mage_Catalog_Model_Product $product
213
  * @param Mage_Core_Model_Store $store
216
  */
217
  private static function getProductMinimalPrice($product, $store, $flagWithChildrenProducts = true, $customerGroupId = null)
218
  {
219
+ $minimalPrice = '';
220
+ // The "getMinimalPrice" function gets price with "Tier Price" (quantity discount)
221
+ // $minimalPrice = $product->getMinimalPrice();
222
 
223
  if ($minimalPrice == '') {
224
  $minimalPrice = $product->getFinalPrice();
225
  }
226
 
227
+ $taxHelper = Mage::helper('tax');
228
+
229
+ $showPricesTax = ($taxHelper->displayPriceIncludingTax() || $taxHelper->displayBothPrices());
230
+ $minimalPrice = $taxHelper->getPrice($product, $product->getFinalPrice(), $showPricesTax);
231
+
232
  if ($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_BUNDLE) {
233
  $_priceModel = $product->getPriceModel();
234
  if ($_priceModel) {
251
  $requiredChildrenIds = $typeInstance->getChildrenIds($product->getId(), true);
252
  if ($requiredChildrenIds) {
253
  $childrenIds = array();
254
+ $childrenProducts = null;
255
+
256
  foreach ($requiredChildrenIds as $groupedChildrenIds) {
257
  $childrenIds = array_merge($childrenIds, $groupedChildrenIds);
258
  }
259
+
260
+ if ($childrenIds) {
261
+ $childrenProducts = self::getProducts($childrenIds, $store, false, $customerGroupId);
262
+ }
263
 
264
  if ($childrenProducts) {
265
  $minimalPrice = '';
404
 
405
  } elseif ($attributeCode == 'price') {
406
  // nothing
407
+ // already defined in the '<cs:price>' field
408
 
409
  } elseif ($attributeCode == 'group_price') {
410
  // nothing
app/code/community/Simtech/Searchanise/Helper/Data.php CHANGED
@@ -41,6 +41,8 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
41
  * @var Simtech_Searchanise_Model_Request
42
  */
43
  protected $_searchaniseRequest = null;
 
 
44
 
45
  public function initSearchaniseRequest()
46
  {
@@ -48,7 +50,7 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
48
 
49
  return $this;
50
  }
51
-
52
  public function checkSearchaniseResult()
53
  {
54
  return Mage::helper('searchanise/ApiSe')->checkSearchaniseResult($this->_searchaniseRequest);
@@ -63,6 +65,16 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
63
  {
64
  return $this->_searchaniseRequest;
65
  }
 
 
 
 
 
 
 
 
 
 
66
 
67
  public function getDisableText()
68
  {
@@ -139,9 +151,34 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
139
 
140
  return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
141
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
142
 
143
  public function execute($type = null, $controller = null, $blockToolbar = null, $data = null)
144
  {
 
145
  if ((!$this->checkEnabled()) || (!Mage::helper('searchanise/ApiSe')->getEnabledSearchaniseSearch())) {
146
  return;
147
  }
@@ -151,6 +188,7 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
151
  return;
152
  }
153
  }
 
154
  if (empty($params)) {
155
  $params = array();
156
  }
41
  * @var Simtech_Searchanise_Model_Request
42
  */
43
  protected $_searchaniseRequest = null;
44
+
45
+ protected $_searchaniseCurentType = null;
46
 
47
  public function initSearchaniseRequest()
48
  {
50
 
51
  return $this;
52
  }
53
+
54
  public function checkSearchaniseResult()
55
  {
56
  return Mage::helper('searchanise/ApiSe')->checkSearchaniseResult($this->_searchaniseRequest);
65
  {
66
  return $this->_searchaniseRequest;
67
  }
68
+
69
+ public function setSearchaniseCurentType($type = null)
70
+ {
71
+ $this->_searchaniseCurentType = $type;
72
+ }
73
+
74
+ public function getSearchaniseCurentType()
75
+ {
76
+ return $this->_searchaniseCurentType;
77
+ }
78
 
79
  public function getDisableText()
80
  {
151
 
152
  return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
153
  }
154
+
155
+ /**
156
+ * Check for replace default functional (example getAvailableLimit in Simtech_Searchanise_Block_Product_List_Toolbar)
157
+ *
158
+ * @return boolean
159
+ */
160
+ public function checkSearchaniseIsRunning()
161
+ {
162
+ $check = false;
163
+
164
+ $type = $this->getSearchaniseCurentType();
165
+
166
+ if ($type) {
167
+ if (Mage::helper('searchanise/ApiSe')->getUseNavigation()) {
168
+ $check = true;
169
+ } else {
170
+ if (($type == self::TEXT_FIND) || ($type == self::TEXT_ADVANCED_FIND)) {
171
+ $check = true;
172
+ }
173
+ }
174
+ }
175
+
176
+ return $check;
177
+ }
178
 
179
  public function execute($type = null, $controller = null, $blockToolbar = null, $data = null)
180
  {
181
+ $this->setSearchaniseCurentType(); // init value
182
  if ((!$this->checkEnabled()) || (!Mage::helper('searchanise/ApiSe')->getEnabledSearchaniseSearch())) {
183
  return;
184
  }
188
  return;
189
  }
190
  }
191
+ $this->setSearchaniseCurentType($type);
192
  if (empty($params)) {
193
  $params = array();
194
  }
app/code/community/Simtech/Searchanise/Model/Observer.php CHANGED
@@ -31,8 +31,8 @@ class Simtech_Searchanise_Model_Observer
31
  Mage::helper('searchanise/ApiSe')->log('start cron autoSync', 'information');
32
 
33
  // only run if set to
34
- $cron_enabled = Mage::helper('searchanise/ApiSe')->getCronEnabled();
35
- if ($cron_enabled) {
36
  Mage::helper('searchanise/ApiSe')->log('cron is enabled', 'information');
37
  $result = Mage::helper('searchanise/ApiSe')->async();
38
  echo $result;
31
  Mage::helper('searchanise/ApiSe')->log('start cron autoSync', 'information');
32
 
33
  // only run if set to
34
+ $cronAsyncEnabled = Mage::helper('searchanise/ApiSe')->checkCronAsync();
35
+ if ($cronAsyncEnabled) {
36
  Mage::helper('searchanise/ApiSe')->log('cron is enabled', 'information');
37
  $result = Mage::helper('searchanise/ApiSe')->async();
38
  echo $result;
app/code/community/Simtech/Searchanise/Model/Request.php CHANGED
@@ -436,9 +436,8 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
436
  return $ret;
437
  }
438
 
439
- $name = $attribute->getName();
440
- // hook, need for 'union'
441
- if ($name == 'price') {
442
  $label = 'price';
443
  } else {
444
  $label = 'attribute_' . $attribute->getId();
@@ -489,8 +488,13 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
489
  if (!$attribute) {
490
  return $ret;
491
  }
492
-
493
- $label = 'attribute_' . $attribute->getId();
 
 
 
 
 
494
  $vals = array();
495
  $res = $this->getSearchResult();
496
 
@@ -525,26 +529,20 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
525
 
526
  $label = 'category' . $category->getId();
527
 
528
- if (!$this->checkAttributesCountLabel($label))
529
- {
530
  $val = 0;
531
  $res = $this->getSearchResult();
532
 
533
- if (!empty($res['facets']))
534
- {
535
  // fixme in the future
536
  // error calc count product in category
537
  $arr_cat = null;
538
  Mage::helper('searchanise/ApiSe')->getAllChildrenCategories($arr_cat, $category);
539
 
540
- foreach ($res['facets'] as $facet)
541
- {
542
- if ($facet['attribute'] == 'categories')
543
- {
544
- if (!empty($facet['buckets']))
545
- {
546
- foreach ($facet['buckets'] as $bucket)
547
- {
548
  if (in_array($bucket['value'], $arr_cat)) {
549
  $val += $bucket['count'];
550
  }
436
  return $ret;
437
  }
438
 
439
+ // hook, it is need for 'union' and this attribute defined in the 'price' field
440
+ if ($attribute->getAttributeCode() == 'price') {
 
441
  $label = 'price';
442
  } else {
443
  $label = 'attribute_' . $attribute->getId();
488
  if (!$attribute) {
489
  return $ret;
490
  }
491
+
492
+ // hook, it is need for 'union' and this attribute defined in the 'price' field
493
+ if ($attribute->getAttributeCode() == 'price') {
494
+ $label = 'price';
495
+ } else {
496
+ $label = 'attribute_' . $attribute->getId();
497
+ }
498
  $vals = array();
499
  $res = $this->getSearchResult();
500
 
529
 
530
  $label = 'category' . $category->getId();
531
 
532
+ if (!$this->checkAttributesCountLabel($label)) {
 
533
  $val = 0;
534
  $res = $this->getSearchResult();
535
 
536
+ if (!empty($res['facets'])) {
 
537
  // fixme in the future
538
  // error calc count product in category
539
  $arr_cat = null;
540
  Mage::helper('searchanise/ApiSe')->getAllChildrenCategories($arr_cat, $category);
541
 
542
+ foreach ($res['facets'] as $facet) {
543
+ if ($facet['attribute'] == 'categories') {
544
+ if (!empty($facet['buckets'])) {
545
+ foreach ($facet['buckets'] as $bucket) {
 
 
 
 
546
  if (in_array($bucket['value'], $arr_cat)) {
547
  $val += $bucket['count'];
548
  }
app/code/community/Simtech/Searchanise/controllers/AsyncController.php CHANGED
@@ -46,6 +46,8 @@ class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Act
46
  $this->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
47
 
48
  parent::preDispatch();
 
 
49
  }
50
 
51
  /*
@@ -54,14 +56,15 @@ class Simtech_Searchanise_AsyncController extends Mage_Core_Controller_Front_Act
54
  public function indexAction()
55
  {
56
  if (Mage::helper('searchanise/ApiSe')->getStatusModule() == 'Y') {
57
- Mage::app('admin')->setUseSessionInUrl(false);
58
- Mage::app('customer')->setUseSessionInUrl(false);
59
-
60
- if (Mage::helper('searchanise/ApiSe')->checkStartAsync()) {
61
- $check = $this->checkNotUseHttpRequest();
62
- // code if need not use httprequest
63
- // not need in current version
64
- // $check = true;
 
65
 
66
  if ($check) {
67
  @ignore_user_abort(true);
46
  $this->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
47
 
48
  parent::preDispatch();
49
+
50
+ return $this;
51
  }
52
 
53
  /*
56
  public function indexAction()
57
  {
58
  if (Mage::helper('searchanise/ApiSe')->getStatusModule() == 'Y') {
59
+ // not need because it checked in the "Async.php" block
60
+ // if (Mage::helper('searchanise/ApiSe')->checkStartAsync()) {
61
+ if (true) {
62
+ $check = true;
63
+ // code if need use httprequest
64
+ // $check = $this->checkNotUseHttpRequest();
65
+ // Mage::app('admin')->setUseSessionInUrl(false);
66
+ // Mage::app('customer')->setUseSessionInUrl(false); // need check: sometimes not work properly (the async script will not start)
67
+ // end code
68
 
69
  if ($check) {
70
  @ignore_user_abort(true);
app/code/community/Simtech/Searchanise/controllers/InfoController.php CHANGED
@@ -17,17 +17,46 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
17
  const RESYNC = 'resync';
18
  const OUTPUT = 'visual';
19
  const STORE_ID = 'store_id';
 
20
  const PRODUCT_IDS = 'product_ids';
21
  const PARENT_PRIVATE_KEY = 'parent_private_key';
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  public function indexAction()
24
  {
25
  $resync = $this->getRequest()->getParam(self::RESYNC);
26
  $visual = $this->getRequest()->getParam(self::OUTPUT);
27
  $storeId = $this->getRequest()->getParam(self::STORE_ID);
 
28
  $productIds = $this->getRequest()->getParam(self::PRODUCT_IDS);
29
  $parentPrivateKey = $this->getRequest()->getParam(self::PARENT_PRIVATE_KEY);
30
 
 
 
 
 
31
  if ((empty($parentPrivateKey)) ||
32
  (Mage::helper('searchanise/ApiSe')->getParentPrivateKey() !== $parentPrivateKey)) {
33
  $_options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
@@ -67,7 +96,9 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
67
  $options['next_queue'] = Mage::getModel('searchanise/queue')->getNextQueue();
68
  $options['total_items_in_queue'] = Mage::getModel('searchanise/queue')->getTotalItems();
69
 
70
- $options['type_async'] = Mage::helper('searchanise/ApiSe')->getTypeAsync();
 
 
71
 
72
  $options['max_execution_time'] = ini_get('max_execution_time');
73
  @set_time_limit(0);
17
  const RESYNC = 'resync';
18
  const OUTPUT = 'visual';
19
  const STORE_ID = 'store_id';
20
+ const PRODUCT_ID = 'product_id';
21
  const PRODUCT_IDS = 'product_ids';
22
  const PARENT_PRIVATE_KEY = 'parent_private_key';
23
 
24
+ /**
25
+ * Dispatch event before action
26
+ *
27
+ * @return void
28
+ */
29
+ public function preDispatch()
30
+ {
31
+ // It is need if it will used the "generateProductsXML" function
32
+
33
+ // Do not start standart session
34
+ $this->setFlag('', self::FLAG_NO_START_SESSION, 1);
35
+ $this->setFlag('', self::FLAG_NO_CHECK_INSTALLATION, 1);
36
+ $this->setFlag('', self::FLAG_NO_COOKIES_REDIRECT, 0);
37
+ $this->setFlag('', self::FLAG_NO_PRE_DISPATCH, 1);
38
+
39
+ // Need for delete the "PDOExceptionPDOException" error
40
+ $this->setFlag('', self::FLAG_NO_POST_DISPATCH, 1);
41
+
42
+ parent::preDispatch();
43
+
44
+ return $this;
45
+ }
46
+
47
  public function indexAction()
48
  {
49
  $resync = $this->getRequest()->getParam(self::RESYNC);
50
  $visual = $this->getRequest()->getParam(self::OUTPUT);
51
  $storeId = $this->getRequest()->getParam(self::STORE_ID);
52
+ $productId = $this->getRequest()->getParam(self::PRODUCT_ID);
53
  $productIds = $this->getRequest()->getParam(self::PRODUCT_IDS);
54
  $parentPrivateKey = $this->getRequest()->getParam(self::PARENT_PRIVATE_KEY);
55
 
56
+ if ($productId) {
57
+ $productIds = array($productId);
58
+ }
59
+
60
  if ((empty($parentPrivateKey)) ||
61
  (Mage::helper('searchanise/ApiSe')->getParentPrivateKey() !== $parentPrivateKey)) {
62
  $_options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
96
  $options['next_queue'] = Mage::getModel('searchanise/queue')->getNextQueue();
97
  $options['total_items_in_queue'] = Mage::getModel('searchanise/queue')->getTotalItems();
98
 
99
+ $options['cron_async_enabled'] = Mage::helper('searchanise/ApiSe')->checkCronAsync();
100
+ $options['ajax_async_enabled'] = Mage::helper('searchanise/ApiSe')->checkAjaxAsync();
101
+ $options['object_async_enabled'] = Mage::helper('searchanise/ApiSe')->checkObjectAsync();
102
 
103
  $options['max_execution_time'] = ini_get('max_execution_time');
104
  @set_time_limit(0);
app/code/community/Simtech/Searchanise/etc/config.xml CHANGED
@@ -15,7 +15,7 @@
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
- <version>1.1.3</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
@@ -559,27 +559,28 @@
559
  <search_timeout>3</search_timeout>
560
  <request_timeout>10</request_timeout>
561
  <ajax_async_timeout>1</ajax_async_timeout>
562
- <products_per_pass>200</products_per_pass>
563
  <max_error_count>25</max_error_count>
564
  <max_processing_thread>3</max_processing_thread>
565
  <max_processing_time>720</max_processing_time>
566
  <max_search_request_length>8000</max_search_request_length>
567
  <service_url>http://www.searchanise.com</service_url>
568
- <cron_enabled>1</cron_enabled>
 
 
 
569
  <input_id_search>search</input_id_search>
570
- <!-- '2' - ajax -->
571
- <type_async>2</type_async>
572
  <enabled_searchanise_search>1</enabled_searchanise_search>
573
  </config>
574
  </searchanise>
575
  </default>
576
  <crontab>
577
  <jobs>
578
- <cronjob_name>
579
  <!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
580
  <schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
581
  <run><model>searchanise/observer::autoSync</model></run>
582
- </cronjob_name>
583
  </jobs>
584
  </crontab>
585
  </config>
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
+ <version>1.1.4</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
559
  <search_timeout>3</search_timeout>
560
  <request_timeout>10</request_timeout>
561
  <ajax_async_timeout>1</ajax_async_timeout>
562
+ <products_per_pass>50</products_per_pass>
563
  <max_error_count>25</max_error_count>
564
  <max_processing_thread>3</max_processing_thread>
565
  <max_processing_time>720</max_processing_time>
566
  <max_search_request_length>8000</max_search_request_length>
567
  <service_url>http://www.searchanise.com</service_url>
568
+ <cron_async_enabled>0</cron_async_enabled>
569
+ <ajax_async_enabled>0</ajax_async_enabled>
570
+ <!-- default sync init method -->
571
+ <object_async_enabled>1</object_async_enabled>
572
  <input_id_search>search</input_id_search>
 
 
573
  <enabled_searchanise_search>1</enabled_searchanise_search>
574
  </config>
575
  </searchanise>
576
  </default>
577
  <crontab>
578
  <jobs>
579
+ <searchanise_indexer>
580
  <!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
581
  <schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
582
  <run><model>searchanise/observer::autoSync</model></run>
583
+ </searchanise_indexer>
584
  </jobs>
585
  </crontab>
586
  </config>
app/code/community/Simtech/Searchanise/etc/config_without_search.xml CHANGED
@@ -15,7 +15,7 @@
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
- <version>1.1.3</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
@@ -559,27 +559,28 @@
559
  <search_timeout>3</search_timeout>
560
  <request_timeout>10</request_timeout>
561
  <ajax_async_timeout>1</ajax_async_timeout>
562
- <products_per_pass>200</products_per_pass>
563
  <max_error_count>25</max_error_count>
564
  <max_processing_thread>3</max_processing_thread>
565
  <max_processing_time>720</max_processing_time>
566
  <max_search_request_length>8000</max_search_request_length>
567
  <service_url>http://www.searchanise.com</service_url>
568
- <cron_enabled>1</cron_enabled>
 
 
 
569
  <input_id_search>search</input_id_search>
570
- <!-- '2' - ajax -->
571
- <type_async>2</type_async>
572
  <enabled_searchanise_search>1</enabled_searchanise_search>
573
  </config>
574
  </searchanise>
575
  </default>
576
  <crontab>
577
  <jobs>
578
- <cronjob_name>
579
  <!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
580
  <schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
581
  <run><model>searchanise/observer::autoSync</model></run>
582
- </cronjob_name>
583
  </jobs>
584
  </crontab>
585
  </config>
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
+ <version>1.1.4</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
559
  <search_timeout>3</search_timeout>
560
  <request_timeout>10</request_timeout>
561
  <ajax_async_timeout>1</ajax_async_timeout>
562
+ <products_per_pass>50</products_per_pass>
563
  <max_error_count>25</max_error_count>
564
  <max_processing_thread>3</max_processing_thread>
565
  <max_processing_time>720</max_processing_time>
566
  <max_search_request_length>8000</max_search_request_length>
567
  <service_url>http://www.searchanise.com</service_url>
568
+ <cron_async_enabled>0</cron_async_enabled>
569
+ <ajax_async_enabled>0</ajax_async_enabled>
570
+ <!-- default sync init method -->
571
+ <object_async_enabled>1</object_async_enabled>
572
  <input_id_search>search</input_id_search>
 
 
573
  <enabled_searchanise_search>1</enabled_searchanise_search>
574
  </config>
575
  </searchanise>
576
  </default>
577
  <crontab>
578
  <jobs>
579
+ <searchanise_indexer>
580
  <!-- runs every 1 minutes as below. Change to (0 1 * * *) to run every night at 1am -->
581
  <schedule><cron_expr>*/1 * * * *</cron_expr></schedule>
582
  <run><model>searchanise/observer::autoSync</model></run>
583
+ </searchanise_indexer>
584
  </jobs>
585
  </crontab>
586
  </config>
app/code/community/Simtech/Searchanise/etc/system.xml CHANGED
@@ -46,9 +46,12 @@
46
  <show_in_website>1</show_in_website>
47
  <show_in_store>1</show_in_store>
48
  </input_id_search>
49
- <type_async translate="label comment">
 
 
50
  <label><![CDATA[Sync Init Method]]></label>
51
- <comment><![CDATA[<strong>Cron</strong>. If cron service is set up and running, it is recommended to use this option. Database synchronization will be initialized according to the cron schedule.<br>
 
52
  <strong>AJAX</strong>. Select this option if you want the database synchronization to be initialized everytime a page is visited in the customer area.
53
  ]]></comment>
54
  <frontend_type>select</frontend_type>
@@ -57,7 +60,8 @@
57
  <show_in_default>1</show_in_default>
58
  <show_in_website>0</show_in_website>
59
  <show_in_store>0</show_in_store>
60
- </type_async>
 
61
  <enabled_searchanise_search translate="labe comment">
62
  <label><![CDATA[Use Searchanise for search and advanced search]]></label>
63
  <comment><![CDATA[Disable in case of invalid search operation.<br>The instant search widget will <strong>remain active</strong>.]]></comment>
46
  <show_in_website>1</show_in_website>
47
  <show_in_store>1</show_in_store>
48
  </input_id_search>
49
+ <!-- Hided the "Sync Init Method" option -->
50
+ <!--
51
+ <type_async translate="label comment">
52
  <label><![CDATA[Sync Init Method]]></label>
53
+ <comment><![CDATA[
54
+ <strong>Cron</strong>. If cron service is set up and running, it is recommended to use this option. Database synchronization will be initialized according to the cron schedule.<br>
55
  <strong>AJAX</strong>. Select this option if you want the database synchronization to be initialized everytime a page is visited in the customer area.
56
  ]]></comment>
57
  <frontend_type>select</frontend_type>
60
  <show_in_default>1</show_in_default>
61
  <show_in_website>0</show_in_website>
62
  <show_in_store>0</show_in_store>
63
+ </type_async>
64
+ -->
65
  <enabled_searchanise_search translate="labe comment">
66
  <label><![CDATA[Use Searchanise for search and advanced search]]></label>
67
  <comment><![CDATA[Disable in case of invalid search operation.<br>The instant search widget will <strong>remain active</strong>.]]></comment>
package.xml CHANGED
@@ -1,28 +1,34 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Simtech_Searchanise</name>
4
- <version>1.1.3</version>
5
  <stability>stable</stability>
6
- <license uri="https://searchanise.atlassian.net/wiki/display/DD/LICENSE+AGREEMENT">Commercial license: https://searchanise.atlassian.net/wiki/display/DD/LICENSE+AGREEMENT</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Searchanise Connector Add-on allows you to easily integrate Searchanise rapid search service in your online store. The add-on provides both an admin panel and a customer area widgets.</summary>
10
  <description>Searchanise is a free SaaS solution providing fast and smart search for online stores. It provides rapid search results and instant search suggestions presented in a fancy and customizable widget.&#xD;
11
  &#xD;
12
  With the help of Searchanise Connector Add-on you will be able to connect your store to the service and start using the search widget in no time. Power up your store right now!</description>
13
- <notes>[+] You can now turn off Searchanise for quick product search (the Use Searchanise for search and advanced search setting.) The autocomplete widget will work.&lt;br&gt;&#xD;
14
- [+] Faster indexation.&lt;br&gt;&#xD;
15
- [+] Search relevance improved.&lt;br&gt;&#xD;
16
- [+] The "All" variant of the items per page menu is replaced with "100" if the "Allow All Products per Page" option is active.&lt;br&gt;&#xD;
17
- [!] Multi-store improvement: Sometimes, not all product data was submitted from additional storefronts. Fixed.&lt;br&gt;&#xD;
18
- [!] The "Use in Quick Search" attributes are also taken into account in text search.&lt;br&gt;&#xD;
19
- [!] Search results could be incorrectly sorted on initial page visit. Fixed.&lt;br&gt;&#xD;
20
- [!] Search suggestion capitalizarion improved.&lt;br&gt;&#xD;
21
- [!] In v.1.5, the display of the available filter variant list was improved for the Layered Navigation block.&lt;br&gt;</notes>
 
 
 
 
 
 
22
  <authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
23
- <date>2013-07-01</date>
24
- <time>14:28:14</time>
25
- <contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="030cb7d25ba09e32b2e8ab647cf0a2fe"/><file name="Autocomplete.php" hash="efc89ac3f897be3bc307fba6a36778f0"/><file name="Jsinit.php" hash="44d40c5d699abc2ac75a6e172dedd84b"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="5c439fe647c7fb76bbb8a5e1a7a92f34"/></dir><file name="Result.php" hash="4e767e273ee21a38332ac226af878291"/></dir><file name="Result.php" hash="dec7b27ab9511c956680eb60eba9b95e"/></dir><dir name="Helper"><file name="ApiSe.php" hash="4fec477a23f1cb041dbc25cf03f151b3"/><file name="ApiXML.php" hash="bb4db1989ee6876665fbd5eaeb5cdaba"/><file name="Data.php" hash="6774268af2edf4da8d9f202c3d37908d"/></dir><dir name="Model"><file name="Advanced.php" hash="2a22ebcf7ac75b54681ef8a27bad2e47"/><dir name="Config"><file name="Data.php" hash="ddc558d22208f0ebc1e4378c9d050022"/></dir><file name="Config.php" hash="00ca3c7955f3ff2283c636a2074b6f03"/><dir name="Import"><dir name="Entity"><file name="Product.php" hash="4997af528b36f0f576d1c01402e14b03"/></dir></dir><dir name="Layer"><dir name="Filter"><file name="Category.php" hash="e290ab29f2d50e1acbbbb37496150ea4"/><file name="Price.php" hash="743887b32bf012274ad8a371fff96411"/></dir></dir><file name="Layer.php" hash="3e8c975d649ae6e20fcc69d35779c97c"/><file name="LayerCatalogSearch.php" hash="61728092fdb9cf42490afacdc4e731fd"/><dir name="Mysql4"><dir name="Advanced"><file name="Collection.php" hash="dd8c6f3cbb0621a5a7320f3104e68da6"/></dir><dir name="Config"><file name="Collection.php" hash="470218c1eb3f1cc1ca0e6d0e93e1b097"/></dir><file name="Config.php" hash="c95dc8ecd7ab4f955b6eaf4710ab960e"/><dir name="Fulltext"><file name="Collection.php" hash="5646955503a90020f87cfd861ac07e73"/></dir><dir name="Product"><file name="Collection.php" hash="28b478eb328502ce03e389404d9f54b5"/><file name="CollectionTag.php" hash="def509d1365374e6dede36be17e75bf3"/></dir><dir name="Queue"><file name="Collection.php" hash="30ca0f8640bdc443deb94cd2e71010c8"/></dir><file name="Queue.php" hash="286351623e8f011a21519f8d9c3e3151"/><file name="Store.php" hash="0126a4291d7dad6641bf59abb0f64cc4"/></dir><file name="Observer.php" hash="b7228e6adfedc3cce9975a7cee280d0c"/><file name="Queue.php" hash="831f5ea7e57810f9c78d09659424e9a7"/><file name="Request.php" hash="581cda79900b00e16610d0ac679dc02b"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="12933839daa74d17ac82fca89071bc0a"/></dir><dir name="Eav"><dir name="Mysql4"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="982b1960bec58522f1bd8b82f86452b4"/><file name="Price.php" hash="fc1ec55d6c2aa97558e06691e690e466"/></dir></dir><dir name="Product"><file name="Action.php" hash="006e3c8c775cf31a8b9c66fb934c9d2d"/></dir></dir></dir><dir name="Fulltext"><file name="Collection.php" hash="b9e2e4884a7ecee0000e6a41c0e6d3e2"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="0bfecbdff2458785a287c3f1de23ed56"/><file name="Price.php" hash="38d1acaa4478d678d4bb20704a81b760"/></dir></dir><dir name="Product"><file name="Collection.php" hash="6072bf2a7a4713f3db2fa96014e7453a"/><file name="CollectionTag.php" hash="e89307da7c26ee153c3f9dead94dcd13"/></dir><file name="Store.php" hash="8dd81bf57d38af2b4640bbf14063d3f8"/></dir><file name="Searchanise.php" hash="507813e92908000315aabc4256c5a05c"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Searchanise"><file name="TypeAsync.php" hash="11d1aa481094ccbeab365b1fed33440d"/></dir></dir></dir></dir><dir name="Tag"><file name="Relation.php" hash="598f81fd8b2ac77baf24211c2ed03e55"/></dir></dir><dir name="controllers"><file name="AdvancedController.php" hash="7500f6075382cd8a14816e424da2348f"/><file name="AsyncController.php" hash="da396c439c66a41ee58b3ae8997e1c46"/><file name="CategoryController.php" hash="909f99c5cf7f85405fc76ebe976c2c8e"/><file name="IndexController.php" hash="e3234ca51a7669741e29ff7c38789989"/><file name="InfoController.php" hash="a24bd87395379bf9d9ba44c20b170e71"/><file name="OptionsController.php" hash="56785c8ea24472c2047268b2d9e8e878"/><file name="ProductController.php" hash="6633fde99f35ffeaa05884f0e0d98da7"/><file name="ResultController.php" hash="4b00515cc47593704ea1178d7b44d48e"/><file name="ResyncController.php" hash="0612f929d375427326821dfc12186be8"/><file name="SignupController.php" hash="80f87a63d6272f98a068dde35f1d140e"/></dir><dir name="etc"><file name="config.xml" hash="81a12d2a961001cf6d4c7c1ec91fc530"/><file name="config_without_search.xml" hash="e59f69591934691ddab2e5b601d0ac6a"/><file name="system.xml" hash="08c1b104f59abea32a5ed2f0eaaebbdb"/></dir><dir name="sql"><dir name="searchanise_setup"><file name="mysql4-install-0.1.0.php" hash="754324c8783e9cc24de86396e1587e73"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="searchanise"><file name="dashboard.phtml" hash="8b9793a009151951e1e1f8e4cecb4db2"/></dir></dir><dir name="layout"><file name="searchanise.xml" hash="68baa611d05db05f8816ea2a8260e961"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="searchanise.xml" hash="5e904fee02cbd42324a297d513b9f582"/></dir></dir></dir><dir name="default"><dir name="default"><dir name="template"><dir name="catalogsearch"><file name="form.mini.phtml" hash="fcf8e06e66801a36c96f20ca5d187123"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Simtech_Searchanise.xml" hash="04148681a6648bd370ab62140cbf2ad9"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Simtech_Searchanise.csv" hash="1bdb7fddc596dac1460bc3054c425187"/></dir></target></contents>
26
  <compatible/>
27
  <dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
28
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Simtech_Searchanise</name>
4
+ <version>1.1.4</version>
5
  <stability>stable</stability>
6
+ <license uri="http://docs.searchanise.com/connector_addon/license_agreement.html">Commercial license: http://docs.searchanise.com/connector_addon/license_agreement.html</license>
7
  <channel>community</channel>
8
  <extends/>
9
  <summary>Searchanise Connector Add-on allows you to easily integrate Searchanise rapid search service in your online store. The add-on provides both an admin panel and a customer area widgets.</summary>
10
  <description>Searchanise is a free SaaS solution providing fast and smart search for online stores. It provides rapid search results and instant search suggestions presented in a fancy and customizable widget.&#xD;
11
  &#xD;
12
  With the help of Searchanise Connector Add-on you will be able to connect your store to the service and start using the search widget in no time. Power up your store right now!</description>
13
+ <notes>The new version introduces the long-awaited tax-included prices, other new features and important fixes.&lt;br /&gt;&#xD;
14
+ &lt;br /&gt;&#xD;
15
+ Features:&lt;br /&gt;&#xD;
16
+ [+] Basic support for taxed prices added: taxes and prices are calculated as for a guest customer.&lt;br /&gt;&#xD;
17
+ [+] If Searchanise is used for search and advanced search, all the "items per page" variants over 100 (including "All") are hidden.&lt;br /&gt;&#xD;
18
+ [+] Sync method updated for better stability.&lt;br /&gt;&#xD;
19
+ &lt;br /&gt;&#xD;
20
+ Fixes:&lt;br /&gt;&#xD;
21
+ [!] Price filter step could be calculated incorrectly. Fixed.&lt;br /&gt;&#xD;
22
+ [!] Server sync could stop if a product image was missing in the filesystem. Fixed.&lt;br /&gt;&#xD;
23
+ [!] Server sync could stop if a product link contained the &amp; character.&lt;br /&gt;&#xD;
24
+ &lt;br /&gt;&#xD;
25
+ Other:&lt;br /&gt;&#xD;
26
+ [-] The cron sync init method has been hidden from the Magento admin panel. It can only be enabled by manually editing the config file.&lt;br /&gt;&#xD;
27
+ [~] Cron namespace changed from &lt;cronjob_name&gt;&lt;/cronjob_name&gt; to &lt;searchanise_indexer&gt;&lt;/searchanise_indexer&gt;</notes>
28
  <authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
29
+ <date>2013-07-29</date>
30
+ <time>12:02:35</time>
31
+ <contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="e6b1951b34dbd7f158c7acb54b1d10dd"/><file name="Autocomplete.php" hash="efc89ac3f897be3bc307fba6a36778f0"/><file name="Jsinit.php" hash="44d40c5d699abc2ac75a6e172dedd84b"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="73c06dbe5c5ca8778bb2488ed2b5b5ed"/></dir><file name="Result.php" hash="4e767e273ee21a38332ac226af878291"/></dir><file name="Result.php" hash="dec7b27ab9511c956680eb60eba9b95e"/></dir><dir name="Helper"><file name="ApiSe.php" hash="48092aef60145974d096c55085469875"/><file name="ApiXML.php" hash="d3ea232400c8c10683942fbf8abcc708"/><file name="Data.php" hash="53bbede2bf74a83521ee64240739f898"/></dir><dir name="Model"><file name="Advanced.php" hash="2a22ebcf7ac75b54681ef8a27bad2e47"/><dir name="Config"><file name="Data.php" hash="ddc558d22208f0ebc1e4378c9d050022"/></dir><file name="Config.php" hash="00ca3c7955f3ff2283c636a2074b6f03"/><dir name="Import"><dir name="Entity"><file name="Product.php" hash="4997af528b36f0f576d1c01402e14b03"/></dir></dir><dir name="Layer"><dir name="Filter"><file name="Category.php" hash="e290ab29f2d50e1acbbbb37496150ea4"/><file name="Price.php" hash="743887b32bf012274ad8a371fff96411"/></dir></dir><file name="Layer.php" hash="3e8c975d649ae6e20fcc69d35779c97c"/><file name="LayerCatalogSearch.php" hash="61728092fdb9cf42490afacdc4e731fd"/><dir name="Mysql4"><dir name="Advanced"><file name="Collection.php" hash="dd8c6f3cbb0621a5a7320f3104e68da6"/></dir><dir name="Config"><file name="Collection.php" hash="470218c1eb3f1cc1ca0e6d0e93e1b097"/></dir><file name="Config.php" hash="c95dc8ecd7ab4f955b6eaf4710ab960e"/><dir name="Fulltext"><file name="Collection.php" hash="5646955503a90020f87cfd861ac07e73"/></dir><dir name="Product"><file name="Collection.php" hash="28b478eb328502ce03e389404d9f54b5"/><file name="CollectionTag.php" hash="def509d1365374e6dede36be17e75bf3"/></dir><dir name="Queue"><file name="Collection.php" hash="30ca0f8640bdc443deb94cd2e71010c8"/></dir><file name="Queue.php" hash="286351623e8f011a21519f8d9c3e3151"/><file name="Store.php" hash="0126a4291d7dad6641bf59abb0f64cc4"/></dir><file name="Observer.php" hash="8d24a27713e1db605ef0c14862df8bf0"/><file name="Queue.php" hash="831f5ea7e57810f9c78d09659424e9a7"/><file name="Request.php" hash="af0f9a16a0dbc69ba76458eac802638b"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="12933839daa74d17ac82fca89071bc0a"/></dir><dir name="Eav"><dir name="Mysql4"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="982b1960bec58522f1bd8b82f86452b4"/><file name="Price.php" hash="fc1ec55d6c2aa97558e06691e690e466"/></dir></dir><dir name="Product"><file name="Action.php" hash="006e3c8c775cf31a8b9c66fb934c9d2d"/></dir></dir></dir><dir name="Fulltext"><file name="Collection.php" hash="b9e2e4884a7ecee0000e6a41c0e6d3e2"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="0bfecbdff2458785a287c3f1de23ed56"/><file name="Price.php" hash="38d1acaa4478d678d4bb20704a81b760"/></dir></dir><dir name="Product"><file name="Collection.php" hash="6072bf2a7a4713f3db2fa96014e7453a"/><file name="CollectionTag.php" hash="e89307da7c26ee153c3f9dead94dcd13"/></dir><file name="Store.php" hash="8dd81bf57d38af2b4640bbf14063d3f8"/></dir><file name="Searchanise.php" hash="507813e92908000315aabc4256c5a05c"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Searchanise"><file name="TypeAsync.php" hash="11d1aa481094ccbeab365b1fed33440d"/></dir></dir></dir></dir><dir name="Tag"><file name="Relation.php" hash="598f81fd8b2ac77baf24211c2ed03e55"/></dir></dir><dir name="controllers"><file name="AdvancedController.php" hash="7500f6075382cd8a14816e424da2348f"/><file name="AsyncController.php" hash="7230f285e302910b3d8387da10cbcf3a"/><file name="CategoryController.php" hash="909f99c5cf7f85405fc76ebe976c2c8e"/><file name="IndexController.php" hash="e3234ca51a7669741e29ff7c38789989"/><file name="InfoController.php" hash="7a6010b6e3cfdce070f25e0b8136a9d7"/><file name="OptionsController.php" hash="56785c8ea24472c2047268b2d9e8e878"/><file name="ProductController.php" hash="6633fde99f35ffeaa05884f0e0d98da7"/><file name="ResultController.php" hash="4b00515cc47593704ea1178d7b44d48e"/><file name="ResyncController.php" hash="0612f929d375427326821dfc12186be8"/><file name="SignupController.php" hash="80f87a63d6272f98a068dde35f1d140e"/></dir><dir name="etc"><file name="config.xml" hash="4ffdb4cb4c99bc5176b2127f143cc08c"/><file name="config_without_search.xml" hash="fe5e574fbd8b027b2cefc55297c5205b"/><file name="system.xml" hash="a6b2e082fe45706b86b8da0fe02d4374"/></dir><dir name="sql"><dir name="searchanise_setup"><file name="mysql4-install-0.1.0.php" hash="754324c8783e9cc24de86396e1587e73"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="searchanise"><file name="dashboard.phtml" hash="8b9793a009151951e1e1f8e4cecb4db2"/></dir></dir><dir name="layout"><file name="searchanise.xml" hash="68baa611d05db05f8816ea2a8260e961"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="searchanise.xml" hash="5e904fee02cbd42324a297d513b9f582"/></dir></dir></dir><dir name="default"><dir name="default"><dir name="template"><dir name="catalogsearch"><file name="form.mini.phtml" hash="fcf8e06e66801a36c96f20ca5d187123"/></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Simtech_Searchanise.xml" hash="04148681a6648bd370ab62140cbf2ad9"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Simtech_Searchanise.csv" hash="1bdb7fddc596dac1460bc3054c425187"/></dir></target></contents>
32
  <compatible/>
33
  <dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
34
  </package>