Klevu_SmartSearch - Version 1.1.22

Version Notes

- solved https issue for landing page
- message change
- Immediate sync for updated data
- product rating
- Help center
- Group price support
- Added klevu_Products
- Added type field in klevu_product_sync table
- Product tracking with preserve layout

Download this release

Release Info

Developer Klevu
Extension Klevu_SmartSearch
Version 1.1.22
Comparing to
See all releases


Code changes from version 1.1.21 to 1.1.22

Files changed (36) hide show
  1. app/code/community/Klevu/Search/Block/Adminhtml/Form/Field/Store/Level/Label.php +1 -1
  2. app/code/community/Klevu/Search/Block/Adminhtml/Form/Field/Sync/Button.php +1 -1
  3. app/code/community/Klevu/Search/Block/Adminhtml/Form/Klevuinfo.php +28 -0
  4. app/code/community/Klevu/Search/Block/Adminhtml/Form/Syncoptionsinfo.php +30 -0
  5. app/code/community/Klevu/Search/Block/Catalog/Product/Tracking.php +2 -1
  6. app/code/community/Klevu/Search/Helper/Api.php +5 -2
  7. app/code/community/Klevu/Search/Helper/Config.php +40 -2
  8. app/code/community/Klevu/Search/Helper/Data.php +12 -0
  9. app/code/community/Klevu/Search/Model/Api/Action/Addrecords.php +30 -1
  10. app/code/community/Klevu/Search/Model/Api/Action/Searchtermtracking.php +68 -0
  11. app/code/community/Klevu/Search/Model/CatalogSearch/Layer/Filter/Category.php +1 -1
  12. app/code/community/Klevu/Search/Model/CatalogSearch/Resource/Fulltext/Collection.php +24 -2
  13. app/code/community/Klevu/Search/Model/Observer.php +27 -0
  14. app/code/community/Klevu/Search/Model/Product/Sync.php +170 -26
  15. app/code/community/Klevu/Search/Model/System/Config/Source/Boosting/Attribute.php +8 -3
  16. app/code/community/Klevu/Search/Model/System/Config/Source/Syncoptions.php +21 -0
  17. app/code/community/Klevu/Search/Test/Model/Product/Sync.php +2 -2
  18. app/code/community/Klevu/Search/controllers/Adminhtml/Klevu/Search/WizardController.php +17 -8
  19. app/code/community/Klevu/Search/controllers/Adminhtml/Klevu/SearchController.php +48 -18
  20. app/code/community/Klevu/Search/controllers/IndexController.php +8 -2
  21. app/code/community/Klevu/Search/etc/adminhtml.xml +4 -5
  22. app/code/community/Klevu/Search/etc/config.xml +11 -3
  23. app/code/community/Klevu/Search/etc/system.xml +137 -57
  24. app/code/community/Klevu/Search/sql/klevu_search_setup/mysql4-data-upgrade-1.1.21-1.1.22.php +59 -0
  25. app/design/adminhtml/default/default/template/klevu/search/form/field/sync/button.phtml +12 -1
  26. app/design/adminhtml/default/default/template/klevu/search/form/information.phtml +1 -3
  27. app/design/adminhtml/default/default/template/klevu/search/form/klevuinfo.phtml +2 -0
  28. app/design/adminhtml/default/default/template/klevu/search/wizard/configure/store.phtml +4 -4
  29. app/design/frontend/base/default/layout/klevu/search.xml +0 -1
  30. app/design/frontend/base/default/template/klevu/search/form_js.phtml +18 -8
  31. app/design/frontend/base/default/template/klevu/search/index.phtml +5 -6
  32. app/design/frontend/base/default/template/klevu/search/product_tracking.phtml +3 -1
  33. js/klevu/search/lib/Wizard.js +1 -0
  34. package.xml +13 -5
  35. skin/frontend/base/default/css/klevu/klevu-landing-left.css +16 -0
  36. skin/frontend/base/default/css/klevu/klevu-landing-page-style.css +119 -25
app/code/community/Klevu/Search/Block/Adminhtml/Form/Field/Store/Level/Label.php CHANGED
@@ -6,7 +6,7 @@ class Klevu_Search_Block_Adminhtml_Form_Field_Store_Level_Label extends Mage_Adm
6
  if ($element->getScope() == "stores") {
7
  return $element->getEscapedValue();
8
  } else {
9
- return Mage::helper("klevu_search")->__("Switch to store scope to see");
10
  }
11
  }
12
 
6
  if ($element->getScope() == "stores") {
7
  return $element->getEscapedValue();
8
  } else {
9
+ return Mage::helper("klevu_search")->__("Switch to store scope to set");
10
  }
11
  }
12
 
app/code/community/Klevu/Search/Block/Adminhtml/Form/Field/Sync/Button.php CHANGED
@@ -39,7 +39,7 @@ class Klevu_Search_Block_Adminhtml_Form_Field_Sync_Button extends Mage_Adminhtml
39
 
40
  $this->addData(array(
41
  "html_id" => $element->getHtmlId(),
42
- "button_label" => sprintf("Sync All Products%s", $label_suffix),
43
  "destination_url" => $this->getUrl("adminhtml/klevu_search/sync_all", $url_params)
44
  ));
45
 
39
 
40
  $this->addData(array(
41
  "html_id" => $element->getHtmlId(),
42
+ "button_label" => sprintf("Sync Data %s", $label_suffix),
43
  "destination_url" => $this->getUrl("adminhtml/klevu_search/sync_all", $url_params)
44
  ));
45
 
app/code/community/Klevu/Search/Block/Adminhtml/Form/Klevuinfo.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Klevu_Search_Block_Adminhtml_Form_Klevuinfo extends Mage_Adminhtml_Block_System_Config_Form_Fieldset {
4
+
5
+ protected function _construct() {
6
+ parent::_construct();
7
+
8
+ if (!$this->getTemplate()) {
9
+ // Set the default template
10
+ $this->setTemplate("klevu/search/form/klevuinfo.phtml");
11
+ }
12
+ }
13
+
14
+ public function render(Varien_Data_Form_Element_Abstract $element) {
15
+ $html = $this->_getHeaderHtml($element);
16
+
17
+ $html .= $this->_toHtml();
18
+
19
+ $html .= $this->_getFooterHtml($element);
20
+
21
+ return $html;
22
+ }
23
+
24
+ public function getVersion() {
25
+ return Mage::getConfig()->getModuleConfig('Klevu_Search')->version;
26
+ }
27
+
28
+ }
app/code/community/Klevu/Search/Block/Adminhtml/Form/Syncoptionsinfo.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Klevu_Search_Block_Adminhtml_Form_Syncoptionsinfo extends Mage_Adminhtml_Block_System_Config_Form_Field {
4
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
5
+ if($this->getSyncOptionsSelected() ==1) {
6
+ $mode = Mage::helper("klevu_search")->__("Updates only (syncs data immediately)");
7
+ } else {
8
+ $mode = Mage::helper("klevu_search")->__("All data (syncs data on CRON execution");
9
+ }
10
+ return $mode;
11
+ }
12
+
13
+ public function render(Varien_Data_Form_Element_Abstract $element) {
14
+ $this->setData('scope', $element->getScope());
15
+
16
+ // Remove the inheritance checkbox
17
+ $element
18
+ ->unsCanUseWebsiteValue()
19
+ ->unsCanUseDefaultValue();
20
+
21
+ return parent::render($element);
22
+ }
23
+
24
+
25
+
26
+ public function getSyncOptionsSelected() {
27
+ return Mage::helper('klevu_search/config')->getSyncOptionsFlag();
28
+ }
29
+
30
+ }
app/code/community/Klevu/Search/Block/Catalog/Product/Tracking.php CHANGED
@@ -18,7 +18,8 @@ class Klevu_Search_Block_Catalog_Product_Tracking extends Mage_Core_Block_Templa
18
  'klevu_type' => 'clicked',
19
  'klevu_productId' => $product->getId(),
20
  'klevu_productName' => $product->getName(),
21
- 'klevu_productUrl' => $product->getProductUrl()
 
22
  );
23
 
24
  return json_encode($product);
18
  'klevu_type' => 'clicked',
19
  'klevu_productId' => $product->getId(),
20
  'klevu_productName' => $product->getName(),
21
+ 'klevu_productUrl' => $product->getProductUrl(),
22
+ 'Klevu_typeOfRecord' => 'KLEVU_PRODUCT'
23
  );
24
 
25
  return json_encode($product);
app/code/community/Klevu/Search/Helper/Api.php CHANGED
@@ -17,6 +17,9 @@ class Klevu_Search_Helper_Api extends Mage_Core_Helper_Abstract {
17
  * message: a message to be shown to the user.
18
  */
19
  public function createUser($email, $password, $userPlan, $partnerAccount, $url, $merchantEmail,$contactNo) {
 
 
 
20
  $response = Mage::getModel("klevu_search/api_action_adduser")->execute(array(
21
  "email" => $email,
22
  "password" => $password,
@@ -24,8 +27,8 @@ class Klevu_Search_Helper_Api extends Mage_Core_Helper_Abstract {
24
  "partnerAccount" => $partnerAccount,
25
  "url" => $url,
26
  "merchantEmail" => $merchantEmail,
27
- "contactNo" => $contactNo
28
-
29
  ));
30
 
31
  if ($response->isSuccessful()) {
17
  * message: a message to be shown to the user.
18
  */
19
  public function createUser($email, $password, $userPlan, $partnerAccount, $url, $merchantEmail,$contactNo) {
20
+ $user = Mage::getSingleton('admin/session');
21
+ $userEmail = $user->getUser()->getEmail();
22
+ $storePhone = Mage::getStoreConfig('general/store_information/phone');
23
  $response = Mage::getModel("klevu_search/api_action_adduser")->execute(array(
24
  "email" => $email,
25
  "password" => $password,
27
  "partnerAccount" => $partnerAccount,
28
  "url" => $url,
29
  "merchantEmail" => $merchantEmail,
30
+ "contactNo" => $contactNo,
31
+ "shopInfo" => $userEmail.";".$storePhone,
32
  ));
33
 
34
  if ($response->isSuccessful()) {
app/code/community/Klevu/Search/Helper/Config.php CHANGED
@@ -34,6 +34,8 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
34
  const XML_PATH_JS_URL = "klevu_search/general/js_url";
35
  const XML_PATH_TEST_JS_URL = "klevu_search/general/test_js_url";
36
  const KLEVU_PRODUCT_FORCE_OLDERVERSION = 2;
 
 
37
 
38
  const DATETIME_FORMAT = "Y-m-d H:i:s T";
39
 
@@ -589,7 +591,8 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
589
  "short_description",
590
  "price",
591
  "tax_class_id",
592
- "weight"),
 
593
  "klevu_attribute" => array(
594
  "name",
595
  "sku",
@@ -598,7 +601,8 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
598
  "shortDesc",
599
  "salePrice",
600
  "salePrice",
601
- "weight"
 
602
  )
603
  );
604
  }
@@ -667,4 +671,38 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
667
 
668
  return $this;
669
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
670
  }
34
  const XML_PATH_JS_URL = "klevu_search/general/js_url";
35
  const XML_PATH_TEST_JS_URL = "klevu_search/general/test_js_url";
36
  const KLEVU_PRODUCT_FORCE_OLDERVERSION = 2;
37
+ const XML_PATH_SYNC_OPTIONS = "klevu_search/product_sync/sync_options";
38
+ const XML_PATH_UPGRADE_PREMIUM = "klevu_search/general/premium";
39
 
40
  const DATETIME_FORMAT = "Y-m-d H:i:s T";
41
 
591
  "short_description",
592
  "price",
593
  "tax_class_id",
594
+ "weight",
595
+ "rating"),
596
  "klevu_attribute" => array(
597
  "name",
598
  "sku",
601
  "shortDesc",
602
  "salePrice",
603
  "salePrice",
604
+ "weight",
605
+ "rating"
606
  )
607
  );
608
  }
671
 
672
  return $this;
673
  }
674
+
675
+ /**
676
+ * Return the configuration flag for sync options.
677
+ *
678
+ *
679
+ * @return int
680
+ */
681
+ public function getSyncOptionsFlag() {
682
+ return Mage::getStoreConfig(static::XML_PATH_SYNC_OPTIONS);
683
+ }
684
+
685
+ /**
686
+ * save sync option value
687
+ *
688
+ * @param string $value
689
+ *
690
+ * @return
691
+ */
692
+ public function saveSyncOptions($value) {
693
+ $this->setGlobalConfig(static::XML_PATH_SYNC_OPTIONS, $value);
694
+ return $this;
695
+ }
696
+
697
+ /**
698
+ * save upgrade button value
699
+ *
700
+ * @param string $value
701
+ *
702
+ * @return
703
+ */
704
+ public function saveUpgradePremium($value) {
705
+ $this->setGlobalConfig(static::XML_PATH_UPGRADE_PREMIUM, $value);
706
+ return $this;
707
+ }
708
  }
app/code/community/Klevu/Search/Helper/Data.php CHANGED
@@ -194,4 +194,16 @@ class Klevu_Search_Helper_Data extends Mage_Core_Helper_Abstract {
194
  }
195
  return sprintf("%s%s", $parent_sku, $product_sku);
196
  }
 
 
 
 
 
 
 
 
 
 
 
 
197
  }
194
  }
195
  return sprintf("%s%s", $parent_sku, $product_sku);
196
  }
197
+
198
+ public function getIp() {
199
+ if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
200
+ $ip = $_SERVER['HTTP_CLIENT_IP'];
201
+ } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
202
+ $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
203
+ } else {
204
+ $ip = $_SERVER['REMOTE_ADDR'];
205
+ }
206
+
207
+ return $ip;
208
+ }
209
  }
app/code/community/Klevu/Search/Model/Api/Action/Addrecords.php CHANGED
@@ -149,10 +149,13 @@ class Klevu_Search_Model_Api_Action_Addrecords extends Klevu_Search_Model_Api_Ac
149
  if (isset($record['otherAttributeToIndex']) && is_array($record['otherAttributeToIndex'])) {
150
  $this->prepareOtherAttributeToIndexParameters($record);
151
  }
 
 
 
 
152
 
153
  $pairs = array();
154
 
155
-
156
  foreach ($record as $key => $value) {
157
  $pairs[] = array(
158
  'pair' => array(
@@ -218,6 +221,32 @@ class Klevu_Search_Model_Api_Action_Addrecords extends Klevu_Search_Model_Api_Ac
218
  }
219
  $record['otherAttributeToIndex'] = implode(";", $record['otherAttributeToIndex']);
220
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
 
222
  /**
223
  * Remove the characters used to organise the other attribute values from the
149
  if (isset($record['otherAttributeToIndex']) && is_array($record['otherAttributeToIndex'])) {
150
  $this->prepareOtherAttributeToIndexParameters($record);
151
  }
152
+
153
+ if (isset($record['groupPrices']) && is_array($record['groupPrices'])) {
154
+ $this->prepareGroupPricesParameters($record);
155
+ }
156
 
157
  $pairs = array();
158
 
 
159
  foreach ($record as $key => $value) {
160
  $pairs[] = array(
161
  'pair' => array(
221
  }
222
  $record['otherAttributeToIndex'] = implode(";", $record['otherAttributeToIndex']);
223
  }
224
+
225
+
226
+ /**
227
+ * Flattens GroupPrices parameters array to a string formatted: key:value[,value]
228
+ * @param string
229
+ */
230
+ protected function prepareGroupPricesParameters(&$record) {
231
+ foreach ($record['groupPrices'] as $key => &$value) {
232
+ $key = $this->sanitiseOtherAttribute($key);
233
+
234
+ if(is_array($value)){
235
+ $label = $this->sanitiseOtherAttribute($value['label']);
236
+ $value = $this->sanitiseOtherAttribute($value['values']);
237
+ }else {
238
+ $label = $this->sanitiseOtherAttribute($key);
239
+ $value = $this->sanitiseOtherAttribute($value);
240
+ }
241
+
242
+ if (is_array($value)) {
243
+ $value = implode(",", $value);
244
+ }
245
+
246
+ $value = sprintf("%s:%s:%s", $key, $label, $value);
247
+ }
248
+ $record['groupPrices'] = implode(";", $record['groupPrices']);
249
+ }
250
 
251
  /**
252
  * Remove the characters used to organise the other attribute values from the
app/code/community/Klevu/Search/Model/Api/Action/Searchtermtracking.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Klevu_Search_Model_Api_Action_Searchtermtracking extends Klevu_Search_Model_Api_Action {
4
+
5
+ const ENDPOINT = "/analytics/n-search/search";
6
+ const METHOD = "POST";
7
+
8
+ const DEFAULT_REQUEST_MODEL = "klevu_search/api_request_post";
9
+ const DEFAULT_RESPONSE_MODEL = "klevu_search/api_response_data";
10
+
11
+ protected function validate($parameters) {
12
+ $errors = array();
13
+
14
+ if (!isset($parameters["klevu_apiKey"]) || empty($parameters["klevu_apiKey"])) {
15
+ $errors["klevu_apiKey"] = "Missing JS API key.";
16
+ }
17
+ if (!isset($parameters["klevu_term"]) || empty($parameters["klevu_term"])) {
18
+ $errors["klevu_term"] = "Missing klevu term.";
19
+ }
20
+ if (!isset($parameters["klevu_totalResults"]) || empty($parameters["klevu_totalResults"])) {
21
+ $errors["klevu_type"] = "Missing Total Results.";
22
+ }
23
+
24
+ if (!isset($parameters["klevu_shopperIP"]) || empty($parameters["klevu_shopperIP"])) {
25
+ $errors["klevu_shopperIP"] = "Missing klevu shopperIP.";
26
+ }
27
+
28
+ if (!isset($parameters["klevu_typeOfQuery"]) || empty($parameters["klevu_typeOfQuery"])) {
29
+ $errors["klevu_unit"] = "Missing Type of Query.";
30
+ }
31
+
32
+ if (count($errors) == 0) {
33
+ return true;
34
+ }
35
+ return $errors;
36
+ }
37
+
38
+
39
+ /**
40
+ * Execute the API action with the given parameters.
41
+ *
42
+ * @param array $parameters
43
+ *
44
+ * @return Klevu_Search_Model_Api_Response
45
+ */
46
+ public function execute($parameters = array()) {
47
+ $validation_result = $this->validate($parameters);
48
+ if ($validation_result !== true) {
49
+ return Mage::getModel('klevu_search/api_response_invalid')->setErrors($validation_result);
50
+ }
51
+
52
+ $request = $this->getRequest();
53
+
54
+ $endpoint = Mage::helper('klevu_search/api')->buildEndpoint(
55
+ static::ENDPOINT,
56
+ $this->getStore(),
57
+ Mage::helper('klevu_search/config')->getAnalyticsUrl()
58
+ );
59
+
60
+ $request
61
+ ->setResponseModel($this->getResponse())
62
+ ->setEndpoint($endpoint)
63
+ ->setMethod(static::METHOD)
64
+ ->setData($parameters);
65
+
66
+ return $request->send();
67
+ }
68
+ }
app/code/community/Klevu/Search/Model/CatalogSearch/Layer/Filter/Category.php CHANGED
@@ -20,7 +20,7 @@ class Klevu_Search_Model_CatalogSearch_Layer_Filter_Category extends Mage_Catalo
20
  if ($data === null) {
21
  // Fetch filters from Klevu
22
  $filters = $this->_getKlevuCategoryFilters();
23
-
24
  if ($this->getLayer()->getProductCollection()->count() == 0) {
25
  return array(); // No visible results found in search
26
  }
20
  if ($data === null) {
21
  // Fetch filters from Klevu
22
  $filters = $this->_getKlevuCategoryFilters();
23
+
24
  if ($this->getLayer()->getProductCollection()->count() == 0) {
25
  return array(); // No visible results found in search
26
  }
app/code/community/Klevu/Search/Model/CatalogSearch/Resource/Fulltext/Collection.php CHANGED
@@ -7,6 +7,8 @@ class Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection extends Mage
7
  * @var array
8
  */
9
  protected $_klevu_parameters;
 
 
10
 
11
  /**
12
  * Klevu Search API Product IDs
@@ -95,12 +97,31 @@ class Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection extends Mage
95
  'klevuSort' => $this->_getSortOrder(),
96
  'enableFilters' => 'true',
97
  'filterResults' => $this->_getPreparedFilters(),
 
98
  );
99
  $this->log(Zend_Log::DEBUG, sprintf("Starting search for term: %s", $this->_getQuery()->getQueryText()));
100
  }
101
 
102
  return $this->_klevu_parameters;
103
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
 
105
  /**
106
  * Send the API Request and return the API Response.
@@ -263,7 +284,7 @@ class Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection extends Mage
263
  if (!$this->getKlevuResponse()->hasData('result')) {
264
  return array();
265
  }
266
-
267
  foreach ($this->getKlevuResponse()->getData('result') as $result) {
268
  $item_id = Mage::helper('klevu_search')->getMagentoProductId((string) $result['id']);
269
  $this->_klevu_parent_child_ids[] = $item_id;
@@ -275,6 +296,8 @@ class Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection extends Mage
275
  }
276
  $this->_klevu_product_ids = array_unique($this->_klevu_product_ids);
277
  $this->log(Zend_Log::DEBUG, sprintf("Products count returned: %s", count($this->_klevu_product_ids)));
 
 
278
  }
279
 
280
  return $this->_klevu_product_ids;
@@ -322,7 +345,6 @@ class Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection extends Mage
322
  if (!$this->isExtensionConfigured()) {
323
  return parent::getSize();
324
  }
325
-
326
  $response = $this->getKlevuResponse()->getData('meta');
327
  return (int) $response['totalResultsFound'];
328
  }
7
  * @var array
8
  */
9
  protected $_klevu_parameters;
10
+ protected $_klevu_tracking_parameters;
11
+ protected $_klevu_type_of_records = null;
12
 
13
  /**
14
  * Klevu Search API Product IDs
97
  'klevuSort' => $this->_getSortOrder(),
98
  'enableFilters' => 'true',
99
  'filterResults' => $this->_getPreparedFilters(),
100
+ 'category' => $this->_klevu_type_of_records
101
  );
102
  $this->log(Zend_Log::DEBUG, sprintf("Starting search for term: %s", $this->_getQuery()->getQueryText()));
103
  }
104
 
105
  return $this->_klevu_parameters;
106
  }
107
+
108
+ /**
109
+ * Return the Klevu api search filters
110
+ * @return array
111
+ */
112
+ public function getSearchTracking($noOfTrackingResults,$queryType) {
113
+
114
+ $this->_klevu_tracking_parameters = array(
115
+ 'klevu_apiKey' => Mage::helper('klevu_search/config')->getJsApiKey(),
116
+ 'klevu_term' => $this->_query,
117
+ 'klevu_totalResults' => $noOfTrackingResults,
118
+ 'klevu_shopperIP' => Mage::helper('klevu_search')->getIp(),
119
+ 'klevu_typeOfQuery' => $queryType,
120
+ 'Klevu_typeOfRecord' => 'KLEVU_PRODUCT'
121
+ );
122
+ $this->log(Zend_Log::DEBUG, sprintf("Search tracking for term: %s", $this->_query));
123
+ return $this->_klevu_tracking_parameters;
124
+ }
125
 
126
  /**
127
  * Send the API Request and return the API Response.
284
  if (!$this->getKlevuResponse()->hasData('result')) {
285
  return array();
286
  }
287
+
288
  foreach ($this->getKlevuResponse()->getData('result') as $result) {
289
  $item_id = Mage::helper('klevu_search')->getMagentoProductId((string) $result['id']);
290
  $this->_klevu_parent_child_ids[] = $item_id;
296
  }
297
  $this->_klevu_product_ids = array_unique($this->_klevu_product_ids);
298
  $this->log(Zend_Log::DEBUG, sprintf("Products count returned: %s", count($this->_klevu_product_ids)));
299
+ $response_meta = $this->getKlevuResponse()->getData('meta');
300
+ Mage::getModel('klevu_search/api_action_searchtermtracking')->execute($this->getSearchTracking(count($this->_klevu_product_ids),$response_meta['typeOfQuery']));
301
  }
302
 
303
  return $this->_klevu_product_ids;
345
  if (!$this->isExtensionConfigured()) {
346
  return parent::getSize();
347
  }
 
348
  $response = $this->getKlevuResponse()->getData('meta');
349
  return (int) $response['totalResultsFound'];
350
  }
app/code/community/Klevu/Search/Model/Observer.php CHANGED
@@ -127,6 +127,7 @@ class Klevu_Search_Model_Observer extends Varien_Object {
127
  */
128
  public function applyLandingPageModelRewrites(Varien_Event_Observer $observer) {
129
  if (Mage::helper("klevu_search/config")->isLandingEnabled()) {
 
130
  $rewrites = array(
131
  "global/models/catalogsearch_resource/rewrite/fulltext_collection" => "Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection",
132
  "global/models/catalogsearch_mysql4/rewrite/fulltext_collection" => "Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection",
@@ -171,5 +172,31 @@ class Klevu_Search_Model_Observer extends Varien_Object {
171
 
172
  }
173
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
174
 
175
  }
127
  */
128
  public function applyLandingPageModelRewrites(Varien_Event_Observer $observer) {
129
  if (Mage::helper("klevu_search/config")->isLandingEnabled()) {
130
+
131
  $rewrites = array(
132
  "global/models/catalogsearch_resource/rewrite/fulltext_collection" => "Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection",
133
  "global/models/catalogsearch_mysql4/rewrite/fulltext_collection" => "Klevu_Search_Model_CatalogSearch_Resource_Fulltext_Collection",
172
 
173
  }
174
 
175
+ /**
176
+ * Update the product ratings value in product attribute
177
+ */
178
+ public function ratingsUpdate(Varien_Event_Observer $observer)
179
+ {
180
+ try {
181
+ $object = $observer->getEvent()->getObject();
182
+ $statusId = $object->getStatusId();
183
+ $allStores = Mage::app()->getStores();
184
+ if($statusId == 1) {
185
+ $productId = $object->getEntityPkValue();
186
+ $ratingObj = Mage::getModel('rating/rating')->getEntitySummary($productId);
187
+ $ratings = $ratingObj->getSum()/$ratingObj->getCount();
188
+ /* update attribute */
189
+ Mage::getModel('catalog/product_action')->updateAttributes(array($productId), array('rating'=>$ratings), $object->getStoreId());
190
+ if(count($allStores) > 1) {
191
+ Mage::getModel('catalog/product_action')->updateAttributes(array($productId), array('rating'=>0),0);
192
+ }
193
+ /* mark product for update to sync data with klevu */
194
+ Mage::getModel('klevu_search/product_sync')->updateSpecificProductIds(array($productId));
195
+ }
196
+ } catch (Exception $e) {
197
+ Mage::helper('klevu_search')->log(Zend_Log::CRIT, sprintf("Exception thrown in %s::%s - %s", __CLASS__, __METHOD__, $e->getMessage()));
198
+ }
199
+ }
200
+
201
 
202
  }
app/code/community/Klevu/Search/Model/Product/Sync.php CHANGED
@@ -39,7 +39,10 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
39
  try {
40
 
41
  /* mark for update special price product */
42
- $this->markProductForupdate();
 
 
 
43
 
44
  if ($this->isRunning(2)) {
45
  // Stop if another copy is already running
@@ -61,6 +64,13 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
61
  if (!$this->setupSession($store)) {
62
  continue;
63
  }
 
 
 
 
 
 
 
64
 
65
  $this->log(Zend_Log::INFO, sprintf("Starting sync for %s (%s).", $store->getWebsite()->getName(), $store->getName()));
66
 
@@ -97,7 +107,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
97
  "sd.attribute_id = :status_attribute_id AND sd.entity_id = k.product_id AND sd.store_id = :default_store_id",
98
  ""
99
  )
100
- ->where("(k.store_id = :store_id) AND (k.test_mode = :test_mode) AND ((p.entity_id IS NULL) OR (CASE WHEN ss.value_id > 0 THEN ss.value ELSE sd.value END != :status_enabled) OR (CASE WHEN k.parent_id = 0 THEN k.product_id ELSE k.parent_id END NOT IN (?)))",
101
  $this->getConnection()
102
  ->select()
103
  ->from(
@@ -108,6 +118,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
108
  )
109
  ->group(array('k.product_id', 'k.parent_id'))
110
  ->bind(array(
 
111
  'store_id' => $store->getId(),
112
  'default_store_id' => Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID,
113
  'test_mode' => $this->isTestModeEnabled(),
@@ -142,7 +153,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
142
  "i.product_id = k.product_id AND k.store_id = i.store_id AND i.visibility IN (:visible_both, :visible_search)",
143
  ""
144
  )
145
- ->where("(k.store_id = :store_id) AND (k.test_mode = :test_mode) AND (p.type_id != :configurable) AND (p.updated_at > k.last_synced_at)"),
146
  // Select products with parents (configurable) that need to be updated
147
  $this->getConnection()
148
  ->select()
@@ -186,10 +197,11 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
186
  "sd.attribute_id = :status_attribute_id AND sd.entity_id = k.product_id AND sd.store_id = :default_store_id",
187
  ""
188
  )
189
- ->where("(k.store_id = :store_id) AND (k.test_mode = :test_mode) AND (CASE WHEN ss.value_id > 0 THEN ss.value ELSE sd.value END = :status_enabled) AND ((p1.updated_at > k.last_synced_at) OR (p2.updated_at > k.last_synced_at))")
190
  ))
191
  ->group(array('k.product_id', 'k.parent_id'))
192
  ->bind(array(
 
193
  'store_id' => $store->getId(),
194
  'default_store_id' => Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID,
195
  'test_mode' => $this->isTestModeEnabled(),
@@ -222,7 +234,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
222
  )
223
  ->joinLeft(
224
  array('k' => $this->getTableName("klevu_search/product_sync")),
225
- "p.entity_id = k.product_id AND k.parent_id = 0 AND i.store_id = k.store_id AND k.test_mode = :test_mode",
226
  ""
227
  )
228
  ->where("(p.type_id != :configurable) AND (k.product_id IS NULL)"),
@@ -256,13 +268,14 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
256
  )
257
  ->joinLeft(
258
  array('k' => $this->getTableName("klevu_search/product_sync")),
259
- "s.parent_id = k.parent_id AND s.product_id = k.product_id AND k.store_id = :store_id AND k.test_mode = :test_mode",
260
  ""
261
  )
262
  ->where("(CASE WHEN ss.value_id > 0 THEN ss.value ELSE sd.value END = :status_enabled) AND (k.product_id IS NULL)")
263
  ))
264
  ->group(array('k.product_id', 'k.parent_id'))
265
  ->bind(array(
 
266
  'store_id' => $store->getId(),
267
  'default_store_id' => Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID,
268
  'test_mode' => $this->isTestModeEnabled(),
@@ -325,6 +338,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
325
  $store->getWebsite()->getName(),
326
  $store->getName()
327
  ));
 
328
  }
329
  $config->setLastProductSyncRun("now", $store);
330
 
@@ -552,6 +566,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
552
  ->select()
553
  ->from(array('k' => $this->getTableName("klevu_search/product_sync")))
554
  ->where("k.store_id = ?", $this->getStore()->getId())
 
555
  ->where("k.test_mode = ?", $this->isTestModeEnabled());
556
 
557
  $skipped_record_ids = array();
@@ -566,7 +581,8 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
566
  }
567
  $or_where[] = sprintf("(%s AND %s)",
568
  $connection->quoteInto("k.product_id = ?", $data[$i]['product_id']),
569
- $connection->quoteInto("k.parent_id = ?", $data[$i]['parent_id'])
 
570
  );
571
  }
572
  $select->where(implode(" OR ", $or_where));
@@ -604,9 +620,10 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
604
  */
605
  protected function updateProducts(array $data) {
606
  $total = count($data);
607
-
608
  $this->addProductSyncData($data);
609
-
 
610
  $response = Mage::getModel('klevu_search/api_action_updaterecords')
611
  ->setStore($this->getStore())
612
  ->execute(array(
@@ -631,9 +648,10 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
631
 
632
  $ids = $helper->getMagentoProductId($data[$i]['id']);
633
 
634
- $where[] = sprintf("(%s AND %s)",
635
  $connection->quoteInto("product_id = ?", $ids['product_id']),
636
- $connection->quoteInto("parent_id = ?", $ids['parent_id'])
 
637
  );
638
  }
639
 
@@ -682,7 +700,6 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
682
  $total = count($data);
683
 
684
  $this->addProductSyncData($data);
685
-
686
  $response = Mage::getModel('klevu_search/api_action_addrecords')
687
  ->setStore($this->getStore())
688
  ->execute(array(
@@ -712,13 +729,14 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
712
  $ids["parent_id"],
713
  $this->getStore()->getId(),
714
  $this->isTestModeEnabled(),
715
- $sync_time
 
716
  );
717
  }
718
 
719
  $this->getConnection()->insertArray(
720
  $this->getTableName('klevu_search/product_sync'),
721
- array("product_id", "parent_id", "store_id", "test_mode", "last_synced_at"),
722
  $data
723
  );
724
 
@@ -804,7 +822,14 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
804
  unset($products[$index]);
805
  continue;
806
  }
807
-
 
 
 
 
 
 
 
808
  // Add data from mapped attributes
809
  foreach ($attribute_map as $key => $attributes) {
810
  $product[$key] = null;
@@ -820,7 +845,18 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
820
  break;
821
  }
822
  }
823
- break;
 
 
 
 
 
 
 
 
 
 
 
824
  case "otherAttributeToIndex":
825
  case "other":
826
  $product[$key] = array();
@@ -898,7 +934,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
898
  $price = (isset($price_data[$product['parent_id']])) ? $price_data[$product['parent_id']]['min_price'] : $parent->getData("price");
899
  $markup = 0;
900
 
901
- if (isset($configurable_price_data[$product['parent_id']])) {
902
  foreach ($configurable_price_data[$product['parent_id']] as $attribute => $pricing_data) {
903
  $value = $item->getData($attribute);
904
  if ($value && isset($pricing_data[$value])) {
@@ -909,7 +945,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
909
  }
910
  }
911
  }
912
- }
913
  // show low price for config products
914
  $product['startPrice'] = $this->processPrice($price , $tax_class_id, $parent);
915
 
@@ -933,7 +969,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
933
  if ($item->getData("price") !== null) {
934
  $product["salePrice"] = $this->processPrice($item->getData("price"), $tax_class_id, $item);
935
  } else if ($parent) {
936
- $product["salePrice"] = $this->processPrice($parent->getData("price"), $tax_class_id, $item);
937
  }
938
  }
939
  }
@@ -964,7 +1000,18 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
964
  $product['category'] = "";
965
  $product['listCategory'] = "";
966
  }
967
-
 
 
 
 
 
 
 
 
 
 
 
968
 
969
  // Use the parent URL if the product is invisible (and has a parent) and
970
  // use a URL rewrite if one exists, falling back to catalog/product/view
@@ -1230,11 +1277,14 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1230
  if(!empty($otherAttributeToIndex)) {
1231
  $attribute_map['otherAttributeToIndex'] = $otherAttributeToIndex;
1232
  }
 
1233
  // Add boostingAttribute to $attribute_map.
1234
- if(($boosting_attribute = Mage::helper('klevu_search/config')->getBoostingAttribute($this->getStore())) && !is_null($boosting_attribute)) {
1235
- $attribute_map['boostingAttribute'][] = $boosting_attribute;
 
 
 
1236
  }
1237
-
1238
  $this->setData('attribute_map', $attribute_map);
1239
  }
1240
 
@@ -1405,7 +1455,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1405
  protected function getCategoryNames(array $categories) {
1406
  $category_paths = $this->getCategoryPaths();
1407
 
1408
- $result = array();
1409
  foreach ($categories as $category) {
1410
  if (isset($category_paths[$category])) {
1411
  $result = array_merge($result, $category_paths[$category]);
@@ -1439,6 +1489,37 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1439
 
1440
  return $name;
1441
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1442
 
1443
  /**
1444
  * Returns either array containing the label and value(s) of an attribute, or just the given value
@@ -1915,7 +1996,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1915
  * if special to price date expire then make that product for update
1916
  * @return $this
1917
  */
1918
- public function markProductForupdate(){
1919
  try {
1920
  $special_pro_ids = $this->getExpirySaleProductsIds();
1921
  if(!empty($special_pro_ids)) {
@@ -1928,7 +2009,10 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1928
  }
1929
 
1930
  /**
1931
- * Mark prodcut ids for update
 
 
 
1932
  * @return
1933
  */
1934
  public function updateSpecificProductIds($ids)
@@ -1942,4 +2026,64 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1942
  $where
1943
  );
1944
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1945
  }
39
  try {
40
 
41
  /* mark for update special price product */
42
+ $this->markProductForUpdate();
43
+
44
+ /* update boosting rule event */
45
+ Mage::dispatchEvent('update_rule_of_products', array());
46
 
47
  if ($this->isRunning(2)) {
48
  // Stop if another copy is already running
64
  if (!$this->setupSession($store)) {
65
  continue;
66
  }
67
+
68
+ $session = Mage::getSingleton('klevu_search/session');
69
+ $firstSync = $session->getFirstSync();
70
+ if(!empty($firstSync)) {
71
+ $this->updateProductsRating($store);
72
+ $session->unsFirstSync();
73
+ }
74
 
75
  $this->log(Zend_Log::INFO, sprintf("Starting sync for %s (%s).", $store->getWebsite()->getName(), $store->getName()));
76
 
107
  "sd.attribute_id = :status_attribute_id AND sd.entity_id = k.product_id AND sd.store_id = :default_store_id",
108
  ""
109
  )
110
+ ->where("(k.store_id = :store_id) AND (k.type = :type) AND (k.test_mode = :test_mode) AND ((p.entity_id IS NULL) OR (CASE WHEN ss.value_id > 0 THEN ss.value ELSE sd.value END != :status_enabled) OR (CASE WHEN k.parent_id = 0 THEN k.product_id ELSE k.parent_id END NOT IN (?)))",
111
  $this->getConnection()
112
  ->select()
113
  ->from(
118
  )
119
  ->group(array('k.product_id', 'k.parent_id'))
120
  ->bind(array(
121
+ 'type' => "products",
122
  'store_id' => $store->getId(),
123
  'default_store_id' => Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID,
124
  'test_mode' => $this->isTestModeEnabled(),
153
  "i.product_id = k.product_id AND k.store_id = i.store_id AND i.visibility IN (:visible_both, :visible_search)",
154
  ""
155
  )
156
+ ->where("(k.store_id = :store_id) AND (k.type = :type) AND (k.test_mode = :test_mode) AND (p.type_id != :configurable) AND (p.updated_at > k.last_synced_at)"),
157
  // Select products with parents (configurable) that need to be updated
158
  $this->getConnection()
159
  ->select()
197
  "sd.attribute_id = :status_attribute_id AND sd.entity_id = k.product_id AND sd.store_id = :default_store_id",
198
  ""
199
  )
200
+ ->where("(k.store_id = :store_id) AND (k.type = :type) AND (k.test_mode = :test_mode) AND (CASE WHEN ss.value_id > 0 THEN ss.value ELSE sd.value END = :status_enabled) AND ((p1.updated_at > k.last_synced_at) OR (p2.updated_at > k.last_synced_at))")
201
  ))
202
  ->group(array('k.product_id', 'k.parent_id'))
203
  ->bind(array(
204
+ 'type' => "products",
205
  'store_id' => $store->getId(),
206
  'default_store_id' => Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID,
207
  'test_mode' => $this->isTestModeEnabled(),
234
  )
235
  ->joinLeft(
236
  array('k' => $this->getTableName("klevu_search/product_sync")),
237
+ "p.entity_id = k.product_id AND k.parent_id = 0 AND i.store_id = k.store_id AND k.test_mode = :test_mode AND k.type = :type",
238
  ""
239
  )
240
  ->where("(p.type_id != :configurable) AND (k.product_id IS NULL)"),
268
  )
269
  ->joinLeft(
270
  array('k' => $this->getTableName("klevu_search/product_sync")),
271
+ "s.parent_id = k.parent_id AND s.product_id = k.product_id AND k.store_id = :store_id AND k.test_mode = :test_mode AND k.type = :type",
272
  ""
273
  )
274
  ->where("(CASE WHEN ss.value_id > 0 THEN ss.value ELSE sd.value END = :status_enabled) AND (k.product_id IS NULL)")
275
  ))
276
  ->group(array('k.product_id', 'k.parent_id'))
277
  ->bind(array(
278
+ 'type' => "products",
279
  'store_id' => $store->getId(),
280
  'default_store_id' => Mage_Catalog_Model_Abstract::DEFAULT_STORE_ID,
281
  'test_mode' => $this->isTestModeEnabled(),
338
  $store->getWebsite()->getName(),
339
  $store->getName()
340
  ));
341
+
342
  }
343
  $config->setLastProductSyncRun("now", $store);
344
 
566
  ->select()
567
  ->from(array('k' => $this->getTableName("klevu_search/product_sync")))
568
  ->where("k.store_id = ?", $this->getStore()->getId())
569
+ ->where("k.type = ?","products")
570
  ->where("k.test_mode = ?", $this->isTestModeEnabled());
571
 
572
  $skipped_record_ids = array();
581
  }
582
  $or_where[] = sprintf("(%s AND %s)",
583
  $connection->quoteInto("k.product_id = ?", $data[$i]['product_id']),
584
+ $connection->quoteInto("k.parent_id = ?", $data[$i]['parent_id']),
585
+ $connection->quoteInto("k.type = ?", "products")
586
  );
587
  }
588
  $select->where(implode(" OR ", $or_where));
620
  */
621
  protected function updateProducts(array $data) {
622
  $total = count($data);
623
+
624
  $this->addProductSyncData($data);
625
+ //print_r($data);
626
+ //exit;
627
  $response = Mage::getModel('klevu_search/api_action_updaterecords')
628
  ->setStore($this->getStore())
629
  ->execute(array(
648
 
649
  $ids = $helper->getMagentoProductId($data[$i]['id']);
650
 
651
+ $where[] = sprintf("(%s AND %s AND %s)",
652
  $connection->quoteInto("product_id = ?", $ids['product_id']),
653
+ $connection->quoteInto("parent_id = ?", $ids['parent_id']),
654
+ $connection->quoteInto("type = ?", "products")
655
  );
656
  }
657
 
700
  $total = count($data);
701
 
702
  $this->addProductSyncData($data);
 
703
  $response = Mage::getModel('klevu_search/api_action_addrecords')
704
  ->setStore($this->getStore())
705
  ->execute(array(
729
  $ids["parent_id"],
730
  $this->getStore()->getId(),
731
  $this->isTestModeEnabled(),
732
+ $sync_time,
733
+ "products"
734
  );
735
  }
736
 
737
  $this->getConnection()->insertArray(
738
  $this->getTableName('klevu_search/product_sync'),
739
+ array("product_id", "parent_id", "store_id", "test_mode", "last_synced_at","type"),
740
  $data
741
  );
742
 
822
  unset($products[$index]);
823
  continue;
824
  }
825
+
826
+ /* Use event to add any external module data to product */
827
+ Mage::dispatchEvent('add_external_data_to_sync', array(
828
+ 'parent' => $parent,
829
+ 'product'=> &$product,
830
+ 'store' => $this->getStore()
831
+ ));
832
+
833
  // Add data from mapped attributes
834
  foreach ($attribute_map as $key => $attributes) {
835
  $product[$key] = null;
845
  break;
846
  }
847
  }
848
+ break;
849
+ case "rating":
850
+ foreach ($attributes as $attribute) {
851
+ if ($parent && $parent->getData($attribute)) {
852
+ $product[$key] = $this->convertToRatingStar($parent->getData($attribute));
853
+ break;
854
+ } else {
855
+ $product[$key] = $this->convertToRatingStar($item->getData($attribute));
856
+ break;
857
+ }
858
+ }
859
+ break;
860
  case "otherAttributeToIndex":
861
  case "other":
862
  $product[$key] = array();
934
  $price = (isset($price_data[$product['parent_id']])) ? $price_data[$product['parent_id']]['min_price'] : $parent->getData("price");
935
  $markup = 0;
936
 
937
+ /*if (isset($configurable_price_data[$product['parent_id']])) {
938
  foreach ($configurable_price_data[$product['parent_id']] as $attribute => $pricing_data) {
939
  $value = $item->getData($attribute);
940
  if ($value && isset($pricing_data[$value])) {
945
  }
946
  }
947
  }
948
+ }*/
949
  // show low price for config products
950
  $product['startPrice'] = $this->processPrice($price , $tax_class_id, $parent);
951
 
969
  if ($item->getData("price") !== null) {
970
  $product["salePrice"] = $this->processPrice($item->getData("price"), $tax_class_id, $item);
971
  } else if ($parent) {
972
+ $product["salePrice"] = $this->processPrice($parent->getData("price"), $tax_class_id, $parent);
973
  }
974
  }
975
  }
1000
  $product['category'] = "";
1001
  $product['listCategory'] = "";
1002
  }
1003
+
1004
+
1005
+ if ($parent) {
1006
+ //Get the price based on customer group
1007
+ $product['groupPrices'] = $this->getGroupPrices($parent);
1008
+ } else if($item) {
1009
+ $product['groupPrices'] = $this->getGroupPrices($item);
1010
+ } else {
1011
+ $product['groupPrices'] = "";
1012
+ }
1013
+
1014
+
1015
 
1016
  // Use the parent URL if the product is invisible (and has a parent) and
1017
  // use a URL rewrite if one exists, falling back to catalog/product/view
1277
  if(!empty($otherAttributeToIndex)) {
1278
  $attribute_map['otherAttributeToIndex'] = $otherAttributeToIndex;
1279
  }
1280
+
1281
  // Add boostingAttribute to $attribute_map.
1282
+ $boosting_value = Mage::helper('klevu_search/config')->getBoostingAttribute($this->getStore());
1283
+ if($boosting_value != "use_boosting_rule") {
1284
+ if(($boosting_attribute = Mage::helper('klevu_search/config')->getBoostingAttribute($this->getStore())) && !is_null($boosting_attribute)) {
1285
+ $attribute_map['boostingAttribute'][] = $boosting_attribute;
1286
+ }
1287
  }
 
1288
  $this->setData('attribute_map', $attribute_map);
1289
  }
1290
 
1455
  protected function getCategoryNames(array $categories) {
1456
  $category_paths = $this->getCategoryPaths();
1457
 
1458
+ $result = array("KLEVU_PRODUCT");
1459
  foreach ($categories as $category) {
1460
  if (isset($category_paths[$category])) {
1461
  $result = array_merge($result, $category_paths[$category]);
1489
 
1490
  return $name;
1491
  }
1492
+
1493
+ /**
1494
+ * Get the list of prices based on customer group
1495
+ *
1496
+ * @param object $item OR $parent
1497
+ *
1498
+ * @return array
1499
+ */
1500
+ protected function getGroupPrices($proData) {
1501
+ $groupPrices = $proData->getData('group_price');
1502
+ if (is_null($groupPrices)) {
1503
+ $attribute = $proData->getResource()->getAttribute('group_price');
1504
+ if ($attribute){
1505
+ $attribute->getBackend()->afterLoad($proData);
1506
+ $groupPrices = $proData->getData('group_price');
1507
+ }
1508
+ }
1509
+
1510
+ if (!empty($groupPrices) && is_array($groupPrices)) {
1511
+ foreach ($groupPrices as $groupPrice) {
1512
+ if($this->getStore()->getWebsiteId()== $groupPrice['website_id'] || $groupPrice['website_id']==0) {
1513
+ $groupPriceKey = $groupPrice['cust_group'];
1514
+ $groupname = Mage::getModel('customer/group')->load($groupPrice['cust_group'])->getCustomerGroupCode();
1515
+ $result['label'] = $groupname;
1516
+ $result['values'] = $groupPrice['website_price'];
1517
+ $priceGroupData[$groupPriceKey]= $result;
1518
+ }
1519
+ }
1520
+ return $priceGroupData;
1521
+ }
1522
+ }
1523
 
1524
  /**
1525
  * Returns either array containing the label and value(s) of an attribute, or just the given value
1996
  * if special to price date expire then make that product for update
1997
  * @return $this
1998
  */
1999
+ public function markProductForUpdate(){
2000
  try {
2001
  $special_pro_ids = $this->getExpirySaleProductsIds();
2002
  if(!empty($special_pro_ids)) {
2009
  }
2010
 
2011
  /**
2012
+ * Mark product ids for update
2013
+ *
2014
+ * @param array ids
2015
+ *
2016
  * @return
2017
  */
2018
  public function updateSpecificProductIds($ids)
2026
  $where
2027
  );
2028
  }
2029
+
2030
+ /**
2031
+ * Update all product ids rating attribute
2032
+ *
2033
+ * @param string store
2034
+ *
2035
+ * @return $this
2036
+ */
2037
+ public function updateProductsRating($store)
2038
+ {
2039
+ $sumColumn = new Zend_Db_Expr("AVG(rating_vote.{$this->getConnection()->quoteIdentifier('percent')})");
2040
+ $select = $this->getConnection()->select()
2041
+ ->from(array('rating_vote' => $this->getTableName('rating/rating_option_vote')),
2042
+ array(
2043
+ 'entity_pk_value' => 'rating_vote.entity_pk_value',
2044
+ 'sum' => $sumColumn,
2045
+ ))
2046
+ ->join(array('review' => $this->getTableName('review/review')),
2047
+ 'rating_vote.review_id=review.review_id',
2048
+ array())
2049
+ ->joinLeft(array('review_store' => $this->getTableName('review/review_store')),
2050
+ 'rating_vote.review_id=review_store.review_id',
2051
+ array('review_store.store_id'))
2052
+ ->join(array('rating_store' => $this->getTableName('rating/rating_store')),
2053
+ 'rating_store.rating_id = rating_vote.rating_id AND rating_store.store_id = review_store.store_id',
2054
+ array())
2055
+ ->join(array('review_status' => $this->getTableName('review/review_status')),
2056
+ 'review.status_id = review_status.status_id',
2057
+ array())
2058
+ ->where('review_status.status_code = :status_code AND rating_store.store_id = :storeId')
2059
+ ->group('rating_vote.entity_pk_value')
2060
+ ->group('review_store.store_id');
2061
+ $bind = array('status_code' => "Approved",'storeId' => $store->getId());
2062
+ $data_ratings = $this->getConnection()->fetchAll($select,$bind);
2063
+ $allStores = Mage::app()->getStores();
2064
+ foreach($data_ratings as $key => $value)
2065
+ {
2066
+ Mage::getModel('catalog/product_action')->updateAttributes(array($value['entity_pk_value']), array('rating'=>$value['sum']), $store->getId());
2067
+ if(count($allStores) > 1) {
2068
+ Mage::getModel('catalog/product_action')->updateAttributes(array($value['entity_pk_value']), array('rating'=>0),0);
2069
+ }
2070
+ }
2071
+ }
2072
+
2073
+ /**
2074
+ * Convert percent to rating star
2075
+ *
2076
+ * @param int percentage
2077
+ *
2078
+ * @return float
2079
+ */
2080
+ public function convertToRatingStar($percentage) {
2081
+ if(!empty($percentage) && $percentage!=0) {
2082
+ $start = $percentage * 5;
2083
+ return round($start/100, 2);
2084
+ } else {
2085
+ return;
2086
+ }
2087
+ }
2088
+
2089
  }
app/code/community/Klevu/Search/Model/System/Config/Source/Boosting/Attribute.php CHANGED
@@ -9,11 +9,16 @@ class Klevu_Search_Model_System_Config_Source_Boosting_Attribute {
9
  */
10
  public function toOptionArray() {
11
  $attributes = $this->getAttributeCollection();
 
 
 
 
12
  $options = array(
13
  array(
14
  'value' => null,
15
  'label' => '--- No Attribute Selected ---'
16
- )
 
17
  );
18
  foreach($attributes as $attribute) {
19
  /** @var Mage_Catalog_Model_Resource_Eav_Attribute $attribute */
@@ -27,7 +32,7 @@ class Klevu_Search_Model_System_Config_Source_Boosting_Attribute {
27
  }
28
 
29
  /**
30
- * Get only integer and decimal attributes that are not used by Klevu yet.
31
  *
32
  * @return Mage_Catalog_Model_Resource_Product_Attribute_Collection
33
  */
@@ -35,7 +40,7 @@ class Klevu_Search_Model_System_Config_Source_Boosting_Attribute {
35
  /** @var Mage_Catalog_Model_Resource_Product_Attribute_Collection $collection */
36
  $collection = Mage::getResourceModel('catalog/product_attribute_collection');
37
 
38
- // We only want integers and decimal attributes.
39
  $collection->addFieldToFilter(
40
  'backend_type',
41
  array(
9
  */
10
  public function toOptionArray() {
11
  $attributes = $this->getAttributeCollection();
12
+ $boost_option = array(
13
+ 'value' => null,
14
+ 'label' => ''
15
+ );
16
  $options = array(
17
  array(
18
  'value' => null,
19
  'label' => '--- No Attribute Selected ---'
20
+ ),
21
+ $boost_option
22
  );
23
  foreach($attributes as $attribute) {
24
  /** @var Mage_Catalog_Model_Resource_Eav_Attribute $attribute */
32
  }
33
 
34
  /**
35
+ * Get only integer,varchar and decimal attributes that are not used by Klevu yet.
36
  *
37
  * @return Mage_Catalog_Model_Resource_Product_Attribute_Collection
38
  */
40
  /** @var Mage_Catalog_Model_Resource_Product_Attribute_Collection $collection */
41
  $collection = Mage::getResourceModel('catalog/product_attribute_collection');
42
 
43
+ // We want integers,varchar and decimal attributes.
44
  $collection->addFieldToFilter(
45
  'backend_type',
46
  array(
app/code/community/Klevu/Search/Model/System/Config/Source/Syncoptions.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Klevu_Search_Model_System_Config_Source_Syncoptions {
4
+
5
+ const SYNC_PARTIALLY = 1;
6
+ const SYNC_ALL = 2;
7
+
8
+ public function toOptionArray() {
9
+ $helper = Mage::helper("klevu_search");
10
+ return array(
11
+ array(
12
+ 'label' => $helper->__("Updates only (syncs data immediately)"),
13
+ 'value' => static::SYNC_PARTIALLY
14
+ ),
15
+ array(
16
+ 'label' => $helper->__("All data (syncs data on CRON execution)"),
17
+ 'value' => static::SYNC_ALL
18
+ )
19
+ );
20
+ }
21
+ }
app/code/community/Klevu/Search/Test/Model/Product/Sync.php CHANGED
@@ -287,7 +287,7 @@ class Klevu_Search_Test_Model_Product_Sync extends Klevu_Search_Test_Model_Api_T
287
  {
288
  $model = Mage::getModel("klevu_search/product_sync");
289
  $expirySaleProductsIds = $model->getExpirySaleProductsIds();
290
- $model->markProductForupdate();
291
  $this->assertEquals($this->getExpectedSpecialpriceProducts(), $expirySaleProductsIds);
292
  }
293
 
@@ -301,7 +301,7 @@ class Klevu_Search_Test_Model_Product_Sync extends Klevu_Search_Test_Model_Api_T
301
 
302
  $model = Mage::getModel("klevu_search/product_sync");
303
  $catalogruleProductsIds = $model->getCatalogRuleProductsIds();
304
- $model->markProductForupdate();
305
  $this->assertEquals($this->getExpectedSpecialpriceProducts(), $catalogruleProductsIds);
306
 
307
  }
287
  {
288
  $model = Mage::getModel("klevu_search/product_sync");
289
  $expirySaleProductsIds = $model->getExpirySaleProductsIds();
290
+ $model->markProductForUpdate();
291
  $this->assertEquals($this->getExpectedSpecialpriceProducts(), $expirySaleProductsIds);
292
  }
293
 
301
 
302
  $model = Mage::getModel("klevu_search/product_sync");
303
  $catalogruleProductsIds = $model->getCatalogRuleProductsIds();
304
+ $model->markProductForUpdate();
305
  $this->assertEquals($this->getExpectedSpecialpriceProducts(), $catalogruleProductsIds);
306
 
307
  }
app/code/community/Klevu/Search/controllers/Adminhtml/Klevu/Search/WizardController.php CHANGED
@@ -1,7 +1,8 @@
1
  <?php
2
 
3
  class Klevu_Search_Adminhtml_Klevu_Search_WizardController extends Mage_Adminhtml_Controller_Action {
4
-
 
5
  public function configure_userAction() {
6
  $this->loadLayout();
7
  $this->initLayoutMessages('klevu_search/session');
@@ -9,6 +10,7 @@ class Klevu_Search_Adminhtml_Klevu_Search_WizardController extends Mage_Adminhtm
9
  }
10
 
11
  public function configure_user_postAction() {
 
12
  $request = $this->getRequest();
13
 
14
  if (!$request->isPost() || !$request->isAjax()) {
@@ -31,9 +33,18 @@ class Klevu_Search_Adminhtml_Klevu_Search_WizardController extends Mage_Adminhtm
31
  $klevu_new_url = $request->getPost("klevu_new_url");
32
  $merchantEmail = $request->getPost("merchantEmail");
33
  $contactNo = $request->getPost("countyCode")."-".$request->getPost("contactNo");
34
- if(!empty($klevu_new_email) && !empty($klevu_new_password) && !empty($userPlan) && !empty($klevu_new_url)
35
- && !empty($merchantEmail) ) {
36
-
 
 
 
 
 
 
 
 
 
37
  /* if partner account selected as UserPlan then change plan to trial*/
38
  if($userPlan=="partnerAccount"){
39
  $userPlan = "trial";
@@ -47,10 +58,7 @@ class Klevu_Search_Adminhtml_Klevu_Search_WizardController extends Mage_Adminhtm
47
  $request->getPost("klevu_new_url"),
48
  $request->getPost("merchantEmail"),
49
  $contactNo
50
- );
51
- } else {
52
- $session->addError(Mage::helper("klevu_search")->__("Missing details in the form. Please check."));
53
- return $this->_forward("configure_user");
54
  }
55
  }
56
 
@@ -128,6 +136,7 @@ class Klevu_Search_Adminhtml_Klevu_Search_WizardController extends Mage_Adminhtm
128
  $config->setRestHostname($result['webstore']->getRestHostname(), $store, $test_mode);
129
  if (isset($result["message"])) {
130
  $session->addSuccess(Mage::helper("klevu_search")->__($result["message"]));
 
131
  }
132
  } else {
133
  $session->addError(Mage::helper("klevu_search")->__($result["message"]));
1
  <?php
2
 
3
  class Klevu_Search_Adminhtml_Klevu_Search_WizardController extends Mage_Adminhtml_Controller_Action {
4
+
5
+
6
  public function configure_userAction() {
7
  $this->loadLayout();
8
  $this->initLayoutMessages('klevu_search/session');
10
  }
11
 
12
  public function configure_user_postAction() {
13
+
14
  $request = $this->getRequest();
15
 
16
  if (!$request->isPost() || !$request->isAjax()) {
33
  $klevu_new_url = $request->getPost("klevu_new_url");
34
  $merchantEmail = $request->getPost("merchantEmail");
35
  $contactNo = $request->getPost("countyCode")."-".$request->getPost("contactNo");
36
+ $error = true;
37
+ if(empty($klevu_new_email) && empty($klevu_new_password) && empty($userPlan) && empty($klevu_new_url)
38
+ && empty($merchantEmail) ) {
39
+ $session->addError(Mage::helper("klevu_search")->__("Missing details in the form. Please check."));
40
+ return $this->_forward("configure_user");
41
+ } else if(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i",$klevu_new_email)) {
42
+ $session->addError(Mage::helper("klevu_search")->__("Please enter valid Primary Email."));
43
+ return $this->_forward("configure_user");
44
+ } else if(!preg_match("/^[_\.0-9a-zA-Z-]+@([0-9a-zA-Z][0-9a-zA-Z-]+\.)+[a-zA-Z]{2,6}$/i",$merchantEmail)) {
45
+ $session->addError(Mage::helper("klevu_search")->__("Please enter valid Retailer Email."));
46
+ return $this->_forward("configure_user");
47
+ }else {
48
  /* if partner account selected as UserPlan then change plan to trial*/
49
  if($userPlan=="partnerAccount"){
50
  $userPlan = "trial";
58
  $request->getPost("klevu_new_url"),
59
  $request->getPost("merchantEmail"),
60
  $contactNo
61
+ );
 
 
 
62
  }
63
  }
64
 
136
  $config->setRestHostname($result['webstore']->getRestHostname(), $store, $test_mode);
137
  if (isset($result["message"])) {
138
  $session->addSuccess(Mage::helper("klevu_search")->__($result["message"]));
139
+ $session->setFirstSync($store_code);
140
  }
141
  } else {
142
  $session->addError(Mage::helper("klevu_search")->__($result["message"]));
app/code/community/Klevu/Search/controllers/Adminhtml/Klevu/SearchController.php CHANGED
@@ -2,9 +2,9 @@
2
 
3
  class Klevu_Search_Adminhtml_Klevu_SearchController extends Mage_Adminhtml_Controller_Action {
4
 
 
5
  public function sync_allAction() {
6
  $store = $this->getRequest()->getParam("store");
7
-
8
  if ($store !== null) {
9
  try {
10
  $store = Mage::app()->getStore($store);
@@ -15,36 +15,66 @@ class Klevu_Search_Adminhtml_Klevu_SearchController extends Mage_Adminhtml_Contr
15
  }
16
 
17
  if (Mage::helper('klevu_search/config')->isProductSyncEnabled()) {
18
- Mage::getModel('klevu_search/product_sync')
19
- ->markAllProductsForUpdate($store)
20
- ->schedule();
 
 
21
 
22
- if ($store) {
23
- Mage::helper("klevu_search")->log(Zend_Log::INFO, sprintf("Product Sync scheduled to re-sync ALL products in %s (%s).",
24
- $store->getWebsite()->getName(),
25
- $store->getName()
26
- ));
27
 
28
- Mage::getSingleton("adminhtml/session")->addSuccess($this->__("Klevu Search Product Sync scheduled to be run on the next cron run for ALL products in %s (%s).",
29
- $store->getWebsite()->getName(),
30
- $store->getName()
31
- ));
32
- } else {
33
- Mage::helper("klevu_search")->log(Zend_Log::INFO, "Product Sync scheduled to re-sync ALL products.");
34
 
35
- Mage::getSingleton('adminhtml/session')->addSuccess($this->__("Klevu Search Product Sync scheduled to be run on the next cron run for ALL products."));
 
 
 
36
  }
37
  } else {
38
  Mage::getSingleton('adminhtml/session')->addError($this->__("Klevu Search Product Sync is disabled."));
39
  }
 
 
 
 
40
 
41
  return $this->_redirectReferer("adminhtml/dashboard");
42
  }
43
-
 
44
  public function manual_syncAction() {
45
  Mage::getModel("klevu_search/product_sync")->runManually();
46
-
 
47
  return $this->_redirectReferer("adminhtml/dashboard");
48
  }
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  }
2
 
3
  class Klevu_Search_Adminhtml_Klevu_SearchController extends Mage_Adminhtml_Controller_Action {
4
 
5
+ /* Sync data based on sync options selected */
6
  public function sync_allAction() {
7
  $store = $this->getRequest()->getParam("store");
 
8
  if ($store !== null) {
9
  try {
10
  $store = Mage::app()->getStore($store);
15
  }
16
 
17
  if (Mage::helper('klevu_search/config')->isProductSyncEnabled()) {
18
+
19
+ if(Mage::helper('klevu_search/config')->getSyncOptionsFlag() == "2") {
20
+ Mage::getModel('klevu_search/product_sync')
21
+ ->markAllProductsForUpdate($store)
22
+ ->schedule();
23
 
24
+ if ($store) {
25
+ Mage::helper("klevu_search")->log(Zend_Log::INFO, sprintf("Product Sync scheduled to re-sync ALL products in %s (%s).",
26
+ $store->getWebsite()->getName(),
27
+ $store->getName()
28
+ ));
29
 
30
+ Mage::getSingleton("adminhtml/session")->addSuccess($this->__("Klevu Search Product Sync scheduled to be run on the next cron run for ALL products in %s (%s).",
31
+ $store->getWebsite()->getName(),
32
+ $store->getName()
33
+ ));
34
+ } else {
35
+ Mage::helper("klevu_search")->log(Zend_Log::INFO, "Product Sync scheduled to re-sync ALL products.");
36
 
37
+ Mage::getSingleton('adminhtml/session')->addSuccess($this->__("Klevu Search Sync scheduled to be run on the next cron run for ALL products."));
38
+ }
39
+ } else {
40
+ $this->syncWithoutCron();
41
  }
42
  } else {
43
  Mage::getSingleton('adminhtml/session')->addError($this->__("Klevu Search Product Sync is disabled."));
44
  }
45
+
46
+ Mage::dispatchEvent('sync_all_external_data', array(
47
+ 'store' => $store
48
+ ));
49
 
50
  return $this->_redirectReferer("adminhtml/dashboard");
51
  }
52
+
53
+ /* Run the product sync externally */
54
  public function manual_syncAction() {
55
  Mage::getModel("klevu_search/product_sync")->runManually();
56
+ /* Use event For other content sync */
57
+ Mage::dispatchEvent('content_data_to_sync', array());
58
  return $this->_redirectReferer("adminhtml/dashboard");
59
  }
60
 
61
+ /* Run the product sync */
62
+ public function syncWithoutCron() {
63
+ try {
64
+ Mage::getModel("klevu_search/product_sync")->run();
65
+ /* Use event For other content sync */
66
+ Mage::dispatchEvent('content_data_to_sync', array());
67
+ Mage::getSingleton('adminhtml/session')->addSuccess($this->__("Data updates have been sent to Klevu"));
68
+ } catch (Mage_Core_Model_Store_Exception $e) {
69
+ Mage::logException($e);
70
+ }
71
+ return $this->_redirectReferer("adminhtml/dashboard");
72
+ }
73
+
74
+ /* save sync options using Ajax */
75
+ public function save_sync_options_configAction() {
76
+ $sync_options = $this->getRequest()->getParam("sync_options");
77
+ Mage::helper('klevu_search/config')->saveSyncOptions($sync_options);
78
+ }
79
+
80
  }
app/code/community/Klevu/Search/controllers/IndexController.php CHANGED
@@ -6,8 +6,14 @@ class Klevu_Search_IndexController extends Mage_Core_Controller_Front_Action {
6
 
7
  public function IndexAction() {
8
 
9
- $this->loadLayout();
10
- $this->getLayout()->getBlock("head")->setTitle($this->__("Search"));
 
 
 
 
 
 
11
  if($breadcrumbs = $this->getLayout()->getBlock("breadcrumbs")) {
12
  $breadcrumbs->addCrumb("home", array(
13
  "label" => $this->__("Home"),
6
 
7
  public function IndexAction() {
8
 
9
+ $this->loadLayout();
10
+ $query = $this->getRequest()->getParam('q');
11
+ if(!empty($query)) {
12
+ $head = $this->getLayout()->getBlock('head');
13
+ $head->setTitle($this->__(sprintf("Search results for: '%s'",$query)));
14
+ } else {
15
+ $this->getLayout()->getBlock("head")->setTitle($this->__("Search"));
16
+ }
17
  if($breadcrumbs = $this->getLayout()->getBlock("breadcrumbs")) {
18
  $breadcrumbs->addCrumb("home", array(
19
  "label" => $this->__("Home"),
app/code/community/Klevu/Search/etc/adminhtml.xml CHANGED
@@ -4,17 +4,16 @@
4
  <resources>
5
  <admin>
6
  <children>
7
- <klevu_search translate="title" module="klevu_search">
8
- <title>Klevu Search</title>
9
- <sort_order>100</sort_order>
10
- </klevu_search>
11
  <system>
12
  <children>
13
  <config>
14
  <children>
15
  <klevu_search translate="title" module="klevu_search">
16
- <title>Klevu Search Section</title>
17
  </klevu_search>
 
 
 
18
  </children>
19
  </config>
20
  </children>
4
  <resources>
5
  <admin>
6
  <children>
 
 
 
 
7
  <system>
8
  <children>
9
  <config>
10
  <children>
11
  <klevu_search translate="title" module="klevu_search">
12
+ <title>Klevu Search configuration</title>
13
  </klevu_search>
14
+ <klevu_search_info translate="title" module="klevu_search">
15
+ <title>Help Center</title>
16
+ </klevu_search_info>
17
  </children>
18
  </config>
19
  </children>
app/code/community/Klevu/Search/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Klevu_Search>
5
- <version>1.1.21</version>
6
  </Klevu_Search>
7
  </modules>
8
  <global>
@@ -35,7 +35,6 @@
35
  </order_sync>
36
  </entities>
37
  </klevu_search_resource>
38
-
39
  </models>
40
  <resources>
41
  <klevu_search_setup>
@@ -172,6 +171,15 @@
172
  </klevu_search_categroy_product_sync>
173
  </observers>
174
  </catalog_category_change_products>
 
 
 
 
 
 
 
 
 
175
  </events>
176
  </global>
177
  <admin>
@@ -235,7 +243,6 @@
235
  <model>klevu_search/order_sync::run</model>
236
  </run>
237
  </klevu_search_order_sync>
238
-
239
  </jobs>
240
  </crontab>
241
  <default>
@@ -257,6 +264,7 @@
257
  <enabled>1</enabled>
258
  <frequency>0 * * * *</frequency>
259
  <last_run>Never</last_run>
 
260
  </product_sync>
261
  <searchlanding>
262
  <landenabled>2</landenabled>
2
  <config>
3
  <modules>
4
  <Klevu_Search>
5
+ <version>1.1.22</version>
6
  </Klevu_Search>
7
  </modules>
8
  <global>
35
  </order_sync>
36
  </entities>
37
  </klevu_search_resource>
 
38
  </models>
39
  <resources>
40
  <klevu_search_setup>
171
  </klevu_search_categroy_product_sync>
172
  </observers>
173
  </catalog_category_change_products>
174
+ <review_save_after>
175
+ <observers>
176
+ <ratingsUpdate>
177
+ <type>singleton</type>
178
+ <class>klevu_search/observer</class>
179
+ <method>ratingsUpdate</method>
180
+ </ratingsUpdate>
181
+ </observers>
182
+ </review_save_after>
183
  </events>
184
  </global>
185
  <admin>
243
  <model>klevu_search/order_sync::run</model>
244
  </run>
245
  </klevu_search_order_sync>
 
246
  </jobs>
247
  </crontab>
248
  <default>
264
  <enabled>1</enabled>
265
  <frequency>0 * * * *</frequency>
266
  <last_run>Never</last_run>
267
+ <sync_options>1</sync_options>
268
  </product_sync>
269
  <searchlanding>
270
  <landenabled>2</landenabled>
app/code/community/Klevu/Search/etc/system.xml CHANGED
@@ -1,10 +1,16 @@
1
  <?xml version="1.0"?>
2
  <config>
 
 
 
 
 
 
3
  <sections>
4
  <klevu_search translate="label" module="klevu_search">
5
- <label>Klevu Search</label>
6
- <tab>catalog</tab>
7
- <sort_order>50</sort_order>
8
  <show_in_default>1</show_in_default>
9
  <show_in_website>1</show_in_website>
10
  <show_in_store>1</show_in_store>
@@ -62,7 +68,7 @@
62
  </wizard>
63
  <hostname translate="label comment">
64
  <label>Hostname</label>
65
- <comment><![CDATA[This Hostname is used for sending API requests to Klevu]]></comment>
66
  <sort_order>132</sort_order>
67
  <show_in_default>0</show_in_default>
68
  <show_in_website>0</show_in_website>
@@ -86,7 +92,7 @@
86
  </cloud_search_url>
87
  <analytics_url translate="label comment">
88
  <label>Analytics URL</label>
89
- <comment><![CDATA[The Analytics URL is used when reporting search terms and click to Klevu]]></comment>
90
  <sort_order>132</sort_order>
91
  <show_in_default>0</show_in_default>
92
  <show_in_website>0</show_in_website>
@@ -106,15 +112,13 @@
106
  <searchlanding translate="label">
107
  <label>Search Result Page Settings</label>
108
  <sort_order>101</sort_order>
109
- <expanded>1</expanded>
110
  <show_in_default>1</show_in_default>
111
  <show_in_website>1</show_in_website>
112
  <show_in_store>1</show_in_store>
113
  <fields>
114
  <landenabled translate="label">
115
  <label>Search Result Page</label>
116
- <comment><![CDATA[** "Preserves Your Theme Layout" option preserves layout of your theme.
117
- ]]></comment>
118
  <frontend_type>select</frontend_type>
119
  <source_model>klevu_search/system_config_source_landingoptions</source_model>
120
  <sort_order>100</sort_order>
@@ -126,7 +130,7 @@
126
  </searchlanding>
127
  <product_sync translate="label">
128
  <label>Product Sync Settings</label>
129
- <sort_order>200</sort_order>
130
  <show_in_default>1</show_in_default>
131
  <show_in_website>1</show_in_website>
132
  <show_in_store>1</show_in_store>
@@ -158,6 +162,24 @@
158
  <show_in_website>1</show_in_website>
159
  <show_in_store>1</show_in_store>
160
  </last_run>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
161
  <sync_button>
162
  <label></label>
163
  <frontend_model>klevu_search/adminhtml_form_field_sync_button</frontend_model>
@@ -168,13 +190,60 @@
168
  </sync_button>
169
  </fields>
170
  </product_sync>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
171
  <attributes translate="label">
172
- <label>Product Attribute Mappings</label>
173
- <sort_order>300</sort_order>
174
  <show_in_default>1</show_in_default>
175
  <show_in_website>1</show_in_website>
176
  <show_in_store>1</show_in_store>
177
  <fields>
 
 
 
 
 
 
 
 
 
178
  <additional translate="label comment">
179
  <label>Additional Attributes</label>
180
  <comment><![CDATA[Here you can set optional product attributes sent to Klevu by mapping them to your Magento attributes. If you specify multiple mappings for the same Klevu attribute, only the first mapping found on the product sent will be used.]]></comment>
@@ -197,17 +266,17 @@
197
  </automatic>
198
  <boosting translate="label comment">
199
  <label>Boosting Attribute</label>
200
- <comment><![CDATA[Select the attribute you wish to use as the Boosting attribute in Klevu. The Boosting attribute is a decimal or integer product attribute which allows you to manually boost certain products. All products have a default score of 1, to promote a product simply give the product a score higher than 1, to demote give a score lower than 1 (i.e. 0.1)]]></comment>
201
  <frontend_type>select</frontend_type>
202
  <source_model>klevu_search/system_config_source_boosting_attribute</source_model>
203
- <sort_order>500</sort_order>
204
  <show_in_default>0</show_in_default>
205
  <show_in_website>0</show_in_website>
206
  <show_in_store>1</show_in_store>
207
  </boosting>
208
  <other translate="label comment">
209
- <label>Other Attributes To Index</label>
210
- <comment><![CDATA[Select all other attributes you would like Klevu to index and use to improve search results.</br>Please make sure to resynchronize products by clicking on the "Sync All Products for This Store" under the "Product Sync Settings".]]></comment>
211
  <frontend_type>multiselect</frontend_type>
212
  <source_model>klevu_search/system_config_source_product_attributes</source_model>
213
  <can_be_empty>1</can_be_empty>
@@ -216,54 +285,37 @@
216
  <show_in_website>0</show_in_website>
217
  <show_in_store>1</show_in_store>
218
  </other>
 
 
 
 
 
 
 
 
 
 
219
  </fields>
220
  </attributes>
221
- <order_sync translate="label">
222
- <label>Order Sync Settings</label>
223
- <sort_order>400</sort_order>
224
- <show_in_default>1</show_in_default>
225
  <show_in_default>1</show_in_default>
 
226
  <show_in_store>1</show_in_store>
227
  <fields>
228
- <enabled translate="label comment">
229
- <label>Enable Order Sync</label>
230
- <comment><![CDATA[Enable Order Sync]]></comment>
231
- <frontend_type>select</frontend_type>
232
- <source_model>klevu_search/system_config_source_yesnoforced</source_model>
233
- <sort_order>100</sort_order>
234
- <show_in_default>1</show_in_default>
235
- <show_in_website>1</show_in_website>
236
- <show_in_store>1</show_in_store>
237
- </enabled>
238
- <frequency translate="label">
239
- <label>Frequency</label>
240
- <frontend_type>select</frontend_type>
241
- <source_model>klevu_search/system_config_source_frequency</source_model>
242
- <sort_order>200</sort_order>
243
- <show_in_default>1</show_in_default>
244
- <show_in_website>0</show_in_website>
245
- <show_in_store>0</show_in_store>
246
- </frequency>
247
- <last_run translate="label">
248
- <label>Last Run</label>
249
  <frontend_type>label</frontend_type>
250
- <sort_order>300</sort_order>
251
  <show_in_default>1</show_in_default>
252
  <show_in_website>0</show_in_website>
253
  <show_in_store>0</show_in_store>
254
- </last_run>
255
- </fields>
256
- </order_sync>
257
- <tax_setting translate="label">
258
- <label>Tax Settings</label>
259
- <sort_order>400</sort_order>
260
- <show_in_default>0</show_in_default>
261
- <show_in_website>0</show_in_website>
262
- <show_in_store>1</show_in_store>
263
- <fields>
264
  <enabled translate="label comment">
265
  <label>Include Tax in Price</label>
266
- <comment><![CDATA[Please make sure to resynchronize products by clicking on the "Sync All Products for This Store" under the "Product Sync Settings".]]></comment>
267
  <frontend_type>select</frontend_type>
268
  <source_model>adminhtml/system_config_source_yesno</source_model>
269
  <sort_order>100</sort_order>
@@ -271,19 +323,28 @@
271
  <show_in_website>0</show_in_website>
272
  <show_in_store>1</show_in_store>
273
  </enabled>
274
-
275
  </fields>
276
  </tax_setting>
277
  <secureurl_setting translate="label">
278
  <label>Secure Url Settings</label>
279
- <sort_order>400</sort_order>
280
- <show_in_default>0</show_in_default>
281
  <show_in_website>0</show_in_website>
282
  <show_in_store>1</show_in_store>
 
283
  <fields>
 
 
 
 
 
 
 
 
 
284
  <enabled translate="label comment">
285
  <label>Use Secure Base Url for Products and Images</label>
286
- <comment><![CDATA[Choose Yes to use secure base url from System > Cofiguration > Store view > Secure > Base URL.</br>Please make sure to resynchronize products by clicking on the "Sync All Products for This Store" under the "Product Sync Settings".]]></comment>
287
  <frontend_type>select</frontend_type>
288
  <source_model>adminhtml/system_config_source_yesno</source_model>
289
  <sort_order>100</sort_order>
@@ -295,7 +356,7 @@
295
  </secureurl_setting>
296
  <developer translate="label">
297
  <label>Developer Settings</label>
298
- <sort_order>900</sort_order>
299
  <show_in_default>1</show_in_default>
300
  <show_in_website>0</show_in_website>
301
  <show_in_store>0</show_in_store>
@@ -334,5 +395,24 @@
334
  </developer>
335
  </groups>
336
  </klevu_search>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
337
  </sections>
338
  </config>
1
  <?xml version="1.0"?>
2
  <config>
3
+ <tabs>
4
+ <klevu translate="label" module="klevu_search">
5
+ <label>Klevu</label>
6
+ <sort_order>0</sort_order>
7
+ </klevu>
8
+ </tabs>
9
  <sections>
10
  <klevu_search translate="label" module="klevu_search">
11
+ <label>Search Configuration</label>
12
+ <tab>klevu</tab>
13
+ <sort_order>0</sort_order>
14
  <show_in_default>1</show_in_default>
15
  <show_in_website>1</show_in_website>
16
  <show_in_store>1</show_in_store>
68
  </wizard>
69
  <hostname translate="label comment">
70
  <label>Hostname</label>
71
+ <comment><![CDATA[The Hostname is used for sending store configuration parameters to Klevu]]></comment>
72
  <sort_order>132</sort_order>
73
  <show_in_default>0</show_in_default>
74
  <show_in_website>0</show_in_website>
92
  </cloud_search_url>
93
  <analytics_url translate="label comment">
94
  <label>Analytics URL</label>
95
+ <comment><![CDATA[The Analytics URL is used for reporting search terms and clicks to Klevu.]]></comment>
96
  <sort_order>132</sort_order>
97
  <show_in_default>0</show_in_default>
98
  <show_in_website>0</show_in_website>
112
  <searchlanding translate="label">
113
  <label>Search Result Page Settings</label>
114
  <sort_order>101</sort_order>
 
115
  <show_in_default>1</show_in_default>
116
  <show_in_website>1</show_in_website>
117
  <show_in_store>1</show_in_store>
118
  <fields>
119
  <landenabled translate="label">
120
  <label>Search Result Page</label>
121
+ <comment><![CDATA[** "Preserves Your Theme Layout" option preserves layout of your theme.]]></comment>
 
122
  <frontend_type>select</frontend_type>
123
  <source_model>klevu_search/system_config_source_landingoptions</source_model>
124
  <sort_order>100</sort_order>
130
  </searchlanding>
131
  <product_sync translate="label">
132
  <label>Product Sync Settings</label>
133
+ <sort_order>250</sort_order>
134
  <show_in_default>1</show_in_default>
135
  <show_in_website>1</show_in_website>
136
  <show_in_store>1</show_in_store>
162
  <show_in_website>1</show_in_website>
163
  <show_in_store>1</show_in_store>
164
  </last_run>
165
+ <sync_options translate="label comment">
166
+ <label>Sync</label>
167
+ <frontend_type>select</frontend_type>
168
+ <source_model>klevu_search/system_config_source_syncoptions</source_model>
169
+ <sort_order>398</sort_order>
170
+ <show_in_default>1</show_in_default>
171
+ <show_in_website>0</show_in_website>
172
+ <show_in_store>0</show_in_store>
173
+ </sync_options>
174
+ <sync_options_info translate="label comment">
175
+ <label>Sync</label>
176
+ <comment><![CDATA[To change the mode of sync (i.e. All data vs updates only), Please change the mode from the "Default config"]]></comment>
177
+ <sort_order>399</sort_order>
178
+ <frontend_model>klevu_search/adminhtml_form_syncoptionsinfo</frontend_model>
179
+ <show_in_default>0</show_in_default>
180
+ <show_in_website>0</show_in_website>
181
+ <show_in_store>1</show_in_store>
182
+ </sync_options_info>
183
  <sync_button>
184
  <label></label>
185
  <frontend_model>klevu_search/adminhtml_form_field_sync_button</frontend_model>
190
  </sync_button>
191
  </fields>
192
  </product_sync>
193
+ <order_sync translate="label">
194
+ <label>Order Sync Settings</label>
195
+ <sort_order>201</sort_order>
196
+ <show_in_default>1</show_in_default>
197
+ <show_in_default>1</show_in_default>
198
+ <show_in_store>1</show_in_store>
199
+ <fields>
200
+ <enabled translate="label comment">
201
+ <label>Enable Order Sync</label>
202
+ <comment><![CDATA[If enabled, Klevu synchronizes the checkouts recorded on your
203
+ website. These checkouts are used for adjusting ranking of products
204
+ in the search results]]></comment>
205
+ <frontend_type>select</frontend_type>
206
+ <source_model>klevu_search/system_config_source_yesnoforced</source_model>
207
+ <sort_order>100</sort_order>
208
+ <show_in_default>1</show_in_default>
209
+ <show_in_website>1</show_in_website>
210
+ <show_in_store>1</show_in_store>
211
+ </enabled>
212
+ <frequency translate="label">
213
+ <label>Frequency</label>
214
+ <frontend_type>select</frontend_type>
215
+ <source_model>klevu_search/system_config_source_frequency</source_model>
216
+ <sort_order>200</sort_order>
217
+ <show_in_default>1</show_in_default>
218
+ <show_in_website>0</show_in_website>
219
+ <show_in_store>0</show_in_store>
220
+ </frequency>
221
+ <last_run translate="label">
222
+ <label>Last Run</label>
223
+ <frontend_type>label</frontend_type>
224
+ <sort_order>300</sort_order>
225
+ <show_in_default>1</show_in_default>
226
+ <show_in_website>0</show_in_website>
227
+ <show_in_store>0</show_in_store>
228
+ </last_run>
229
+ </fields>
230
+ </order_sync>
231
  <attributes translate="label">
232
+ <label>Product Attribute Settings</label>
233
+ <sort_order>101</sort_order>
234
  <show_in_default>1</show_in_default>
235
  <show_in_website>1</show_in_website>
236
  <show_in_store>1</show_in_store>
237
  <fields>
238
+ <info_attribute translate="label comment">
239
+ <label>Attribute Settings</label>
240
+ <comment><![CDATA[Switch to store view scope to set]]></comment>
241
+ <frontend_type>label</frontend_type>
242
+ <sort_order>100</sort_order>
243
+ <show_in_default>1</show_in_default>
244
+ <show_in_website>0</show_in_website>
245
+ <show_in_store>0</show_in_store>
246
+ </info_attribute>
247
  <additional translate="label comment">
248
  <label>Additional Attributes</label>
249
  <comment><![CDATA[Here you can set optional product attributes sent to Klevu by mapping them to your Magento attributes. If you specify multiple mappings for the same Klevu attribute, only the first mapping found on the product sent will be used.]]></comment>
266
  </automatic>
267
  <boosting translate="label comment">
268
  <label>Boosting Attribute</label>
269
+ <comment><![CDATA[Select the attribute you wish to use as the Boosting attribute in Klevu. The Boosting attribute is a decimal or integer product attribute. To promote a product simply give the product a score higher than 1 and to demote give a score lower than 1 (i.e. 0.1).]]></comment>
270
  <frontend_type>select</frontend_type>
271
  <source_model>klevu_search/system_config_source_boosting_attribute</source_model>
272
+ <sort_order>800</sort_order>
273
  <show_in_default>0</show_in_default>
274
  <show_in_website>0</show_in_website>
275
  <show_in_store>1</show_in_store>
276
  </boosting>
277
  <other translate="label comment">
278
+ <label>Other Attributes To Use In Search</label>
279
+ <comment><![CDATA[By default, Klevu uses the following attributes in search: name, sku, description, short_description, price and rating. To add more attributes to search, please select one or more attributes from the list above. Once you have selected the respective attributes, please make sure to resynchronize all the products.]]></comment>
280
  <frontend_type>multiselect</frontend_type>
281
  <source_model>klevu_search/system_config_source_product_attributes</source_model>
282
  <can_be_empty>1</can_be_empty>
285
  <show_in_website>0</show_in_website>
286
  <show_in_store>1</show_in_store>
287
  </other>
288
+ <info_attribute_filters translate="label comment">
289
+ <label>Facets</label>
290
+ <comment><![CDATA[If a product attribute has been configured to be used in the search results layered navigation, Klevu search will automatically use that attribute as a facet. To configure an additional attribute as facet, please go to Catalog > Attributes > Manage Attributes > Edit Attribute > Frontend Properties > Use In Search Results Layered Navigation and select YES for the option. Once you have configured all the attributes, please make sure to resynchronize all the products.]]></comment>
291
+ <frontend_type>label</frontend_type>
292
+ <sort_order>700</sort_order>
293
+ <show_in_default>0</show_in_default>
294
+ <show_in_website>0</show_in_website>
295
+ <show_in_store>1</show_in_store>
296
+ </info_attribute_filters>
297
+
298
  </fields>
299
  </attributes>
300
+ <tax_setting translate="label">
301
+ <label>Tax Settings</label>
302
+ <sort_order>898</sort_order>
 
303
  <show_in_default>1</show_in_default>
304
+ <show_in_website>0</show_in_website>
305
  <show_in_store>1</show_in_store>
306
  <fields>
307
+ <info_enabled translate="label comment">
308
+ <label>Include Tax in Price</label>
309
+ <comment><![CDATA[Switch to store view scope to set]]></comment>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
310
  <frontend_type>label</frontend_type>
311
+ <sort_order>100</sort_order>
312
  <show_in_default>1</show_in_default>
313
  <show_in_website>0</show_in_website>
314
  <show_in_store>0</show_in_store>
315
+ </info_enabled>
 
 
 
 
 
 
 
 
 
316
  <enabled translate="label comment">
317
  <label>Include Tax in Price</label>
318
+ <comment><![CDATA[Please make sure to resynchronize products by choosing the "All data" option and clicking on the "Sync Data for This Store" button under the "Data Sync Settings".]]></comment>
319
  <frontend_type>select</frontend_type>
320
  <source_model>adminhtml/system_config_source_yesno</source_model>
321
  <sort_order>100</sort_order>
323
  <show_in_website>0</show_in_website>
324
  <show_in_store>1</show_in_store>
325
  </enabled>
 
326
  </fields>
327
  </tax_setting>
328
  <secureurl_setting translate="label">
329
  <label>Secure Url Settings</label>
330
+ <sort_order>899</sort_order>
331
+ <show_in_default>1</show_in_default>
332
  <show_in_website>0</show_in_website>
333
  <show_in_store>1</show_in_store>
334
+ <expanded>0</expanded>
335
  <fields>
336
+ <info_enabled translate="label comment">
337
+ <label>Use Secure Base Url for Products and Images</label>
338
+ <comment><![CDATA[Switch to store view scope to set]]></comment>
339
+ <frontend_type>label</frontend_type>
340
+ <sort_order>100</sort_order>
341
+ <show_in_default>1</show_in_default>
342
+ <show_in_website>0</show_in_website>
343
+ <show_in_store>0</show_in_store>
344
+ </info_enabled>
345
  <enabled translate="label comment">
346
  <label>Use Secure Base Url for Products and Images</label>
347
+ <comment><![CDATA[Choose Yes to use secure base url from System > Cofiguration > Store view > Secure > Base URL.</br>Please make sure to resynchronize products by clicking on the "Sync Data for This Store" under the "Data Sync Settings".]]></comment>
348
  <frontend_type>select</frontend_type>
349
  <source_model>adminhtml/system_config_source_yesno</source_model>
350
  <sort_order>100</sort_order>
356
  </secureurl_setting>
357
  <developer translate="label">
358
  <label>Developer Settings</label>
359
+ <sort_order>1000</sort_order>
360
  <show_in_default>1</show_in_default>
361
  <show_in_website>0</show_in_website>
362
  <show_in_store>0</show_in_store>
395
  </developer>
396
  </groups>
397
  </klevu_search>
398
+ <klevu_search_info translate="label" module="klevu_search">
399
+ <label>Help Center</label>
400
+ <tab>klevu</tab>
401
+ <sort_order>305</sort_order>
402
+ <show_in_default>1</show_in_default>
403
+ <show_in_website>1</show_in_website>
404
+ <show_in_store>1</show_in_store>
405
+ <groups>
406
+ <searchinformation translate="label">
407
+ <label>Klevu</label>
408
+ <sort_order>1</sort_order>
409
+ <expanded>1</expanded>
410
+ <frontend_model>klevu_search/adminhtml_form_klevuinfo</frontend_model>
411
+ <show_in_default>1</show_in_default>
412
+ <show_in_website>1</show_in_website>
413
+ <show_in_store>1</show_in_store>
414
+ </searchinformation>
415
+ </groups>
416
+ </klevu_search_info>
417
  </sections>
418
  </config>
app/code/community/Klevu/Search/sql/klevu_search_setup/mysql4-data-upgrade-1.1.21-1.1.22.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+ $installer->startSetup();
4
+ $installer->run("ALTER TABLE `klevu_product_sync` ADD `type` VARCHAR(255) NOT NULL DEFAULT 'products' AFTER `last_synced_at`");
5
+ $installer->run("ALTER TABLE `klevu_product_sync` DROP PRIMARY KEY, ADD PRIMARY KEY(`product_id`,`parent_id`,`store_id`,`test_mode`,`type`)");
6
+ try {
7
+ $entity_type = Mage::getSingleton("eav/entity_type")->loadByCode("catalog_product");
8
+ $entity_typeid = $entity_type->getId();
9
+ $attributecollection = Mage::getModel("eav/entity_attribute")->getCollection()->addFieldToFilter("entity_type_id", $entity_typeid)->addFieldToFilter("attribute_code", "rating");
10
+ if (!count($attributecollection)) {
11
+ $attribute = $attributecollection->getFirstItem();
12
+ $data = array();
13
+ $data['id'] = null;
14
+ $data['entity_type_id'] = $entity_typeid;
15
+ $data['attribute_code'] = "rating";
16
+ $data['backend_type'] = "varchar";
17
+ $data['frontend_input'] = "text";
18
+ $data['frontend_label'] = 'Rating';
19
+ $data['default_value_text'] = '0';
20
+ $data['is_global'] = '0';
21
+ $data['is_user_defined'] = '1';
22
+ $attribute->setData($data);
23
+ $attribute->save();
24
+ $resource = Mage::getSingleton('core/resource');
25
+ $read = $resource->getConnection('core_read');
26
+ $write = $resource->getConnection('core_write');
27
+ $entity_type = Mage::getSingleton("eav/entity_type")->loadByCode("catalog_product");
28
+ $entity_typeid = $entity_type->getId();
29
+ $select = $read->select()->from($this->getTable("eav_attribute_set") , array(
30
+ 'attribute_set_id'
31
+ ))->where("entity_type_id=?", $entity_typeid);
32
+ $attribute_sets = $read->fetchAll($select);
33
+ foreach($attribute_sets as $attribute_set) {
34
+ $attribute_set_id = $attribute_set['attribute_set_id'];
35
+ $select = $read->select()->from($this->getTable("eav_attribute") , array(
36
+ 'attribute_id'
37
+ ))->where("entity_type_id=?", $entity_typeid)->where("attribute_code=?", "rating");
38
+ $attribute = $read->fetchRow($select);
39
+ $attribute_id = $attribute['attribute_id'];
40
+ $select = $read->select()->from($this->getTable("eav_attribute_group") , array(
41
+ 'attribute_group_id'
42
+ ))->where("attribute_set_id=?", $attribute_set_id)->where("attribute_group_name=?", "General");
43
+ $attribute_group = $read->fetchRow($select);
44
+ $attribute_group_id = $attribute_group['attribute_group_id'];
45
+ $write->beginTransaction();
46
+ $write->insert($this->getTable("eav_entity_attribute") , array(
47
+ "entity_type_id" => $entity_typeid,
48
+ "attribute_set_id" => $attribute_set_id,
49
+ "attribute_group_id" => $attribute_group_id,
50
+ "attribute_id" => $attribute_id,
51
+ "sort_order" => 5
52
+ ));
53
+ $write->commit();
54
+ }
55
+ }
56
+ } catch(Exception $e) {
57
+ echo '<p>Error occurred while trying to add the attribute. Error: ' . $e->getMessage() . '</p>';
58
+ }
59
+ $installer->endSetup();
app/design/adminhtml/default/default/template/klevu/search/form/field/sync/button.phtml CHANGED
@@ -4,6 +4,17 @@
4
  </button>
5
  <script type="text/javascript">
6
  $("<?php echo $this->getHtmlId() ?>").observe("click", function () {
7
- setLocation("<?php echo $this->getDestinationUrl() ?>");
 
 
 
 
 
 
 
 
 
 
 
8
  });
9
  </script>
4
  </button>
5
  <script type="text/javascript">
6
  $("<?php echo $this->getHtmlId() ?>").observe("click", function () {
7
+ if(document.getElementById('klevu_search_product_sync_sync_options')) {
8
+ var syncoptions = document.getElementById('klevu_search_product_sync_sync_options').value;
9
+ new Ajax.Request("<?php echo $this->getUrl('adminhtml/klevu_search/save_sync_options_config'); ?>" + '?sync_options=' + syncoptions, {
10
+ method: 'POST',
11
+ onComplete: function(data) {
12
+ setLocation("<?php echo $this->getDestinationUrl() ?>");
13
+ }
14
+ });
15
+ } else {
16
+ setLocation("<?php echo $this->getDestinationUrl() ?>");
17
+ }
18
+
19
  });
20
  </script>
app/design/adminhtml/default/default/template/klevu/search/form/information.phtml CHANGED
@@ -5,8 +5,6 @@
5
  <?php echo $this->__("2. Indices are uptodate (System > Index Management)") ?></br>
6
  <?php echo $this->__("3. Products should be enabled and have the visibility set to catalog and search.") ?></p>
7
  <p><b><?php echo $this->__(" Klevu Merchant Centre: <a href='https://box.klevu.com' target='_blank'>https://box.klevu.com</a>");?></b></p>
8
- <p><?php echo $this->__("Login into Klevu Merchant Centre account to customize Klevu Search. You can
9
- change look and feel of your search results, setup product promotions, monitor
10
- search activity, upgrade your account and many more.");?></p>
11
  <p><b><?php echo $this->__("FAQs and Troubleshooting: <a href='http://www.klevu.com/support/support-home.html' target='_blank'>click here</a>");?></b></p>
12
  <p><b><?php echo $this->__("Migrating from staging to live: <a href='http://www.klevu.com/support/staging-to-live.html' target='_blank'>click here</a>");?></b></p>
5
  <?php echo $this->__("2. Indices are uptodate (System > Index Management)") ?></br>
6
  <?php echo $this->__("3. Products should be enabled and have the visibility set to catalog and search.") ?></p>
7
  <p><b><?php echo $this->__(" Klevu Merchant Centre: <a href='https://box.klevu.com' target='_blank'>https://box.klevu.com</a>");?></b></p>
8
+ <p><?php echo $this->__("Once the Klevu Search is working on your website, login into Klevu Merchant Centre account to change look and feel of your search results, setup product promotions, see search activity, upgrade your account and lot more.");?></p>
 
 
9
  <p><b><?php echo $this->__("FAQs and Troubleshooting: <a href='http://www.klevu.com/support/support-home.html' target='_blank'>click here</a>");?></b></p>
10
  <p><b><?php echo $this->__("Migrating from staging to live: <a href='http://www.klevu.com/support/staging-to-live.html' target='_blank'>click here</a>");?></b></p>
app/design/adminhtml/default/default/template/klevu/search/form/klevuinfo.phtml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php /** @var Klevu_Search_Block_Adminhtml_Form_KlevuInfo $this */ ?>
2
+ <iframe src="https://js.klevu.com/klevu-js-v1/help/" frameBorder="0" width="100%" height="1362"></iframe>
app/design/adminhtml/default/default/template/klevu/search/wizard/configure/store.phtml CHANGED
@@ -32,7 +32,7 @@
32
  </tr>
33
 
34
  <tr>
35
- <td class="label"><label for="tax_enable"><?php echo $this->__("Want to include tax in price? :") ?></label></td>
36
  <td class="value">
37
  <select name="tax_enable" id="tax_enable">
38
  <option value="0" selected="selected"><?php echo $this->__("No") ?></option>
@@ -41,11 +41,11 @@
41
  </td>
42
  </tr>
43
  <tr>
44
- <td class="label"><label for="secure_baseurl_enable"><?php echo $this->__("Want to use secure base url? :<br/>(from System > Cofiguration > Store view > Secure > Base URL)") ?></label></td>
45
  <td class="value">
46
  <select name="secure_baseurl_enable" id="secure_base_enable">
47
- <option value="0" selected="selected"><?php echo $this->__("No") ?></option>
48
- <option value="1"><?php echo $this->__("Yes") ?></option>
49
  </select>
50
  </td>
51
  </tr>
32
  </tr>
33
 
34
  <tr>
35
+ <td class="label"><label for="tax_enable"><?php echo $this->__("Would you like to show price including taxes for search results?") ?></label></td>
36
  <td class="value">
37
  <select name="tax_enable" id="tax_enable">
38
  <option value="0" selected="selected"><?php echo $this->__("No") ?></option>
41
  </td>
42
  </tr>
43
  <tr>
44
+ <td class="label"><label for="secure_baseurl_enable"><?php echo $this->__("Which 'base URL' would you like to use for products in search results?<br/>(from System > Configuration > Web > Secure OR Unsecure > Base URL)") ?></label></td>
45
  <td class="value">
46
  <select name="secure_baseurl_enable" id="secure_base_enable">
47
+ <option value="0" selected="selected"><?php echo $this->__("Unsecure") ?></option>
48
+ <option value="1"><?php echo $this->__("Secure") ?></option>
49
  </select>
50
  </td>
51
  </tr>
app/design/frontend/base/default/layout/klevu/search.xml CHANGED
@@ -1,7 +1,6 @@
1
  <?xml version="1.0"?>
2
  <layout version="0.1.0">
3
  <default>
4
-
5
  <reference name="before_body_end">
6
  <block type="core/template" name="klevu.search.form_js" template="klevu/search/form_js.phtml"/>
7
  </reference>
1
  <?xml version="1.0"?>
2
  <layout version="0.1.0">
3
  <default>
 
4
  <reference name="before_body_end">
5
  <block type="core/template" name="klevu.search.form_js" template="klevu/search/form_js.phtml"/>
6
  </reference>
app/design/frontend/base/default/template/klevu/search/form_js.phtml CHANGED
@@ -2,11 +2,10 @@
2
  <?php $config = Mage::helper('klevu_search/config'); ?>
3
  <?php $helper = Mage::helper('klevu_search'); ?>
4
  <?php if ($config->isExtensionConfigured()):
5
- if($config->isSecureUrlEnabled(Mage::app()->getStore()->getStoreId())) {
6
- $url = Mage::app()->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true);
7
- } else {
8
- $url = Mage::app()->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
9
- } ?>
10
  <script type="text/javascript">
11
  var allInputs = document.getElementsByTagName( 'input' );
12
  var klevu_current_version = '<?php echo Mage::getConfig()->getModuleConfig('Klevu_Search')->version; ?>';
@@ -43,7 +42,7 @@ if($config->isSecureUrlEnabled(Mage::app()->getStore()->getStoreId())) {
43
  var search_input = allInputs[i];
44
  search_input.stopObserving('click');
45
  search_input.stopObserving('keydown');
46
- search_input.form.action='<?php echo $url; ?>' + "search";//?q="+search_input.value;
47
  search_input.form.observe('submit', function (e) {
48
  //if(search_input.value.length!= 0){
49
  //Event.stop(e);
@@ -55,7 +54,7 @@ if($config->isSecureUrlEnabled(Mage::app()->getStore()->getStoreId())) {
55
  }
56
 
57
  })();
58
- var klevu_storeLandingPageUrl = '<?php echo $url; ?>' + "search";
59
  var klevu_showQuickSearchOnEnter=false;
60
  <?php } else if($config->isLandingEnabled()==1) { ?>
61
  (function () {
@@ -82,6 +81,17 @@ if($config->isSecureUrlEnabled(Mage::app()->getStore()->getStoreId())) {
82
  klevu_result_left_margin = '';
83
  (function () { var ws = document.createElement('script'),kl_protocol =("https:"===document.location.protocol?"https://":"http://"); ws.type = 'text/javascript'; ws.async = true; ws.src = kl_protocol+'<?php echo $config->getJsUrl() ?>/klevu-js-v1/js/klevu-webstore.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ws, s); })();
84
  </script>
85
-
86
  <?php endif; ?>
87
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  <?php $config = Mage::helper('klevu_search/config'); ?>
3
  <?php $helper = Mage::helper('klevu_search'); ?>
4
  <?php if ($config->isExtensionConfigured()):
5
+ $url = Mage::getUrl('search', array(
6
+ '_secure' => Mage::app()->getFrontController()->getRequest()->isSecure()
7
+ ));
8
+ ?>
 
9
  <script type="text/javascript">
10
  var allInputs = document.getElementsByTagName( 'input' );
11
  var klevu_current_version = '<?php echo Mage::getConfig()->getModuleConfig('Klevu_Search')->version; ?>';
42
  var search_input = allInputs[i];
43
  search_input.stopObserving('click');
44
  search_input.stopObserving('keydown');
45
+ search_input.form.action='<?php echo $url; ?>' ;//?q="+search_input.value;
46
  search_input.form.observe('submit', function (e) {
47
  //if(search_input.value.length!= 0){
48
  //Event.stop(e);
54
  }
55
 
56
  })();
57
+ var klevu_storeLandingPageUrl = '<?php echo $url; ?>';
58
  var klevu_showQuickSearchOnEnter=false;
59
  <?php } else if($config->isLandingEnabled()==1) { ?>
60
  (function () {
81
  klevu_result_left_margin = '';
82
  (function () { var ws = document.createElement('script'),kl_protocol =("https:"===document.location.protocol?"https://":"http://"); ws.type = 'text/javascript'; ws.async = true; ws.src = kl_protocol+'<?php echo $config->getJsUrl() ?>/klevu-js-v1/js/klevu-webstore.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ws, s); })();
83
  </script>
 
84
  <?php endif; ?>
85
 
86
+ <?php // show group price based on logged in customer group ?>
87
+ <script type="text/javascript">
88
+ <?php
89
+ $login = Mage::getSingleton( 'customer/session' )->isLoggedIn(); //Check if User is Logged In
90
+ if($login) { ?>
91
+ var klevu_loginCustomerGroup = "<?php echo Mage::getSingleton('customer/session')->getCustomerGroupId(); ?>";
92
+ <?php }?>
93
+ </script>
94
+
95
+
96
+
97
+
app/design/frontend/base/default/template/klevu/search/index.phtml CHANGED
@@ -56,18 +56,17 @@
56
  </div>
57
  <!-- End of kuProListing --></div>
58
  <!-- End of klevu-container -->
59
- <input id="noOfRecords" type="hidden" name="noOfRecords" value="<?php if(!empty($per_page[0])){ echo $per_page[0]; }?>" />
 
60
  <input id="startPos" type="hidden" name="startPos" value="0" />
61
  <input id="totalResultsFound" type="hidden" name="totalResultsFound" value="0" />
62
  <input id="searchedKeyword" type="hidden" name="searchedKeyword" value="" />
63
  <input id="totalPages" type="hidden" name="totalPages" value="0" />
64
  <?php $config = Mage::helper('klevu_search/config'); ?>
65
  <?php
66
- if($config->isSecureUrlEnabled(Mage::app()->getStore()->getStoreId())) {
67
- $src = "https://".$config->getJsUrl();
68
- } else {
69
- $src = "http://".$config->getJsUrl();
70
- } ?>
71
  <script type="text/javascript" src="<?php echo $src; ?>/klevu-js-v1/js-1-1/klevu-landing.js">// <![CDATA[
72
  // ]]></script>
73
  <script type="text/javascript">// <![CDATA[
56
  </div>
57
  <!-- End of kuProListing --></div>
58
  <!-- End of klevu-container -->
59
+ <?php $grid_per_page = Mage::getStoreConfig("catalog/frontend/grid_per_page"); ?>
60
+ <input id="noOfRecords" type="hidden" name="noOfRecords" value="<?php if(!empty($grid_per_page)){ echo $grid_per_page; } else { echo "12";}?>" />
61
  <input id="startPos" type="hidden" name="startPos" value="0" />
62
  <input id="totalResultsFound" type="hidden" name="totalResultsFound" value="0" />
63
  <input id="searchedKeyword" type="hidden" name="searchedKeyword" value="" />
64
  <input id="totalPages" type="hidden" name="totalPages" value="0" />
65
  <?php $config = Mage::helper('klevu_search/config'); ?>
66
  <?php
67
+ $protocol = stripos($_SERVER['SERVER_PROTOCOL'],'https') === true ? 'https://' : 'http://';
68
+ $src = $protocol.$config->getJsUrl();
69
+ ?>
 
 
70
  <script type="text/javascript" src="<?php echo $src; ?>/klevu-js-v1/js-1-1/klevu-landing.js">// <![CDATA[
71
  // ]]></script>
72
  <script type="text/javascript">// <![CDATA[
app/design/frontend/base/default/template/klevu/search/product_tracking.phtml CHANGED
@@ -1,6 +1,8 @@
1
  <?php /** @var Klevu_Search_Block_Catalog_Product_Tracking $this */ ?>
2
  <?php $config = Mage::helper('klevu_search/config'); ?>
3
- <?php if ($config->isExtensionConfigured()): ?>
 
 
4
  <script type="text/javascript">
5
  (function() {
6
  var referrer, search_term, klevu_search_product_tracking;
1
  <?php /** @var Klevu_Search_Block_Catalog_Product_Tracking $this */ ?>
2
  <?php $config = Mage::helper('klevu_search/config'); ?>
3
+ <?php if ($config->isExtensionConfigured()):
4
+ //echo Mage::getSingleton('core/session')->getCategoryValue();
5
+ ?>
6
  <script type="text/javascript">
7
  (function() {
8
  var referrer, search_term, klevu_search_product_tracking;
js/klevu/search/lib/Wizard.js CHANGED
@@ -177,3 +177,4 @@ function checkplan()
177
  {
178
  showPopup("http://www.klevu.com/magento-free-vs-pro.html");
179
  }
 
177
  {
178
  showPopup("http://www.klevu.com/magento-free-vs-pro.html");
179
  }
180
+ var klevu_search_wizard_configure_user_form = new varienForm('klevu_search_wizard_configure_user_form');
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Klevu_SmartSearch</name>
4
- <version>1.1.21</version>
5
  <stability>stable</stability>
6
  <license uri="http://klevu.com">Commercial</license>
7
  <channel>community</channel>
@@ -14,11 +14,19 @@ Intelligent boosting - Just select products you want to promote, no need to manu
14
  Dynamic filters - Shoppers get excellent shopping experience.&#xD;
15
  Search as you type - Shoppers see results even with long keywords.&#xD;
16
  Actionable insights - Drive traffic by learning from shoppers' search patterns.</description>
17
- <notes>- Added https configuration </notes>
 
 
 
 
 
 
 
 
18
  <authors><author><name>Klevu</name><user>Klevu</user><email>niraj.aswani@klevu.com</email></author></authors>
19
- <date>2015-06-30</date>
20
- <time>09:57:39</time>
21
- <contents><target name="mageetc"><dir name="modules"><file name="Klevu_Search.xml" hash="49674c121481f67bcfc2f31bb21e5aaf"/></dir></target><target name="magecommunity"><dir name="Klevu"><dir name="Search"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><dir name="Field"><dir name="Attribute"><file name="Mappings.php" hash="293c4d19663fa3aad76c17287fec2114"/></dir><dir name="Automatic"><dir name="Attribute"><file name="Mappings.php" hash="b0d192bd03319957d09f34d510914a2f"/></dir></dir><dir name="Html"><file name="Select.php" hash="adc22272b93deb46b524f46f7000972f"/></dir><dir name="Image"><file name="Log.php" hash="5be8e22db76874a10914b297425532c6"/></dir><dir name="Store"><dir name="Level"><file name="Label.php" hash="c2a77e64a2decb8abd101f15b4ea3e3f"/></dir></dir><dir name="Sync"><file name="Button.php" hash="a6f8f69290f84f0ecd731585b3cca0e7"/></dir></dir><file name="Information.php" hash="b422d8aa8524b4277f2b4013e90379a0"/></dir><file name="Notifications.php" hash="9fc2511a89e04cb2c9ce86fc7c3684cd"/><dir name="Wizard"><dir name="Config"><file name="Button.php" hash="d17ba7640d5777612ab9fb27f85aa5c9"/></dir><dir name="Configure"><file name="Attributes.php" hash="3801cd4ebb45b3d29cfbacf830af2874"/><file name="Store.php" hash="a5e900bf91db47115ce54497669fd384"/><file name="User.php" hash="f353da92a383854f419333e842380273"/></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="Tracking.php" hash="a472d4caf068d12f9151d0ed282293e4"/></dir></dir></dir><dir name="Helper"><file name="Api.php" hash="833c2d97e8ed8b996c8d4425a88f2a6c"/><file name="Compat.php" hash="3726862a4576a53c5a44dda59a1e9a86"/><file name="Config.php" hash="e7e19cef41300c4b49a26ce7df60b9d4"/><file name="Data.php" hash="22e73727ba0b0f2575da81b04eb2e4c4"/></dir><dir name="Model"><dir name="Api"><dir name="Action"><file name="Addrecords.php" hash="088f40418b35a682a3f815dbfbd42fa7"/><file name="Adduser.php" hash="d8b6e6d37fe6ce522747fd6951c8e9df"/><file name="Addwebstore.php" hash="ea33f2c7032682a6ec2bdb8324cdaf0e"/><file name="Debuginfo.php" hash="dd92df091719aa73eca07a08d9681d42"/><file name="Deleterecords.php" hash="0e404db0aab2c58ff90a4e7e4fe73818"/><file name="Gettimezone.php" hash="4bb572b68f42236d765f8194e413b1ca"/><file name="Getuserdetail.php" hash="849a0f04bfdbf39ae75a2627d26717ca"/><file name="Idsearch.php" hash="9244fbdf1e67beea19c99ad0a014d0fc"/><file name="Producttracking.php" hash="50dacac910b7a68b035078771e9f8ff6"/><file name="Removetestmode.php" hash="bd2e7ecf6c233b1430e2989b2b62000f"/><file name="Startsession.php" hash="14edcef879dce92c76a9c78d4106fc6c"/><file name="Updaterecords.php" hash="9e99ce8da72a030b10e9af8353233427"/></dir><file name="Action.php" hash="792f3fe4348f7d13bdf09562ec0d8b59"/><dir name="Request"><file name="Get.php" hash="2d6f510d4dcc171b8e44322b76a49f93"/><file name="Post.php" hash="a46b484a50ced15e2c02deb16bbeb6bb"/><file name="Xml.php" hash="73b3f04d29c2bd79c470d7b81cfc0390"/></dir><file name="Request.php" hash="7f15814e8a01982499563e0e056d2d52"/><dir name="Response"><file name="Data.php" hash="9dbe8e28a501feacb07a6ce2bcc4deb8"/><file name="Empty.php" hash="5988ec43c1756cf4acfedb212787b2b9"/><file name="Invalid.php" hash="8287280c3b99f64e08cf54a0bf65e4a1"/><file name="Message.php" hash="5b6d717c75014e798e619e3df2008d29"/><file name="Search.php" hash="96b9bdef60811c4d994cb457f0d355a9"/><file name="Timezone.php" hash="ffa4d48e42fa52d2c928e202c2af61fd"/></dir><file name="Response.php" hash="b2c244001dedd653e1f0953d6bf25e0e"/></dir><dir name="Catalog"><dir name="Model"><file name="Config.php" hash="57ae55e3cea3dd1b4c60dafcb06d5efd"/></dir></dir><dir name="CatalogSearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="104ac92f6ef59879b593a9f1baffd562"/><file name="Category.php" hash="d30670c5ca616dcb0c3f0dd2ffbb97ba"/><file name="Price.php" hash="4ca1e56183364670fb39a88ea5666c13"/></dir></dir><dir name="Resource"><dir name="Fulltext"><file name="Collection.php" hash="a531e4738344c322656482e786f97457"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="d675e50ad7c5277b9ca4100770ac16d3"/></dir></dir></dir></dir><dir name="Config"><dir name="Log"><file name="Level.php" hash="ef07b22f48c4ca72066bf90a1cf9ac27"/></dir></dir><file name="Cron.php" hash="0936cc2667e056182668c9f61fc171bc"/><file name="Notification.php" hash="771d45868668c5b925e3bf2202482b43"/><file name="Observer.php" hash="8cb55c00d50edacf403c739fc3301bfc"/><dir name="Order"><file name="Sync.php" hash="1f5c2290ba46ab597f6e85747093bb16"/></dir><dir name="Product"><file name="Sync.php" hash="fa8613f62256433eb9c3052ed62d175f"/></dir><dir name="Resource"><dir name="Notification"><file name="Collection.php" hash="936a242678b1c89853149e9dc77b6aff"/></dir><file name="Notification.php" hash="f3206c5286bf6ccb4df268c54fcff0f5"/></dir><file name="Session.php" hash="a4ab94b093ba8a414fbfa031f0d2cabe"/><file name="Sync.php" hash="f9f6f4d1251d493944ab13f1467d5257"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Additional"><file name="Attributes.php" hash="d91e1af65488d647b035fbb100a4eb1d"/></dir><dir name="Boosting"><file name="Attribute.php" hash="52a633242ff145d8f3b74c6a573c303e"/></dir><file name="Frequency.php" hash="5866e9d92476cdaa8a5f27c5fa0dc48b"/><file name="Landingoptions.php" hash="058c81eb9faec57f6c77db697ff3279e"/><dir name="Log"><file name="Level.php" hash="ba2bee63eb18b966db6beade72293036"/></dir><dir name="Product"><file name="Attributes.php" hash="f99ced41d6504f1570a703e66743dd0b"/></dir><file name="Yesnoforced.php" hash="0cf0e7842afae56af0caf92c9490295b"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Base.php" hash="a1a8faa15e50cd1d394bc79ca94f712b"/></dir><dir name="Controller"><dir name="CatalogSearch"><dir name="fixtures"><file name="search_results.yaml" hash="bfa6ebad238b75d771b89fb369201540"/></dir></dir><file name="CatalogSearch.php" hash="f6c2615ef27061d0cce7e7eae717c040"/></dir><dir name="Helper"><file name="Api.php" hash="c8484c149e920b3f74b8f6f2dce82936"/><file name="Compat.php" hash="8bae993e0da8f368eb50689f271446a5"/><dir name="Config"><dir name="fixtures"><file name="testGetOrderSyncEnabledFlag.yaml" hash="d1427ea15734ca336c47aad51ad7026e"/><file name="testGetOrderSyncFrequency.yaml" hash="52dffcad75b15761a695eb451b99c751"/><file name="testGetProductSyncEnabledFlag.yaml" hash="43e7263c8b781ef7fb6efbb6598f0226"/><file name="testGetProductSyncFrequency.yaml" hash="004e62dfa22c9abfd8dcf56c92270e19"/><file name="testIsExtensionEnabledDisabled.yaml" hash="5d706b347b4f32f87dc8eb4dd6102148"/><file name="testIsExtensionEnabledEnabled.yaml" hash="52c9eb8a4fad4d8f3ba25c68d35977f3"/></dir><dir name="providers"><file name="testIsOrderSyncEnabled.yaml" hash="938cc58e15b310ba2760be6c64e3d3cb"/><file name="testIsProductSyncEnabled.yaml" hash="5be1dcfb21264a012de32cbd252a09c9"/><file name="testIsTestModeEnabled.yaml" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir><file name="Config.php" hash="9ef7b00d63104e11426f3085afa36744"/><dir name="Data"><dir name="providers"><file name="testBytesToHumanReadable.yaml" hash="7cdb8705e108715abc63fa2cfd81626b"/><file name="testGetLanguageFromLocale.yaml" hash="c301f8dc090142627f6af4e4222b7708"/><file name="testHumanReadableToBytes.yaml" hash="dd89ae5b6705cfcfbf42ba64432c0f0a"/><file name="testIsProductionDomain.yaml" hash="f88ef0f80073fdb9cbdbd020348527a7"/></dir></dir><file name="Data.php" hash="93bb38ec55380a6ec7d79008496cac34"/></dir><dir name="Model"><dir name="Api"><dir name="Action"><dir name="Addrecords"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="26eea8bfc58c60e4a2f07dcbddc2e6fd"/><file name="testValidateRequiredFieldsRecords.yaml" hash="590b7ec9b7c33debb740b8c6c6db717f"/><file name="testValidateRequiredFieldsRecordsAllowedEmpty.yaml" hash="f82933b3d219491015cef39a214543bd"/><file name="testValidateRequiredFieldsRecordsEmpty.yaml" hash="d5dcd5aad682db42b1352c35b8905d47"/><file name="testValidateRequiredFieldsRecordsOptional.yaml" hash="25092bb84ba311815ca33971a388256e"/></dir></dir><file name="Addrecords.php" hash="14f5c217fac3f82957f54916fa29b387"/><dir name="Adduser"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="841f068ff3ffd8081ccc91e8675f998c"/></dir></dir><file name="Adduser.php" hash="5189f29f08c4ed30d9b6ac83429de3d0"/><dir name="Addwebstore"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="e52324b58b76d2d63cfa83ee228e1b31"/></dir></dir><file name="Addwebstore.php" hash="fbeac1b8adc5df45ef08a0a3331e5fbc"/><dir name="Getuserdetail"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="297df49838c47536bc9ee928b27470b2"/></dir></dir><file name="Getuserdetail.php" hash="4733d1ec7fd5b3b765aa88f182adf390"/><dir name="Idsearch"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="f36c1a1a1e6d1f5a2d3a59d8d349036e"/></dir></dir><file name="Idsearch.php" hash="4c8849b460a0df494911e3a4df65719c"/><dir name="Producttracking"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="4bc690980c701649d17ff6caba3ef646"/></dir></dir><file name="Producttracking.php" hash="04d8ef59f24f848d36493aabfa413828"/><file name="Startsession.php" hash="c1ae49d22b5e75672b8d84499d51f3d4"/></dir><file name="Action.php" hash="14ce7e11eb3acfda2dfea539c8f5254b"/><dir name="Request"><dir name="Xml"><dir name="providers"><file name="testGetDataAsXml.yaml" hash="4aa16e3557481444ba39775ee0b99d29"/></dir></dir><file name="Xml.php" hash="279a5defe0c933540e9635455590d8b1"/></dir><file name="Request.php" hash="b0cbdfe6a023d0479dc1b1c7fc6869c0"/><dir name="Response"><dir name="Data"><dir name="providers"><file name="testIsSuccessful.yaml" hash="f085922f4329b3d6b19c1e0010d3ca22"/></dir></dir><file name="Data.php" hash="1ab05c7225658f54bd31f0c205d05a2b"/><file name="Empty.php" hash="9933c42aa9ff06977ca3e53d2de15857"/><file name="Invalid.php" hash="bb68f25a053b7e5fc024bce0f5286fcb"/><dir name="Message"><dir name="providers"><file name="testIsSuccessful.yaml" hash="d53562002270a0c4b58ca94733309a21"/></dir></dir><file name="Message.php" hash="135c0d136fa9d0e86158407fc59294c3"/><dir name="Timezone"><dir name="providers"><file name="testIsSuccessful.yaml" hash="67f35e7ee5081689a1eddb867ae6256d"/></dir></dir><file name="Timezone.php" hash="f9cb063ef1f506f656a25c6206899eb3"/><dir name="providers"><file name="response_testIsSuccessful.yaml" hash="ac214d5ebf1eccb89e8fa85e8e3cbb75"/></dir></dir><file name="Response.php" hash="dbcce43ccb2cdf47bce5c05fcf27e759"/><dir name="Test"><file name="Case.php" hash="ec6d3169b9e2bd26655687124be779dd"/></dir><dir name="data"><file name="data_response_data.xml" hash="cd2e5d3dcac402828b9e5f0b0b637c76"/><file name="data_response_failure.xml" hash="ba677628e68149e0283729c1c8e5e86a"/><file name="data_response_no_response.xml" hash="98944f0eda050221de59100f4b22f030"/><file name="data_response_success.xml" hash="e92d1cfcd4461dc8d3fcabe1f902b40b"/><file name="data_response_success_only.xml" hash="276055d04a3f112efe9e6f1c337d7699"/><file name="message_response_failure.xml" hash="ab63c55523b26bd53ea6abf426dd11f5"/><file name="message_response_missing_message.xml" hash="4a43490eda6f33804ca400da2f9cdac1"/><file name="message_response_missing_status.xml" hash="39103fec18a0be88e4ff00a8149c8ad4"/><file name="message_response_session_id.xml" hash="415f25f79a3795ae70b983504cbb784f"/><file name="message_response_success.xml" hash="3ac53566b3d187cb81eb04d40a195c50"/><file name="response_malformed.xml" hash="bfeb4e75829a42082a7935a8e7be491e"/><file name="response_noxml.xml" hash="2debfdcf79f03e4a65a667d21ef9de14"/><file name="response_valid.xml" hash="c915992330f0e4bd37bb629637139f98"/><file name="search_response_empty.xml" hash="601298402d21f3626052634cbbb0ae72"/><file name="search_response_paged.xml" hash="04203807a1d6df787c54afd84690a50e"/><file name="search_response_sorted.xml" hash="c3ee65658a56f65334417328c7fbdcac"/><file name="search_response_success.xml" hash="fea4e59e7ae6e68b387729e320d5f49c"/><file name="startsession_response_success.xml" hash="1865ee2da80359e5a84914c56cae2c8d"/><file name="timezone_response_no_data.xml" hash="276055d04a3f112efe9e6f1c337d7699"/><file name="timezone_response_no_status.xml" hash="bd695479b03e3607196f01f627af4a45"/><file name="timezone_response_with_failure.xml" hash="69a6b1fa7b2cf087d85be162064525b0"/><file name="timezone_response_with_success.xml" hash="e6888eca066741675d228ba1397b5554"/></dir></dir><dir name="Config"><dir name="Log"><file name="Level.php" hash="2032f568dc75c8a5ff63c7daaf8bd049"/></dir></dir><dir name="Notification"><dir name="fixtures"><file name="testLoad.yaml" hash="305afce09851bb40e8c990c138aff162"/></dir></dir><file name="Notification.php" hash="889ec647dbdb938741cfc75e1baa2bc2"/><dir name="Observer"><dir name="fixtures"><file name="testLandingPageRewritesDisabled.yaml" hash="88f0c274444dbaab4fded639b4f40048"/><file name="testLandingPageRewritesEnabled.yaml" hash="bfe60a7ccc0ac73c664f24a4b7394343"/><file name="testScheduleOrderSync.yaml" hash="170806194b4a1bd7f00bc346a51709e1"/></dir></dir><file name="Observer.php" hash="73349e9c475129197c2cf55a1e1d4cdc"/><dir name="Order"><dir name="Sync"><dir name="fixtures"><file name="testAddOrderToQueue.yaml" hash="c93c3c28273757a13b878f97dd0b9e97"/><file name="testClearQueue.yaml" hash="d7ad7abd553e333e84cbab149cdcfb31"/><file name="testRun.yaml" hash="44f091d24de97d230f61fcaf3689ba81"/></dir></dir><file name="Sync.php" hash="d2166272904e003b6bea3862f66e0235"/></dir><dir name="Product"><dir name="Sync"><dir name="fixtures"><file name="testAddProducts.yaml" hash="0ac9a9e6666f285eff796d30c8e0a4e3"/><file name="testCatalogruleProducts.yaml" hash="c37fe4fe86fda18d9fd90794ea1520e4"/><file name="testClearAllProducts.yaml" hash="b7ec8b285d34a27e1c50d572b5ae8227"/><file name="testDeleteProducts.yaml" hash="22f94366cc64b6980b8d648067920533"/><file name="testRun.yaml" hash="eaac2bf57835625a6cd80294e6c5a99c"/><file name="testSpecialpriceProducts.yaml" hash="7d44672dcf91473c0bf1d9cb523a394a"/><file name="testUpdateProducts.yaml" hash="61266411faa659dc175f75ffbccce97e"/></dir></dir><file name="Sync.php" hash="464c549e54103898fea0bef21649dcd1"/></dir><dir name="Sync"><dir name="providers"><file name="testSchedule.yaml" hash="97f1043c42eb74162ae97941dc920d8f"/></dir></dir><file name="Sync.php" hash="8c091e168e251761be7fb1d1d2149305"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Test"><dir name="providers"><file name="testIsValidSourceModel.yaml" hash="cfedc94014707ee5586dd212b4d1ee16"/></dir></dir><file name="Test.php" hash="3e915599d4f76a2fbbb20aed9ffdf968"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Klevu"><file name="NotificationsController.php" hash="e6a8f7ee4ca5463bb9b3df5fa901b6b1"/><dir name="Search"><file name="WizardController.php" hash="0218bb70b1b4b478cdb007181328afb3"/></dir><file name="SearchController.php" hash="eb4e183d45fe049e2a0b7df7739b3f8d"/></dir></dir><file name="IndexController.php" hash="41d329df7bb53b6c4d4ac53a3d57d177"/></dir><dir name="etc"><file name="adminhtml.xml" hash="938a66de5c0de1d096d7c0cb97e980cd"/><file name="config.xml" hash="03fdea5d5f72ede3f66a6525adc9834a"/><file name="system.xml" hash="0044f01992a3b13ccf8bb371c7b9c8aa"/></dir><dir name="sql"><dir name="klevu_search_setup"><file name="mysql4-data-upgrade-1.1.1-1.1.2.php" hash="a65f702cf64af452f2fb6f6cdac130a7"/><file name="mysql4-install-1.0.0.php" hash="860c1991c2ebf804f939598e9932edf5"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="klevu"><dir name="search"><dir name="form"><dir name="field"><file name="array_readonly.phtml" hash="d3a3be4cf22f89d84bd73121a1adfa86"/><dir name="sync"><file name="button.phtml" hash="0459f187b2b98a9ff5a9433875b465e1"/><file name="logbutton.phtml" hash="d31dd881015319d78d9fb2b83874f296"/></dir></dir><file name="information.phtml" hash="4126e9e29067e19dfd675f653e3f7eb4"/></dir><file name="notifications.phtml" hash="090714ca57b11d24769c1baa1bcd4615"/><dir name="wizard"><file name="complete.phtml" hash="aeca8d1a3335b461f5e6bcbba08c22b6"/><dir name="config"><file name="button.phtml" hash="b1644ee569882b05c2d8cb2f1eecddbc"/></dir><dir name="configure"><file name="attributes.phtml" hash="d54f0a86e78390fbe66825d0771aad25"/><file name="store.phtml" hash="d9610924f3c7fa6f4eaa610fa80d2b5e"/><file name="user.phtml" hash="8f5d6da7920bfbcc8eb600634fa7a14b"/></dir><dir name="form"><dir name="field"><file name="array.phtml" hash="ccdccab02fbd9cfc2145f094d5e12a2e"/></dir></dir></dir></dir></dir></dir><dir name="layout"><dir name="klevu"><file name="search.xml" hash="f385a7290bad22fb212b440afa82d2a7"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="klevu"><file name="search.xml" hash="2cba521b2f52d070a496a78fbed83136"/></dir></dir><dir name="template"><dir name="klevu"><dir name="search"><file name="form_js.phtml" hash="19b33d27b6476c567994045a1d1bce0e"/><file name="index.phtml" hash="32bb80d4a2e78aac2182ae941dd8bdf6"/><file name="klevulog.phtml" hash="9cebbd9ec162570768aefc30c777fb78"/><file name="product_tracking.phtml" hash="4d7e50935d5106ca47e3f4e372be3254"/></dir></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="klevu"><dir name="search"><dir name="lib"><file name="Wizard.js" hash="c9c825874206d4c99b60645be1f1a6f9"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="klevu"><dir name="search"><file name="notifications.css" hash="80954cfc49bb2bc45d2eafb7c28cedad"/><file name="wizard.css" hash="824f735715f3ed97ce98414b9895e46b"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="klevu"><file name="klevu-landing-page-style.css" hash="9e7cb60e3e06c689648055d344185581"/><file name="klevu-landing-responsive.css" hash="811e1bfece09ba7d5529fec850963ac6"/></dir></dir><dir name="images"><dir name="klevu"><file name="btn-gridview.png" hash="c3dd97f4f53e1dfe34b6c5b6b4237b8a"/><file name="btn-listview.png" hash="00aaaa62d67e252248d6075f53b04f7f"/><file name="ku-loader.gif" hash="6050f5bcf455cc8f0332dd65e72f8e52"/></dir></dir></dir></dir></dir></target></contents>
22
  <compatible/>
23
  <dependencies><required><php><min>5.3.0</min><max>5.6.0</max></php></required></dependencies>
24
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Klevu_SmartSearch</name>
4
+ <version>1.1.22</version>
5
  <stability>stable</stability>
6
  <license uri="http://klevu.com">Commercial</license>
7
  <channel>community</channel>
14
  Dynamic filters - Shoppers get excellent shopping experience.&#xD;
15
  Search as you type - Shoppers see results even with long keywords.&#xD;
16
  Actionable insights - Drive traffic by learning from shoppers' search patterns.</description>
17
+ <notes>- solved https issue for landing page&#xD;
18
+ - message change&#xD;
19
+ - Immediate sync for updated data&#xD;
20
+ - product rating &#xD;
21
+ - Help center&#xD;
22
+ - Group price support&#xD;
23
+ - Added klevu_Products&#xD;
24
+ - Added type field in klevu_product_sync table&#xD;
25
+ - Product tracking with preserve layout</notes>
26
  <authors><author><name>Klevu</name><user>Klevu</user><email>niraj.aswani@klevu.com</email></author></authors>
27
+ <date>2015-10-01</date>
28
+ <time>06:52:47</time>
29
+ <contents><target name="mageetc"><dir name="modules"><file name="Klevu_Search.xml" hash="49674c121481f67bcfc2f31bb21e5aaf"/></dir></target><target name="magecommunity"><dir name="Klevu"><dir name="Search"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><dir name="Field"><dir name="Attribute"><file name="Mappings.php" hash="293c4d19663fa3aad76c17287fec2114"/></dir><dir name="Automatic"><dir name="Attribute"><file name="Mappings.php" hash="b0d192bd03319957d09f34d510914a2f"/></dir></dir><dir name="Html"><file name="Select.php" hash="adc22272b93deb46b524f46f7000972f"/></dir><dir name="Image"><file name="Log.php" hash="5be8e22db76874a10914b297425532c6"/></dir><dir name="Store"><dir name="Level"><file name="Label.php" hash="df3680c83924ece232eb14bd0b7ac9b3"/></dir></dir><dir name="Sync"><file name="Button.php" hash="aeec22e3e952e40d1e1bed33a9e8185b"/></dir></dir><file name="Information.php" hash="b422d8aa8524b4277f2b4013e90379a0"/><file name="Klevuinfo.php" hash="d2532a3a273acd33515165b3d98ac4d1"/><file name="Syncoptionsinfo.php" hash="28621e3bd17eb8216639fa3a2da47840"/></dir><file name="Notifications.php" hash="9fc2511a89e04cb2c9ce86fc7c3684cd"/><dir name="Wizard"><dir name="Config"><file name="Button.php" hash="d17ba7640d5777612ab9fb27f85aa5c9"/></dir><dir name="Configure"><file name="Attributes.php" hash="3801cd4ebb45b3d29cfbacf830af2874"/><file name="Store.php" hash="a5e900bf91db47115ce54497669fd384"/><file name="User.php" hash="f353da92a383854f419333e842380273"/></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="Tracking.php" hash="e314132d47d15ba686c62a0d5ce1668e"/></dir></dir></dir><dir name="Helper"><file name="Api.php" hash="489164a62c7d54f5365c09ec537e3e44"/><file name="Compat.php" hash="3726862a4576a53c5a44dda59a1e9a86"/><file name="Config.php" hash="5465c53e3ed6ffd3c2746eeecd247c30"/><file name="Data.php" hash="c4db51e3dabdcbbcb24004c552ee3696"/></dir><dir name="Model"><dir name="Api"><dir name="Action"><file name="Addrecords.php" hash="eeba80aa6abf651cf3ef2b0584cd4354"/><file name="Adduser.php" hash="d8b6e6d37fe6ce522747fd6951c8e9df"/><file name="Addwebstore.php" hash="ea33f2c7032682a6ec2bdb8324cdaf0e"/><file name="Debuginfo.php" hash="dd92df091719aa73eca07a08d9681d42"/><file name="Deleterecords.php" hash="0e404db0aab2c58ff90a4e7e4fe73818"/><file name="Gettimezone.php" hash="4bb572b68f42236d765f8194e413b1ca"/><file name="Getuserdetail.php" hash="849a0f04bfdbf39ae75a2627d26717ca"/><file name="Idsearch.php" hash="9244fbdf1e67beea19c99ad0a014d0fc"/><file name="Producttracking.php" hash="50dacac910b7a68b035078771e9f8ff6"/><file name="Removetestmode.php" hash="bd2e7ecf6c233b1430e2989b2b62000f"/><file name="Searchtermtracking.php" hash="e58d1c361cdc8c57886ecaaa7218b394"/><file name="Startsession.php" hash="14edcef879dce92c76a9c78d4106fc6c"/><file name="Updaterecords.php" hash="9e99ce8da72a030b10e9af8353233427"/></dir><file name="Action.php" hash="792f3fe4348f7d13bdf09562ec0d8b59"/><dir name="Request"><file name="Get.php" hash="2d6f510d4dcc171b8e44322b76a49f93"/><file name="Post.php" hash="a46b484a50ced15e2c02deb16bbeb6bb"/><file name="Xml.php" hash="73b3f04d29c2bd79c470d7b81cfc0390"/></dir><file name="Request.php" hash="7f15814e8a01982499563e0e056d2d52"/><dir name="Response"><file name="Data.php" hash="9dbe8e28a501feacb07a6ce2bcc4deb8"/><file name="Empty.php" hash="5988ec43c1756cf4acfedb212787b2b9"/><file name="Invalid.php" hash="8287280c3b99f64e08cf54a0bf65e4a1"/><file name="Message.php" hash="5b6d717c75014e798e619e3df2008d29"/><file name="Search.php" hash="96b9bdef60811c4d994cb457f0d355a9"/><file name="Timezone.php" hash="ffa4d48e42fa52d2c928e202c2af61fd"/></dir><file name="Response.php" hash="b2c244001dedd653e1f0953d6bf25e0e"/></dir><dir name="Catalog"><dir name="Model"><file name="Config.php" hash="57ae55e3cea3dd1b4c60dafcb06d5efd"/></dir></dir><dir name="CatalogSearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="104ac92f6ef59879b593a9f1baffd562"/><file name="Category.php" hash="39e56a1a1a1070f09fce2bec6d48c4ce"/><file name="Price.php" hash="4ca1e56183364670fb39a88ea5666c13"/></dir></dir><dir name="Resource"><dir name="Fulltext"><file name="Collection.php" hash="f784533c34276e7f104ab3496233d1a0"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="d675e50ad7c5277b9ca4100770ac16d3"/></dir></dir></dir></dir><dir name="Config"><dir name="Log"><file name="Level.php" hash="ef07b22f48c4ca72066bf90a1cf9ac27"/></dir></dir><file name="Cron.php" hash="0936cc2667e056182668c9f61fc171bc"/><file name="Notification.php" hash="771d45868668c5b925e3bf2202482b43"/><file name="Observer.php" hash="0a50bc7873c3abe50fd66e69311c89de"/><dir name="Order"><file name="Sync.php" hash="1f5c2290ba46ab597f6e85747093bb16"/></dir><dir name="Product"><file name="Sync.php" hash="6b4e71726c9abf9f3b3127711a2d459c"/></dir><dir name="Resource"><dir name="Notification"><file name="Collection.php" hash="936a242678b1c89853149e9dc77b6aff"/></dir><file name="Notification.php" hash="f3206c5286bf6ccb4df268c54fcff0f5"/></dir><file name="Session.php" hash="a4ab94b093ba8a414fbfa031f0d2cabe"/><file name="Sync.php" hash="f9f6f4d1251d493944ab13f1467d5257"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Additional"><file name="Attributes.php" hash="d91e1af65488d647b035fbb100a4eb1d"/></dir><dir name="Boosting"><file name="Attribute.php" hash="f6db7762064a7e97ca73b5e15757148f"/></dir><file name="Frequency.php" hash="5866e9d92476cdaa8a5f27c5fa0dc48b"/><file name="Landingoptions.php" hash="058c81eb9faec57f6c77db697ff3279e"/><dir name="Log"><file name="Level.php" hash="ba2bee63eb18b966db6beade72293036"/></dir><dir name="Product"><file name="Attributes.php" hash="f99ced41d6504f1570a703e66743dd0b"/></dir><file name="Syncoptions.php" hash="6114fd30c79d1d268b039c09f93e9f74"/><file name="Yesnoforced.php" hash="0cf0e7842afae56af0caf92c9490295b"/></dir></dir></dir></dir><dir name="Test"><dir name="Config"><file name="Base.php" hash="a1a8faa15e50cd1d394bc79ca94f712b"/></dir><dir name="Controller"><dir name="CatalogSearch"><dir name="fixtures"><file name="search_results.yaml" hash="bfa6ebad238b75d771b89fb369201540"/></dir></dir><file name="CatalogSearch.php" hash="f6c2615ef27061d0cce7e7eae717c040"/></dir><dir name="Helper"><file name="Api.php" hash="c8484c149e920b3f74b8f6f2dce82936"/><file name="Compat.php" hash="8bae993e0da8f368eb50689f271446a5"/><dir name="Config"><dir name="fixtures"><file name="testGetOrderSyncEnabledFlag.yaml" hash="d1427ea15734ca336c47aad51ad7026e"/><file name="testGetOrderSyncFrequency.yaml" hash="52dffcad75b15761a695eb451b99c751"/><file name="testGetProductSyncEnabledFlag.yaml" hash="43e7263c8b781ef7fb6efbb6598f0226"/><file name="testGetProductSyncFrequency.yaml" hash="004e62dfa22c9abfd8dcf56c92270e19"/><file name="testIsExtensionEnabledDisabled.yaml" hash="5d706b347b4f32f87dc8eb4dd6102148"/><file name="testIsExtensionEnabledEnabled.yaml" hash="52c9eb8a4fad4d8f3ba25c68d35977f3"/></dir><dir name="providers"><file name="testIsOrderSyncEnabled.yaml" hash="938cc58e15b310ba2760be6c64e3d3cb"/><file name="testIsProductSyncEnabled.yaml" hash="5be1dcfb21264a012de32cbd252a09c9"/><file name="testIsTestModeEnabled.yaml" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir><file name="Config.php" hash="9ef7b00d63104e11426f3085afa36744"/><dir name="Data"><dir name="providers"><file name="testBytesToHumanReadable.yaml" hash="7cdb8705e108715abc63fa2cfd81626b"/><file name="testGetLanguageFromLocale.yaml" hash="c301f8dc090142627f6af4e4222b7708"/><file name="testHumanReadableToBytes.yaml" hash="dd89ae5b6705cfcfbf42ba64432c0f0a"/><file name="testIsProductionDomain.yaml" hash="f88ef0f80073fdb9cbdbd020348527a7"/></dir></dir><file name="Data.php" hash="93bb38ec55380a6ec7d79008496cac34"/></dir><dir name="Model"><dir name="Api"><dir name="Action"><dir name="Addrecords"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="26eea8bfc58c60e4a2f07dcbddc2e6fd"/><file name="testValidateRequiredFieldsRecords.yaml" hash="590b7ec9b7c33debb740b8c6c6db717f"/><file name="testValidateRequiredFieldsRecordsAllowedEmpty.yaml" hash="f82933b3d219491015cef39a214543bd"/><file name="testValidateRequiredFieldsRecordsEmpty.yaml" hash="d5dcd5aad682db42b1352c35b8905d47"/><file name="testValidateRequiredFieldsRecordsOptional.yaml" hash="25092bb84ba311815ca33971a388256e"/></dir></dir><file name="Addrecords.php" hash="14f5c217fac3f82957f54916fa29b387"/><dir name="Adduser"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="841f068ff3ffd8081ccc91e8675f998c"/></dir></dir><file name="Adduser.php" hash="5189f29f08c4ed30d9b6ac83429de3d0"/><dir name="Addwebstore"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="e52324b58b76d2d63cfa83ee228e1b31"/></dir></dir><file name="Addwebstore.php" hash="fbeac1b8adc5df45ef08a0a3331e5fbc"/><dir name="Getuserdetail"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="297df49838c47536bc9ee928b27470b2"/></dir></dir><file name="Getuserdetail.php" hash="4733d1ec7fd5b3b765aa88f182adf390"/><dir name="Idsearch"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="f36c1a1a1e6d1f5a2d3a59d8d349036e"/></dir></dir><file name="Idsearch.php" hash="4c8849b460a0df494911e3a4df65719c"/><dir name="Producttracking"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="4bc690980c701649d17ff6caba3ef646"/></dir></dir><file name="Producttracking.php" hash="04d8ef59f24f848d36493aabfa413828"/><file name="Startsession.php" hash="c1ae49d22b5e75672b8d84499d51f3d4"/></dir><file name="Action.php" hash="14ce7e11eb3acfda2dfea539c8f5254b"/><dir name="Request"><dir name="Xml"><dir name="providers"><file name="testGetDataAsXml.yaml" hash="4aa16e3557481444ba39775ee0b99d29"/></dir></dir><file name="Xml.php" hash="279a5defe0c933540e9635455590d8b1"/></dir><file name="Request.php" hash="b0cbdfe6a023d0479dc1b1c7fc6869c0"/><dir name="Response"><dir name="Data"><dir name="providers"><file name="testIsSuccessful.yaml" hash="f085922f4329b3d6b19c1e0010d3ca22"/></dir></dir><file name="Data.php" hash="1ab05c7225658f54bd31f0c205d05a2b"/><file name="Empty.php" hash="9933c42aa9ff06977ca3e53d2de15857"/><file name="Invalid.php" hash="bb68f25a053b7e5fc024bce0f5286fcb"/><dir name="Message"><dir name="providers"><file name="testIsSuccessful.yaml" hash="d53562002270a0c4b58ca94733309a21"/></dir></dir><file name="Message.php" hash="135c0d136fa9d0e86158407fc59294c3"/><dir name="Timezone"><dir name="providers"><file name="testIsSuccessful.yaml" hash="67f35e7ee5081689a1eddb867ae6256d"/></dir></dir><file name="Timezone.php" hash="f9cb063ef1f506f656a25c6206899eb3"/><dir name="providers"><file name="response_testIsSuccessful.yaml" hash="ac214d5ebf1eccb89e8fa85e8e3cbb75"/></dir></dir><file name="Response.php" hash="dbcce43ccb2cdf47bce5c05fcf27e759"/><dir name="Test"><file name="Case.php" hash="ec6d3169b9e2bd26655687124be779dd"/></dir><dir name="data"><file name="data_response_data.xml" hash="cd2e5d3dcac402828b9e5f0b0b637c76"/><file name="data_response_failure.xml" hash="ba677628e68149e0283729c1c8e5e86a"/><file name="data_response_no_response.xml" hash="98944f0eda050221de59100f4b22f030"/><file name="data_response_success.xml" hash="e92d1cfcd4461dc8d3fcabe1f902b40b"/><file name="data_response_success_only.xml" hash="276055d04a3f112efe9e6f1c337d7699"/><file name="message_response_failure.xml" hash="ab63c55523b26bd53ea6abf426dd11f5"/><file name="message_response_missing_message.xml" hash="4a43490eda6f33804ca400da2f9cdac1"/><file name="message_response_missing_status.xml" hash="39103fec18a0be88e4ff00a8149c8ad4"/><file name="message_response_session_id.xml" hash="415f25f79a3795ae70b983504cbb784f"/><file name="message_response_success.xml" hash="3ac53566b3d187cb81eb04d40a195c50"/><file name="response_malformed.xml" hash="bfeb4e75829a42082a7935a8e7be491e"/><file name="response_noxml.xml" hash="2debfdcf79f03e4a65a667d21ef9de14"/><file name="response_valid.xml" hash="c915992330f0e4bd37bb629637139f98"/><file name="search_response_empty.xml" hash="601298402d21f3626052634cbbb0ae72"/><file name="search_response_paged.xml" hash="04203807a1d6df787c54afd84690a50e"/><file name="search_response_sorted.xml" hash="c3ee65658a56f65334417328c7fbdcac"/><file name="search_response_success.xml" hash="fea4e59e7ae6e68b387729e320d5f49c"/><file name="startsession_response_success.xml" hash="1865ee2da80359e5a84914c56cae2c8d"/><file name="timezone_response_no_data.xml" hash="276055d04a3f112efe9e6f1c337d7699"/><file name="timezone_response_no_status.xml" hash="bd695479b03e3607196f01f627af4a45"/><file name="timezone_response_with_failure.xml" hash="69a6b1fa7b2cf087d85be162064525b0"/><file name="timezone_response_with_success.xml" hash="e6888eca066741675d228ba1397b5554"/></dir></dir><dir name="Config"><dir name="Log"><file name="Level.php" hash="2032f568dc75c8a5ff63c7daaf8bd049"/></dir></dir><dir name="Notification"><dir name="fixtures"><file name="testLoad.yaml" hash="305afce09851bb40e8c990c138aff162"/></dir></dir><file name="Notification.php" hash="889ec647dbdb938741cfc75e1baa2bc2"/><dir name="Observer"><dir name="fixtures"><file name="testLandingPageRewritesDisabled.yaml" hash="88f0c274444dbaab4fded639b4f40048"/><file name="testLandingPageRewritesEnabled.yaml" hash="bfe60a7ccc0ac73c664f24a4b7394343"/><file name="testScheduleOrderSync.yaml" hash="170806194b4a1bd7f00bc346a51709e1"/></dir></dir><file name="Observer.php" hash="73349e9c475129197c2cf55a1e1d4cdc"/><dir name="Order"><dir name="Sync"><dir name="fixtures"><file name="testAddOrderToQueue.yaml" hash="c93c3c28273757a13b878f97dd0b9e97"/><file name="testClearQueue.yaml" hash="d7ad7abd553e333e84cbab149cdcfb31"/><file name="testRun.yaml" hash="44f091d24de97d230f61fcaf3689ba81"/></dir></dir><file name="Sync.php" hash="d2166272904e003b6bea3862f66e0235"/></dir><dir name="Product"><dir name="Sync"><dir name="fixtures"><file name="testAddProducts.yaml" hash="0ac9a9e6666f285eff796d30c8e0a4e3"/><file name="testCatalogruleProducts.yaml" hash="c37fe4fe86fda18d9fd90794ea1520e4"/><file name="testClearAllProducts.yaml" hash="b7ec8b285d34a27e1c50d572b5ae8227"/><file name="testDeleteProducts.yaml" hash="22f94366cc64b6980b8d648067920533"/><file name="testRun.yaml" hash="eaac2bf57835625a6cd80294e6c5a99c"/><file name="testSpecialpriceProducts.yaml" hash="7d44672dcf91473c0bf1d9cb523a394a"/><file name="testUpdateProducts.yaml" hash="61266411faa659dc175f75ffbccce97e"/></dir></dir><file name="Sync.php" hash="62c07a8123480172bba781b78103fcf6"/></dir><dir name="Sync"><dir name="providers"><file name="testSchedule.yaml" hash="97f1043c42eb74162ae97941dc920d8f"/></dir></dir><file name="Sync.php" hash="8c091e168e251761be7fb1d1d2149305"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Test"><dir name="providers"><file name="testIsValidSourceModel.yaml" hash="cfedc94014707ee5586dd212b4d1ee16"/></dir></dir><file name="Test.php" hash="3e915599d4f76a2fbbb20aed9ffdf968"/></dir></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Klevu"><file name="NotificationsController.php" hash="e6a8f7ee4ca5463bb9b3df5fa901b6b1"/><dir name="Search"><file name="WizardController.php" hash="f8b68edbffcd6dae88c7d0e5b1751da6"/></dir><file name="SearchController.php" hash="85f8b8ee09a575534c1c6c4bb136f8eb"/></dir></dir><file name="IndexController.php" hash="2ed1a9392ce871e0b733bbaead48f6f3"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6ce395b9dec2d88a7709d0917c13d50f"/><file name="config.xml" hash="27dc4a8339996e924ad5823c9c039a98"/><file name="system.xml" hash="edc1b7a250c5bc6f13489f921d21b9f8"/></dir><dir name="sql"><dir name="klevu_search_setup"><file name="mysql4-data-upgrade-1.1.1-1.1.2.php" hash="a65f702cf64af452f2fb6f6cdac130a7"/><file name="mysql4-data-upgrade-1.1.21-1.1.22.php" hash="bc7e9447bc34ac08435de4e6870f6699"/><file name="mysql4-install-1.0.0.php" hash="860c1991c2ebf804f939598e9932edf5"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="klevu"><dir name="search"><dir name="form"><dir name="field"><file name="array_readonly.phtml" hash="d3a3be4cf22f89d84bd73121a1adfa86"/><dir name="sync"><file name="button.phtml" hash="dae55579390ed8b72e1fadcbb538442b"/><file name="logbutton.phtml" hash="d31dd881015319d78d9fb2b83874f296"/></dir></dir><file name="information.phtml" hash="26f0370ba789126b6aa5895b48600166"/><file name="klevuinfo.phtml" hash="87ae995129b69b329da65ac0b4058683"/></dir><file name="notifications.phtml" hash="090714ca57b11d24769c1baa1bcd4615"/><dir name="wizard"><file name="complete.phtml" hash="aeca8d1a3335b461f5e6bcbba08c22b6"/><dir name="config"><file name="button.phtml" hash="b1644ee569882b05c2d8cb2f1eecddbc"/></dir><dir name="configure"><file name="attributes.phtml" hash="d54f0a86e78390fbe66825d0771aad25"/><file name="store.phtml" hash="037b9de18293b3dba4511409e4f3f30a"/><file name="user.phtml" hash="8f5d6da7920bfbcc8eb600634fa7a14b"/></dir><dir name="form"><dir name="field"><file name="array.phtml" hash="ccdccab02fbd9cfc2145f094d5e12a2e"/></dir></dir></dir></dir></dir></dir><dir name="layout"><dir name="klevu"><file name="search.xml" hash="f385a7290bad22fb212b440afa82d2a7"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="klevu"><file name="search.xml" hash="7c581fe86dd6379ccdfdfce5120e43ca"/></dir></dir><dir name="template"><dir name="klevu"><dir name="search"><file name="form_js.phtml" hash="a5141d394a3b34b57ceea83031400081"/><file name="index.phtml" hash="c9f898eb8ed58cad9b14e632cea55790"/><file name="klevulog.phtml" hash="9cebbd9ec162570768aefc30c777fb78"/><file name="product_tracking.phtml" hash="e773b0cfcc8c3649bf26cc83d71345ec"/></dir></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="klevu"><dir name="search"><dir name="lib"><file name="Wizard.js" hash="a90f1eae9f2603421a38fd822260344f"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="klevu"><dir name="search"><file name="notifications.css" hash="80954cfc49bb2bc45d2eafb7c28cedad"/><file name="wizard.css" hash="824f735715f3ed97ce98414b9895e46b"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="klevu"><file name="klevu-landing-left.css" hash="38c63d7796e4e33b212a1d8b044d0a91"/><file name="klevu-landing-page-style.css" hash="a8ab836614a888a4eef92d1b2e64b326"/><file name="klevu-landing-responsive.css" hash="811e1bfece09ba7d5529fec850963ac6"/></dir></dir><dir name="images"><dir name="klevu"><file name="btn-gridview.png" hash="c3dd97f4f53e1dfe34b6c5b6b4237b8a"/><file name="btn-listview.png" hash="00aaaa62d67e252248d6075f53b04f7f"/><file name="ku-loader.gif" hash="6050f5bcf455cc8f0332dd65e72f8e52"/></dir></dir></dir></dir></dir></target></contents>
30
  <compatible/>
31
  <dependencies><required><php><min>5.3.0</min><max>5.6.0</max></php></required></dependencies>
32
  </package>
skin/frontend/base/default/css/klevu/klevu-landing-left.css ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .kuClrFilterBoth{
2
+ clear:both;
3
+ }
4
+
5
+ .kuFilterLbl{
6
+ display:inline-block !important;
7
+ float:left;
8
+ }
9
+
10
+ .kuFilterClose{
11
+ display:inline-block !important;
12
+ float:right;
13
+ }
14
+ .contentSelect{
15
+ font-weight:bold;
16
+ }
skin/frontend/base/default/css/klevu/klevu-landing-page-style.css CHANGED
@@ -19,7 +19,7 @@
19
  .kuFilters{
20
  float:left;
21
  width:23%;
22
- border:1px solid #ddd;
23
  }
24
 
25
  /* set the height of each filter*/
@@ -139,7 +139,6 @@
139
 
140
  /* div for Sorting, pagination, change result view icons*/
141
  .kuSortHeader{
142
- padding:10px;
143
  margin:5px;
144
  padding-top: 0px;
145
  margin-top: 0px;
@@ -154,9 +153,33 @@
154
  font-size:14px;
155
  }
156
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
157
  .kuSortingOpt{
158
  background-color:#eee;
159
- border:1px solid #ddd;
160
  padding:5px;
161
  }
162
 
@@ -174,7 +197,8 @@
174
  /* sorting dropdown */
175
  .kuSortby select{
176
  display:inline;
177
- height:25px;
 
178
  width:100px;
179
  }
180
 
@@ -232,7 +256,8 @@
232
 
233
  .kuPerPage select{
234
  width:54px !important;
235
- height:25px;
 
236
  }
237
 
238
  /* div for pagination */
@@ -273,6 +298,15 @@
273
  font-weight:bold;
274
  }
275
 
 
 
 
 
 
 
 
 
 
276
  .kuClearLeft{
277
  clear:left;
278
  line-height:0px;
@@ -296,8 +330,9 @@
296
 
297
  /* In LISTVIEW: list style for each result */
298
  .kuListView ul li{
 
299
  display:block;
300
- width: 100%;
301
  height: auto;
302
  padding: 10px;
303
  border-bottom: 1px solid #eee;
@@ -323,11 +358,39 @@
323
  outline:none;
324
  }
325
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  /* In LISTVIEW: display product name and description */
327
  .kuListView ul li .kuNameDesc{
328
- float:left;
329
- width:65%;
330
- margin-left:5px;
331
  }
332
 
333
  .kuListView ul li .kuName{
@@ -405,6 +468,7 @@
405
  padding-top:15px;
406
  margin-left:0px !important;
407
  font-style:normal;
 
408
  }
409
 
410
  .kuGridView ul li:nth-child(1),.kuGridView ul li:nth-child(2),.kuGridView ul li:nth-child(3),.kuGridView ul li:nth-child(4){
@@ -433,6 +497,20 @@
433
  display:inline-block !important;
434
  }
435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
436
  /* In GRIDVIEW: remove float value for name and description div */
437
  .kuGridView .kuNameDesc{
438
  float:none;
@@ -448,6 +526,19 @@
448
  min-height:45px;
449
  }
450
 
 
 
 
 
 
 
 
 
 
 
 
 
 
451
 
452
  /* CSS for add to cart button */
453
  .kuGridView ul li .kuAddtocart{
@@ -460,7 +551,6 @@
460
  display:inline-block;
461
  width:25%;
462
  float:left;
463
- height:22px;
464
  border:1px solid #ddd;
465
  outline:none;
466
  text-align:right;
@@ -468,9 +558,9 @@
468
 
469
  .kuGridView ul li a.kuAddtocartBtn{
470
  display:inline-block;
471
- background: #616161;
472
  float:right;
473
- color: #fff;
474
  width:72%;
475
  padding-top:6px;
476
  padding-bottom:6px;
@@ -484,32 +574,24 @@
484
  -ms-user-select: none;
485
  -o-user-select: none;
486
  text-decoration:none;
487
-
488
  }
489
 
490
- .kuListView ul li .klevu-addtocart{
491
- float:right;
492
- display:block;
493
- width:15%;
494
- height:20px;
495
- margin-top:20px;
496
- text-align:center;
497
  }
498
 
499
-
500
  .kuListView ul li input[type="text"]{
501
  width:5%;
502
  float:none;
503
- height:22px;
504
  border:1px solid #ddd;
505
  outline:none;
506
  text-align:right;
507
  }
508
 
509
  .kuListView ul li a.kuAddtocartBtn{
510
- background: #616161;
511
  float:none;
512
- color: #fff;
513
  width:15%;
514
  padding-top:6px;
515
  padding-bottom:6px;
@@ -524,7 +606,10 @@
524
  -ms-user-select: none;
525
  -o-user-select: none;
526
  text-decoration:none;
 
527
 
 
 
528
  }
529
 
530
 
@@ -571,7 +656,7 @@
571
  .kuBottomPagi{
572
  padding:5px;
573
  background-color:#eee;
574
- border:1px solid #ddd;
575
  }
576
 
577
  .kuBottomPagi .kuPerPage{
@@ -616,4 +701,13 @@
616
  margin-top:10%;
617
  display: inline-block;
618
  width:auto !important;
 
 
 
 
 
 
 
 
 
619
  }
19
  .kuFilters{
20
  float:left;
21
  width:23%;
22
+ border:1px solid #ccc;
23
  }
24
 
25
  /* set the height of each filter*/
139
 
140
  /* div for Sorting, pagination, change result view icons*/
141
  .kuSortHeader{
 
142
  margin:5px;
143
  padding-top: 0px;
144
  margin-top: 0px;
153
  font-size:14px;
154
  }
155
 
156
+ .kuTotalResultsTab .kuTabs{
157
+ line-height:30px;
158
+ }
159
+
160
+ .kuTotalResultsTab{
161
+ margin-bottom:10px;
162
+ padding-left:5px;
163
+ }
164
+
165
+ .kuTotalResultsTab a{
166
+ padding:8px;
167
+ cursor:pointer;
168
+ border-radius:3px;
169
+ }
170
+
171
+ .kuTotalResultsTab a:hover{
172
+ background-color:#eee;
173
+ }
174
+
175
+ .kuTotalResultsTab a.kuTabSelected{
176
+ background-color:#616161;
177
+ color:#fff;
178
+ }
179
+
180
  .kuSortingOpt{
181
  background-color:#eee;
182
+ border:1px solid #ccc;
183
  padding:5px;
184
  }
185
 
197
  /* sorting dropdown */
198
  .kuSortby select{
199
  display:inline;
200
+ height:auto;
201
+ min-height:25px;
202
  width:100px;
203
  }
204
 
256
 
257
  .kuPerPage select{
258
  width:54px !important;
259
+ height:auto;
260
+ min-height:25px;
261
  }
262
 
263
  /* div for pagination */
298
  font-weight:bold;
299
  }
300
 
301
+ .kuOtherContent .kuPagination{
302
+ float:right;
303
+ }
304
+
305
+ .kuOtherContent .kuPerPage{
306
+ margin-left:0px;
307
+ text-align:left;
308
+ }
309
+
310
  .kuClearLeft{
311
  clear:left;
312
  line-height:0px;
330
 
331
  /* In LISTVIEW: list style for each result */
332
  .kuListView ul li{
333
+ position:relative;
334
  display:block;
335
+ width: 98.5%;
336
  height: auto;
337
  padding: 10px;
338
  border-bottom: 1px solid #eee;
358
  outline:none;
359
  }
360
 
361
+ .kuListView ul li .kuDiscountBadge{
362
+ background: #ffcc01;
363
+ padding:5px 10px;
364
+ color: #000000;
365
+ font-weight: bold;
366
+ position: absolute;
367
+ top: 6px;
368
+ left: 4px;
369
+ }
370
+
371
+ .kuListView ul li .kuDiscountBadge strong{
372
+ color:#000;
373
+ }
374
+
375
+ .kuListView .kuStarsSmall {
376
+ height: 13px;
377
+ display: inline-block;
378
+ vertical-align: bottom;
379
+ background: transparent url(https://js.klevu.com/klevu-js-v1/img-1-1/star-gray.png) top left repeat-x;
380
+ width: 66px;
381
+ margin-left:5px;
382
+ }
383
+
384
+ .kuListView .kuStarsSmall .kuRating {
385
+ background: transparent url(https://js.klevu.com/klevu-js-v1/img-1-1/star-yellow.png) top left repeat-x;
386
+ height: 13px;
387
+ }
388
+
389
  /* In LISTVIEW: display product name and description */
390
  .kuListView ul li .kuNameDesc{
391
+ float:left;
392
+ width:65%;
393
+ margin-left:5px;
394
  }
395
 
396
  .kuListView ul li .kuName{
468
  padding-top:15px;
469
  margin-left:0px !important;
470
  font-style:normal;
471
+ position:relative;
472
  }
473
 
474
  .kuGridView ul li:nth-child(1),.kuGridView ul li:nth-child(2),.kuGridView ul li:nth-child(3),.kuGridView ul li:nth-child(4){
497
  display:inline-block !important;
498
  }
499
 
500
+ .kuGridView ul li .kuDiscountBadge{
501
+ background: #ffcc01;
502
+ padding:5px 10px;
503
+ color: #000000;
504
+ font-weight: bold;
505
+ position: absolute;
506
+ top: 6px;
507
+ left: 4px;
508
+ }
509
+
510
+ .kuGridView ul li .kuDiscountBadge strong{
511
+ color:#000;
512
+ }
513
+
514
  /* In GRIDVIEW: remove float value for name and description div */
515
  .kuGridView .kuNameDesc{
516
  float:none;
526
  min-height:45px;
527
  }
528
 
529
+ .kuGridView .kuStarsSmall {
530
+ height: 13px;
531
+ display: inline-block;
532
+ vertical-align: bottom;
533
+ background: transparent url(https://js.klevu.com/klevu-js-v1/img-1-1/star-gray.png) top left repeat-x;
534
+ width: 66px;
535
+ }
536
+
537
+ .kuGridView .kuStarsSmall .kuRating {
538
+ background: transparent url(https://js.klevu.com/klevu-js-v1/img-1-1/star-yellow.png) top left repeat-x;
539
+ height: 13px;
540
+ }
541
+
542
 
543
  /* CSS for add to cart button */
544
  .kuGridView ul li .kuAddtocart{
551
  display:inline-block;
552
  width:25%;
553
  float:left;
 
554
  border:1px solid #ddd;
555
  outline:none;
556
  text-align:right;
558
 
559
  .kuGridView ul li a.kuAddtocartBtn{
560
  display:inline-block;
561
+ background: #3399cc;
562
  float:right;
563
+ color: #ffffff;
564
  width:72%;
565
  padding-top:6px;
566
  padding-bottom:6px;
574
  -ms-user-select: none;
575
  -o-user-select: none;
576
  text-decoration:none;
 
577
  }
578
 
579
+ .kuGridView ul li a.kuAddtocartBtn:hover{
580
+ background: #2e8ab8;
 
 
 
 
 
581
  }
582
 
 
583
  .kuListView ul li input[type="text"]{
584
  width:5%;
585
  float:none;
 
586
  border:1px solid #ddd;
587
  outline:none;
588
  text-align:right;
589
  }
590
 
591
  .kuListView ul li a.kuAddtocartBtn{
592
+ background: #3399cc;
593
  float:none;
594
+ color: #ffffff;
595
  width:15%;
596
  padding-top:6px;
597
  padding-bottom:6px;
606
  -ms-user-select: none;
607
  -o-user-select: none;
608
  text-decoration:none;
609
+ }
610
 
611
+ .kuListView ul li a.kuAddtocartBtn:hover{
612
+ background: #2e8ab8;
613
  }
614
 
615
 
656
  .kuBottomPagi{
657
  padding:5px;
658
  background-color:#eee;
659
+ border:1px solid #ccc;
660
  }
661
 
662
  .kuBottomPagi .kuPerPage{
701
  margin-top:10%;
702
  display: inline-block;
703
  width:auto !important;
704
+ }
705
+
706
+ .kuOtherContent{
707
+ display:none;
708
+ }
709
+
710
+ .disableKuFilter{
711
+ opacity:0.3;
712
+ pointer-events: none;
713
  }