Simtech_Searchanise - Version 3.1.1

Version Notes

[+] Search results widget was added.

[+] Notice about a new version of extension was added.

[*] Compatibility with third-party addons was improved.

[*] Indexation status check was improved.

[*] Redundant product attributes are no longer collected.

[!] Searching by a product title and description could show incorrect search results on the advanced search page. Fixed.

Download this release

Release Info

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


Code changes from version 3.1.0 to 3.1.1

Files changed (23) hide show
  1. app/code/community/Simtech/Searchanise/Block/Jsinit.php +10 -7
  2. app/code/community/Simtech/Searchanise/Block/Product/List/Toolbar.php +1 -18
  3. app/code/community/Simtech/Searchanise/Block/Resultwidget.php +41 -0
  4. app/code/community/Simtech/Searchanise/Helper/ApiCategories.php +15 -24
  5. app/code/community/Simtech/Searchanise/Helper/ApiProducts.php +105 -188
  6. app/code/community/Simtech/Searchanise/Helper/ApiSe.php +53 -67
  7. app/code/community/Simtech/Searchanise/Helper/Data.php +34 -58
  8. app/code/community/Simtech/Searchanise/Model/Layer/Filter/Category.php +0 -68
  9. app/code/community/Simtech/Searchanise/Model/Layer/Filter/Price.php +0 -51
  10. app/code/community/Simtech/Searchanise/Model/Observer.php +59 -0
  11. app/code/community/Simtech/Searchanise/Model/Queue.php +1 -0
  12. app/code/community/Simtech/Searchanise/Model/Request.php +8 -12
  13. app/code/community/Simtech/Searchanise/Model/Resource/Fulltext/Collection.php +32 -0
  14. app/code/community/Simtech/Searchanise/Model/Resource/Layer/Filter/Attribute.php +15 -4
  15. app/code/community/Simtech/Searchanise/Model/Searchanise.php +8 -15
  16. app/code/community/Simtech/Searchanise/controllers/InfoController.php +1 -3
  17. app/code/community/Simtech/Searchanise/controllers/ResultController.php +21 -0
  18. app/code/community/Simtech/Searchanise/etc/config.xml +25 -11
  19. app/code/community/Simtech/Searchanise/etc/config_without_search.xml +25 -12
  20. app/design/adminhtml/default/default/template/searchanise/dashboard.phtml +8 -2
  21. app/design/frontend/base/default/layout/searchanise.xml +18 -1
  22. app/design/frontend/base/default/template/searchanise/resultwidget.phtml +47 -0
  23. package.xml +10 -23
app/code/community/Simtech/Searchanise/Block/Jsinit.php CHANGED
@@ -57,17 +57,11 @@ class Simtech_Searchanise_Block_Jsinit extends Mage_Core_Block_Text
57
  $restrictBy = '';
58
 
59
  $seServiceUrl = Mage::helper('searchanise/ApiSe')->getServiceUrl();
60
- $priceFormat = Mage::helper('searchanise/ApiSe')->getPriceFormat($store);
61
  $searchWidgetsLink = Mage::helper('searchanise/ApiSe')->getSearchWidgetsLink(false);
62
 
63
  $union .= " Searchanise.AutoCmpParams.union.price = {};";
64
  $union .= " Searchanise.AutoCmpParams.union.price.min = '" . Mage::helper('searchanise/ApiSe')->getCurLabelForPricesUsergroup() . "';";
65
 
66
- $minQuantityDecimals = Mage::helper('searchanise/ApiSe')->getMinQuantityDecimals();
67
- if (!empty($minQuantityDecimals)) {
68
- $restrictBy .= "Searchanise.AutoCmpParams.restrictBy.quantity_decimals = '{$minQuantityDecimals},';";
69
- }
70
-
71
  $showOutOfStock = Mage::getStoreConfigFlag(Mage_CatalogInventory_Helper_Data::XML_PATH_SHOW_OUT_OF_STOCK);
72
  if ($showOutOfStock) {
73
  // nothing
@@ -75,6 +69,7 @@ class Simtech_Searchanise_Block_Jsinit extends Mage_Core_Block_Text
75
  $restrictBy .= "Searchanise.AutoCmpParams.restrictBy.is_in_stock = '1';";
76
  }
77
 
 
78
  $priceFormat['after'] = $priceFormat['after'] ? 'true' : 'false';
79
 
80
  $html .=
@@ -95,6 +90,14 @@ class Simtech_Searchanise_Block_Jsinit extends Mage_Core_Block_Text
95
  Searchanise.options = {};
96
  Searchanise.AdditionalSearchInputs = '#name,#description,#sku';
97
 
 
 
 
 
 
 
 
 
98
  Searchanise.options.PriceFormat = {
99
  decimals_separator: '" . addslashes($priceFormat['decimals_separator']) . "',
100
  thousands_separator: '" . addslashes($priceFormat['thousands_separator']) . "',
@@ -133,4 +136,4 @@ class Simtech_Searchanise_Block_Jsinit extends Mage_Core_Block_Text
133
 
134
  return $html;
135
  }
136
- }
57
  $restrictBy = '';
58
 
59
  $seServiceUrl = Mage::helper('searchanise/ApiSe')->getServiceUrl();
 
60
  $searchWidgetsLink = Mage::helper('searchanise/ApiSe')->getSearchWidgetsLink(false);
61
 
62
  $union .= " Searchanise.AutoCmpParams.union.price = {};";
63
  $union .= " Searchanise.AutoCmpParams.union.price.min = '" . Mage::helper('searchanise/ApiSe')->getCurLabelForPricesUsergroup() . "';";
64
 
 
 
 
 
 
65
  $showOutOfStock = Mage::getStoreConfigFlag(Mage_CatalogInventory_Helper_Data::XML_PATH_SHOW_OUT_OF_STOCK);
66
  if ($showOutOfStock) {
67
  // nothing
69
  $restrictBy .= "Searchanise.AutoCmpParams.restrictBy.is_in_stock = '1';";
70
  }
71
 
72
+ $priceFormat = Mage::helper('searchanise/ApiSe')->getPriceFormat($store);
73
  $priceFormat['after'] = $priceFormat['after'] ? 'true' : 'false';
74
 
75
  $html .=
90
  Searchanise.options = {};
91
  Searchanise.AdditionalSearchInputs = '#name,#description,#sku';
92
 
93
+ Searchanise.options.ResultsDiv = '#snize_results';
94
+ Searchanise.options.ResultsFormPath = '" . Mage::helper('searchanise')->getResultsFormPath() . "';
95
+ Searchanise.options.ResultsFallbackUrl = '" . $this->getUrl('catalogsearch/result') . "?q=';
96
+ Searchanise.ResultsParams = {};
97
+ Searchanise.ResultsParams.facetBy = {};
98
+ Searchanise.ResultsParams.facetBy.price = {};
99
+ Searchanise.ResultsParams.facetBy.price.type = 'slider';
100
+
101
  Searchanise.options.PriceFormat = {
102
  decimals_separator: '" . addslashes($priceFormat['decimals_separator']) . "',
103
  thousands_separator: '" . addslashes($priceFormat['thousands_separator']) . "',
136
 
137
  return $html;
138
  }
139
+ }
app/code/community/Simtech/Searchanise/Block/Product/List/Toolbar.php CHANGED
@@ -170,23 +170,6 @@ class Simtech_Searchanise_Block_Product_List_Toolbar extends Mage_Catalog_Block_
170
  return 1;
171
  }
172
 
173
- public function getTotalNum()
174
- {
175
- if (!Mage::helper('searchanise/ApiSe')->checkSearchaniseResult(true)) {
176
- return parent::getTotalNum();
177
- }
178
-
179
- $collection = $this->getCollection();
180
-
181
- if ((!method_exists($collection, 'checkSearchaniseResult')) || (!$collection->checkSearchaniseResult())) {
182
- return parent::getTotalNum();
183
- }
184
-
185
- return $collection
186
- ->getSearchaniseRequest()
187
- ->getTotalProduct();
188
- }
189
-
190
  public function setCollection($collection)
191
  {
192
  if (!Mage::helper('searchanise/ApiSe')->checkSearchaniseResult(true)) {
@@ -217,4 +200,4 @@ class Simtech_Searchanise_Block_Product_List_Toolbar extends Mage_Catalog_Block_
217
 
218
  return $this;
219
  }
220
- }
170
  return 1;
171
  }
172
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
173
  public function setCollection($collection)
174
  {
175
  if (!Mage::helper('searchanise/ApiSe')->checkSearchaniseResult(true)) {
200
 
201
  return $this;
202
  }
203
+ }
app/code/community/Simtech/Searchanise/Block/Resultwidget.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /***************************************************************************
3
+ * *
4
+ * (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev *
5
+ * *
6
+ * This is commercial software, only users who have purchased a valid *
7
+ * license and accept to the terms of the License Agreement can install *
8
+ * and use this program. *
9
+ * *
10
+ ****************************************************************************
11
+ * PLEASE READ THE FULL TEXT OF THE SOFTWARE LICENSE AGREEMENT IN THE *
12
+ * "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE. *
13
+ ****************************************************************************/
14
+ class Simtech_Searchanise_Block_Resultwidget extends Mage_Core_Block_Template
15
+ {
16
+
17
+ /**
18
+ * Prepare layout
19
+ *
20
+ * @return Simtech_Searchanise_Block_Searchresult
21
+ */
22
+ protected function _prepareLayout()
23
+ {
24
+ $breadcrumbs = $this->getLayout()->getBlock('breadcrumbs');
25
+ if ($breadcrumbs) {
26
+ $title = $this->__("Search results");
27
+
28
+ $breadcrumbs->addCrumb('home', array(
29
+ 'label' => $this->__('Home'),
30
+ 'title' => $this->__('Go to Home Page'),
31
+ 'link' => Mage::getBaseUrl()
32
+ ))->addCrumb('searchanise', array(
33
+ 'label' => $title,
34
+ 'title' => $title
35
+ ));
36
+ }
37
+
38
+ return parent::_prepareLayout();
39
+ }
40
+
41
+ }
app/code/community/Simtech/Searchanise/Helper/ApiCategories.php CHANGED
@@ -196,33 +196,24 @@ class Simtech_Searchanise_Helper_ApiCategories extends Mage_Core_Helper_Data
196
  return $arrCategories;
197
  }
198
 
199
- /**
200
- *
201
- *
202
- * @param array $arr_cat
203
- * @param Mage_Catalog_Model_Category $category
204
- * @return array
205
- */
206
- public static function getAllChildrenCategories(&$arr_cat, $category, $fl_include_cur_cat = true)
207
  {
208
- if (empty($arr_cat)) {
209
- $arr_cat = array();
210
- }
211
-
212
- if (!empty($category)) {
213
- if ($fl_include_cur_cat == true) {
214
- $arr_cat[] = $category->getId();
215
- }
216
-
217
- $children_cat = $category->getChildrenCategories();
218
-
219
- if (!empty($children_cat)) {
220
- foreach ($children_cat as $cat) {
221
- self::getAllChildrenCategories($arr_cat, $cat, $fl_include_cur_cat);
222
  }
223
  }
224
  }
225
-
226
- return $arr_cat;
227
  }
228
  }
196
  return $arrCategories;
197
  }
198
 
199
+ public static function getAllChildrenCategories($catId)
 
 
 
 
 
 
 
200
  {
201
+ $categoryIds = array();
202
+ $categories = Mage::getModel('catalog/category')
203
+ ->getCollection()
204
+ ->setStoreId(Mage::app()->getStore()->getId())
205
+ ->addFieldToFilter('entity_id', $catId)
206
+ ->load()
207
+ ;
208
+
209
+ if (!empty($categories)) {
210
+ foreach ($categories as $cat) {
211
+ if (!empty($cat)) {
212
+ $categoryIds = $cat->getAllChildren(true);
 
 
213
  }
214
  }
215
  }
216
+
217
+ return $categoryIds;
218
  }
219
  }
app/code/community/Simtech/Searchanise/Helper/ApiProducts.php CHANGED
@@ -14,6 +14,7 @@
14
 
15
  class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
16
  {
 
17
  const WEIGHT_SHORT_DESCRIPTION = 40;
18
  const WEIGHT_DESCRIPTION = 40;
19
  const WEIGHT_DESCRIPTION_GROUPED = 30;
@@ -445,7 +446,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
445
  if (!isset($arrTextValues[$key]) && !is_null($product->getData($attributeCode))) {
446
  $values = array();
447
  // Dependency of store already exists
448
- $textValues = $product->getResource()->getAttribute($attributeCode)->getFrontend()->getValue($product);
449
 
450
  if ($textValues != '') {
451
  if ($inputType == 'multiselect') {
@@ -491,9 +492,6 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
491
  } elseif (is_array($value) && empty($value)) {
492
  // Nothing.
493
 
494
- } elseif ($productKey == 0 && ($attributeCode == 'name' || $attributeCode == 'sku')) {// $productKey=0 - parent product
495
- // Nothing. Prevent dublicate.
496
-
497
  } else {
498
  if (!in_array($value, $values)) {
499
  $values[] = $value;
@@ -547,7 +545,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
547
  private static function _generateProductAttributes(&$item, $product, $childrenProducts = null, $unitedProducts = null, $store = null)
548
  {
549
  $attributes = self::getProductAttributes(Simtech_Searchanise_Model_Queue::NOT_DATA, $store);
550
-
551
  if ($attributes) {
552
  $requiredAttributes = self::_getRequiredAttributes();
553
  $useFullFeed = Mage::helper('searchanise/ApiSe')->getUseFullFeed();
@@ -597,29 +595,16 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
597
  } elseif ($attributeCode == 'group_price') {
598
  // nothing
599
  // fixme in the future if need
600
-
601
- } elseif ($attributeCode == 'short_description') {
602
- if (!empty($value)) {// if not empty value already sent in summary
603
- if (count($unitedValues) > 1) {
604
- $item[$attributeCode] = array_slice($unitedValues, 1);
605
- }
606
-
607
- } elseif (!empty($unitedValues)) {
608
- $item[$attributeCode] = $unitedValues;
609
 
610
- } else {
611
- // nothing
612
- }
613
-
614
- } elseif ($attributeCode == 'description') {//$product->getData('short_description')
615
- $short_description = $product->getData('short_description');
616
-
617
- if (!empty($short_description)) {
618
- $item['full_description'] = $value;
619
  }
620
 
 
 
621
  if (count($unitedValues) > 1) {
622
- $item['se_grouped_' . $attributeCode] = array_slice($unitedValues, 1);
623
  }
624
 
625
  } elseif (
@@ -634,11 +619,6 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
634
  $item[$attributeCode] = $unitedValues;
635
 
636
  } elseif ($inputType == 'select' || $inputType == 'multiselect') {
637
- // <id_values>
638
- if ($useFullFeed || $isVisibleInAdvancedSearch || $usedForSortBy || $isFilterableInSearch) {
639
- $item[$attributeName] = $unitedValues;
640
- }
641
-
642
  // <text_values>
643
  $unitedTextValues = self::_getProductAttributeTextValues($unitedProducts, $attributeCode, $inputType, $store);
644
  $item[$attributeCode] = $unitedTextValues;
@@ -688,96 +668,61 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
688
 
689
  $item['id'] = $product->getId();
690
  $item['title'] = $product->getName();
691
-
692
- $summary = $product->getData('short_description');
693
-
694
- if ($summary == '') {
695
- $summary = $product->getData('description');
696
- }
697
-
698
- $item['summary'] = $summary;
699
-
700
- $productUrl = $product->getProductUrl(false);
701
- $item['link'] = $productUrl;
702
  $item['product_code'] = $product->getSku();
703
 
704
  self::_generateProductPrices($item, $product, $childrenProducts, $store);
705
 
706
- // <quantity>
707
- {
708
- $quantity = self::getProductQty($product, $store, $unitedProducts);
709
 
710
- $item['quantity'] = ceil($quantity);
711
-
712
- $item['is_in_stock'] = $quantity > 0;
713
- $quantity = round($quantity, Mage::helper('searchanise/ApiSe')->getFloatPrecision());
714
- $item['quantity_decimals'] = $quantity;
 
715
  }
716
- // </quantity>
717
-
718
- // <image_link>
719
- {
720
- // Show images without white field
721
- // Example: image 360 x 535 => 47 х 70
722
- $flagKeepFrame = false;
723
- $image = self::getProductImageLink($product, $flagKeepFrame);
724
-
725
- if ($image) {
726
- $imageLink = '' . $image;
727
 
728
- if ($imageLink != '') {
729
- $item['image_link'] = '' . $imageLink;
730
- }
 
 
731
  }
732
  }
733
- // </image_link>
734
-
735
  self::_generateProductAttributes($item, $product, $childrenProducts, $unitedProducts, $store);
736
 
737
- // <categories>
738
- {
739
-
740
- $categoryIds = $product->getCategoryIds();
741
- if (!empty($categoryIds)) {
742
- $categoryNames = array();
743
-
744
- foreach ($categoryIds as $catKey => $categoryId) {
745
- // fixme int the future
746
- // check value for other language
747
- $category = Mage::getModel('catalog/category')->load($categoryId);
748
- if ($category) {
749
- $categoryNames[] = $category->getName();
750
- }
751
  }
752
-
753
- $item['category_ids'] = $categoryIds;
754
- $item['categories'] = $categoryNames;
755
  }
756
- }
757
- // </categories>
758
 
759
- // <tags>
760
- {
761
- $tagIds = array();
762
- $tagNames = array();
763
 
764
- $tags = self::getTagCollection($product, $store);
765
-
766
- if ($tags && count($tags) > 0) {
767
- foreach ($tags as $tag) {
768
- if ($tag) {
769
- $tagIds[] = $tag->getId();
770
- $tagNames[] = $tag->getName();
771
- }
772
  }
773
  }
 
774
 
775
- if (!empty($tagIds)) {
776
- $item['tag_ids'] = $tagIds;
777
- $item['tags'] = $tagNames;
778
- }
779
  }
780
- // </tags>
781
 
782
  return $item;
783
  }
@@ -842,18 +787,9 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
842
  }
843
 
844
  if (isset($item['type'])) {
845
- $item['title'] = $attribute->getData('frontend_label');
846
- $item['position'] = $attribute->getPosition();
847
-
848
- $attributeCode = $attribute->getAttributeCode();
849
-
850
- if ($attributeCode == 'price') {
851
- $labelAttribute = 'price';
852
- } else {
853
- $labelAttribute = 'attribute_' . $attribute->getId();
854
- }
855
-
856
- $item['attribute'] = $labelAttribute;
857
  }
858
  }
859
 
@@ -1135,20 +1071,14 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1135
 
1136
  private static function _getRequiredAttributes()
1137
  {
1138
- static $requiredAttributes;
1139
-
1140
- if (!isset($requiredAttributes)) {
1141
- $requiredAttributes = array(
1142
- 'status',
1143
- 'visibility',
1144
- 'price',
1145
- );
1146
- }
1147
-
1148
- return $requiredAttributes;
1149
  }
1150
 
1151
- public static function getSchemaAttribute($attribute)
1152
  {
1153
  $items = array();
1154
 
@@ -1169,9 +1099,9 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1169
  return $items;
1170
  }
1171
 
1172
- $name = $attribute->getAttributeCode();
1173
- $title = $attribute->getData('frontend_label');
1174
  $type = '';
 
 
1175
  $sorting = $usedForSortBy ? 'Y' : 'N';
1176
  $textSearch = $isSearchable ? 'Y' : 'N';
1177
  $attributeWeight = 0;
@@ -1184,6 +1114,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1184
  } elseif ($attributeCode == 'status' || $attributeCode == 'visibility') {
1185
  $type = 'text';
1186
  $textSearch = 'N';
 
1187
  } elseif ($attributeCode == 'has_options') {
1188
  } elseif ($attributeCode == 'required_options') {
1189
  } elseif ($attributeCode == 'custom_layout_update') {
@@ -1193,11 +1124,16 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1193
  } elseif ($attributeCode == 'thumbnail_label') {
1194
  } elseif ($attributeCode == 'tax_class_id') {
1195
  } elseif ($attributeCode == 'url_key') { // seo name
 
1196
  // <system_attributes>
1197
 
1198
- } elseif ($attributeCode == 'group_price') {
1199
- // nothing
1200
- // fixme in the future if need
 
 
 
 
1201
  } elseif (
1202
  $attributeCode == 'short_description' ||
1203
  $attributeCode == 'description' ||
@@ -1206,9 +1142,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1206
  $attributeCode == 'meta_keyword') {
1207
 
1208
  if ($isSearchable) {
1209
- if ($attributeCode == 'short_description') {
1210
- $attributeWeight = self::WEIGHT_SHORT_DESCRIPTION;
1211
- } elseif ($attributeCode == 'description') {
1212
  $attributeWeight = self::WEIGHT_DESCRIPTION;
1213
  } elseif ($attributeCode == 'meta_title') {
1214
  $attributeWeight = self::WEIGHT_META_TITLE;
@@ -1224,8 +1158,8 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1224
  if ($attributeCode == 'description') {
1225
  $name = 'full_description';
1226
  $items[] = array(
1227
- 'name' => 'se_grouped_' . $attributeCode,
1228
- 'title' => $attribute->getData('frontend_label') . ' - Grouped',
1229
  'type' => $type,
1230
  'weight' => $isSearchable ? self:: WEIGHT_DESCRIPTION_GROUPED : 0,
1231
  'text_search' => $textSearch,
@@ -1237,18 +1171,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1237
 
1238
  } elseif ($inputType == 'select' || $inputType == 'multiselect') {
1239
  $type = 'text';
1240
- $items[] = array(
1241
- 'name' => $name,
1242
- 'title' => $title,
1243
- 'type' => $type,
1244
- 'sorting' => $sorting,
1245
- 'weight' => $isSearchable ? self::WEIGHT_SELECT_ATTRIBUTES : 0,
1246
- 'text_search' => $textSearch,
1247
- );
1248
- $name = $attributeName;
1249
- $title = $title . ' - IDs';
1250
- $sorting = 'N';
1251
- $textSearch = 'N';
1252
 
1253
  } elseif ($inputType == 'text' || $inputType == 'textarea') {
1254
  if ($isSearchable) {
@@ -1285,6 +1208,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1285
  if ($facet = self::_generateFacetFromFilter($attribute)) {
1286
  $item['facet'] = $facet;
1287
  }
 
1288
  $items[] = $item;
1289
  }
1290
 
@@ -1314,70 +1238,68 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1314
  return $items;
1315
  }
1316
 
1317
- public static function getSchemaCategories()
1318
  {
1319
- static $items;
1320
-
1321
- if (!isset($items)) {
1322
- $items[] = array(
1323
  'name' => 'categories',
1324
- 'title' => 'Categories',
1325
  'type' => 'text',
1326
  'weight' => self::WEIGHT_CATEGORIES,
1327
  'text_search' => 'Y',
 
1328
  );
1329
-
1330
- $items[] = array(
 
 
 
 
 
 
 
1331
  'name' => 'category_ids',
1332
- 'title' => 'Categories - IDs',
1333
  'type' => 'text',
1334
  'weight' => 0,
1335
  'text_search' => 'N',
1336
- 'facet' => self::_generateFacetFromCustom('Category', 0, 'category_ids', 'select'),
1337
  );
1338
  }
1339
- return $items;
 
1340
  }
1341
 
1342
  public static function getSchemaTags()
1343
  {
1344
- static $items;
1345
-
1346
- if (!isset($items)) {
1347
- $items[] = array(
1348
  'name' => 'tags',
1349
- 'title' => 'Tags',
1350
  'type' => 'text',
1351
  'weight' => self::WEIGHT_TAGS,
1352
  'text_search' => 'Y',
1353
- );
1354
-
1355
- $items[] = array(
1356
- 'name' => 'tag_ids',
1357
- 'title' => 'Tags - IDs',
1358
- 'type' => 'text',
1359
- 'weight' => 0,
1360
- 'text_search' => 'N',
1361
- 'facet' => self::_generateFacetFromCustom('Tag', 0, 'tag_ids', 'select'),
1362
- );
1363
- }
1364
- return $items;
1365
  }
1366
 
1367
- public static function getSchema($attributeIds = Simtech_Searchanise_Model_Queue::NOT_DATA, $store = null, $isPrice = false)
1368
  {
1369
- static $schema;
1370
 
1371
- if (isset($schema)) {
1372
- return $schema;
1373
  }
1374
 
 
 
1375
  $schema = array();
1376
 
1377
  if ($attributeIds === Simtech_Searchanise_Model_Queue::NOT_DATA) {
1378
  $schema = self::getSchemaCustomerGroupsPrices();
1379
 
1380
- if ($items = self::getSchemaCategories()) {
1381
  foreach ($items as $keyItem => $item) {
1382
  $schema[] = $item;
1383
  }
@@ -1390,14 +1312,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1390
  }
1391
  $schema[] = array(
1392
  'name' => 'is_in_stock',
1393
- 'title' => 'Stock Availability',
1394
- 'type' => 'text',
1395
- 'weight' => 0,
1396
- 'text_search' => 'N',
1397
- );
1398
- $schema[] = array(
1399
- 'name' => 'quantity_decimals',
1400
- 'title' => 'Quantity - decimals',
1401
  'type' => 'text',
1402
  'weight' => 0,
1403
  'text_search' => 'N',
@@ -1406,7 +1321,7 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1406
 
1407
  if ($attributes = self::getProductAttributes($attributeIds, $store, $isPrice)) {
1408
  foreach ($attributes as $attribute) {
1409
- if ($items = self::getSchemaAttribute($attribute)) {
1410
  foreach ($items as $keyItem => $item) {
1411
  $schema[] = $item;
1412
  }
@@ -1414,6 +1329,8 @@ class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
1414
  }
1415
  }
1416
 
 
 
1417
  return $schema;
1418
  }
1419
 
14
 
15
  class Simtech_Searchanise_Helper_ApiProducts extends Mage_Core_Helper_Data
16
  {
17
+ const WEIGHT_SHORT_TITLE = 100;
18
  const WEIGHT_SHORT_DESCRIPTION = 40;
19
  const WEIGHT_DESCRIPTION = 40;
20
  const WEIGHT_DESCRIPTION_GROUPED = 30;
446
  if (!isset($arrTextValues[$key]) && !is_null($product->getData($attributeCode))) {
447
  $values = array();
448
  // Dependency of store already exists
449
+ $textValues = $product->getResource()->getAttribute($attributeCode)->setStoreId($store->getId())->getFrontend()->getValue($product);
450
 
451
  if ($textValues != '') {
452
  if ($inputType == 'multiselect') {
492
  } elseif (is_array($value) && empty($value)) {
493
  // Nothing.
494
 
 
 
 
495
  } else {
496
  if (!in_array($value, $values)) {
497
  $values[] = $value;
545
  private static function _generateProductAttributes(&$item, $product, $childrenProducts = null, $unitedProducts = null, $store = null)
546
  {
547
  $attributes = self::getProductAttributes(Simtech_Searchanise_Model_Queue::NOT_DATA, $store);
548
+
549
  if ($attributes) {
550
  $requiredAttributes = self::_getRequiredAttributes();
551
  $useFullFeed = Mage::helper('searchanise/ApiSe')->getUseFullFeed();
595
  } elseif ($attributeCode == 'group_price') {
596
  // nothing
597
  // fixme in the future if need
 
 
 
 
 
 
 
 
 
598
 
599
+ } elseif ($attributeCode == 'short_description' || $attributeCode == 'name' || $attributeCode == 'sku') {
600
+ if (count($unitedValues) > 1) {
601
+ $item['se_grouped_' . $attributeCode] = array_slice($unitedValues, 1);
 
 
 
 
 
 
602
  }
603
 
604
+ } elseif ($attributeCode == 'description') {
605
+ $item['full_description'] = $value;
606
  if (count($unitedValues) > 1) {
607
+ $item['se_grouped_full_' . $attributeCode] = array_slice($unitedValues, 1);
608
  }
609
 
610
  } elseif (
619
  $item[$attributeCode] = $unitedValues;
620
 
621
  } elseif ($inputType == 'select' || $inputType == 'multiselect') {
 
 
 
 
 
622
  // <text_values>
623
  $unitedTextValues = self::_getProductAttributeTextValues($unitedProducts, $attributeCode, $inputType, $store);
624
  $item[$attributeCode] = $unitedTextValues;
668
 
669
  $item['id'] = $product->getId();
670
  $item['title'] = $product->getName();
671
+ $item['summary'] = $product->getData('short_description');
672
+ $item['link'] = $product->getProductUrl(false);
 
 
 
 
 
 
 
 
 
673
  $item['product_code'] = $product->getSku();
674
 
675
  self::_generateProductPrices($item, $product, $childrenProducts, $store);
676
 
677
+ $quantity = self::getProductQty($product, $store, $unitedProducts);
678
+ $item['quantity'] = ceil($quantity);
679
+ $item['is_in_stock'] = $quantity > 0;
680
 
681
+ // Show images without white field
682
+ // Example: image 360 x 535 => 47 х 70
683
+ if (Mage::helper('searchanise/ApiSe')->getResultsWidgetEnabled($store)) {
684
+ $image = self::getProductImageLink($product, false, 160, 160);
685
+ } else {
686
+ $image = self::getProductImageLink($product, false, 70, 70);
687
  }
 
 
 
 
 
 
 
 
 
 
 
688
 
689
+ if ($image) {
690
+ $imageLink = '' . $image;
691
+
692
+ if ($imageLink != '') {
693
+ $item['image_link'] = '' . $imageLink;
694
  }
695
  }
696
+
 
697
  self::_generateProductAttributes($item, $product, $childrenProducts, $unitedProducts, $store);
698
 
699
+ $categoryIds = $product->getCategoryIds();
700
+ if (!empty($categoryIds)) {
701
+ $categoryNames = array();
702
+ foreach ($categoryIds as $catKey => $categoryId) {
703
+ $category = Mage::getModel('catalog/category')->load($categoryId);
704
+ if ($category) {
705
+ $categoryNames[] = $category->getName();
 
 
 
 
 
 
 
706
  }
 
 
 
707
  }
 
 
708
 
709
+ $item['category_ids'] = $categoryIds;
710
+ $item['categories'] = $categoryNames;
711
+ }
 
712
 
713
+ $tagNames = array();
714
+ $tags = self::getTagCollection($product, $store);
715
+ if ($tags && count($tags) > 0) {
716
+ foreach ($tags as $tag) {
717
+ if ($tag) {
718
+ $tagNames[] = $tag->getName();
 
 
719
  }
720
  }
721
+ }
722
 
723
+ if (!empty($tagNames)) {
724
+ $item['tags'] = $tagNames;
 
 
725
  }
 
726
 
727
  return $item;
728
  }
787
  }
788
 
789
  if (isset($item['type'])) {
790
+ $item['title'] = $attribute->getStoreLabel();
791
+ $item['position'] = ($inputType == 'price')? $attribute->getPosition() : $attribute->getPosition() + 20;
792
+ $item['attribute'] = $attribute->getAttributeCode();
 
 
 
 
 
 
 
 
 
793
  }
794
  }
795
 
1071
 
1072
  private static function _getRequiredAttributes()
1073
  {
1074
+ return array(
1075
+ 'status',
1076
+ 'visibility',
1077
+ 'price',
1078
+ );
 
 
 
 
 
 
1079
  }
1080
 
1081
+ public static function getSchemaAttribute($attribute, $store = null)
1082
  {
1083
  $items = array();
1084
 
1099
  return $items;
1100
  }
1101
 
 
 
1102
  $type = '';
1103
+ $name = $attribute->getAttributeCode();
1104
+ $title = $attribute->getStoreLabel();
1105
  $sorting = $usedForSortBy ? 'Y' : 'N';
1106
  $textSearch = $isSearchable ? 'Y' : 'N';
1107
  $attributeWeight = 0;
1114
  } elseif ($attributeCode == 'status' || $attributeCode == 'visibility') {
1115
  $type = 'text';
1116
  $textSearch = 'N';
1117
+
1118
  } elseif ($attributeCode == 'has_options') {
1119
  } elseif ($attributeCode == 'required_options') {
1120
  } elseif ($attributeCode == 'custom_layout_update') {
1124
  } elseif ($attributeCode == 'thumbnail_label') {
1125
  } elseif ($attributeCode == 'tax_class_id') {
1126
  } elseif ($attributeCode == 'url_key') { // seo name
1127
+ } elseif ($attributeCode == 'group_price') {
1128
  // <system_attributes>
1129
 
1130
+ } elseif ($attributeCode == 'name' || $attributeCode == 'sku' || $attributeCode == 'short_description') {
1131
+ $type = 'text';
1132
+ $name = 'se_grouped_' . $attributeCode;
1133
+ $sorting = 'N';
1134
+ $title = $attribute->getStoreLabel() . ' - Grouped';
1135
+ $attributeWeight = ($attributeCode == 'short_description')? self::WEIGHT_SHORT_DESCRIPTION : self::WEIGHT_SHORT_TITLE;
1136
+
1137
  } elseif (
1138
  $attributeCode == 'short_description' ||
1139
  $attributeCode == 'description' ||
1142
  $attributeCode == 'meta_keyword') {
1143
 
1144
  if ($isSearchable) {
1145
+ if ($attributeCode == 'description') {
 
 
1146
  $attributeWeight = self::WEIGHT_DESCRIPTION;
1147
  } elseif ($attributeCode == 'meta_title') {
1148
  $attributeWeight = self::WEIGHT_META_TITLE;
1158
  if ($attributeCode == 'description') {
1159
  $name = 'full_description';
1160
  $items[] = array(
1161
+ 'name' => 'se_grouped_full_' . $attributeCode,
1162
+ 'title' => $attribute->getStoreLabel() . ' - Grouped',
1163
  'type' => $type,
1164
  'weight' => $isSearchable ? self:: WEIGHT_DESCRIPTION_GROUPED : 0,
1165
  'text_search' => $textSearch,
1171
 
1172
  } elseif ($inputType == 'select' || $inputType == 'multiselect') {
1173
  $type = 'text';
1174
+ $attributeWeight = $isSearchable ? self::WEIGHT_SELECT_ATTRIBUTES : 0;
 
 
 
 
 
 
 
 
 
 
 
1175
 
1176
  } elseif ($inputType == 'text' || $inputType == 'textarea') {
1177
  if ($isSearchable) {
1208
  if ($facet = self::_generateFacetFromFilter($attribute)) {
1209
  $item['facet'] = $facet;
1210
  }
1211
+
1212
  $items[] = $item;
1213
  }
1214
 
1238
  return $items;
1239
  }
1240
 
1241
+ public static function getSchemaCategories($store)
1242
  {
1243
+ $category_schema = array();
1244
+ if (Mage::helper('searchanise/ApiSe')->getResultsWidgetEnabled($store)) {
1245
+ $category_schema[] = array(
 
1246
  'name' => 'categories',
1247
+ 'title' => Mage::helper('catalog')->__('Category'),
1248
  'type' => 'text',
1249
  'weight' => self::WEIGHT_CATEGORIES,
1250
  'text_search' => 'Y',
1251
+ 'facet' => self::_generateFacetFromCustom(Mage::helper('catalog')->__('Category'), 10, 'categories', 'select'),
1252
  );
1253
+ } else {
1254
+ $category_schema[] = array(
1255
+ 'name' => 'categories',
1256
+ 'title' => Mage::helper('catalog')->__('Category'),
1257
+ 'type' => 'text',
1258
+ 'weight' => self::WEIGHT_CATEGORIES,
1259
+ 'text_search' => 'Y',
1260
+ );
1261
+ $category_schema[] = array(
1262
  'name' => 'category_ids',
1263
+ 'title' => Mage::helper('catalog')->__('Category') . ' - IDs',
1264
  'type' => 'text',
1265
  'weight' => 0,
1266
  'text_search' => 'N',
1267
+ 'facet' => self::_generateFacetFromCustom(Mage::helper('catalog')->__('Category'), 10, 'category_ids', 'select'),
1268
  );
1269
  }
1270
+
1271
+ return $category_schema;
1272
  }
1273
 
1274
  public static function getSchemaTags()
1275
  {
1276
+ return array(
1277
+ array(
 
 
1278
  'name' => 'tags',
1279
+ 'title' => Mage::helper('catalog')->__('Product Tags'),
1280
  'type' => 'text',
1281
  'weight' => self::WEIGHT_TAGS,
1282
  'text_search' => 'Y',
1283
+ )
1284
+ );
 
 
 
 
 
 
 
 
 
 
1285
  }
1286
 
1287
+ public static function getSchema($attributeIds = Simtech_Searchanise_Model_Queue::NOT_DATA, $store, $isPrice = false)
1288
  {
1289
+ static $schemas;
1290
 
1291
+ if (isset($schemas[$store->getId()])) {
1292
+ return $schemas[$store->getId()];
1293
  }
1294
 
1295
+ Mage::app()->setCurrentStore($store->getId());
1296
+
1297
  $schema = array();
1298
 
1299
  if ($attributeIds === Simtech_Searchanise_Model_Queue::NOT_DATA) {
1300
  $schema = self::getSchemaCustomerGroupsPrices();
1301
 
1302
+ if ($items = self::getSchemaCategories($store)) {
1303
  foreach ($items as $keyItem => $item) {
1304
  $schema[] = $item;
1305
  }
1312
  }
1313
  $schema[] = array(
1314
  'name' => 'is_in_stock',
1315
+ 'title' => Mage::helper('catalog')->__('Stock Availability'),
 
 
 
 
 
 
 
1316
  'type' => 'text',
1317
  'weight' => 0,
1318
  'text_search' => 'N',
1321
 
1322
  if ($attributes = self::getProductAttributes($attributeIds, $store, $isPrice)) {
1323
  foreach ($attributes as $attribute) {
1324
+ if ($items = self::getSchemaAttribute($attribute, $store)) {
1325
  foreach ($items as $keyItem => $item) {
1326
  $schema[] = $item;
1327
  }
1329
  }
1330
  }
1331
 
1332
+ $schemas[$store->getId()] = $schema;
1333
+
1334
  return $schema;
1335
  }
1336
 
app/code/community/Simtech/Searchanise/Helper/ApiSe.php CHANGED
@@ -20,9 +20,6 @@ class Simtech_Searchanise_Helper_ApiSe
20
 
21
  const MAX_PAGE_SIZE = 100; // The "All" variant of the items per page menu is replaced with this value if the "Allow All Products per Page" option is active.
22
 
23
- // const MIN_QUANTITY_DECIMALS = '0.00001';
24
- const MIN_QUANTITY_DECIMALS = ''; // not activated, because Server have floaf = decimal(12,2)
25
-
26
  const SUGGESTIONS_MAX_RESULTS = 1;
27
  const FLOAT_PRECISION = 2; // for server float = decimal(12,2)
28
  const LABEL_FOR_PRICES_USERGROUP = 'se_price_';
@@ -137,10 +134,6 @@ class Simtech_Searchanise_Helper_ApiSe
137
  return self::SUGGESTIONS_MAX_RESULTS;
138
  }
139
 
140
- public static function getMinQuantityDecimals() {
141
- return self::MIN_QUANTITY_DECIMALS;
142
- }
143
-
144
  public static function getServiceUrl($onlyHttp = true)
145
  {
146
  $ret = self::getSetting('service_url');
@@ -207,6 +200,16 @@ class Simtech_Searchanise_Helper_ApiSe
207
  return self::getSetting('use_full_feed', self::CONFIG_PREFIX);
208
  }
209
 
 
 
 
 
 
 
 
 
 
 
210
  public static function setLastRequest($value = null)
211
  {
212
  self::setSetting('last_request', $value, self::CONFIG_PREFIX);
@@ -634,10 +637,18 @@ class Simtech_Searchanise_Helper_ApiSe
634
 
635
  public static function showNotificationAsyncCompleted()
636
  {
637
- if (self::checkImportIsDone()) {
638
- if (self::checkNotificationAsyncComleted()) {
639
- $textNotification = Mage::helper('searchanise')->__('Catalog indexation is complete. Configure Searchanise via the <a href="%s">Admin Panel</a>.', Mage::helper('searchanise/ApiSe')->getModuleUrl());
 
 
 
 
 
 
640
 
 
 
641
  Mage::helper('searchanise/ApiSe')->setNotification('N', Mage::helper('searchanise')->__('Searchanise'), $textNotification);
642
  self::setNotificationAsyncComleted(true);
643
  }
@@ -942,7 +953,6 @@ class Simtech_Searchanise_Helper_ApiSe
942
 
943
  public static function checkExportStatus($store = null)
944
  {
945
- self::checkImportIsDone($store);
946
  return self::getExportStatus($store) == self::EXPORT_STATUS_DONE;
947
  }
948
 
@@ -1400,25 +1410,29 @@ class Simtech_Searchanise_Helper_ApiSe
1400
  );
1401
 
1402
  Mage::getModel('searchanise/queue')->setData($queueData)->save();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1403
 
1404
- // <schemas>
1405
- {
1406
- $queueData = array(
1407
- 'data' => Simtech_Searchanise_Model_Queue::NOT_DATA,
1408
- 'action' => Simtech_Searchanise_Model_Queue::ACT_DELETE_FACETS_ALL,
1409
- 'store_id' => $store->getId(),
1410
- );
1411
- Mage::getModel('searchanise/queue')->setData($queueData)->save();
1412
-
1413
- $queueData = array(
1414
- 'data' => Simtech_Searchanise_Model_Queue::NOT_DATA,
1415
- 'action' => Simtech_Searchanise_Model_Queue::ACT_UPDATE_ATTRIBUTES,
1416
- 'store_id' => $store->getId(),
1417
- );
1418
-
1419
- Mage::getModel('searchanise/queue')->setData($queueData)->save();
1420
- }
1421
- // </schemas>
1422
 
1423
  self::_addTaskByChunk($store, $action = Simtech_Searchanise_Model_Queue::ACT_UPDATE_PRODUCTS, true);
1424
  self::_addTaskByChunk($store, $action = Simtech_Searchanise_Model_Queue::ACT_UPDATE_CATEGORIES, true);
@@ -1442,12 +1456,20 @@ class Simtech_Searchanise_Helper_ApiSe
1442
  if ($status == true) {
1443
  self::setExportStatus(self::EXPORT_STATUS_PROCESSING, $store);
1444
  }
1445
-
 
 
 
 
 
 
 
 
1446
  } elseif ($q['action'] == Simtech_Searchanise_Model_Queue::ACT_END_FULL_IMPORT) {
1447
  $status = self::sendRequest('/api/state/update/json', $privateKey, array('full_import' => self::EXPORT_STATUS_DONE), true);
1448
 
1449
  if ($status == true) {
1450
- self::setExportStatus(self::EXPORT_STATUS_SENT, $store);
1451
  self::setLastResync(self::getTime());
1452
  }
1453
 
@@ -1691,42 +1713,6 @@ class Simtech_Searchanise_Helper_ApiSe
1691
 
1692
  return true;
1693
  }
1694
-
1695
- public static function checkImportIsDone($curStore = null)
1696
- {
1697
- $result = true;
1698
- $stores = self::getStores($curStore);
1699
-
1700
- $skipTimeCheck = false;
1701
-
1702
- foreach ($stores as $store) {
1703
- if (self::getExportStatus($store) == self::EXPORT_STATUS_SENT && ((self::getTime() - self::getLastRequest()) > self::getRequestTimeout() || $skipTimeCheck == true)) {
1704
- $response = self::sendRequest('/api/state/get/json', self::getPrivateKey($store), array('status' => '', 'full_import' => ''), true);
1705
- $variable = self::parseStateResponse($response);
1706
-
1707
- if ((!empty($variable)) && (isset($variable['status']))) {
1708
- if (($variable['status'] == self::STATUS_NORMAL) &&
1709
- (isset($variable['full_import'])) &&
1710
- ($variable['full_import'] == self::EXPORT_STATUS_DONE)) {
1711
- $skipTimeCheck = true;
1712
- self::setExportStatus(self::EXPORT_STATUS_DONE, $store);
1713
-
1714
- } elseif ($variable['status'] == self::STATUS_DISABLED) {
1715
- self::setExportStatus(self::EXPORT_STATUS_NONE, $store);
1716
- }
1717
- }
1718
- }
1719
- if (self::getExportStatus($store) != self::EXPORT_STATUS_DONE) {
1720
- $result = false;
1721
- }
1722
- }
1723
-
1724
- if ($skipTimeCheck == true) {
1725
- // nothing
1726
- }
1727
-
1728
- return $result;
1729
- }
1730
 
1731
  public static function getStoreByWebsiteIds($websiteIds = array())
1732
  {
20
 
21
  const MAX_PAGE_SIZE = 100; // The "All" variant of the items per page menu is replaced with this value if the "Allow All Products per Page" option is active.
22
 
 
 
 
23
  const SUGGESTIONS_MAX_RESULTS = 1;
24
  const FLOAT_PRECISION = 2; // for server float = decimal(12,2)
25
  const LABEL_FOR_PRICES_USERGROUP = 'se_price_';
134
  return self::SUGGESTIONS_MAX_RESULTS;
135
  }
136
 
 
 
 
 
137
  public static function getServiceUrl($onlyHttp = true)
138
  {
139
  $ret = self::getSetting('service_url');
200
  return self::getSetting('use_full_feed', self::CONFIG_PREFIX);
201
  }
202
 
203
+ public static function setResultsWidgetEnabled($value, $store = null)
204
+ {
205
+ return self::setSettingStore('results_widget_enabled', $store, $value, self::CONFIG_PREFIX);
206
+ }
207
+
208
+ public static function getResultsWidgetEnabled($store = null)
209
+ {
210
+ return self::getSettingStore('results_widget_enabled', $store, self::CONFIG_PREFIX);
211
+ }
212
+
213
  public static function setLastRequest($value = null)
214
  {
215
  self::setSetting('last_request', $value, self::CONFIG_PREFIX);
637
 
638
  public static function showNotificationAsyncCompleted()
639
  {
640
+ if (self::checkNotificationAsyncComleted()) {
641
+ $all_stores_done = true;
642
+ $stores = self::getStores();
643
+ foreach ($stores as $store) {
644
+ if (!self::checkExportStatus($store)) {
645
+ $all_stores_done = false;
646
+ break;
647
+ }
648
+ }
649
 
650
+ if ($all_stores_done) {
651
+ $textNotification = Mage::helper('searchanise')->__('Catalog indexation is complete. Configure Searchanise via the <a href="%s">Admin Panel</a>.', Mage::helper('searchanise/ApiSe')->getModuleUrl());
652
  Mage::helper('searchanise/ApiSe')->setNotification('N', Mage::helper('searchanise')->__('Searchanise'), $textNotification);
653
  self::setNotificationAsyncComleted(true);
654
  }
953
 
954
  public static function checkExportStatus($store = null)
955
  {
 
956
  return self::getExportStatus($store) == self::EXPORT_STATUS_DONE;
957
  }
958
 
1410
  );
1411
 
1412
  Mage::getModel('searchanise/queue')->setData($queueData)->save();
1413
+
1414
+ $queueData = array(
1415
+ 'data' => Simtech_Searchanise_Model_Queue::NOT_DATA,
1416
+ 'action' => Simtech_Searchanise_Model_Queue::ACT_GET_INFO,
1417
+ 'store_id' => $store->getId(),
1418
+ );
1419
+
1420
+ Mage::getModel('searchanise/queue')->setData($queueData)->save();
1421
+
1422
+ $queueData = array(
1423
+ 'data' => Simtech_Searchanise_Model_Queue::NOT_DATA,
1424
+ 'action' => Simtech_Searchanise_Model_Queue::ACT_DELETE_FACETS_ALL,
1425
+ 'store_id' => $store->getId(),
1426
+ );
1427
+ Mage::getModel('searchanise/queue')->setData($queueData)->save();
1428
+
1429
+ $queueData = array(
1430
+ 'data' => Simtech_Searchanise_Model_Queue::NOT_DATA,
1431
+ 'action' => Simtech_Searchanise_Model_Queue::ACT_UPDATE_ATTRIBUTES,
1432
+ 'store_id' => $store->getId(),
1433
+ );
1434
 
1435
+ Mage::getModel('searchanise/queue')->setData($queueData)->save();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1436
 
1437
  self::_addTaskByChunk($store, $action = Simtech_Searchanise_Model_Queue::ACT_UPDATE_PRODUCTS, true);
1438
  self::_addTaskByChunk($store, $action = Simtech_Searchanise_Model_Queue::ACT_UPDATE_CATEGORIES, true);
1456
  if ($status == true) {
1457
  self::setExportStatus(self::EXPORT_STATUS_PROCESSING, $store);
1458
  }
1459
+
1460
+ } elseif ($q['action'] == Simtech_Searchanise_Model_Queue::ACT_GET_INFO) {
1461
+ $params = array();
1462
+ $info = self::sendRequest('/api/state/info/json', $privateKey, $params, true);
1463
+
1464
+ if (!empty($info['result_widget_enabled'])) {
1465
+ self::setResultsWidgetEnabled(($info['result_widget_enabled'] == 'Y')? true : false, $store);
1466
+ }
1467
+
1468
  } elseif ($q['action'] == Simtech_Searchanise_Model_Queue::ACT_END_FULL_IMPORT) {
1469
  $status = self::sendRequest('/api/state/update/json', $privateKey, array('full_import' => self::EXPORT_STATUS_DONE), true);
1470
 
1471
  if ($status == true) {
1472
+ self::setExportStatus(self::EXPORT_STATUS_DONE, $store);
1473
  self::setLastResync(self::getTime());
1474
  }
1475
 
1713
 
1714
  return true;
1715
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1716
 
1717
  public static function getStoreByWebsiteIds($websiteIds = array())
1718
  {
app/code/community/Simtech/Searchanise/Helper/Data.php CHANGED
@@ -125,7 +125,12 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
125
 
126
  return $check;
127
  }
128
-
 
 
 
 
 
129
  protected function setDefaultSort(&$params, $type)
130
  {
131
  if (empty($params)) {
@@ -218,12 +223,7 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
218
  $params['suggestions'] = 'true';
219
  $params['query_correction'] = 'false';
220
  $params['suggestionsMaxResults'] = Mage::helper('searchanise/ApiSe')->getSuggestionsMaxResults();
221
-
222
  $params['restrictBy']['visibility'] = '3|4';
223
- $minQuantityDecimals = Mage::helper('searchanise/ApiSe')->getMinQuantityDecimals();
224
- if (!empty($minQuantityDecimals)) {
225
- $params['restrictBy']['quantity_decimals'] = $minQuantityDecimals . ',';
226
- }
227
 
228
  } elseif ($type == self::TEXT_ADVANCED_FIND) {
229
  $params['facets'] = 'false';
@@ -231,10 +231,6 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
231
  $params['query_correction'] = 'false';
232
 
233
  $params['restrictBy']['visibility'] = '3|4';
234
- $minQuantityDecimals = Mage::helper('searchanise/ApiSe')->getMinQuantityDecimals();
235
- if (!empty($minQuantityDecimals)) {
236
- $params['restrictBy']['quantity_decimals'] = $minQuantityDecimals . ',';
237
- }
238
  }
239
 
240
  if ((!empty($controller)) && (!empty($blockToolbar))) {
@@ -269,6 +265,8 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
269
  }
270
 
271
  $sortBy = $blockToolbar->getCurrentOrder();
 
 
272
  $sortOrder = $blockToolbar->getCurrentDirection();
273
 
274
  $maxResults = (int) $blockToolbar->getLimit();
@@ -303,46 +301,24 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
303
  // CATEGORIES
304
  {
305
  $arrCat = null;
306
- $cat_id = (int) $controller->getRequest()->getParam('cat');
307
- if (!empty($cat_id)) {
308
- $arrCat = array();
309
- $arrCat[] = $cat_id; // need if not exist children categories
310
-
311
- $categories = Mage::getModel('catalog/category')
312
- ->getCollection()
313
- ->setStoreId(Mage::app()->getStore()->getId())
314
- ->addFieldToFilter('entity_id', $cat_id)
315
- ->load()
316
- ;
317
-
318
- if (!empty($categories)) {
319
- foreach ($categories as $cat) {
320
- if (!empty($cat)) {
321
- $arrCat = $cat->getAllChildren(true);
322
- }
323
- }
324
- }
325
- }
326
 
327
- if (!empty($arrCat)) {
328
- if (is_array($arrCat)) {
329
- $params['restrictBy']['category_ids'] = implode('|', $arrCat);
330
- } else {
331
- $params['restrictBy']['category_ids'] = $arrCat;
332
  }
333
  }
334
  }
335
  // ATTRIBUTES
336
  {
337
- $attributes = Mage::getResourceModel('catalog/product_attribute_collection');
338
- $attributes
339
  ->setItemObjectClass('catalog/resource_eav_attribute')
340
  ->load();
341
-
342
  if (!empty($attributes)) {
343
  foreach ($attributes as $id => $attr) {
344
- $arrAttributes[$id] = $attr->getName();
345
- $arrInputType[$id] = $attr->getData('frontend_input');
346
  }
347
 
348
  if (!empty($arrAttributes)) {
@@ -350,42 +326,42 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
350
 
351
  if (!empty($requestParams)) {
352
  foreach ($requestParams as $name => $val) {
353
- $id = array_search($name, $arrAttributes);
354
- if ($name && $id) {
355
- $labelAttribute = 'attribute_' . $id;
356
-
357
  if ($name == 'price') {
358
  $valPrice = Mage::helper('searchanise/ApiSe')->getPriceValueFromRequest($val);
359
  if ($valPrice != '') {
360
  $params['restrictBy']['price'] = $valPrice;
361
  }
362
 
363
- } elseif ($arrInputType[$id] == 'price') {
364
- $params['union'][$labelAttribute]['min'] = Mage::helper('searchanise/ApiSe')->getCurLabelForPricesUsergroup();
365
  $valPrice = Mage::helper('searchanise/ApiSe')->getPriceValueFromRequest($val);
366
 
367
  if ($valPrice != '') {
368
- $params['restrictBy'][$labelAttribute] = $valPrice;
369
  }
370
-
371
- } elseif (($arrInputType[$id] == 'text') || ($arrInputType[$id] == 'textarea')) {
372
  if ($val != '') {
373
  $val = Mage::helper('searchanise/ApiSe')->escapingCharacters($val);
374
 
375
  if ($val != '') {
376
- $params['queryBy'][$arrAttributes[$id]] = $val;
 
 
377
  }
378
  }
379
 
380
- } elseif (($arrInputType[$id] == 'select') ||
381
- ($arrInputType[$id] == 'multiselect') ||
382
- ($arrInputType[$id] == 'boolean')) {
383
  if ($val) {
384
- if (is_array($val)) {
385
- $params['restrictBy'][$labelAttribute] = implode('|', $val);
386
- } else {
387
- $params['restrictBy'][$labelAttribute] = $val;
388
  }
 
389
  }
390
 
391
  } else {
@@ -500,4 +476,4 @@ class Simtech_Searchanise_Helper_Data extends Mage_Core_Helper_Abstract
500
  return $this->_defaultAvailableLimit;
501
  }
502
  }
503
- }
125
 
126
  return $check;
127
  }
128
+
129
+ public static function getResultsFormPath()
130
+ {
131
+ return Mage::getUrl() . 'searchanise/result';
132
+ }
133
+
134
  protected function setDefaultSort(&$params, $type)
135
  {
136
  if (empty($params)) {
223
  $params['suggestions'] = 'true';
224
  $params['query_correction'] = 'false';
225
  $params['suggestionsMaxResults'] = Mage::helper('searchanise/ApiSe')->getSuggestionsMaxResults();
 
226
  $params['restrictBy']['visibility'] = '3|4';
 
 
 
 
227
 
228
  } elseif ($type == self::TEXT_ADVANCED_FIND) {
229
  $params['facets'] = 'false';
231
  $params['query_correction'] = 'false';
232
 
233
  $params['restrictBy']['visibility'] = '3|4';
 
 
 
 
234
  }
235
 
236
  if ((!empty($controller)) && (!empty($blockToolbar))) {
265
  }
266
 
267
  $sortBy = $blockToolbar->getCurrentOrder();
268
+ $sortBy = ($sortBy == 'name')? 'title' : $sortBy;
269
+ $sortBy = ($sortBy == 'sku')? 'product_code' : $sortBy;
270
  $sortOrder = $blockToolbar->getCurrentDirection();
271
 
272
  $maxResults = (int) $blockToolbar->getLimit();
301
  // CATEGORIES
302
  {
303
  $arrCat = null;
304
+ $categoryId = (int) $controller->getRequest()->getParam('cat');
305
+ if (!empty($categoryId)) {
306
+ $categoryIds = Mage::helper('searchanise/ApiCategories')->getAllChildrenCategories($categoryId);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
 
308
+ if (!empty($categoryIds)) {
309
+ $params['restrictBy']['category_ids'] = implode('|', $categoryIds);
 
 
 
310
  }
311
  }
312
  }
313
  // ATTRIBUTES
314
  {
315
+ $attributes = Mage::getResourceModel('catalog/product_attribute_collection')
 
316
  ->setItemObjectClass('catalog/resource_eav_attribute')
317
  ->load();
318
+
319
  if (!empty($attributes)) {
320
  foreach ($attributes as $id => $attr) {
321
+ $arrAttributes[$attr->getName()] = $attr;
 
322
  }
323
 
324
  if (!empty($arrAttributes)) {
326
 
327
  if (!empty($requestParams)) {
328
  foreach ($requestParams as $name => $val) {
329
+ if (!empty($arrAttributes[$name])) {
330
+ $attr = $arrAttributes[$name];
331
+ $inputType = $attr->getData('frontend_input');
 
332
  if ($name == 'price') {
333
  $valPrice = Mage::helper('searchanise/ApiSe')->getPriceValueFromRequest($val);
334
  if ($valPrice != '') {
335
  $params['restrictBy']['price'] = $valPrice;
336
  }
337
 
338
+ } elseif ($inputType == 'price') {
339
+ $params['union'][$name]['min'] = Mage::helper('searchanise/ApiSe')->getCurLabelForPricesUsergroup();
340
  $valPrice = Mage::helper('searchanise/ApiSe')->getPriceValueFromRequest($val);
341
 
342
  if ($valPrice != '') {
343
+ $params['restrictBy'][$name] = $valPrice;
344
  }
345
+
346
+ } elseif (($inputType == 'text') || ($inputType == 'textarea')) {
347
  if ($val != '') {
348
  $val = Mage::helper('searchanise/ApiSe')->escapingCharacters($val);
349
 
350
  if ($val != '') {
351
+ $queryBy = ($name == 'name')? 'title' : $name;
352
+ $queryBy = ($name == 'sku')? 'product_code' : $queryBy;
353
+ $params['queryBy'][$queryBy] = $val;
354
  }
355
  }
356
 
357
+ } elseif (($inputType == 'select') || ($inputType == 'multiselect') || ($inputType == 'boolean')) {
 
 
358
  if ($val) {
359
+ $values = array();
360
+ $vals = is_array($val)? $val : array($val);
361
+ foreach ($vals as $v) {
362
+ $values[] = $attr->getFrontend()->getOption($v);
363
  }
364
+ $params['restrictBy'][$name] = implode('|', $values);
365
  }
366
 
367
  } else {
476
  return $this->_defaultAvailableLimit;
477
  }
478
  }
479
+ }
app/code/community/Simtech/Searchanise/Model/Layer/Filter/Category.php DELETED
@@ -1,68 +0,0 @@
1
- <?php
2
- /***************************************************************************
3
- * *
4
- * (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev *
5
- * *
6
- * This is commercial software, only users who have purchased a valid *
7
- * license and accept to the terms of the License Agreement can install *
8
- * and use this program. *
9
- * *
10
- ****************************************************************************
11
- * PLEASE READ THE FULL TEXT OF THE SOFTWARE LICENSE AGREEMENT IN THE *
12
- * "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE. *
13
- ****************************************************************************/
14
-
15
- class Simtech_Searchanise_Model_Layer_Filter_Category extends Mage_Catalog_Model_Layer_Filter_Category
16
- {
17
- /**
18
- * Get data array for building category filter items
19
- *
20
- * @return array
21
- */
22
- protected function _getItemsData()
23
- {
24
- if (!Mage::helper('searchanise/ApiSe')->checkSearchaniseResult(true)) {
25
- return parent::_getItemsData();
26
- }
27
-
28
- $collection = $this->getLayer()->getProductCollection();
29
-
30
- if ((!method_exists($collection, 'checkSearchaniseResult')) || (!$collection->checkSearchaniseResult()))
31
- {
32
- return parent::_getItemsData();
33
- }
34
-
35
- $key = $this->getLayer()->getStateKey().'_SUBCATEGORIES';
36
- $data = $this->getLayer()->getAggregator()->getCacheData($key);
37
-
38
- if ($data === null)
39
- {
40
- $categoty = $this->getCategory();
41
- /** @var $categoty Mage_Catalog_Model_Categeory */
42
- $categories = $categoty->getChildrenCategories();
43
-
44
- $this->getLayer()->getProductCollection()
45
- ->addCountToCategories($categories);
46
-
47
- $data = array();
48
- foreach ($categories as $category) {
49
- $productCount = $collection
50
- ->getSearchaniseRequest()
51
- ->getCountProductCategory($category);
52
-
53
- if ($category->getIsActive() && $productCount)
54
- {
55
- $data[] = array(
56
- 'label' => Mage::helper('core')->htmlEscape($category->getName()),
57
- 'value' => $category->getId(),
58
- 'count' => $productCount,
59
- );
60
- }
61
- }
62
- $tags = $this->getLayer()->getStateTags();
63
- $this->getLayer()->getAggregator()->saveCacheData($data, $key, $tags);
64
- }
65
-
66
- return $data;
67
- }
68
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Simtech/Searchanise/Model/Layer/Filter/Price.php DELETED
@@ -1,51 +0,0 @@
1
- <?php
2
- /***************************************************************************
3
- * *
4
- * (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev *
5
- * *
6
- * This is commercial software, only users who have purchased a valid *
7
- * license and accept to the terms of the License Agreement can install *
8
- * and use this program. *
9
- * *
10
- ****************************************************************************
11
- * PLEASE READ THE FULL TEXT OF THE SOFTWARE LICENSE AGREEMENT IN THE *
12
- * "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE. *
13
- ****************************************************************************/
14
-
15
- class Simtech_Searchanise_Model_Layer_Filter_Price extends Mage_Catalog_Model_Layer_Filter_Price
16
- {
17
- /**
18
- * Get price range for building filter steps
19
- *
20
- * @return int
21
- */
22
- public function getPriceRange()
23
- {
24
- if (!Mage::helper('searchanise/ApiSe')->checkSearchaniseResult(true)) {
25
- return parent::getPriceRange();
26
- }
27
-
28
- $collection = $this->getLayer()->getProductCollection();
29
-
30
- if ((!method_exists($collection, 'checkSearchaniseResult')) || (!$collection->checkSearchaniseResult())) {
31
- return parent::getPriceRange();
32
- }
33
-
34
- $newRange = $collection
35
- ->getSearchaniseRequest()
36
- ->getPriceRangeFromAttribute($this->getAttributeModel());
37
- if (!$newRange) {
38
- return parent::getPriceRange();
39
- }
40
-
41
- $rate = Mage::app()->getStore()->getCurrentCurrencyRate();
42
-
43
- if ((!$rate) || ($rate == 1)) {
44
- // nothing
45
- } else {
46
- $newRange *= $rate;
47
- }
48
-
49
- return $newRange;
50
- }
51
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Simtech/Searchanise/Model/Observer.php CHANGED
@@ -803,4 +803,63 @@ class Simtech_Searchanise_Model_Observer
803
 
804
  return $this;
805
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
806
  }
803
 
804
  return $this;
805
  }
806
+
807
+ public function coreBlockAbstractToHtmlBefore(Varien_Event_Observer $observer)
808
+ {
809
+ $data = $observer->getData();
810
+ $block = $data['block'];
811
+
812
+ if ($block instanceof Mage_CatalogSearch_Block_Layer) {
813
+ $filters = $block->getFilters();
814
+ foreach ($filters as $filter) {
815
+ if ($filter->getType() == 'catalog/layer_filter_price') {
816
+ if (!Mage::helper('searchanise/ApiSe')->checkSearchaniseResult(true)) {
817
+ break;
818
+ }
819
+
820
+ $collection = $block->getLayer()->getProductCollection();
821
+
822
+ if ((!method_exists($collection, 'checkSearchaniseResult')) || (!$collection->checkSearchaniseResult())) {
823
+ break;
824
+ }
825
+
826
+ $newRange = $collection
827
+ ->getSearchaniseRequest()
828
+ ->getPriceRangeFromAttribute($filter->getAttributeModel());
829
+ if (!$newRange) {
830
+ break;
831
+ }
832
+
833
+ $rate = Mage::app()->getStore()->getCurrentCurrencyRate();
834
+
835
+ if ((!$rate) || ($rate == 1)) {
836
+ // nothing
837
+ } else {
838
+ $newRange *= $rate;
839
+ }
840
+
841
+ $currentCategory = Mage::registry('current_category_filter');
842
+ if ($currentCategory) {
843
+ $currentCategory->setFilterPriceRange($newRange);
844
+ } else {
845
+ $filter->getLayer()->getCurrentCategory()->setFilterPriceRange($newRange);
846
+ }
847
+ }
848
+ }
849
+ }
850
+ }
851
+
852
+ public function controllerActionPredispatch(Varien_Event_Observer $observer)
853
+ {
854
+ if (Mage::helper('searchanise/ApiSe')->getSetting('redirect_to_admin_after_install')) {
855
+ Mage::helper('searchanise/ApiSe')->setSetting('redirect_to_admin_after_install', false);
856
+ if (!($observer->getData('controller_action') instanceof Simtech_Searchanise_IndexController)) {
857
+ $redirect_url = Mage::helper('adminhtml')->getUrl(Mage::helper('searchanise/ApiSe')->getSearchaniseLink());
858
+ Mage::app()->getResponse()->setRedirect($redirect_url)->sendResponse();
859
+ exit;
860
+ }
861
+ }
862
+
863
+ return $this;
864
+ }
865
  }
app/code/community/Simtech/Searchanise/Model/Queue.php CHANGED
@@ -46,6 +46,7 @@ class Simtech_Searchanise_Model_Queue extends Mage_Core_Model_Abstract
46
 
47
  const ACT_PREPARE_FULL_IMPORT = 'prepare_full_import';
48
  const ACT_START_FULL_IMPORT = 'start_full_import';
 
49
  const ACT_END_FULL_IMPORT = 'end_full_import';
50
 
51
  public static $mainActionTypes = array(
46
 
47
  const ACT_PREPARE_FULL_IMPORT = 'prepare_full_import';
48
  const ACT_START_FULL_IMPORT = 'start_full_import';
49
+ const ACT_GET_INFO = 'update_info';
50
  const ACT_END_FULL_IMPORT = 'end_full_import';
51
 
52
  public static $mainActionTypes = array(
app/code/community/Simtech/Searchanise/Model/Request.php CHANGED
@@ -163,7 +163,7 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
163
 
164
  $this->setProductIdsString($productIdsString);
165
  }
166
-
167
  return $this->productIdsString;
168
  }
169
 
@@ -275,7 +275,7 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
275
  $query = Mage::helper('searchanise/ApiSe')->buildQuery($this->getSearchParams());
276
  $this->setSearchParam('api_key', $this->getApiKey());
277
  if (Mage::helper('searchanise')->checkDebug()) {
278
- Mage::helper('searchanise/ApiSe')->printR(Mage::helper('searchanise/ApiSe')->getServiceUrl() . '/search?api_key=' . $this->getApiKey() . $this->getSearchParamsStr());
279
  Mage::helper('searchanise/ApiSe')->printR($this->getSearchParams());
280
  }
281
 
@@ -370,8 +370,8 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
370
  return $ret;
371
  }
372
 
373
- $label = 'attribute_' . $attribute->getId();
374
-
375
  if (!$this->checkAttributesCountLabel($label)) {
376
  $vals = array();
377
  $res = $this->getSearchResult();
@@ -540,16 +540,12 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
540
  $res = $this->getSearchResult();
541
 
542
  if (!empty($res['facets'])) {
543
- // fixme in the future
544
- // error calc count product in category
545
- $arr_cat = null;
546
- Mage::helper('searchanise/ApiCategories')->getAllChildrenCategories($arr_cat, $category);
547
-
548
  foreach ($res['facets'] as $facet) {
549
  if ($facet['attribute'] == 'category_ids') {
550
  if (!empty($facet['buckets'])) {
551
  foreach ($facet['buckets'] as $bucket) {
552
- if (in_array($bucket['value'], $arr_cat)) {
553
  $val += $bucket['count'];
554
  }
555
  }
@@ -561,10 +557,10 @@ class Simtech_Searchanise_Model_Request extends Mage_Core_Model_Abstract
561
  if ($val > $this->getTotalProduct()) {
562
  $val = $this->getTotalProduct();
563
  }
564
-
565
  $this->setAttributesCountLabel($val, $label);
566
  }
567
-
568
  return $this->getAttributesCountLabel($label);
569
  }
570
  }
163
 
164
  $this->setProductIdsString($productIdsString);
165
  }
166
+
167
  return $this->productIdsString;
168
  }
169
 
275
  $query = Mage::helper('searchanise/ApiSe')->buildQuery($this->getSearchParams());
276
  $this->setSearchParam('api_key', $this->getApiKey());
277
  if (Mage::helper('searchanise')->checkDebug()) {
278
+ Mage::helper('searchanise/ApiSe')->printR(Mage::helper('searchanise/ApiSe')->getServiceUrl() . '/search?api_key=' . $this->getApiKey() . '&' . $this->getSearchParamsStr());
279
  Mage::helper('searchanise/ApiSe')->printR($this->getSearchParams());
280
  }
281
 
370
  return $ret;
371
  }
372
 
373
+ $label = $attribute->getAttributeCode();
374
+
375
  if (!$this->checkAttributesCountLabel($label)) {
376
  $vals = array();
377
  $res = $this->getSearchResult();
540
  $res = $this->getSearchResult();
541
 
542
  if (!empty($res['facets'])) {
543
+ $categoryIds = Mage::helper('searchanise/ApiCategories')->getAllChildrenCategories($category->getId());
 
 
 
 
544
  foreach ($res['facets'] as $facet) {
545
  if ($facet['attribute'] == 'category_ids') {
546
  if (!empty($facet['buckets'])) {
547
  foreach ($facet['buckets'] as $bucket) {
548
+ if (in_array($bucket['value'], $categoryIds)) {
549
  $val += $bucket['count'];
550
  }
551
  }
557
  if ($val > $this->getTotalProduct()) {
558
  $val = $this->getTotalProduct();
559
  }
560
+
561
  $this->setAttributesCountLabel($val, $label);
562
  }
563
+
564
  return $this->getAttributesCountLabel($label);
565
  }
566
  }
app/code/community/Simtech/Searchanise/Model/Resource/Fulltext/Collection.php CHANGED
@@ -122,4 +122,36 @@ class Simtech_Searchanise_Model_Resource_Fulltext_Collection extends Mage_Catalo
122
  {
123
  return parent::getLastPageNumber();
124
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
125
  }
122
  {
123
  return parent::getLastPageNumber();
124
  }
125
+
126
+ public function _loadEntities($printQuery = false, $logQuery = false)
127
+ {
128
+ $pageSize = $this->_pageSize;
129
+ $this->_pageSize = false;
130
+ $args = func_get_args();
131
+ call_user_func_array(array(__CLASS__, 'parent::_loadEntities'), $args);
132
+ $this->_pageSize = $pageSize;
133
+ return $this;
134
+ }
135
+
136
+ public function getSize()
137
+ {
138
+ if ($this->checkSearchaniseResult()) {
139
+ return $this->getSearchaniseRequest()->getTotalProduct();
140
+ } else {
141
+ return parent::getSize();
142
+ }
143
+ }
144
+
145
+ public function addCountToCategories($categoryCollection)
146
+ {
147
+ if (!Mage::helper('searchanise/ApiSe')->checkSearchaniseResult(true) || !$this->checkSearchaniseResult()) {
148
+ return parent::addCountToCategories($categoryCollection);
149
+ }
150
+
151
+ foreach ($categoryCollection as $category) {
152
+ $category->setProductCount($this->getSearchaniseRequest()->getCountProductCategory($category));
153
+ }
154
+
155
+ return $this;
156
+ }
157
  }
app/code/community/Simtech/Searchanise/Model/Resource/Layer/Filter/Attribute.php CHANGED
@@ -32,10 +32,21 @@ class Simtech_Searchanise_Model_Resource_Layer_Filter_Attribute extends Mage_Cat
32
  if ((!method_exists($collection, 'checkSearchaniseResult')) || (!$collection->checkSearchaniseResult())) {
33
  return parent::getCount($filter);
34
  }
35
-
36
- return $collection
37
- ->getSearchaniseRequest()
38
- ->getCountAttribute($filter);
 
 
 
 
 
 
 
 
 
 
 
39
  }
40
 
41
  /**
32
  if ((!method_exists($collection, 'checkSearchaniseResult')) || (!$collection->checkSearchaniseResult())) {
33
  return parent::getCount($filter);
34
  }
35
+
36
+ $optionsCount = array();
37
+ $options = $filter->getAttributeModel()->getFrontend()->getSelectOptions();
38
+ $searchaniseOptions = $collection->getSearchaniseRequest()->getCountAttribute($filter);
39
+ foreach ($options as $option) {
40
+ if (is_array($option['value'])) {
41
+ continue;
42
+ }
43
+
44
+ if (strlen($option['label']) && isset($searchaniseOptions[$option['label']])) {
45
+ $optionsCount[$option['value']] = $searchaniseOptions[$option['label']];
46
+ }
47
+ }
48
+
49
+ return $optionsCount;
50
  }
51
 
52
  /**
app/code/community/Simtech/Searchanise/Model/Searchanise.php CHANGED
@@ -120,21 +120,14 @@ class Simtech_Searchanise_Model_Searchanise extends Mage_Core_Model_Abstract
120
  if (!$this->checkSearchaniseResult()) {
121
  return $this->_collection->setOrderParent($attribute, $dir);
122
  }
123
-
124
- if ($attribute == 'relevance') {
125
- // 'relevance' always 'asc'
126
- $dir = 'asc';
127
- $product_ids = $this
128
- ->getSearchaniseRequest()
129
- ->getProductIdsString();
130
-
131
- if (!empty($product_ids)) {
132
- $sortBy = "FIELD(e.entity_id, {$product_ids}) {$dir}";
133
- $this->_collection->getSelect()->order(new Zend_Db_Expr($sortBy));
134
- }
135
-
136
- } else {
137
- return $this->_collection->setOrderParent($attribute, $dir);
138
  }
139
 
140
  return $this;
120
  if (!$this->checkSearchaniseResult()) {
121
  return $this->_collection->setOrderParent($attribute, $dir);
122
  }
123
+
124
+ $product_ids = $this
125
+ ->getSearchaniseRequest()
126
+ ->getProductIdsString();
127
+
128
+ if (!empty($product_ids)) {
129
+ $sortBy = "FIELD(e.entity_id, {$product_ids}) asc";
130
+ $this->_collection->getSelect()->order(new Zend_Db_Expr($sortBy));
 
 
 
 
 
 
 
131
  }
132
 
133
  return $this;
app/code/community/Simtech/Searchanise/controllers/InfoController.php CHANGED
@@ -160,14 +160,12 @@ class Simtech_Searchanise_InfoController extends Mage_Core_Controller_Front_Acti
160
  );
161
 
162
  if ($visual) {
163
- Mage::helper('searchanise/ApiSe')->printR(Mage::helper('core')->jsonEncode($feed), $feed);
164
  } else {
165
  echo Mage::helper('core')->jsonEncode($feed);
166
  }
167
 
168
  } else {
169
- Mage::helper('searchanise/ApiSe')->checkImportIsDone();
170
-
171
  $options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
172
  if (!$options) {
173
  $options = array();
160
  );
161
 
162
  if ($visual) {
163
+ Mage::helper('searchanise/ApiSe')->printR($feed);
164
  } else {
165
  echo Mage::helper('core')->jsonEncode($feed);
166
  }
167
 
168
  } else {
 
 
169
  $options = Mage::helper('searchanise/ApiSe')->getAddonOptions();
170
  if (!$options) {
171
  $options = array();
app/code/community/Simtech/Searchanise/controllers/ResultController.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /***************************************************************************
3
+ * *
4
+ * (c) 2004 Vladimir V. Kalynyak, Alexey V. Vinokurov, Ilya M. Shalnev *
5
+ * *
6
+ * This is commercial software, only users who have purchased a valid *
7
+ * license and accept to the terms of the License Agreement can install *
8
+ * and use this program. *
9
+ * *
10
+ ****************************************************************************
11
+ * PLEASE READ THE FULL TEXT OF THE SOFTWARE LICENSE AGREEMENT IN THE *
12
+ * "copyright.txt" FILE PROVIDED WITH THIS DISTRIBUTION PACKAGE. *
13
+ ****************************************************************************/
14
+ class Simtech_Searchanise_ResultController extends Mage_Core_Controller_Front_Action
15
+ {
16
+ public function indexAction()
17
+ {
18
+ $this->loadLayout();
19
+ $this->renderLayout();
20
+ }
21
+ }
app/code/community/Simtech/Searchanise/etc/config.xml CHANGED
@@ -15,7 +15,7 @@
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
- <version>3.1.0</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
@@ -61,6 +61,14 @@
61
  </rating>
62
  </observers>
63
  </controller_action_predispatch_catalogsearch_advanced_result>
 
 
 
 
 
 
 
 
64
  </events>
65
  </frontend>
66
  <admin>
@@ -127,19 +135,19 @@
127
  </searchanise>
128
  </updates>
129
  </layout>
 
 
 
 
 
 
 
 
 
 
130
  </adminhtml>
131
  <global>
132
  <models>
133
- <!-- OVERRIDE CATALOG MODEL -->
134
- <!-- [disabled_searchanise_search] -->
135
- <catalog>
136
- <rewrite>
137
- <layer_filter_category>Simtech_Searchanise_Model_Layer_Filter_Category</layer_filter_category>
138
- <layer_filter_price>Simtech_Searchanise_Model_Layer_Filter_Price</layer_filter_price>
139
- </rewrite>
140
- </catalog>
141
- <!-- [/disabled_searchanise_search] -->
142
- <!-- END -->
143
 
144
  <!-- <OVERRIDE CATALOG RESOURCE> -->
145
  <!-- [disabled_searchanise_search] -->
@@ -552,6 +560,11 @@
552
  </catalogsearch>
553
  <!-- END -->
554
  <!-- [/disabled_searchanise_search] -->
 
 
 
 
 
555
  </blocks>
556
  </global>
557
  <default>
@@ -576,6 +589,7 @@
576
  <object_async_enabled>1</object_async_enabled>
577
  <input_id_search>search</input_id_search>
578
  <enabled_searchanise_search>1</enabled_searchanise_search>
 
579
  </config>
580
  </searchanise>
581
  </default>
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
+ <version>3.1.1</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
61
  </rating>
62
  </observers>
63
  </controller_action_predispatch_catalogsearch_advanced_result>
64
+ <core_block_abstract_to_html_before>
65
+ <observers>
66
+ <rating>
67
+ <class>searchanise/observer</class>
68
+ <method>coreBlockAbstractToHtmlBefore</method>
69
+ </rating>
70
+ </observers>
71
+ </core_block_abstract_to_html_before>
72
  </events>
73
  </frontend>
74
  <admin>
135
  </searchanise>
136
  </updates>
137
  </layout>
138
+ <!--<events>
139
+ <controller_action_predispatch>
140
+ <observers>
141
+ <rating>
142
+ <class>searchanise/observer</class>
143
+ <method>controllerActionPredispatch</method>
144
+ </rating>
145
+ </observers>
146
+ </controller_action_predispatch>
147
+ </events>-->
148
  </adminhtml>
149
  <global>
150
  <models>
 
 
 
 
 
 
 
 
 
 
151
 
152
  <!-- <OVERRIDE CATALOG RESOURCE> -->
153
  <!-- [disabled_searchanise_search] -->
560
  </catalogsearch>
561
  <!-- END -->
562
  <!-- [/disabled_searchanise_search] -->
563
+ <searchanise>
564
+ <rewrite>
565
+ <resultwidget>Simtech_Searchanise_Block_Resultwidget</resultwidget>
566
+ </rewrite>
567
+ </searchanise>
568
  </blocks>
569
  </global>
570
  <default>
589
  <object_async_enabled>1</object_async_enabled>
590
  <input_id_search>search</input_id_search>
591
  <enabled_searchanise_search>1</enabled_searchanise_search>
592
+ <redirect_to_admin_after_install>1</redirect_to_admin_after_install>
593
  </config>
594
  </searchanise>
595
  </default>
app/code/community/Simtech/Searchanise/etc/config_without_search.xml CHANGED
@@ -15,7 +15,7 @@
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
- <version>3.0.6</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
@@ -61,6 +61,14 @@
61
  </rating>
62
  </observers>
63
  </controller_action_predispatch_catalogsearch_advanced_result>
 
 
 
 
 
 
 
 
64
  </events>-->
65
  </frontend>
66
  <admin>
@@ -127,20 +135,19 @@
127
  </searchanise>
128
  </updates>
129
  </layout>
 
 
 
 
 
 
 
 
 
 
130
  </adminhtml>
131
  <global>
132
  <models>
133
- <!-- OVERRIDE CATALOG MODEL -->
134
- <!-- [disabled_searchanise_search] -->
135
- <!-- <catalog>
136
- <rewrite>
137
- <layer_filter_category>Simtech_Searchanise_Model_Layer_Filter_Category</layer_filter_category>
138
- <layer_filter_price>Simtech_Searchanise_Model_Layer_Filter_Price</layer_filter_price>
139
- </rewrite>
140
- </catalog> -->
141
- <!-- [/disabled_searchanise_search] -->
142
- <!-- END -->
143
-
144
  <!-- <OVERRIDE CATALOG RESOURCE> -->
145
  <!-- [disabled_searchanise_search] -->
146
  <!-- [v1.6] [v1.7] [v1.8] [v1.9] -->
@@ -552,6 +559,11 @@
552
  </catalogsearch> -->
553
  <!-- END -->
554
  <!-- [/disabled_searchanise_search] -->
 
 
 
 
 
555
  </blocks>
556
  </global>
557
  <default>
@@ -576,6 +588,7 @@
576
  <object_async_enabled>1</object_async_enabled>
577
  <input_id_search>search</input_id_search>
578
  <enabled_searchanise_search>1</enabled_searchanise_search>
 
579
  </config>
580
  </searchanise>
581
  </default>
15
  <config>
16
  <modules>
17
  <Simtech_Searchanise>
18
+ <version>3.1.1</version>
19
  </Simtech_Searchanise>
20
  </modules>
21
  <frontend>
61
  </rating>
62
  </observers>
63
  </controller_action_predispatch_catalogsearch_advanced_result>
64
+ <core_block_abstract_to_html_before>
65
+ <observers>
66
+ <rating>
67
+ <class>searchanise/observer</class>
68
+ <method>coreBlockAbstractToHtmlBefore</method>
69
+ </rating>
70
+ </observers>
71
+ </core_block_abstract_to_html_before>
72
  </events>-->
73
  </frontend>
74
  <admin>
135
  </searchanise>
136
  </updates>
137
  </layout>
138
+ <!--<events>
139
+ <controller_action_predispatch>
140
+ <observers>
141
+ <rating>
142
+ <class>searchanise/observer</class>
143
+ <method>controllerActionPredispatch</method>
144
+ </rating>
145
+ </observers>
146
+ </controller_action_predispatch>
147
+ </events>-->
148
  </adminhtml>
149
  <global>
150
  <models>
 
 
 
 
 
 
 
 
 
 
 
151
  <!-- <OVERRIDE CATALOG RESOURCE> -->
152
  <!-- [disabled_searchanise_search] -->
153
  <!-- [v1.6] [v1.7] [v1.8] [v1.9] -->
559
  </catalogsearch> -->
560
  <!-- END -->
561
  <!-- [/disabled_searchanise_search] -->
562
+ <searchanise>
563
+ <rewrite>
564
+ <resultwidget>Simtech_Searchanise_Block_Resultwidget</resultwidget>
565
+ </rewrite>
566
+ </searchanise>
567
  </blocks>
568
  </global>
569
  <default>
588
  <object_async_enabled>1</object_async_enabled>
589
  <input_id_search>search</input_id_search>
590
  <enabled_searchanise_search>1</enabled_searchanise_search>
591
+ <redirect_to_admin_after_install>1</redirect_to_admin_after_install>
592
  </config>
593
  </searchanise>
594
  </default>
app/design/adminhtml/default/default/template/searchanise/dashboard.phtml CHANGED
@@ -22,7 +22,6 @@
22
  <div class="snize" id="snize_container"></div>
23
 
24
  <?php
25
- Mage::helper('searchanise/ApiSe')->checkImportIsDone();
26
  $searchaniseOptions = Mage::helper('searchanise/ApiSe')->getAddonOptions();
27
 
28
  $searchaniseOptions['options_link'] = $this->getUrl(Mage::helper('searchanise/ApiSe')->getOptionsLink());
@@ -43,7 +42,14 @@
43
  SearchaniseAdmin.LastRequest = '<?php echo $searchaniseOptions['last_request'];?>';
44
  SearchaniseAdmin.LastResync = '<?php echo $searchaniseOptions['last_resync'];?>';
45
  SearchaniseAdmin.ConnectLink = '<?php echo $searchaniseOptions['connect_link'];?>';
 
 
46
  SearchaniseAdmin.AddonStatus = '<?php echo $searchaniseOptions['addon_status'];?>';
 
 
 
 
 
47
 
48
  SearchaniseAdmin.Engines = [];
49
 
@@ -80,4 +86,4 @@
80
  //]]>
81
  </script>
82
 
83
- <script type="text/javascript" src="<?php echo $seServiceUrl;?>/js/init.js"></script>
22
  <div class="snize" id="snize_container"></div>
23
 
24
  <?php
 
25
  $searchaniseOptions = Mage::helper('searchanise/ApiSe')->getAddonOptions();
26
 
27
  $searchaniseOptions['options_link'] = $this->getUrl(Mage::helper('searchanise/ApiSe')->getOptionsLink());
42
  SearchaniseAdmin.LastRequest = '<?php echo $searchaniseOptions['last_request'];?>';
43
  SearchaniseAdmin.LastResync = '<?php echo $searchaniseOptions['last_resync'];?>';
44
  SearchaniseAdmin.ConnectLink = '<?php echo $searchaniseOptions['connect_link'];?>';
45
+ SearchaniseAdmin.ShowResultsControlPanel = true;
46
+
47
  SearchaniseAdmin.AddonStatus = '<?php echo $searchaniseOptions['addon_status'];?>';
48
+ SearchaniseAdmin.AddonVersion = '<?php echo $searchaniseOptions['addon_version'];?>';
49
+
50
+ SearchaniseAdmin.Platform = 'magento';
51
+ SearchaniseAdmin.PlatformEdition = '<?php echo $searchaniseOptions['core_edition'];?>';
52
+ SearchaniseAdmin.PlatformVersion = '<?php echo $searchaniseOptions['core_version'];?>';
53
 
54
  SearchaniseAdmin.Engines = [];
55
 
86
  //]]>
87
  </script>
88
 
89
+ <script type="text/javascript" src="<?php echo $seServiceUrl;?>/js/init.js"></script>
app/design/frontend/base/default/layout/searchanise.xml CHANGED
@@ -22,4 +22,21 @@
22
  <block type="Simtech_Searchanise_Block_Async" name="searchanise_async"></block>
23
  </reference>
24
  </default>
25
- </layout>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  <block type="Simtech_Searchanise_Block_Async" name="searchanise_async"></block>
23
  </reference>
24
  </default>
25
+
26
+ <searchanise_result_index>
27
+ <label>Searchanise result</label>
28
+ <remove name="right"/>
29
+ <remove name="left"/>
30
+
31
+ <reference name="head">
32
+ <action method="setTitle"><title>Search results</title></action>
33
+ </reference>
34
+ <reference name="root">
35
+ <action method="setTemplate"><template>page/1column.phtml</template></action>
36
+ </reference>
37
+ <reference name="content">
38
+ <block type="searchanise/resultwidget" name="searchanise_resultwidget" template="searchanise/resultwidget.phtml"></block>
39
+ </reference>
40
+ </searchanise_result_index>
41
+
42
+ </layout>
app/design/frontend/base/default/template/searchanise/resultwidget.phtml ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php echo $this->getMessagesBlock()->toHtml() ?>
2
+ <div class="page-title">
3
+ <h1>Search results</h1>
4
+ </div>
5
+
6
+ <div class="snize" id="snize_results"></div>
7
+ <style type="text/css"><!--
8
+ /* Load spinner */
9
+ #snize-preload-spinner {
10
+ height: 100px;
11
+ width: 32px;
12
+ margin: 0 auto;
13
+ background-position: 0px center;
14
+ background-repeat: no-repeat;
15
+ background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAYAAAAALCAYAAAB2x1oQAAAACXBIWXMAAAsTAAALEwEAmpwYAAAIj0lEQVR42u2bbWhTWRrHn3Puzc37JNYmTduhTMZBZLBF6gt+2h1HMxRUOrjmgzJfXGUXLU23Y0WHYpdWikp13LZU2cVZvwwK1i0WEcq2ju5+ErVSapEi40TqtE3TtE2meb0v5+wHE4l3kjRX9qaF6QMXwsn/3t/93//Jc9P0XIDVWq3VWq3V+k0WAgCYnZ01CILwNaX0DwBgBYAxjHFHaWnpfzPtNDMz85Eoit8AwOfJoR9Ylj1bUlLyKpN+enr6d4SQEwCwEQCCCKF/aTSab202WxQA4P79+6ZQKPS1JEluhJCVUjqq1Wo79uzZ86AQ/CtXrpgmJydPJhKJfRjjIkrpiMlk6mhpafmhEPzjx49/MD4+/k00Gn3LLy4uPn/z5s2hleh/YGDgo2g0ejqdbzAYztTU1BQk/wsXLnw8Ozt7GgB2JYeGbDbbmaampp/eh690/h85cuQTr9f7Dt/pdJ65evXqj4XgK/V/586dz3ieP4EQqqKUBhmG6bVYLN/u2LEj/D58pfm3tbV9Hg6HTyCENhFC5rVabV95efn5o0ePhgvRf9xu9665ubmTKb7BYOjbsGHD2YsXL/5SCP5y+8+VPwoEAqZEIjFICNn+zp0BIRFj/OeysrJ/po/7fL4qURTvUUqLZfoAy7I7HQ7HaPr41NTUHwkhf6eUsunjGOOHWq3WNTo6CvPz8/ckSdomO29Rp9Mdra2tvaomv7e3F16+fHk/kUhskfu3Wq11bW1t/1CTf+7cOfz48eP/hMPhTbL3SVlZWX1/f//lleT/7t27myKRyGAmvtFodO3evXtEzfzb29urZ2dnByVJKkofZxhm3mazuZqbm58q4QMAKJn/Bw4c2OL1egcFQbCmj2s0mqDT6XTduHHjiZp8pf77+/uPxOPxKwDAyvSPioqKdlZVVSniK82/paXlT8FgsEfuX6vVPlm3bt0Ot9sNavaf2traY1NTU92EEJw+bjKZRrZu3fr7U6dOETX5y+1/qfwxz/PNlNLtCCFI3wCAJYR0+/3+svQdJUn6DgCKM+iLk++9Lb/fX0YI6QYAVq6nlG7neb45FAqdFkVxG6UUZBubSCS6BwcHP1STPzEx0SpvfgAAlFI2FAp1dnZ2VqjJf/bsWau8+QMAEEKwz+e7VFdXV7GS/Mdise8IIcXyvAghxbFYTPX8g8HgNXnzS16XomAweE0pX+n8n56eviZv/gAAgiBYp6enVecr8T84OPhhIpHoppSy8usriuK2UCj0V6V8Jfl3dnZWhEKhTnnzS970trx+/bpVzf5TV1dX4fP5LsmbPwBAOBzeNDY2dkZN/nL7zyd/TCn9KsdPRAZRFL9Mm9DrKaVbsokppVv8fv+Gt1/h3uxryKH/SpKkrHxCiC4SiajKFwThYIbmA5RSkCRJ5/f796nJj8fjWf2Losh5vd79K8X/0NDQp5IkVWc7niRJ1UNDQ5+qlX9XV9fGeDxele184/F4VVdX10YlfCXz3+PxVC0uLm7MJl5cXNzo8Xg2qcVX6j8SiXxJCNHlyOugEr7S/P1+/z5JknTZzpfn+YNq9h+v17tfFEUumz4Wi6nKX27/+eTPUkrLKKWQ40NYnnrN83xObVLjAIDx1L5L6MskSUrdwTKWIAiq8gVByMmPRqMlavJjsRjOJQgGgyUrxf/CwoI9+edmVv3CwoIDAJ6rkb/X612Sn9Lky09+cPKa/8PDw8VL/VNteHi4SC2+Uv+CIJTn0kqS5Eg1o3z4SvOPRqMlubQ8zzsopUSt/hMKhUpyaaPRaLGa/OX2n0/+GCE0leuAGOPJ1GuO43y5DogQAo7jfJn2zaKfYhjGl0uj0WhU5Ws0Gn+2OzSlFAwGw4yafL1eH8jFt1qtMyvF/5o1a/xLNUCr1apa/k6n059qmJm2dE2+fCXzf/PmzfNL8aurq+fV4iv1n37tMhXDMD4lfKX5GwyGmVxzKzmfVes/FotlZom5HVCTv9z+88kfI4S+l/+elLZFWZa9ndrBbrePI4Se5NA/sdvt4yk9y7K3EULRHPrvGYa5nu0CIYTiRqNRVT7HcddzXKC43W7vU5Ov1+uv52h+vNPpvLVS/O/ates5wzBPs+XFMMxTl8v1XK38PR7PmE6nG812vjqdbtTj8Ywp4SuZ/11dXSNms3ksG99sNo91d3ePqMVX6t9oNN5GCMVz5HVdCV9p/na7vY9hmHi28+U47rqa/cfpdN7SaDR8Nr5er1eVv9z+88kfcxzXjhB6mOknaIxxvd1un5I1hcMAEMigDyTfg7QTnsIY1wOAmOFu9ZDjuHaLxdLKsuyjDGZErVZb73K5flaTX1FR0arT6X51UTHGxGKxNDQ0NEyoya+srDxtNptH5HyGYYjD4Wjs6emZWEn+9Xr9YYxxIIM+oNfrVc/farUeYll2Xq5nWXbearUeUspXOv9LS0sPcRwXlPM5jguWlpaqzlfi3+Vy/azVausRQmIG/SOLxdKqlK8k/4aGhgmLxdKAMSZyvU6ne1pRUdGqZv/p6emZcDgcjQzD/IpvNptHKisrT6vJX27/+eSfeg7AJAjCXyilbnizDnU0j3WozQDwWXLoAcuy7XmsQ6+CN+ugezUazd9sNlsYAODevXumxcXFE5Ik7UMIFVFKRzmOO793794HheBfvnzZNDk5eZLn+f0YYyuldNRkMp1f4jmA/xu/sbHxgxcvXrzzHMDatWs7ent7/70S/Q8MDHwciUSaIW0dstFobK+pqfmpEPl3dHR8EggEmuHddfDtTU1NP74PX+n8P3z48PpXr141A8AXKX7yOYAXheAr9Z9cB34yuQ58nmGYPrPZ3LFz58734ivNP7kO/iRCqIoQEuQ47lZ5efn5Y8eOhQvRf9xu9xdzc3Mn0p8DWL9+/dlLly79Ugj+cvtfKv/VWq3VWq3V+g3W/wAZmNaB1vZW4QAAAABJRU5ErkJggg==);
16
+ }
17
+ --></style>
18
+
19
+ <script>
20
+ // <![CDATA[
21
+ (function(window, undefined) {
22
+ var sXpos = 0, sIndex = 0, sTotalFrames = 12, sInterval = null;
23
+
24
+ if (document.getElementById('snize_results').innerHTML != '') {
25
+ return;
26
+ }
27
+
28
+ document.getElementById('snize_results').innerHTML = '<div id="snize-preload-spinner"></div>';
29
+ sInterval = setInterval(function()
30
+ {
31
+ var spinner = document.getElementById('snize-preload-spinner');
32
+ if (spinner) {
33
+ document.getElementById('snize-preload-spinner').style.backgroundPosition = (- sXpos) + 'px center';
34
+ } else {
35
+ clearInterval(sInterval);
36
+ }
37
+
38
+ sXpos += 32;
39
+ sIndex += 1;
40
+
41
+ if (sIndex >= 12) {
42
+ sXpos = 0;
43
+ sIndex = 0;
44
+ }
45
+ }, 30);
46
+ }(window));
47
+ // ]]></script>
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Simtech_Searchanise</name>
4
- <version>3.1.0</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>
@@ -10,29 +10,16 @@
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>[+] Compatibility with magento SUPEE-6788 patch and version 1.9.2.2 was added.&lt;br&gt;&#xD;
14
- [+] Compatibility with third-party addons that override 'catalogsearch' controllers was added.&lt;br&gt;&#xD;
15
- [+] Support for product flat table was added.&lt;br&gt;&#xD;
16
- [+] HHVM support added.&lt;br&gt;&#xD;
17
- [+] Ability to hide categories from search was added.&lt;br&gt;&#xD;
18
- [+] Ability to enable only some of the store views to be processed by Searchanise was added.&lt;br&gt;&#xD;
19
- &lt;br&gt;&#xD;
20
- [*] Magento: Set search field ID: The setting caption updated.&lt;br&gt;&#xD;
21
- [*] Redundant product attributes are now longer collected.&lt;br&gt;&#xD;
22
- [*] Obsolete code with category navigation was removed.&lt;br&gt;&#xD;
23
- [*] Addition cms pages was hidden from search by default.&lt;br&gt;&#xD;
24
- [*] Speed of product export was increased.&lt;br&gt;&#xD;
25
- &lt;br&gt;&#xD;
26
- [!] Due to inconsistency of Magento's standard "Category Products" index, not all products were searchable. Fixed.&lt;br&gt;&#xD;
27
- [!] All categories were submitted for each store, even if it had its own default (parent) category. Fixed.&lt;br&gt;&#xD;
28
- [!] If sorting by custom attribute was applied the search results were shown without using Searchanise. Fixed.&lt;br&gt;&#xD;
29
- [!] Allow Qty Below 0 setting handing was fixed.&lt;br&gt;&#xD;
30
- [!] Erroneous server requests were handled incorrectly, cramming store logs with notices. Fixed.&lt;br&gt;&#xD;
31
- [!] Default autocomplete wasn't disabled in magento 1.9. Fixed.&lt;br&gt;</notes>
32
  <authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
33
- <date>2015-11-10</date>
34
- <time>08:50:13</time>
35
- <contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="7fb3859416e0d468235082ca41c5a96b"/><file name="Autocomplete.php" hash="efc89ac3f897be3bc307fba6a36778f0"/><file name="Jsinit.php" hash="3411676a466ce1d4023f1be831a8ed12"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="759854378cb8c35c37a8a7f44076194f"/></dir></dir><file name="Result.php" hash="dec7b27ab9511c956680eb60eba9b95e"/></dir><dir name="Helper"><file name="ApiCategories.php" hash="693fb12e14eccb273bd9a775134df5c6"/><file name="ApiPages.php" hash="40b2c244bb969d3d1a3202e34059e14e"/><file name="ApiProducts.php" hash="1c937aeff0059a416c362f10fd679181"/><file name="ApiSe.php" hash="e1f78439586c184d93cd0e815eaa5326"/><file name="Data.php" hash="7cc7514c9a23bd084baaed1f97a5b3c7"/></dir><dir name="Model"><file name="Advanced.php" hash="e0c92b53cec8fbbfdd79690612c7ee84"/><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><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"/></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="a478dac639df52979587b01043f7eb97"/><file name="Queue.php" hash="f862b207d2dc9bb7f56c829b8a1480fe"/><file name="Request.php" hash="236d321c6f32fdc664923e000f9f2e71"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="41256fb10dff7e97d0c9136dc0500bf3"/></dir><dir name="Eav"><dir name="Mysql4"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="05320757b9289edac4f15230cd06c0e1"/><file name="Price.php" hash="ed4e21a18c552e3a92b21ff6e8bc5d61"/></dir></dir><dir name="Product"><file name="Action.php" hash="006e3c8c775cf31a8b9c66fb934c9d2d"/></dir></dir></dir><dir name="Fulltext"><file name="Collection.php" hash="54aca41551e47b62570e9071340b8edb"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="e61907b6fbe825511ea3dc590cd9009f"/><file name="Price.php" hash="57d56f6841c0e2b89c21947aa2a23e86"/></dir></dir><dir name="Product"><file name="Collection.php" hash="ad006af84576dab614a08beec5200964"/></dir><file name="Store.php" hash="6a337d4b6561aa96b96236d66cc9aa30"/></dir><file name="Searchanise.php" hash="d38d587354466e3a36e9c0a4f078d5fd"/><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"><dir name="Adminhtml"><file name="SearchaniseController.php" hash="b05fe6f1b3d318a7186ec60b15e0fb04"/></dir><file name="AsyncController.php" hash="1fcec63f99231fc260995ae98aaaf86f"/><file name="InfoController.php" hash="212aa6e66052e3e1f62431367422be24"/></dir><dir name="etc"><file name="config.xml" hash="b26051acd6d6d7f9585d248abeba355e"/><file name="config_without_search.xml" hash="f68b16f43d5437847fbc393615b41c6f"/><file name="system.xml" hash="9d6e139bc5ba5c1bdc789bb8fab01d1c"/></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="0ec8814b915e8594b019062c071cc485"/></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></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="955cdb2011b7abf04227aae37db5bb0b"/></dir></target></contents>
36
  <compatible/>
37
  <dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
38
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Simtech_Searchanise</name>
4
+ <version>3.1.1</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>
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>[+] Search results widget was added.&lt;br&gt;&#xD;
14
+ [+] Notice about a new version of extension was added.&lt;br&gt;&#xD;
15
+ [*] Compatibility with third-party addons was improved.&lt;br&gt;&#xD;
16
+ [*] Indexation status check was improved.&lt;br&gt;&#xD;
17
+ [*] Redundant product attributes are no longer collected.&lt;br&gt;&#xD;
18
+ [!] Searching by a product title and description could show incorrect search results on the advanced search page. Fixed.&lt;br&gt;</notes>
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  <authors><author><name>Simbirsk Technologies, Ltd.</name><user>searchanise</user><email>sales@searchanise.com</email></author></authors>
20
+ <date>2016-02-14</date>
21
+ <time>22:18:41</time>
22
+ <contents><target name="magecommunity"><dir name="Simtech"><dir name="Searchanise"><dir name="Block"><file name="Async.php" hash="7fb3859416e0d468235082ca41c5a96b"/><file name="Autocomplete.php" hash="efc89ac3f897be3bc307fba6a36778f0"/><file name="Jsinit.php" hash="13ed56e4a27e2ee21bc37c3582136ada"/><dir name="Product"><dir name="List"><file name="Toolbar.php" hash="5477041c73350c0f32fdaf5b7c6b99fc"/></dir></dir><file name="Result.php" hash="dec7b27ab9511c956680eb60eba9b95e"/><file name="Resultwidget.php" hash="9b3ec31ad83ca02ca79bbdfc785f8afe"/></dir><dir name="Helper"><file name="ApiCategories.php" hash="06a5d63372280ef0feaa833b23388a09"/><file name="ApiPages.php" hash="40b2c244bb969d3d1a3202e34059e14e"/><file name="ApiProducts.php" hash="359489a0e8590067eea99df8c6f989ab"/><file name="ApiSe.php" hash="225d3a577421658e8134b3b1b577b2ee"/><file name="Data.php" hash="c2ccf96081b5c799530ae69aab504d18"/></dir><dir name="Model"><file name="Advanced.php" hash="e0c92b53cec8fbbfdd79690612c7ee84"/><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="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"/></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="0b48985221748df51e4f867ae6ef0285"/><file name="Queue.php" hash="71647dc365b09e5e00ad9e13cfc37a43"/><file name="Request.php" hash="02d5d46fdbd7923cbc407c40df1d68c0"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="41256fb10dff7e97d0c9136dc0500bf3"/></dir><dir name="Eav"><dir name="Mysql4"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="05320757b9289edac4f15230cd06c0e1"/><file name="Price.php" hash="ed4e21a18c552e3a92b21ff6e8bc5d61"/></dir></dir><dir name="Product"><file name="Action.php" hash="006e3c8c775cf31a8b9c66fb934c9d2d"/></dir></dir></dir><dir name="Fulltext"><file name="Collection.php" hash="13ef26616fafb14e9b51db31c71e4462"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="206e81ee170a56fac499169e66ad782d"/><file name="Price.php" hash="57d56f6841c0e2b89c21947aa2a23e86"/></dir></dir><dir name="Product"><file name="Collection.php" hash="ad006af84576dab614a08beec5200964"/></dir><file name="Store.php" hash="6a337d4b6561aa96b96236d66cc9aa30"/></dir><file name="Searchanise.php" hash="a925b75ff5b088f447cc3369c33335a1"/><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"><dir name="Adminhtml"><file name="SearchaniseController.php" hash="b05fe6f1b3d318a7186ec60b15e0fb04"/></dir><file name="AsyncController.php" hash="1fcec63f99231fc260995ae98aaaf86f"/><file name="InfoController.php" hash="74f98b7e5521ca299dbfef65660f1c63"/><file name="ResultController.php" hash="260d0eec9bcb5d2048cf2f0c0040a1cc"/></dir><dir name="etc"><file name="config.xml" hash="0bd340396752f3d556d7593c8e920376"/><file name="config_without_search.xml" hash="e41234b3a935f94bdbf016f8dfe84663"/><file name="system.xml" hash="9d6e139bc5ba5c1bdc789bb8fab01d1c"/></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="3925c38299c0b055e8aa0c1bc9e6a39e"/></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="0e2795c2e3c5f5af5544bb8471d67037"/></dir><dir name="template"><dir name="searchanise"><file name="resultwidget.phtml" hash="f4cf9ce97294275b5ae9d8e2252be41b"/></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="955cdb2011b7abf04227aae37db5bb0b"/></dir></target></contents>
23
  <compatible/>
24
  <dependencies><required><php><min>5.2.13</min><max>6.0.0</max></php></required></dependencies>
25
  </package>