Klevu_SmartSearch - Version 1.2.13

Version Notes

- Shell script message change
- Css change
- Domain related notification
- Change cloud search url to change 4
- Pass the date when the product was added
- Add an option in the plugin to regenerate images using shell script command
- Exclude in search change
- Options to use configurable product description
- bug fix for Bundle product tax issue
- All data sync with magento indexing using shell script command
- Trigger option to detect ERP and third party api direct db change in stock and price
- Message change for openssl

Download this release

Release Info

Developer Klevu
Extension Klevu_SmartSearch
Version 1.2.13
Comparing to
See all releases


Code changes from version 1.2.12 to 1.2.13

app/code/community/Klevu/Content/Model/Content.php CHANGED
@@ -237,18 +237,25 @@ class Klevu_Content_Model_Content extends Klevu_Search_Model_Product_Sync
237
  */
238
  protected function deletecms(array $data)
239
  {
 
 
 
 
 
240
  $total = count($data);
241
  $response = Mage::getModel('klevu_search/api_action_deleterecords')->setStore($this->getStore())->execute(array(
242
  'sessionId' => $this->getSessionId() ,
243
  'records' => array_map(function ($v)
244
  {
245
  return array(
246
- 'id' => "pageid_" . $v['page_id']
 
247
  );
248
  }
249
  , $data)
250
  ));
251
  if ($response->isSuccessful()) {
 
252
  $connection = $this->getConnection();
253
  $select = $connection->select()->from(array(
254
  'k' => $this->getTableName("klevu_search/product_sync")
@@ -273,8 +280,8 @@ class Klevu_Content_Model_Content extends Klevu_Search_Model_Product_Sync
273
  else {
274
  return true;
275
  }
276
- }
277
- else {
278
  return sprintf("%d cms%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
279
  }
280
  }
@@ -290,6 +297,7 @@ class Klevu_Content_Model_Content extends Klevu_Search_Model_Product_Sync
290
  */
291
  protected function addCms(array $data)
292
  {
 
293
  $total = count($data);
294
  $data = $this->addCmsData($data);
295
  $response = Mage::getModel('klevu_search/api_action_addrecords')->setStore($this->getStore())->execute(array(
@@ -334,6 +342,7 @@ class Klevu_Content_Model_Content extends Klevu_Search_Model_Product_Sync
334
  }
335
  }
336
  else {
 
337
  return sprintf("%d cms%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
338
  }
339
  }
@@ -391,6 +400,7 @@ class Klevu_Content_Model_Content extends Klevu_Search_Model_Product_Sync
391
  */
392
  protected function updateCms(array $data)
393
  {
 
394
  $total = count($data);
395
  $data = $this->addCmsData($data);
396
  $response = Mage::getModel('klevu_search/api_action_updaterecords')->setStore($this->getStore())->execute(array(
@@ -425,6 +435,7 @@ class Klevu_Content_Model_Content extends Klevu_Search_Model_Product_Sync
425
  }
426
  }
427
  else {
 
428
  return sprintf("%d cms%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
429
  }
430
  }
237
  */
238
  protected function deletecms(array $data)
239
  {
240
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
241
+ $baseDomain = $this->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true);
242
+ foreach($data as $key => $value){
243
+ $data[$key]['url'] = $baseDomain;
244
+ }
245
  $total = count($data);
246
  $response = Mage::getModel('klevu_search/api_action_deleterecords')->setStore($this->getStore())->execute(array(
247
  'sessionId' => $this->getSessionId() ,
248
  'records' => array_map(function ($v)
249
  {
250
  return array(
251
+ 'id' => "pageid_" . $v['page_id'],
252
+ 'url' => $v['url']
253
  );
254
  }
255
  , $data)
256
  ));
257
  if ($response->isSuccessful()) {
258
+
259
  $connection = $this->getConnection();
260
  $select = $connection->select()->from(array(
261
  'k' => $this->getTableName("klevu_search/product_sync")
280
  else {
281
  return true;
282
  }
283
+ } else {
284
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
285
  return sprintf("%d cms%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
286
  }
287
  }
297
  */
298
  protected function addCms(array $data)
299
  {
300
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
301
  $total = count($data);
302
  $data = $this->addCmsData($data);
303
  $response = Mage::getModel('klevu_search/api_action_addrecords')->setStore($this->getStore())->execute(array(
342
  }
343
  }
344
  else {
345
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
346
  return sprintf("%d cms%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
347
  }
348
  }
400
  */
401
  protected function updateCms(array $data)
402
  {
403
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
404
  $total = count($data);
405
  $data = $this->addCmsData($data);
406
  $response = Mage::getModel('klevu_search/api_action_updaterecords')->setStore($this->getStore())->execute(array(
435
  }
436
  }
437
  else {
438
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
439
  return sprintf("%d cms%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
440
  }
441
  }
app/code/community/Klevu/Search/Block/Adminhtml/Form/Field/Trigger/Button.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Klevu_Search_Block_Adminhtml_Form_Field_Sync_Button
5
+ *
6
+ * @method setStoreId($id)
7
+ * @method string getStoreId()
8
+ */
9
+ class Klevu_Search_Block_Adminhtml_Form_Field_Trigger_Button extends Mage_Adminhtml_Block_System_Config_Form_Field {
10
+
11
+ protected function _prepareLayout() {
12
+ parent::_prepareLayout();
13
+
14
+ // Set the default template
15
+ if (!$this->getTemplate()) {
16
+ $this->setTemplate('klevu/search/form/field/trigger/button.phtml');
17
+ }
18
+
19
+ return $this;
20
+ }
21
+
22
+ public function render(Varien_Data_Form_Element_Abstract $element) {
23
+ if ($element->getScope() == "stores") {
24
+ $this->setStoreId($element->getScopeId());
25
+ }
26
+
27
+ // Remove the scope information so it doesn't get printed out
28
+ $element
29
+ ->unsScope()
30
+ ->unsCanUseWebsiteValue()
31
+ ->unsCanUseDefaultValue();
32
+
33
+ return parent::render($element);
34
+ }
35
+
36
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element) {
37
+ $url_params = ($this->getStoreId()) ? array("store" => $this->getStoreId()) : array();
38
+ $label_suffix = ($this->getStoreId()) ? " for This Store" : "";
39
+
40
+ $this->addData(array(
41
+ "html_id" => $element->getHtmlId(),
42
+ "button_label" => sprintf("save %s", $label_suffix),
43
+ "destination_url" => $this->getUrl("adminhtml/klevu_search/trigger", $url_params)
44
+ ));
45
+
46
+ return $this->_toHtml();
47
+ }
48
+ }
app/code/community/Klevu/Search/Helper/Config.php CHANGED
@@ -43,6 +43,9 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
43
  const XML_PATH_CONFIG_IMAGE_FLAG = "klevu_search/image_setting/enabled";
44
  const XML_PATH_CONFIG_SYNC_FREQUENCY = "klevu_search/product_sync/frequency";
45
  const XML_PATH_COLLETION_METHOD = "klevu_search/developer/collection_method";
 
 
 
46
  const DATETIME_FORMAT = "Y-m-d H:i:s T";
47
  protected $_klevu_features_response;
48
  protected $_klevu_enabled_feature_response;
@@ -638,7 +641,8 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
638
  "price",
639
  "tax_class_id",
640
  "weight",
641
- "rating"),
 
642
  "klevu_attribute" => array(
643
  "name",
644
  "sku",
@@ -651,7 +655,8 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
651
  "salePrice",
652
  "salePrice",
653
  "weight",
654
- "rating"
 
655
  )
656
  );
657
  }
@@ -874,4 +879,63 @@ class Klevu_Search_Helper_Config extends Mage_Core_Helper_Abstract {
874
  public function getCollectionMethod() {
875
  return Mage::getStoreConfigFlag(static::XML_PATH_COLLETION_METHOD);
876
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
877
  }
43
  const XML_PATH_CONFIG_IMAGE_FLAG = "klevu_search/image_setting/enabled";
44
  const XML_PATH_CONFIG_SYNC_FREQUENCY = "klevu_search/product_sync/frequency";
45
  const XML_PATH_COLLETION_METHOD = "klevu_search/developer/collection_method";
46
+ const XML_PATH_TRIGGER_OPTIONS = "klevu_search/developer/trigger_option";
47
+ const XML_PATH_DESCRIPTION_FLAG = "klevu_search/description_setting/enabled";
48
+ const XML_PATH_FLAT_CATALOG = "catalog/frontend/flat_catalog_product";
49
  const DATETIME_FORMAT = "Y-m-d H:i:s T";
50
  protected $_klevu_features_response;
51
  protected $_klevu_enabled_feature_response;
641
  "price",
642
  "tax_class_id",
643
  "weight",
644
+ "rating",
645
+ "msrp"),
646
  "klevu_attribute" => array(
647
  "name",
648
  "sku",
655
  "salePrice",
656
  "salePrice",
657
  "weight",
658
+ "rating",
659
+ "msrp"
660
  )
661
  );
662
  }
879
  public function getCollectionMethod() {
880
  return Mage::getStoreConfigFlag(static::XML_PATH_COLLETION_METHOD);
881
  }
882
+
883
+ /**
884
+ * save trigger option value
885
+ *
886
+ * @param string $value
887
+ *
888
+ * @return
889
+ */
890
+ public function saveTrigger($value) {
891
+ $this->setGlobalConfig(static::XML_PATH_TRIGGER_OPTIONS, $value);
892
+ return $this;
893
+ }
894
+
895
+ /**
896
+ * Return the configuration flag for trigger options.
897
+ *
898
+ *
899
+ * @return int
900
+ */
901
+ public function getTriggerOptionsFlag() {
902
+ return Mage::getStoreConfig(static::XML_PATH_TRIGGER_OPTIONS);
903
+ }
904
+
905
+
906
+ /**
907
+ * Return the configuration flag for sending config image.
908
+ *
909
+ * @param Mage_Core_Model_Store|int $store
910
+ *
911
+ * @return bool
912
+ */
913
+ public function isUseConfigDescription($store=null){
914
+ return Mage::getStoreConfigFlag(static::XML_PATH_DESCRIPTION_FLAG, $store);
915
+ }
916
+
917
+ /**
918
+ * Return the store from api key.
919
+ *
920
+ * @param $klevuApi
921
+ *
922
+ * @return int
923
+ */
924
+ public function scopeId($klevuApi){
925
+ $configs = Mage::getModel('core/config_data')->getCollection()
926
+ ->addFieldToFilter('value',$this->getJsApiKey())->load();
927
+ $scope_id = $configs->getData();
928
+ return intval($scope_id[0]['scope_id']);
929
+ }
930
+
931
+ /**
932
+ * Return the store from api key.
933
+ *
934
+ * @return bool
935
+ */
936
+ public function getFlatCatalogStatus(){
937
+ return Mage::getStoreConfig(static::XML_PATH_FLAT_CATALOG);
938
+
939
+ }
940
+
941
  }
app/code/community/Klevu/Search/Helper/Data.php CHANGED
@@ -433,4 +433,45 @@ class Klevu_Search_Helper_Data extends Mage_Core_Helper_Abstract {
433
  }
434
  }
435
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
436
  }
433
  }
434
  }
435
 
436
+ /**
437
+ * Check for invalid index
438
+ *
439
+ * @return bool
440
+ */
441
+ public function getStatuOfIndexing() {
442
+ if(Mage::getEdition() != "Enterprise") {
443
+ $flat_status = Mage::helper('klevu_search/config')->getFlatCatalogStatus();
444
+ $allIndex= Mage::getSingleton('index/indexer')->getProcessesCollection();
445
+ foreach ($allIndex as $index) {
446
+ if($flat_status == 0) {
447
+ if(strpos($index->getIndexerCode(), "flat") === false)
448
+ {
449
+ if($index->getStatus() == "require_reindex") {
450
+ return true;
451
+ }
452
+ }
453
+ } else {
454
+ if($index->getStatus() == "require_reindex") {
455
+ return true;
456
+ }
457
+ }
458
+ }
459
+ }
460
+ }
461
+
462
+ /**
463
+ * get for base domain
464
+ *
465
+ * @return string
466
+ */
467
+ public function getBaseDomain() {
468
+ $base_domain = Mage::app()->getStore(Mage::helper('klevu_search/config')->scopeId())->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK);
469
+ if(!empty($base_domain)) {
470
+ $base_url_value = parse_url($base_domain);
471
+ return $base_url_value['host'];
472
+ }
473
+ }
474
+
475
+
476
+
477
  }
app/code/community/Klevu/Search/Model/Api/Action/Addrecords.php CHANGED
@@ -202,6 +202,7 @@ class Klevu_Search_Model_Api_Action_Addrecords extends Klevu_Search_Model_Api_Ac
202
  * @param string
203
  */
204
  protected function prepareOtherAttributeToIndexParameters(&$record) {
 
205
  foreach ($record['otherAttributeToIndex'] as $key => &$value) {
206
  $key = $this->sanitiseOtherAttribute($key);
207
 
@@ -220,7 +221,9 @@ class Klevu_Search_Model_Api_Action_Addrecords extends Klevu_Search_Model_Api_Ac
220
  if (is_array($value)) {
221
  $value = implode(",", $value);
222
  }
223
-
 
 
224
  $value = sprintf("%s:%s:%s", $key, $label, $value);
225
  }
226
  $record['otherAttributeToIndex'] = implode(";", $record['otherAttributeToIndex']);
202
  * @param string
203
  */
204
  protected function prepareOtherAttributeToIndexParameters(&$record) {
205
+
206
  foreach ($record['otherAttributeToIndex'] as $key => &$value) {
207
  $key = $this->sanitiseOtherAttribute($key);
208
 
221
  if (is_array($value)) {
222
  $value = implode(",", $value);
223
  }
224
+ if($key == 'created_at') {
225
+ $value = date('Y-m-d',strtotime(substr($value,0,strpos($value,"T"))));
226
+ }
227
  $value = sprintf("%s:%s:%s", $key, $label, $value);
228
  }
229
  $record['otherAttributeToIndex'] = implode(";", $record['otherAttributeToIndex']);
app/code/community/Klevu/Search/Model/Api/Request.php CHANGED
@@ -166,8 +166,9 @@ class Klevu_Search_Model_Api_Request extends Varien_Object {
166
  * @return Zend_Http_Client
167
  */
168
  protected function build() {
169
- $client = new Zend_Http_Client();
170
-
 
171
  $client
172
  ->setUri($this->getEndpoint())
173
  ->setMethod($this->getMethod())
166
  * @return Zend_Http_Client
167
  */
168
  protected function build() {
169
+ $client = new Zend_Http_Client();
170
+ $config = array('timeout' => 60);
171
+ $client->setConfig($config);
172
  $client
173
  ->setUri($this->getEndpoint())
174
  ->setMethod($this->getMethod())
app/code/community/Klevu/Search/Model/Api/Response.php CHANGED
@@ -95,11 +95,27 @@ class Klevu_Search_Model_Api_Response extends Varien_Object {
95
  case 503:
96
  $message = "API server unavailable.";
97
  break;
 
 
 
 
98
  default:
99
  $message = "Unexpected error.";
100
  }
101
-
102
- $this->setMessage(sprintf("Failed to connect to Klevu: %s", $message));
 
 
 
 
 
 
 
 
 
 
 
 
103
  Mage::helper('klevu_search')->log(Zend_Log::ERR, sprintf("Unsuccessful HTTP response: %s %s", $response->getStatus(), $response->responseCodeAsText($response->getStatus())));
104
  }
105
 
95
  case 503:
96
  $message = "API server unavailable.";
97
  break;
98
+ case 400:
99
+ $message = "Klevu Product sync has issues indexing your products. <b>".Mage::helper('klevu_search')->getBaseDomain()."</b> is not listed as an allowed base URL for the Klevu Search API key <b>'".Mage::helper('klevu_search/config')->getJsApiKey()."'</b>. Please <a href='http://support.klevu.com/knowledgebase/base-urls
100
+ ' target='_blank'>click here</a> for more information.";
101
+ break;
102
  default:
103
  $message = "Unexpected error.";
104
  }
105
+ if($response->getStatus() == 400) {
106
+ $this->setMessage(sprintf("%s", $message));
107
+ $storefromscope = Mage::app()->getStore(Mage::helper('klevu_search/config')->scopeId());
108
+ Mage::getModel('klevu_search/product_sync')->notify(
109
+ Mage::helper('klevu_search')->__(
110
+ "Product Sync failed for %s (%s): %s",
111
+ $storefromscope->getWebsite()->getName(),
112
+ $storefromscope->getName(),
113
+ $message
114
+ ),null
115
+ );
116
+ } else {
117
+ $this->setMessage(sprintf("Failed to connect to Klevu: %s", $message));
118
+ }
119
  Mage::helper('klevu_search')->log(Zend_Log::ERR, sprintf("Unsuccessful HTTP response: %s %s", $response->getStatus(), $response->responseCodeAsText($response->getStatus())));
120
  }
121
 
app/code/community/Klevu/Search/Model/Api/Response/Empty.php CHANGED
@@ -5,7 +5,7 @@ class Klevu_Search_Model_Api_Response_Empty extends Klevu_Search_Model_Api_Respo
5
  public function _construct() {
6
  $this->successful = false;
7
  $this->addData(array(
8
- 'message' => "No HTTP response received. if you are using PHP version 5.4, please make sure to enable the php_openssl.dll module in your php.ini file."
9
  ));
10
  }
11
 
5
  public function _construct() {
6
  $this->successful = false;
7
  $this->addData(array(
8
+ 'message' => "No HTTP response received. if you are using PHP version 5.4, please make sure to enable the openssl in your php.ini file."
9
  ));
10
  }
11
 
app/code/community/Klevu/Search/Model/Api/Response/Search.php CHANGED
@@ -47,16 +47,18 @@ class Klevu_Search_Model_Api_Response_Search extends Klevu_Search_Model_Api_Resp
47
  protected function _prepareFilters($filters) {
48
  $prepared_filters = array();
49
  $i = 0;
50
-
51
- foreach ($filters as $filter) {
52
- $prepared_filters[$i] = $filter['@attributes'];
53
- $options = isset($filter['option']) ? $filter['option'] : $filter[0];
54
- foreach ($options as $option) {
55
- $prepared_filters[$i]['options'][] = isset($option['@attributes']) ? $option['@attributes'] : $option;
 
 
 
 
56
  }
57
- $i++;
58
- }
59
-
60
  return $prepared_filters;
61
  }
62
 
47
  protected function _prepareFilters($filters) {
48
  $prepared_filters = array();
49
  $i = 0;
50
+ if(!empty($filters)){
51
+ foreach ($filters as $filter) {
52
+ $prepared_filters[$i] = $filter['@attributes'];
53
+ $options = isset($filter['option']) ? $filter['option'] : $filter[0];
54
+ if(!empty($options)){
55
+ foreach ($options as $option) {
56
+ $prepared_filters[$i]['options'][] = isset($option['@attributes']) ? $option['@attributes'] : $option;
57
+ }
58
+ }
59
+ $i++;
60
  }
61
+ }
 
 
62
  return $prepared_filters;
63
  }
64
 
app/code/community/Klevu/Search/Model/Observer.php CHANGED
@@ -21,7 +21,8 @@ class Klevu_Search_Model_Observer extends Varien_Object {
21
  $this->setIsProductSyncScheduled(true);
22
  }
23
  }
24
-
 
25
  /**
26
  * Schedule an Order Sync to run immediately. If the observed event
27
  * contains an order, add it to the sync queue before scheduling.
@@ -274,5 +275,7 @@ class Klevu_Search_Model_Observer extends Varien_Object {
274
  Mage::helper('klevu_search')->log(Zend_Log::CRIT, sprintf("Exception thrown in %s::%s - %s", __CLASS__, __METHOD__, $e->getMessage()));
275
  }
276
  }
 
 
277
 
278
  }
21
  $this->setIsProductSyncScheduled(true);
22
  }
23
  }
24
+
25
+
26
  /**
27
  * Schedule an Order Sync to run immediately. If the observed event
28
  * contains an order, add it to the sync queue before scheduling.
275
  Mage::helper('klevu_search')->log(Zend_Log::CRIT, sprintf("Exception thrown in %s::%s - %s", __CLASS__, __METHOD__, $e->getMessage()));
276
  }
277
  }
278
+
279
+
280
 
281
  }
app/code/community/Klevu/Search/Model/Product/Sync.php CHANGED
@@ -36,9 +36,22 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
36
  * deleting removed products since last sync.
37
  */
38
  public function run() {
39
-
40
  try {
41
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  /* mark for update special price product */
43
  $this->markProductForUpdate();
44
 
@@ -73,7 +86,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
73
  }
74
 
75
  $stores = Mage::app()->getStores();
76
- $config = Mage::helper('klevu_search/config');
77
 
78
  foreach ($stores as $store) {
79
  $this->reset();
@@ -368,6 +381,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
368
  return;
369
  }
370
  $method = $action . "Products";
 
371
  $products = $this->getConnection()->fetchAll($statement, $statement->getBind());
372
 
373
 
@@ -600,14 +614,14 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
600
  )
601
  );*/
602
  } else {
603
- $this->notify(
604
- Mage::helper('klevu_search')->__(
605
- "Product Sync failed for %s (%s): %s",
606
- $store->getWebsite()->getName(),
607
- $store->getName(),
608
- $response->getMessage()
609
- ),$store
610
- );
611
  }
612
 
613
  return false;
@@ -625,18 +639,23 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
625
  * @return bool|string
626
  */
627
  protected function deleteProducts(array $data) {
 
628
  $total = count($data);
629
-
 
 
 
630
  $response = Mage::getModel('klevu_search/api_action_deleterecords')
631
  ->setStore($this->getStore())
632
  ->execute(array(
633
  'sessionId' => $this->getSessionId(),
634
  'records' => array_map(function ($v) {
635
- return array('id' => Mage::helper('klevu_search')->getKlevuProductId($v['product_id'], $v['parent_id']));
636
  }, $data)
637
  ));
638
 
639
  if ($response->isSuccessful()) {
 
640
  $connection = $this->getConnection();
641
 
642
  $select = $connection
@@ -677,11 +696,13 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
677
  return true;
678
  }
679
  } else {
 
680
  return sprintf("%d product%s failed (%s)",
681
  $total,
682
  ($total > 1) ? "s" : "",
683
  $response->getMessage()
684
  );
 
685
  }
686
  }
687
 
@@ -696,6 +717,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
696
  * @return bool|string
697
  */
698
  protected function updateProducts(array $data) {
 
699
  $total = count($data);
700
  $dataToSend = $this->addProductSyncData($data);
701
  if(!empty($dataToSend) && is_numeric($dataToSend)){
@@ -709,6 +731,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
709
  ));
710
 
711
  if ($response->isSuccessful()) {
 
712
  $helper = Mage::helper('klevu_search');
713
  $connection = $this->getConnection();
714
 
@@ -758,11 +781,13 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
758
  return true;
759
  }
760
  } else {
 
761
  return sprintf("%d product%s failed (%s)",
762
  $total,
763
  ($total > 1) ? "s" : "",
764
  $response->getMessage()
765
  );
 
766
  }
767
  }
768
 
@@ -777,6 +802,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
777
  * @return bool|string
778
  */
779
  protected function addProducts(array $data) {
 
780
  $total = count($data);
781
  $dataToSend = $this->addProductSyncData($data);
782
  if(!empty($dataToSend) && is_numeric($dataToSend)){
@@ -790,7 +816,6 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
790
  ));
791
 
792
  if ($response->isSuccessful()) {
793
-
794
  $skipped_record_ids = array();
795
  if ($skipped_records = $response->getSkippedRecords()) {
796
  $skipped_record_ids = array_flip($skipped_records["index"]);
@@ -849,6 +874,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
849
  return true;
850
  }
851
  } else {
 
852
  return sprintf("%d product%s failed (%s)",
853
  $total,
854
  ($total > 1) ? "s" : "",
@@ -1009,6 +1035,38 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1009
  break;
1010
  }
1011
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1012
  break;
1013
  case "image":
1014
  $config = Mage::helper('klevu_search/config');
@@ -1503,9 +1561,11 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1503
  $additional_attributes = Mage::helper('klevu_search/config')->getAdditionalAttributesMap($this->getStore());
1504
  $attribute_map = $this->prepareAttributeMap($attribute_map, $additional_attributes);
1505
 
1506
-
1507
  // Add otherAttributeToIndex to $attribute_map.
1508
- $otherAttributeToIndex = Mage::helper('klevu_search/config')->getOtherAttributesToIndex($this->getStore());
 
 
1509
  if(!empty($otherAttributeToIndex)) {
1510
  $attribute_map['otherAttributeToIndex'] = $otherAttributeToIndex;
1511
  }
@@ -1648,12 +1708,13 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1648
  * each category in the path, the last element being the
1649
  * name of the category referenced by the ID.
1650
  */
1651
- protected function getCategoryPaths() {
1652
  if (!$category_paths = $this->getData('category_paths')) {
1653
  $category_paths = array();
1654
  $rootId = $this->getStore()->getRootCategoryId();
1655
  $collection = Mage::getResourceModel('catalog/category_collection')
1656
  ->setStoreId($this->getStore()->getId())
 
1657
  ->addFieldToFilter('level', array('gt' => 1))
1658
  ->addFieldToFilter('path', array('like'=> "1/$rootId/%"))
1659
  ->addIsActiveFilter()
@@ -1664,14 +1725,16 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1664
  $path_ids = $category->getPathIds();
1665
  foreach ($path_ids as $id) {
1666
  if ($item = $collection->getItemById($id)) {
1667
- $category_paths[$category->getId()][] = $item->getName();
 
 
 
1668
  }
1669
  }
 
1670
  }
1671
-
1672
  $this->setData('category_paths', $category_paths);
1673
  }
1674
-
1675
  return $category_paths;
1676
  }
1677
 
@@ -1909,7 +1972,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
1909
  protected function processPrice($price, $tax_class_id, $pro) {
1910
  if($price < 0){$price = 0;}else{$price = $price;}
1911
  $config = Mage::helper('klevu_search/config');
1912
- if (($pro->getData('type_id') == Mage_Catalog_Model_Product_Type::TYPE_GROUPED || $pro->getData('type_id')==Mage_Catalog_Model_Product_Type::TYPE_BUNDLE )&& $config->getCollectionMethod() == 1) {
1913
  return $this->convertPrice($price);
1914
  }
1915
  if($config->isTaxEnabled($this->getStore()->getId())) {
@@ -2027,7 +2090,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
2027
  *
2028
  * @return $this
2029
  */
2030
- protected function notify($message, $store = null) {
2031
  $type = ($store === null) ? static::NOTIFICATION_GLOBAL_TYPE : static::NOTIFICATION_STORE_TYPE_PREFIX . $store->getId();
2032
  /** @var Klevu_Search_Model_Notification $notification */
2033
  $notification = Mage::getResourceModel('klevu_search/notification_collection')
@@ -2496,6 +2559,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
2496
  */
2497
  protected function addCategory(array $data)
2498
  {
 
2499
  $total = count($data);
2500
  $data = $this->addcategoryData($data);
2501
  $response = Mage::getModel('klevu_search/api_action_addrecords')->setStore($this->getStore())->execute(array(
@@ -2503,6 +2567,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
2503
  'records' => $data
2504
  ));
2505
  if ($response->isSuccessful()) {
 
2506
  $skipped_record_ids = array();
2507
  if ($skipped_records = $response->getSkippedRecords()) {
2508
  $skipped_record_ids = array_flip($skipped_records["index"]);
@@ -2540,7 +2605,10 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
2540
  }
2541
  }
2542
  else {
2543
- return sprintf("%d category%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
 
 
 
2544
  }
2545
  }
2546
  /**
@@ -2590,6 +2658,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
2590
  */
2591
  protected function updateCategory(array $data)
2592
  {
 
2593
  $total = count($data);
2594
  $data = $this->addcategoryData($data);
2595
  $response = Mage::getModel('klevu_search/api_action_updaterecords')->setStore($this->getStore())->execute(array(
@@ -2624,6 +2693,7 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
2624
  }
2625
  }
2626
  else {
 
2627
  return sprintf("%d category%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
2628
  }
2629
  }
@@ -2639,13 +2709,19 @@ class Klevu_Search_Model_Product_Sync extends Klevu_Search_Model_Sync {
2639
  */
2640
  protected function deleteCategory(array $data)
2641
  {
 
 
 
 
 
2642
  $total = count($data);
2643
  $response = Mage::getModel('klevu_search/api_action_deleterecords')->setStore($this->getStore())->execute(array(
2644
  'sessionId' => $this->getSessionId() ,
2645
  'records' => array_map(function ($v)
2646
  {
2647
  return array(
2648
- 'id' => "categoryid_" . $v['category_id']
 
2649
  );
2650
  }
2651
  , $data)
36
  * deleting removed products since last sync.
37
  */
38
  public function run() {
 
39
  try {
40
+
41
+ // reset the flag for fail message
42
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
43
+
44
+ // check the status of indexing when collection method selected to sync data
45
+ $config = Mage::helper('klevu_search/config');
46
+ if($config->getCollectionMethod()) {
47
+ if(Mage::helper('klevu_search')->getStatuOfIndexing()) {
48
+ $this->notify(Mage::helper('klevu_search')->__("Product sync failed:One of your Magento indexes is not up-to-date. Please, rebuild your indexes (see System > Index Management)."),null);
49
+ Mage::helper('klevu_search')->log(Zend_Log::INFO, "Product sync failed:One of your Magento indexes is not up-to-date. Please, rebuild your indexes (see System > Index Management).");
50
+
51
+ return true;
52
+ }
53
+ }
54
+
55
  /* mark for update special price product */
56
  $this->markProductForUpdate();
57
 
86
  }
87
 
88
  $stores = Mage::app()->getStores();
89
+
90
 
91
  foreach ($stores as $store) {
92
  $this->reset();
381
  return;
382
  }
383
  $method = $action . "Products";
384
+
385
  $products = $this->getConnection()->fetchAll($statement, $statement->getBind());
386
 
387
 
614
  )
615
  );*/
616
  } else {
617
+ $this->notify(
618
+ Mage::helper('klevu_search')->__(
619
+ "Product Sync failed for %s (%s): %s",
620
+ $store->getWebsite()->getName(),
621
+ $store->getName(),
622
+ $response->getMessage()
623
+ ),$store
624
+ );
625
  }
626
 
627
  return false;
639
  * @return bool|string
640
  */
641
  protected function deleteProducts(array $data) {
642
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
643
  $total = count($data);
644
+ $baseDomain = $this->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true);
645
+ foreach($data as $key => $value){
646
+ $data[$key]['url'] = $baseDomain;
647
+ }
648
  $response = Mage::getModel('klevu_search/api_action_deleterecords')
649
  ->setStore($this->getStore())
650
  ->execute(array(
651
  'sessionId' => $this->getSessionId(),
652
  'records' => array_map(function ($v) {
653
+ return array('id' => Mage::helper('klevu_search')->getKlevuProductId($v['product_id'], $v['parent_id']),'url' => $v['url']);
654
  }, $data)
655
  ));
656
 
657
  if ($response->isSuccessful()) {
658
+
659
  $connection = $this->getConnection();
660
 
661
  $select = $connection
696
  return true;
697
  }
698
  } else {
699
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
700
  return sprintf("%d product%s failed (%s)",
701
  $total,
702
  ($total > 1) ? "s" : "",
703
  $response->getMessage()
704
  );
705
+
706
  }
707
  }
708
 
717
  * @return bool|string
718
  */
719
  protected function updateProducts(array $data) {
720
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
721
  $total = count($data);
722
  $dataToSend = $this->addProductSyncData($data);
723
  if(!empty($dataToSend) && is_numeric($dataToSend)){
731
  ));
732
 
733
  if ($response->isSuccessful()) {
734
+
735
  $helper = Mage::helper('klevu_search');
736
  $connection = $this->getConnection();
737
 
781
  return true;
782
  }
783
  } else {
784
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
785
  return sprintf("%d product%s failed (%s)",
786
  $total,
787
  ($total > 1) ? "s" : "",
788
  $response->getMessage()
789
  );
790
+
791
  }
792
  }
793
 
802
  * @return bool|string
803
  */
804
  protected function addProducts(array $data) {
805
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
806
  $total = count($data);
807
  $dataToSend = $this->addProductSyncData($data);
808
  if(!empty($dataToSend) && is_numeric($dataToSend)){
816
  ));
817
 
818
  if ($response->isSuccessful()) {
 
819
  $skipped_record_ids = array();
820
  if ($skipped_records = $response->getSkippedRecords()) {
821
  $skipped_record_ids = array_flip($skipped_records["index"]);
874
  return true;
875
  }
876
  } else {
877
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
878
  return sprintf("%d product%s failed (%s)",
879
  $total,
880
  ($total > 1) ? "s" : "",
1035
  break;
1036
  }
1037
  }
1038
+ break;
1039
+ case "desc":
1040
+ foreach ($attributes as $attribute) {
1041
+ if ($parent && $parent->getData($attribute)) {
1042
+ $product[$key] = $parent->getData($attribute).$item->getData($attribute);
1043
+ break;
1044
+ } else {
1045
+ $product[$key] = $item->getData($attribute);
1046
+ break;
1047
+ }
1048
+ }
1049
+ break;
1050
+ case "shortDesc":
1051
+ foreach ($attributes as $attribute) {
1052
+ if($config->isUseConfigDescription($this->getStore()->getId())) {
1053
+ if ($parent && $parent->getData($attribute)) {
1054
+ $product[$key] = $parent->getData($attribute);
1055
+ break;
1056
+ } else {
1057
+ $product[$key] = $item->getData($attribute);
1058
+ break;
1059
+ }
1060
+ } else {
1061
+ if ($item->getData($attribute)) {
1062
+ $product[$key] = $item->getData($attribute);
1063
+ break;
1064
+ } else {
1065
+ $product[$key] = $parent->getData($attribute);
1066
+ break;
1067
+ }
1068
+ }
1069
+ }
1070
  break;
1071
  case "image":
1072
  $config = Mage::helper('klevu_search/config');
1561
  $additional_attributes = Mage::helper('klevu_search/config')->getAdditionalAttributesMap($this->getStore());
1562
  $attribute_map = $this->prepareAttributeMap($attribute_map, $additional_attributes);
1563
 
1564
+ $default_attribute_to_index = array("news_from_date","news_to_date","created_at");
1565
  // Add otherAttributeToIndex to $attribute_map.
1566
+ $otherAttributeToIndex = array_merge($default_attribute_to_index,Mage::helper('klevu_search/config')->getOtherAttributesToIndex($this->getStore()));
1567
+
1568
+
1569
  if(!empty($otherAttributeToIndex)) {
1570
  $attribute_map['otherAttributeToIndex'] = $otherAttributeToIndex;
1571
  }
1708
  * each category in the path, the last element being the
1709
  * name of the category referenced by the ID.
1710
  */
1711
+ protected function getCategoryPaths() {
1712
  if (!$category_paths = $this->getData('category_paths')) {
1713
  $category_paths = array();
1714
  $rootId = $this->getStore()->getRootCategoryId();
1715
  $collection = Mage::getResourceModel('catalog/category_collection')
1716
  ->setStoreId($this->getStore()->getId())
1717
+ ->addAttributeToSelect('exclude_in_search')
1718
  ->addFieldToFilter('level', array('gt' => 1))
1719
  ->addFieldToFilter('path', array('like'=> "1/$rootId/%"))
1720
  ->addIsActiveFilter()
1725
  $path_ids = $category->getPathIds();
1726
  foreach ($path_ids as $id) {
1727
  if ($item = $collection->getItemById($id)) {
1728
+ if($category->getExcludeInSearch() != 1) {
1729
+ $category_paths[$category->getId()][] = $item->getName();
1730
+
1731
+ }
1732
  }
1733
  }
1734
+
1735
  }
 
1736
  $this->setData('category_paths', $category_paths);
1737
  }
 
1738
  return $category_paths;
1739
  }
1740
 
1972
  protected function processPrice($price, $tax_class_id, $pro) {
1973
  if($price < 0){$price = 0;}else{$price = $price;}
1974
  $config = Mage::helper('klevu_search/config');
1975
+ if (($pro->getData('type_id') == Mage_Catalog_Model_Product_Type::TYPE_GROUPED || $pro->getData('type_id')==Mage_Catalog_Model_Product_Type::TYPE_BUNDLE )) {
1976
  return $this->convertPrice($price);
1977
  }
1978
  if($config->isTaxEnabled($this->getStore()->getId())) {
2090
  *
2091
  * @return $this
2092
  */
2093
+ public function notify($message, $store = null) {
2094
  $type = ($store === null) ? static::NOTIFICATION_GLOBAL_TYPE : static::NOTIFICATION_STORE_TYPE_PREFIX . $store->getId();
2095
  /** @var Klevu_Search_Model_Notification $notification */
2096
  $notification = Mage::getResourceModel('klevu_search/notification_collection')
2559
  */
2560
  protected function addCategory(array $data)
2561
  {
2562
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
2563
  $total = count($data);
2564
  $data = $this->addcategoryData($data);
2565
  $response = Mage::getModel('klevu_search/api_action_addrecords')->setStore($this->getStore())->execute(array(
2567
  'records' => $data
2568
  ));
2569
  if ($response->isSuccessful()) {
2570
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
2571
  $skipped_record_ids = array();
2572
  if ($skipped_records = $response->getSkippedRecords()) {
2573
  $skipped_record_ids = array_flip($skipped_records["index"]);
2605
  }
2606
  }
2607
  else {
2608
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
2609
+ return sprintf("%d category%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
2610
+
2611
+
2612
  }
2613
  }
2614
  /**
2658
  */
2659
  protected function updateCategory(array $data)
2660
  {
2661
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(0);
2662
  $total = count($data);
2663
  $data = $this->addcategoryData($data);
2664
  $response = Mage::getModel('klevu_search/api_action_updaterecords')->setStore($this->getStore())->execute(array(
2693
  }
2694
  }
2695
  else {
2696
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
2697
  return sprintf("%d category%s failed (%s)", $total, ($total > 1) ? "s" : "", $response->getMessage());
2698
  }
2699
  }
2709
  */
2710
  protected function deleteCategory(array $data)
2711
  {
2712
+ $baseDomain = $this->getStore()->getBaseUrl(Mage_Core_Model_Store::URL_TYPE_LINK,true);
2713
+
2714
+ foreach($data as $key => $value){
2715
+ $data[$key]['url'] = $baseDomain;
2716
+ }
2717
  $total = count($data);
2718
  $response = Mage::getModel('klevu_search/api_action_deleterecords')->setStore($this->getStore())->execute(array(
2719
  'sessionId' => $this->getSessionId() ,
2720
  'records' => array_map(function ($v)
2721
  {
2722
  return array(
2723
+ 'id' => "categoryid_" . $v['category_id'],
2724
+ 'url' => $v['url']
2725
  );
2726
  }
2727
  , $data)
app/code/community/Klevu/Search/Model/System/Config/Source/Triggeroptions.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Klevu_Search_Model_System_Config_Source_Triggeroptions {
4
+
5
+ const YES = 1;
6
+ const NO = 0;
7
+
8
+ public function toOptionArray() {
9
+ $helper = Mage::helper("klevu_search");
10
+
11
+ return array(
12
+ array('value' => static::YES, 'label' => $helper->__("Yes")),
13
+ array('value' => static::NO, 'label' => $helper->__("No"))
14
+ );
15
+ }
16
+ }
app/code/community/Klevu/Search/controllers/Adminhtml/Klevu/SearchController.php CHANGED
@@ -17,14 +17,14 @@ class Klevu_Search_Adminhtml_Klevu_SearchController extends Mage_Adminhtml_Contr
17
  if (Mage::helper('klevu_search/config')->isProductSyncEnabled()) {
18
 
19
  if(Mage::helper('klevu_search/config')->getSyncOptionsFlag() == "2") {
20
- if(Mage::helper("klevu_search/config")->isExternalCronEnabled()) {
21
  Mage::getModel('klevu_search/product_sync')
22
  ->markAllProductsForUpdate($store)
23
  ->schedule();
24
- } else {
25
- Mage::getModel('klevu_search/product_sync')
26
  ->markAllProductsForUpdate($store);
27
- }
28
 
29
  if ($store) {
30
  Mage::helper("klevu_search")->log(Zend_Log::INFO, sprintf("Product Sync scheduled to re-sync ALL products in %s (%s).",
@@ -73,13 +73,25 @@ class Klevu_Search_Adminhtml_Klevu_SearchController extends Mage_Adminhtml_Contr
73
  /* Use event For other content sync */
74
  Mage::dispatchEvent('content_data_to_sync', array());
75
  $memoryMessage = Mage::getSingleton('core/session')->getMemoryMessage();
 
 
76
  if(!empty($memoryMessage)) {
77
- $message = $this->__("Data updates have been sent to Klevu.").$memoryMessage;
78
- Mage::getSingleton('core/session')->setMemoryMessage("");
 
 
 
 
 
79
  } else {
80
- $message = $this->__("Data updates have been sent to Klevu.");
 
 
 
 
81
  }
82
  Mage::getSingleton('adminhtml/session')->addSuccess($message);
 
83
 
84
  } catch (Mage_Core_Model_Store_Exception $e) {
85
  Mage::logException($e);
@@ -95,12 +107,124 @@ class Klevu_Search_Adminhtml_Klevu_SearchController extends Mage_Adminhtml_Contr
95
  Mage::helper('klevu_search/config')->saveSyncOptions($sync_options);
96
  }
97
 
 
 
 
 
98
  /* clear the cron entry */
99
  public function clear_klevu_cronAction() {
100
  Mage::getModel("klevu_search/product_sync")->clearKlevuCron();
101
  Mage::getSingleton('adminhtml/session')->addSuccess($this->__("Running Klevu product Sync entry cleared from cron_schedule table."));
102
  return $this->_redirectReferer("adminhtml/dashboard");
103
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
104
 
105
  protected function _isAllowed()
106
  {
17
  if (Mage::helper('klevu_search/config')->isProductSyncEnabled()) {
18
 
19
  if(Mage::helper('klevu_search/config')->getSyncOptionsFlag() == "2") {
20
+ if(Mage::helper("klevu_search/config")->isExternalCronEnabled()) {
21
  Mage::getModel('klevu_search/product_sync')
22
  ->markAllProductsForUpdate($store)
23
  ->schedule();
24
+ } else {
25
+ Mage::getModel('klevu_search/product_sync')
26
  ->markAllProductsForUpdate($store);
27
+ }
28
 
29
  if ($store) {
30
  Mage::helper("klevu_search")->log(Zend_Log::INFO, sprintf("Product Sync scheduled to re-sync ALL products in %s (%s).",
73
  /* Use event For other content sync */
74
  Mage::dispatchEvent('content_data_to_sync', array());
75
  $memoryMessage = Mage::getSingleton('core/session')->getMemoryMessage();
76
+ $failedMessage = Mage::getSingleton('core/session')->getKlevuFailedFlag();
77
+
78
  if(!empty($memoryMessage)) {
79
+ $failedMessage = Mage::getSingleton('core/session')->getKlevuFailedFlag();
80
+ if(!empty($failedMessage) && $failedMessage == 1) {
81
+ $message = $this->__("Product sync failed.Please consult klevu_search.log file for more information.");
82
+ } else {
83
+ $message = $this->__("Data updates have been sent to Klevu.").$memoryMessage;
84
+ Mage::getSingleton('core/session')->setMemoryMessage("");
85
+ }
86
  } else {
87
+ if(!empty($failedMessage) && $failedMessage == 1) {
88
+ $message = $this->__("Product sync failed.Please consult klevu_search.log file for more information.");
89
+ } else {
90
+ $message = $this->__("Data updates have been sent to Klevu.");
91
+ }
92
  }
93
  Mage::getSingleton('adminhtml/session')->addSuccess($message);
94
+ Mage::getSingleton('core/session')->setKlevuFailedFlag(1);
95
 
96
  } catch (Mage_Core_Model_Store_Exception $e) {
97
  Mage::logException($e);
107
  Mage::helper('klevu_search/config')->saveSyncOptions($sync_options);
108
  }
109
 
110
+ public function trigger_options_configAction() {
111
+ $triggeroptions = $this->getRequest()->getParam("triggeroptions");
112
+ Mage::helper('klevu_search/config')->saveTrigger($triggeroptions);
113
+ }
114
  /* clear the cron entry */
115
  public function clear_klevu_cronAction() {
116
  Mage::getModel("klevu_search/product_sync")->clearKlevuCron();
117
  Mage::getSingleton('adminhtml/session')->addSuccess($this->__("Running Klevu product Sync entry cleared from cron_schedule table."));
118
  return $this->_redirectReferer("adminhtml/dashboard");
119
  }
120
+
121
+ public function triggerAction()
122
+ {
123
+ $trigger = new Klevu_Trigger();
124
+ $resource = Mage::getSingleton('core/resource');
125
+ $write = $resource->getConnection('core_write');
126
+ $dbname = (string)Mage::getConfig()->getNode('global/resources/default_setup/connection/dbname');
127
+ $catalog_product_index_price = $resource->getTableName("catalog_product_index_price");
128
+ $klevu_product_sync = $resource->getTableName("klevu_search/product_sync");
129
+ $catalogrule_product_price = $resource->getTableName("catalogrule_product_price");
130
+ $cataloginventory_stock_status = $resource->getTableName("cataloginventory_stock_status");
131
+ try
132
+ {
133
+ if(Mage::helper('klevu_search/config')->getTriggerOptionsFlag() == "1")
134
+ {
135
+ $write->query("DROP TRIGGER IF EXISTS Update_KlevuProductSync_For_CPIP;");
136
+ $write->query("DROP TRIGGER IF EXISTS Update_KlevuProductSync_For_LSA;");
137
+ $write->query("DROP TRIGGER IF EXISTS Update_KlevuProductSync_For_CPP;");
138
+ // Set time SQL_TIME_BEFORE / SQL_TIME_AFTER
139
+ $trigger->setTime($trigger::SQL_TIME_AFTER);
140
+ $trigger->setName("Update_KlevuProductSync_For_CPIP");
141
+ // Set time SQL_EVENT_INSERT / SQL_EVENT_UPDATE / SQL_EVENT_DELETE
142
+ $trigger->setEvent($trigger::SQL_EVENT_UPDATE);
143
+
144
+ // Set target table name
145
+ $trigger->setTarget($catalog_product_index_price);
146
+
147
+ // Set Body
148
+ $trigger->setBody("IF NEW.price <> OLD.price || NEW.final_price <> OLD.final_price THEN
149
+ IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '".$dbname."' AND table_name = '{$klevu_product_sync}') <> 0 THEN
150
+ UPDATE {$klevu_product_sync}
151
+ SET last_synced_at = '0000-00-00 00:00:00'
152
+ WHERE product_id = NEW.entity_id;
153
+ END IF ;
154
+ END IF ;");
155
+
156
+ // Assemble query, returns direct SQL for trigger
157
+ $triggerCreateFinalPriceQuery = $trigger->assemble();
158
+ // Adapter initiates query
159
+ $write->query($triggerCreateFinalPriceQuery);
160
+ //reset previous query for executing new query
161
+ $trigger->reset();
162
+ // Set time SQL_TIME_BEFORE / SQL_TIME_AFTER
163
+ $trigger->setTime($trigger::SQL_TIME_AFTER);
164
+ $trigger->setName("Update_KlevuProductSync_For_LSA");
165
+ // Set time SQL_EVENT_INSERT / SQL_EVENT_UPDATE / SQL_EVENT_DELETE
166
+ $trigger->setEvent($trigger::SQL_EVENT_UPDATE);
167
+
168
+ // Set target table name
169
+ $trigger->setTarget($cataloginventory_stock_status);
170
+
171
+ // Set Body
172
+ $trigger->setBody("IF NEW.stock_status <> OLD.stock_status THEN
173
+ IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '".$dbname."' AND table_name = '{$klevu_product_sync}') <> 0 THEN
174
+ UPDATE {$klevu_product_sync}
175
+ SET last_synced_at = '0000-00-00 00:00:00'
176
+ WHERE product_id = NEW.product_id;
177
+ END IF ;
178
+ END IF ;");
179
+
180
+ // Assemble query, returns direct SQL for trigger
181
+ $triggerCreateStockQuery = $trigger->assemble();
182
+ // Adapter initiates query
183
+ $write->query($triggerCreateStockQuery);
184
+
185
+ //reset previous query for executing new query
186
+ $trigger->reset();
187
+ // Set time SQL_TIME_BEFORE / SQL_TIME_AFTER
188
+ if(Mage::getEdition() == "Enterprise") {
189
+ $trigger->setTime($trigger::SQL_TIME_BEFORE);
190
+ } else {
191
+ $trigger->setTime($trigger::SQL_TIME_AFTER);
192
+ }
193
+ $trigger->setName("Update_KlevuProductSync_For_CPP");
194
+ // Set time SQL_EVENT_INSERT / SQL_EVENT_UPDATE / SQL_EVENT_DELETE
195
+ $trigger->setEvent($trigger::SQL_EVENT_UPDATE);
196
+
197
+ // Set target table name
198
+ $trigger->setTarget($catalogrule_product_price);
199
+
200
+ // Set Body
201
+ $trigger->setBody("IF NEW.rule_price <> OLD.rule_price THEN
202
+ IF (SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '".$dbname."' AND table_name = '{$klevu_product_sync}') <> 0 THEN
203
+ UPDATE {$klevu_product_sync}
204
+ SET last_synced_at = '0000-00-00 00:00:00'
205
+ WHERE product_id = NEW.product_id;
206
+ END IF ;
207
+ END IF ;");
208
+
209
+ // Assemble query, returns direct SQL for trigger
210
+ $triggerCreateRulePriceQuery = $trigger->assemble();
211
+ // Adapter initiates query
212
+ $write->query($triggerCreateRulePriceQuery);
213
+ Mage::getSingleton('adminhtml/session')->addSuccess($this->__("Trigger is activated."));
214
+ return $this->_redirectReferer("adminhtml/dashboard");
215
+ }
216
+ else
217
+ {
218
+ $write->query("DROP TRIGGER IF EXISTS Update_KlevuProductSync_For_CPIP;");
219
+ $write->query("DROP TRIGGER IF EXISTS Update_KlevuProductSync_For_LSA;");
220
+ $write->query("DROP TRIGGER IF EXISTS Update_KlevuProductSync_For_CPP;");
221
+ Mage::getSingleton('adminhtml/session')->addSuccess($this->__("Trigger is deactivated."));
222
+ return $this->_redirectReferer("adminhtml/dashboard");
223
+ }
224
+ } catch (Mage_Core_Model_Store_Exception $e) {
225
+ Mage::logException($e);
226
+ }
227
+ }
228
 
229
  protected function _isAllowed()
230
  {
app/code/community/Klevu/Search/controllers/IndexController.php CHANGED
@@ -10,7 +10,7 @@ class Klevu_Search_IndexController extends Mage_Core_Controller_Front_Action {
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
  }
@@ -21,10 +21,18 @@ class Klevu_Search_IndexController extends Mage_Core_Controller_Front_Action {
21
  "link" => Mage::getBaseUrl()
22
  ));
23
 
24
- $breadcrumbs->addCrumb("Search Result", array(
25
- "label" => $this->__("Search Result"),
26
- "title" => $this->__("Search Result")
27
- ));
 
 
 
 
 
 
 
 
28
  }
29
  $this->renderLayout();
30
  }
@@ -91,12 +99,7 @@ class Klevu_Search_IndexController extends Mage_Core_Controller_Front_Action {
91
  }else {
92
  Mage::getSingleton('core/session')->addSuccess($response->getMessage());
93
  }
94
- //send index status data
95
- $content ="";
96
- $allIndex= Mage::getSingleton('index/indexer')->getProcessesCollection();
97
- foreach ($allIndex as $index) {
98
- $content .= $index->getIndexerCode().":".$index->getStatus().'<br>';
99
- }
100
  $response = Mage::getModel("klevu_search/api_action_debuginfo")->debugKlevu(array('apiKey'=>$debugapi,'klevuLog'=>$content,'type'=>'index'));
101
  if($response->getMessage()=="success") {
102
  Mage::getSingleton('core/session')->addSuccess("Status of magento indices sent.");
10
  $query = $this->getRequest()->getParam('q');
11
  if(!empty($query)) {
12
  $head = $this->getLayout()->getBlock('head');
13
+ $head->setTitle($this->__("Search results for: '%s'",$query));
14
  } else {
15
  $this->getLayout()->getBlock("head")->setTitle($this->__("Search"));
16
  }
21
  "link" => Mage::getBaseUrl()
22
  ));
23
 
24
+ if(!empty($query)) {
25
+ $breadcrumbs->addCrumb("Search Result", array(
26
+ "label" => $this->__($this->__("Search results for: '%s'",$query)),
27
+ "title" => $this->__($this->__("Search results for: '%s'",$query))
28
+ ));
29
+
30
+ } else {
31
+ $breadcrumbs->addCrumb("Search Result", array(
32
+ "label" => $this->__("Search results"),
33
+ "title" => $this->__("Search results")
34
+ ));
35
+ }
36
  }
37
  $this->renderLayout();
38
  }
99
  }else {
100
  Mage::getSingleton('core/session')->addSuccess($response->getMessage());
101
  }
102
+
 
 
 
 
 
103
  $response = Mage::getModel("klevu_search/api_action_debuginfo")->debugKlevu(array('apiKey'=>$debugapi,'klevuLog'=>$content,'type'=>'index'));
104
  if($response->getMessage()=="success") {
105
  Mage::getSingleton('core/session')->addSuccess("Status of magento indices sent.");
app/code/community/Klevu/Search/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Klevu_Search>
5
- <version>1.2.12</version>
6
  </Klevu_Search>
7
  </modules>
8
  <global>
@@ -49,6 +49,7 @@
49
  </klevu_search_setup>
50
  </resources>
51
  <events>
 
52
  <admin_system_config_changed_section_klevu_search>
53
  <observers>
54
  <klevu_search_removetest>
@@ -322,8 +323,8 @@
322
  <hostname>box.klevu.com</hostname>
323
  <rest_hostname>rest.klevu.com</rest_hostname>
324
  <test_hostname>box.klevu.com</test_hostname>
325
- <test_cloud_search_url>eucs.klevu.com</test_cloud_search_url>
326
- <cloud_search_url>eucs.klevu.com</cloud_search_url>
327
  <analytics_url>stats.klevu.com</analytics_url>
328
  <test_analytics_url>stats.klevu.com</test_analytics_url>
329
  <js_url>js.klevu.com</js_url>
@@ -356,6 +357,9 @@
356
  <image_setting>
357
  <enabled>0</enabled>
358
  </image_setting>
 
 
 
359
  </klevu_search>
360
  </default>
361
  <phpunit>
2
  <config>
3
  <modules>
4
  <Klevu_Search>
5
+ <version>1.2.13</version>
6
  </Klevu_Search>
7
  </modules>
8
  <global>
49
  </klevu_search_setup>
50
  </resources>
51
  <events>
52
+
53
  <admin_system_config_changed_section_klevu_search>
54
  <observers>
55
  <klevu_search_removetest>
323
  <hostname>box.klevu.com</hostname>
324
  <rest_hostname>rest.klevu.com</rest_hostname>
325
  <test_hostname>box.klevu.com</test_hostname>
326
+ <test_cloud_search_url>eucs4.klevu.com</test_cloud_search_url>
327
+ <cloud_search_url>eucs5.klevu.com</cloud_search_url>
328
  <analytics_url>stats.klevu.com</analytics_url>
329
  <test_analytics_url>stats.klevu.com</test_analytics_url>
330
  <js_url>js.klevu.com</js_url>
357
  <image_setting>
358
  <enabled>0</enabled>
359
  </image_setting>
360
+ <description_setting>
361
+ <enabled>0</enabled>
362
+ </description_setting>
363
  </klevu_search>
364
  </default>
365
  <phpunit>
app/code/community/Klevu/Search/etc/system.xml CHANGED
@@ -427,6 +427,35 @@
427
  </enabled>
428
  </fields>
429
  </image_setting>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
430
  <developer translate="label">
431
  <label>Developer Settings</label>
432
  <sort_order>1000</sort_order>
@@ -484,6 +513,24 @@
484
  <show_in_website>0</show_in_website>
485
  <show_in_store>0</show_in_store>
486
  </sendlog>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
487
  </fields>
488
  </developer>
489
  </groups>
427
  </enabled>
428
  </fields>
429
  </image_setting>
430
+ <description_setting translate="label">
431
+ <label>Product Description Settings</label>
432
+ <sort_order>9</sort_order>
433
+ <show_in_default>1</show_in_default>
434
+ <show_in_website>0</show_in_website>
435
+ <show_in_store>1</show_in_store>
436
+ <expanded>0</expanded>
437
+ <fields>
438
+ <info_enabled translate="label comment">
439
+ <label></label>
440
+ <comment><![CDATA[Switch to store view scope to set]]></comment>
441
+ <frontend_type>label</frontend_type>
442
+ <sort_order>100</sort_order>
443
+ <show_in_default>1</show_in_default>
444
+ <show_in_website>0</show_in_website>
445
+ <show_in_store>0</show_in_store>
446
+ </info_enabled>
447
+ <enabled translate="label comment">
448
+ <label><![CDATA[Use Configurable Product's description in Search]]></label>
449
+ <comment><![CDATA[Choose Yes to use configurable product's description in search.Please make sure to resynchronize products by clicking on the "Sync Data for This Store" under the "Data Sync Settings."]]></comment>
450
+ <frontend_type>select</frontend_type>
451
+ <source_model>adminhtml/system_config_source_yesno</source_model>
452
+ <sort_order>100</sort_order>
453
+ <show_in_default>0</show_in_default>
454
+ <show_in_website>0</show_in_website>
455
+ <show_in_store>1</show_in_store>
456
+ </enabled>
457
+ </fields>
458
+ </description_setting>
459
  <developer translate="label">
460
  <label>Developer Settings</label>
461
  <sort_order>1000</sort_order>
513
  <show_in_website>0</show_in_website>
514
  <show_in_store>0</show_in_store>
515
  </sendlog>
516
+ <trigger_option translate="label">
517
+ <label>Using an ERP OR 3rd party tool for product updates</label>
518
+ <comment><![CDATA[If store is integrated with an ERP OR 3rd party tool for product updates (i.e stock or price data),set this value to 'Yes']]></comment>
519
+ <frontend_type>select</frontend_type>
520
+ <source_model>klevu_search/system_config_source_triggeroptions</source_model>
521
+ <sort_order>356</sort_order>
522
+ <show_in_default>1</show_in_default>
523
+ <show_in_website>0</show_in_website>
524
+ <show_in_store>0</show_in_store>
525
+ </trigger_option>
526
+ <trigger_button>
527
+ <label></label>
528
+ <frontend_model>klevu_search/adminhtml_form_field_trigger_button</frontend_model>
529
+ <sort_order>357</sort_order>
530
+ <show_in_default>1</show_in_default>
531
+ <show_in_website>0</show_in_website>
532
+ <show_in_store>0</show_in_store>
533
+ </trigger_button>
534
  </fields>
535
  </developer>
536
  </groups>
app/design/adminhtml/default/default/template/klevu/search/form/field/trigger/button.phtml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /** @var Klevu_Search_Block_Adminhtml_Form_Field_Sync_Button $this */ ?>
2
+ <button id="<?php echo $this->getHtmlId() ?>" class="scalable" type="button">
3
+ <span><?php echo $this->__($this->getButtonLabel()) ?></span>
4
+ </button>
5
+ <script type="text/javascript">
6
+ $("<?php echo $this->getHtmlId() ?>").observe("click", function () {
7
+ if(document.getElementById('klevu_search_developer_trigger_option')) {
8
+ var triggeroptions = document.getElementById('klevu_search_developer_trigger_option').value;
9
+ new Ajax.Request("<?php echo $this->getUrl('adminhtml/klevu_search/trigger_options_config'); ?>" + '?triggeroptions=' + triggeroptions, {
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/frontend/base/default/template/klevu/search/form_js.phtml CHANGED
@@ -7,7 +7,7 @@
7
  ));
8
  ?>
9
  <script type="text/javascript">
10
- var klevu_sessionId = '<?php echo session_id();?>';
11
  var allInputs = document.getElementsByTagName( 'input' );
12
  var klevu_current_version = '<?php echo Mage::getConfig()->getModuleConfig('Klevu_Search')->version; ?>';
13
  <?php
@@ -91,7 +91,7 @@
91
  if($login) { ?>
92
  <script type="text/javascript">
93
  var klevu_loginCustomerGroup = "<?php echo Mage::getSingleton('customer/session')->getCustomerGroupId(); ?>";
94
- var klevu_loginCustomerEmail = "<?php echo Mage::getSingleton('customer/session')->getCustomer()->getEmail(); ?>";
95
  </script>
96
  <?php }?>
97
  <?php
7
  ));
8
  ?>
9
  <script type="text/javascript">
10
+ var klevu_sessionId = '<?php echo md5(session_id());?>';
11
  var allInputs = document.getElementsByTagName( 'input' );
12
  var klevu_current_version = '<?php echo Mage::getConfig()->getModuleConfig('Klevu_Search')->version; ?>';
13
  <?php
91
  if($login) { ?>
92
  <script type="text/javascript">
93
  var klevu_loginCustomerGroup = "<?php echo Mage::getSingleton('customer/session')->getCustomerGroupId(); ?>";
94
+ var klevu_idCode = "<?php echo "enc-".md5(Mage::getSingleton('customer/session')->getCustomer()->getEmail()); ?>";
95
  </script>
96
  <?php }?>
97
  <?php
lib/Klevu/Trigger.php ADDED
@@ -0,0 +1,335 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * @category Magento
4
+ * @package Magento_Db
5
+ * @copyright Copyright (c) 2012 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
6
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
7
+ */
8
+
9
+ /**
10
+ * Magento_Db_Sql_Trigger
11
+ *
12
+ * @category Magento
13
+ * @package Magento_Db
14
+ * @author Magento Core Team <core@magentocommerce.com>
15
+ */
16
+ class Klevu_Trigger
17
+ {
18
+ const NAME = 'name';
19
+ const TARGET = 'target';
20
+ const TIME = 'time';
21
+ const EVENT = 'event';
22
+ const SCOPE = 'scope';
23
+ const BODY = 'body';
24
+
25
+ /**
26
+ * SQL constants
27
+ */
28
+ const SQL_TIME_BEFORE = 'BEFORE';
29
+ const SQL_TIME_AFTER = 'AFTER';
30
+ const SQL_EVENT_INSERT = 'INSERT';
31
+ const SQL_EVENT_UPDATE = 'UPDATE';
32
+ const SQL_EVENT_DELETE = 'DELETE';
33
+ const SQL_FOR_EACH_ROW = 'FOR EACH ROW';
34
+
35
+ /**
36
+ * Trigger parts
37
+ *
38
+ * @var array
39
+ */
40
+ protected $_parts = array();
41
+
42
+ /**
43
+ * Allowed time types
44
+ *
45
+ * @var array
46
+ */
47
+ protected $_timeTypes = array(
48
+ self::SQL_TIME_AFTER,
49
+ self::SQL_TIME_BEFORE
50
+ );
51
+
52
+ /**
53
+ * Allowed event types
54
+ *
55
+ * @var array
56
+ */
57
+ protected $_eventTypes = array(
58
+ self::SQL_EVENT_INSERT,
59
+ self::SQL_EVENT_UPDATE,
60
+ self::SQL_EVENT_DELETE
61
+ );
62
+
63
+ /**
64
+ * Initial trigger structure, for MySQL scope is always "FOR EACH ROW".
65
+ * Time "AFTER" is default
66
+ *
67
+ * @var array
68
+ */
69
+ protected static $_partsInit = array(
70
+ self::TARGET => null,
71
+ self::TIME => self::SQL_TIME_AFTER,
72
+ self::EVENT => null,
73
+ self::SCOPE => self::SQL_FOR_EACH_ROW,
74
+ self::BODY => array()
75
+ );
76
+
77
+ /**
78
+ * Constructor
79
+ */
80
+ public function __construct()
81
+ {
82
+ $this->_parts = self::$_partsInit;
83
+ }
84
+
85
+ /**
86
+ * Validate where all trigger parts set?
87
+ *
88
+ * @return Magento_Db_Sql_Trigger
89
+ * @throws Exception
90
+ */
91
+ protected function _validateIsComplete()
92
+ {
93
+ foreach (array_keys(self::$_partsInit) as $part) {
94
+ if (empty($this->_parts[$part])) {
95
+ throw new Exception('Part [' . $part . '] should be set');
96
+ }
97
+ }
98
+ return $this;
99
+ }
100
+
101
+ /**
102
+ * Set trigger part
103
+ *
104
+ * @param $part
105
+ * @param $value
106
+ * @return Magento_Db_Sql_Trigger
107
+ * @throws InvalidArgumentException
108
+ */
109
+ protected function _setPart($part, $value)
110
+ {
111
+ if ($value != null) {
112
+ $this->_parts[$part] = $value;
113
+ } else {
114
+ throw new InvalidArgumentException('Part [' . $part . '] can not be empty');
115
+ }
116
+ return $this;
117
+ }
118
+
119
+ /**
120
+ * Set trigger part
121
+ *
122
+ * @param $part
123
+ * @return string|array
124
+ * @throws Exception
125
+ */
126
+ protected function _getPart($part)
127
+ {
128
+ if (isset($this->_parts[$part])) {
129
+ return $this->_parts[$part];
130
+ }
131
+
132
+ throw new Exception('Part [' . $part . '] does\'t exists');
133
+ }
134
+
135
+ /**
136
+ * Set body part to trigger
137
+ *
138
+ * @param $part
139
+ * @param $value
140
+ * @return Magento_Db_Sql_Trigger
141
+ * @throws InvalidArgumentException
142
+ */
143
+ public function setBodyPart($part, $value)
144
+ {
145
+ if ($value != null) {
146
+ $this->_parts[self::BODY][$part] = $value;
147
+ } else {
148
+ throw new InvalidArgumentException('Part [' . $part . '] can not be empty');
149
+ }
150
+ return $this;
151
+ }
152
+
153
+
154
+ /**
155
+ * Set body part to trigger
156
+ *
157
+ * @param string $part
158
+ * @return string
159
+ * @throws Exception
160
+ */
161
+ public function getBodyPart($part)
162
+ {
163
+ if (isset($this->_parts[self::BODY][$part])) {
164
+ return $this->_parts[self::BODY][$part];
165
+ }
166
+
167
+ throw new Exception('Part [' . $part . '] does\'t exists');
168
+ }
169
+
170
+ /**
171
+ * Generate trigger name
172
+ *
173
+ * @return string
174
+ */
175
+ protected function _generateTriggerName()
176
+ {
177
+ return strtolower('trg_' . $this->_parts[self::TARGET]
178
+ . '_' . $this->_parts[self::TIME]
179
+ . '_' . $this->_parts[self::EVENT]);
180
+ }
181
+
182
+ /**
183
+ * Set trigger time {BEFORE/AFTER}
184
+ * @param $time
185
+ * @return Magento_Db_Sql_Trigger
186
+ * @throws InvalidArgumentException
187
+ */
188
+ public function setTime($time)
189
+ {
190
+ if (in_array($time, $this->getTimeTypes())) {
191
+ $this->_setPart(self::TIME, $time);
192
+ } else {
193
+ throw new InvalidArgumentException('Unsupported time type!');
194
+ }
195
+ return $this;
196
+ }
197
+
198
+ /**
199
+ * Set trigger event {INSERT/UPDATE/DELETE}
200
+ *
201
+ * @param $event
202
+ * @return Magento_Db_Sql_Trigger
203
+ * @throws InvalidArgumentException
204
+ */
205
+ public function setEvent($event)
206
+ {
207
+ if (in_array($event, $this->getEventTypes())) {
208
+ $this->_setPart(self::EVENT, $event);
209
+ } else {
210
+ throw new InvalidArgumentException('Unsupported event type!');
211
+ }
212
+ return $this;
213
+ }
214
+
215
+ /**
216
+ * Set trigger target, table name
217
+ *
218
+ * @param $target
219
+ * @return Magento_Db_Sql_Trigger
220
+ */
221
+ public function setTarget($target)
222
+ {
223
+ $this->_setPart(self::TARGET, $target);
224
+ return $this;
225
+ }
226
+
227
+ /**
228
+ * Set trigger name
229
+ *
230
+ * @param $name
231
+ * @return Magento_Db_Sql_Trigger
232
+ */
233
+ public function setName($name)
234
+ {
235
+ $this->_setPart(self::NAME, $name);
236
+ return $this;
237
+ }
238
+
239
+ /**
240
+ * Retrieve trigger name.
241
+ * If trigger name does not exists generate it by template 'trg_{TARGET}_{TIME}_{EVENT}'.
242
+ *
243
+ * @return mixed
244
+ */
245
+ public function getName()
246
+ {
247
+ if (empty($this->_parts[self::NAME])) {
248
+ $this->_parts[self::NAME] = $this->_generateTriggerName();
249
+ }
250
+ return $this->_parts[self::NAME];
251
+ }
252
+
253
+ /**
254
+ * Set trigger body
255
+ *
256
+ * @param array|string $body
257
+ * @return Magento_Db_Sql_Trigger
258
+ */
259
+ public function setBody($body)
260
+ {
261
+ if (!is_array($body)) {
262
+ $body = array($body);
263
+ }
264
+ $this->_setPart(self::BODY, $body);
265
+ return $this;
266
+ }
267
+
268
+ /**
269
+ * Get body parts of trigger
270
+ *
271
+ * @return array
272
+ */
273
+ public function getBody()
274
+ {
275
+ return $this->_getPart(self::BODY);
276
+ }
277
+
278
+ /**
279
+ * Get trigger creating SQL script
280
+ *
281
+ * @return string
282
+ */
283
+ public function assemble()
284
+ {
285
+ $this->_validateIsComplete();
286
+ return "CREATE TRIGGER "
287
+ . $this->getName() . "\n"
288
+ . $this->_parts[self::TIME] . " " . $this->_parts[self::EVENT] . "\n"
289
+ . "ON " . $this->_parts[self::TARGET] . " " . $this->_parts[self::SCOPE] . "\n"
290
+ . "BEGIN\n"
291
+ . implode("\n", $this->_parts[self::BODY]) . "\n"
292
+ . "END;\n";
293
+ }
294
+
295
+ /**
296
+ * Implement magic method
297
+ *
298
+ * @return string
299
+ */
300
+ public function __toString()
301
+ {
302
+ return $this->assemble();
303
+ }
304
+
305
+ /**
306
+ * Retrieve list of allowed events
307
+ *
308
+ * @return array
309
+ */
310
+ public function getEventTypes()
311
+ {
312
+ return $this->_eventTypes;
313
+ }
314
+
315
+ /**
316
+ * Retrieve list of allowed time types
317
+ *
318
+ * @return array
319
+ */
320
+ public function getTimeTypes()
321
+ {
322
+ return $this->_timeTypes;
323
+ }
324
+
325
+ /**
326
+ * Reset trigger parts
327
+ *
328
+ * @return Magento_Db_Sql_Trigger
329
+ */
330
+ public function reset()
331
+ {
332
+ $this->_parts = self::$_partsInit;
333
+ return $this;
334
+ }
335
+ }
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Klevu_SmartSearch</name>
4
- <version>1.2.12</version>
5
  <stability>stable</stability>
6
  <license uri="http://klevu.com">Commercial</license>
7
  <channel>community</channel>
@@ -14,13 +14,22 @@ 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>- Collection method to sync Data&#xD;
18
- - Add to cart change&#xD;
19
- - Notice error fix in klevu cron</notes>
 
 
 
 
 
 
 
 
 
20
  <authors><author><name>Klevu</name><user>Klevu</user><email>niraj.aswani@klevu.com</email></author></authors>
21
- <date>2017-01-09</date>
22
- <time>10:45:37</time>
23
- <contents><target name="mageetc"><dir name="modules"><file name="Klevu_Search.xml" hash="49674c121481f67bcfc2f31bb21e5aaf"/><file name="Klevu_Boosting.xml" hash="e5e64cc12dacfc956c2b0cb2b47dd0c4"/><file name="Klevu_Content.xml" hash="26c6470ff0f3b121bc6eb85686ac285d"/><file name="Klevu_Searchterms.xml" hash="3b38e76a2c869aedf4caa37ac81f6325"/><file name="Klevu_Addtocart.xml" hash="1702387194f7bb2addab6b7b0c701505"/></dir></target><target name="magecommunity"><dir name="Klevu"><dir name="Boosting"><dir name="Block"><dir name="Adminhtml"><dir name="Boost"><dir name="Edit"><file name="Form.php" hash="f383d355c07e8f6930037a3cb663fea8"/><dir name="Tab"><file name="Actions.php" hash="bea65d14949e38f7e2470f596e6a8757"/><file name="Conditions.php" hash="f471bf87addc58de5fc577efb1ef000f"/><file name="Form.php" hash="ceb369273be213ab6c0699edf029f8f5"/></dir><file name="Tabs.php" hash="956926b08afbd7d5c24d4015b8d5fb1a"/></dir><file name="Edit.php" hash="102725d29f9a72655baa68f334837d2c"/><file name="Grid.php" hash="3e9f1e10943666904bdf2cf895111e19"/></dir><file name="Boost.php" hash="ca0e56e107ef39310f81d43ad16f6ae5"/><dir name="Form"><dir name="Field"><dir name="Rule"><file name="Button.php" hash="54234efa375229e734b38f0f1daa7c44"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5dd9cdbc59b7886d7248a49013ee0692"/></dir><dir name="Model"><dir name="Boost"><dir name="Rule"><dir name="Condition"><file name="Combine.php" hash="f01c5f12ea202559feed422130df4d5f"/><file name="Product.php" hash="f35bd54c39f6412db9e08b78a00687fc"/></dir></dir></dir><file name="Boost.php" hash="b11c92c884361d22e705bde6f18f413a"/><dir name="Mysql4"><dir name="Boost"><file name="Collection.php" hash="1ac0d91b93e00c6ca0c6229b8dce69e0"/></dir><file name="Boost.php" hash="2d7c34e4800945c9fdcab56b7d41d7da"/></dir><file name="Observer.php" hash="5f9982c232746da15c1b0ee7ab5581de"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Boosting"><file name="Attribute.php" hash="6debec1229df22e3f4eda58dd781053a"/></dir></dir></dir></dir></dir><dir name="Test"><dir name="Model"><dir name="Boost"><dir name="fixtures"><file name="testGetMatchingProductIds.yaml" hash="023c1cc74e5525ccfbed76d38674243d"/></dir></dir><file name="Boost.php" hash="e2cba3650eeed3e39ed29381a6014579"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="BoostController.php" hash="0f2ce187d18fe74c8445becd6e44acfc"/></dir></dir><dir name="etc"><file name="config.xml" hash="66c1bcd5daab17ef03d671553670cac5"/><file name="system.xml" hash="a9f3647f178f8f373c31a90569ffd651"/></dir><dir name="sql"><dir name="klevu_boosting_setup"><file name="mysql4-install-10.0.0.php" hash="b36ab1905efd2ba496635fd8830d7438"/></dir></dir></dir><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="a5775de3c82a73e0cda865586a2d10ee"/></dir><dir name="Store"><dir name="Level"><file name="Label.php" hash="df3680c83924ece232eb14bd0b7ac9b3"/></dir><file name="Status.php" hash="0e023c95f20bea421ea6e7f4e64e5eae"/></dir><dir name="Sync"><file name="Button.php" hash="aeec22e3e952e40d1e1bed33a9e8185b"/></dir></dir><file name="Infolinks.php" hash="201b94b4b627bf9053424fcd70bbd101"/><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="System"><dir name="Config"><dir name="Form"><file name="Field.php" hash="d4e9023e6cdbedceb7145d248168d33b"/></dir></dir></dir><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="b885cf0d838e5de5d734c4c0c76cb173"/><file name="Userplan.php" hash="5fc147d5266c2251b4388800fe8f78fb"/></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="Tracking.php" hash="049f45dfc363c0f604ef57472611d7cd"/></dir></dir></dir><dir name="Helper"><file name="Api.php" hash="f7f1b51781d27032c114ec2392cb5371"/><file name="Compat.php" hash="3726862a4576a53c5a44dda59a1e9a86"/><file name="Config.php" hash="93b5584d603c4791649e2821713c488e"/><file name="Data.php" hash="c0be49f3f6a8e3a35c170bf85583fc6c"/></dir><dir name="Model"><dir name="Adminhtml"><file name="Comment.php" hash="2d3cb94ca5bea4c6ea50f9aa9dd3a936"/></dir><dir name="Api"><dir name="Action"><file name="Addrecords.php" hash="8a78275bcf4f266d065c0b3ae10fdfdd"/><file name="Adduser.php" hash="d8b6e6d37fe6ce522747fd6951c8e9df"/><file name="Addwebstore.php" hash="ea33f2c7032682a6ec2bdb8324cdaf0e"/><file name="Checkuserdetail.php" hash="ebe4eeaf8986684bb7081932e68553bf"/><file name="Debuginfo.php" hash="dd92df091719aa73eca07a08d9681d42"/><file name="Deleterecords.php" hash="0e404db0aab2c58ff90a4e7e4fe73818"/><file name="Features.php" hash="f3f22d268fe2e6651cdab8f12c56599a"/><file name="Getplans.php" hash="82715646d1fdacee524525c51c47138f"/><file name="Gettimezone.php" hash="4bb572b68f42236d765f8194e413b1ca"/><file name="Getuserdetail.php" hash="849a0f04bfdbf39ae75a2627d26717ca"/><file name="Idsearch.php" hash="9b8ba6fde615675884e6e0b6a49e8200"/><file name="Producttracking.php" hash="d88a30dcc3926ad0626591567868a04b"/><file name="Removetestmode.php" hash="bd2e7ecf6c233b1430e2989b2b62000f"/><file name="Searchtermtracking.php" hash="450a05e0598618130ef06d71410a3fcc"/><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="6fb6945b88624571b332733076f1cd3b"/></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="9d85b7a9e899375df6cffb375cd59ed7"/></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="8e970880623949bdd01c620b64c518fe"/></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="db4c59a2da08c5f4471a96c6eaa56c31"/><dir name="Order"><file name="Sync.php" hash="8268fe69f6f3f326bab438eb6af78e18"/></dir><dir name="Product"><file name="Sync.php" hash="6874fb9a8669fe2a8a57e2e7bfb1a1ef"/></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="6c032e3e9a2d6b45c92cbcdb4b6a44e4"/><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="3a347a4238031e73a03e38a14ab56b0a"/><file name="Landingoptions.php" hash="031834ff6c6c794735350120a686c77e"/><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="Taxoptions.php" hash="2754ec4fcaa8fcaf17976bc35d2f2ed2"/><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="Getuserfeaturesdetail"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="e4ef56d9b494fad5392984a144401998"/></dir></dir><file name="Getuserfeaturesdetail.php" hash="601f204cb67a44628c2c951aa8228cd3"/><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="feature_response.xml" hash="4d400030f5c322b6ab85ccbc7bcd2c0d"/><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="880ebe97a3e7f9cd1d8d0da41447ae12"/><dir name="Search"><file name="WizardController.php" hash="9b478e0ed333e20b41ed4fe28d17b015"/></dir><file name="SearchController.php" hash="81e6b2b6a9072585c36cf01c2e9a2fb5"/></dir></dir><file name="IndexController.php" hash="938643728bbfeaecfee7ad3ec87823fe"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6ce395b9dec2d88a7709d0917c13d50f"/><file name="config.xml" hash="bae5b88c684a3feaad6a02c2d3da8383"/><file name="system.xml" hash="4d2b6abdf61636b2a0ce9f6a15b9f106"/></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.22-1.1.23.php" hash="79a74acda887a3a5e435a4793bd39dfd"/><file name="mysql4-data-upgrade-1.1.25-1.1.26.php" hash="0c31a59a5562739a00909738ef26d742"/><file name="mysql4-data-upgrade-1.1.27-1.1.28.php" hash="b9dcc6b50d2177976e13b61064adfa2a"/><file name="mysql4-data-upgrade-1.2.10-1.2.11.php" hash="bc8e3dfcc2e019809b72f98f3f7987b7"/><file name="mysql4-data-upgrade-1.2.4-1.2.5.php" hash="b53f5e8b923a26538f26df55fe4038e8"/><file name="mysql4-data-upgrade-1.2.8-1.2.9.php" hash="8126ee936691fefb761dfa304f70938f"/><file name="mysql4-install-1.0.0.php" hash="028831a3f92cf63768a5b43beba06e75"/></dir></dir></dir><dir name="Searchterms"><dir name="Block"><dir name="Catalog"><dir name="Product"><file name="Popularterms.php" hash="aa85fe13044e5477b08dc8b5b5b9da24"/></dir></dir><file name="Popularterms.php" hash="aa85fe13044e5477b08dc8b5b5b9da24"/></dir><dir name="Helper"><file name="Data.php" hash="8e9151b766cdb3eda6f78063c3abbe08"/></dir><dir name="Model"><dir name="Api"><dir name="Action"><file name="Boostingscore.php" hash="13ab65ce0a7109d71b6764495cee7790"/><file name="Popularterms.php" hash="8551ebb57c02e80cf36497f324b55955"/></dir></dir><file name="Observer.php" hash="38538cda2093dfa3502b2ba5dd3dd833"/><dir name="Product"><file name="Seo.php" hash="52dcabcd7be98ccceaa2d3cdea6aaa6c"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="4578e1f39d16335c7a3acd9bb6fdc560"/></dir><dir name="etc"><file name="config.xml" hash="5c8664b8fa4997b2b762e571111868da"/><file name="system.xml" hash="17b7d94f5635e3cbbdaa164ced250e0d"/></dir><dir name="sql"><dir name="klevu_searchterms_setup"><file name="mysql4-data-upgrade-10.0.0-10.0.1.php" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="mysql4-install-10.0.0.php" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir></dir><dir name="Addtocart"><dir name="Helper"><file name="Data.php" hash="1cf568a02f4d4a319683c986201934e7"/></dir><dir name="etc"><file name="config.xml" hash="bb74783fa2486f42a92efc93ac1b1e8e"/><file name="system.xml" hash="5f214a95e3095fbd78a17f69bf5dc249"/></dir></dir><dir name="Content"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><file name="Cmspages.php" hash="74fc3262b45481e33dad508f48002746"/><dir name="System"><dir name="Config"><dir name="Field"><file name="Select.php" hash="a42ac33f00dfd9346479143ac910f53f"/></dir></dir></dir></dir><dir name="Wizard"><dir name="Configure"><file name="Store.php" hash="6926f8cc65cdcf47bdc89d5067a1e0e4"/></dir></dir></dir><file name="Index.php" hash="4e40ebae7545e7a61a2fcd8da21b7e64"/><file name="Tracking.php" hash="15150693e0d1a6167960f3f96ea3ed22"/></dir><dir name="Helper"><file name="Data.php" hash="06860754d31b39bfbb48c9814ceba0bd"/></dir><dir name="Model"><file name="Content.php" hash="53c44640c9bc7beb1b18f20afb4cf8eb"/><file name="Observer.php" hash="fb0b66baf26daa9f0a02b6adbf396986"/></dir><dir name="Test"><dir name="Controller"><dir name="ContentSearch"><dir name="fixtures"><file name="content_search_results.yaml" hash="952b8215496a66cca9563eea08030f8a"/></dir></dir><file name="ContentSearch.php" hash="9b0e012f2c9bf7d33394361f880020af"/></dir><dir name="Helper"><dir name="Data"><dir name="fixtures"><file name="content_search_results.yaml" hash="65a8b23a351f8b87c2993301361d9191"/><file name="testIsCmsEnabledDisabled.yaml" hash="24e89be563a355b9dcfd6016eb7fe3e2"/><file name="testIsCmsEnabledEnabled.yaml" hash="8903e1fc649bb70f4d76454fced95e2a"/></dir><dir name="providers"><file name="testGetExcludedCmsPages.yaml" hash="954599a138a65fecd75da2366aa6b515"/><file name="testIsCmsSyncEnabled.yaml" hash="9c3006c510c146f6511cae9287b3fdb8"/></dir></dir><file name="Data.php" hash="a8ee9e9d91eece007d94c0d92ddb654b"/></dir><dir name="Model"><dir name="Api"><dir name="data"><file name="message_response_content_success.xml" hash="3ac53566b3d187cb81eb04d40a195c50"/><file name="search_response_empty.xml" hash="39b739de681275c6a192dcd4ce796207"/><file name="search_response_success.xml" hash="15fea6ab852abd01c9630c86b895d773"/><file name="startsession_response_content_success.xml" hash="5fd26f817657ca9e1c1980d59219b28e"/></dir></dir><dir name="Content"><dir name="fixtures"><file name="testAddCms.yaml" hash="3054d1f054399ac080721e9a03be5f0e"/><file name="testClearAllProducts.yaml" hash="b7ec8b285d34a27e1c50d572b5ae8227"/><file name="testCmsRun.yaml" hash="074c89e69ec7a903f224ea430534c12d"/><file name="testDeleteCms.yaml" hash="21071d067eb03b1e546d1e12fe70955b"/><file name="testUpdateCms.yaml" hash="0e3a9db13fdee6858284ebb8b1d31083"/></dir></dir><file name="Content.php" hash="4d2f4c54d5389c686cd745c28fa97d40"/></dir></dir><dir name="controllers"><file name="SearchController.php" hash="b84ae7ea7a66f7c7f78c54fa7afdcfd1"/></dir><dir name="etc"><file name="config.xml" hash="c0e3647d7d4f067f14a45ab037cfc2c8"/><file name="system.xml" hash="de4dfb0d239a9d498c3157ce14d2fd57"/></dir><dir name="sql"><dir name="klevu_content_setup"><file name="mysql4-install-0.1.0.php" hash="d41d8cd98f00b204e9800998ecf8427e"/></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="boosting"><dir name="form"><dir name="field"><dir name="rule"><file name="button.phtml" hash="f27feff3fad2bbcd68b56df38de5cc83"/></dir></dir></dir></dir><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="9014ac2b78bf4f22be503208b377dc2c"/><file name="klevuinfo.phtml" hash="ea29b14b8f9b794f22465a6695a0e2ae"/><file name="quickinfo.phtml" hash="a383bb10176e87206954b5e379d20c7f"/></dir><file name="notifications.phtml" hash="090714ca57b11d24769c1baa1bcd4615"/><dir name="system"><dir name="config"><dir name="form"><dir name="field"><file name="array.phtml" hash="2e55476e647b79114b28d0a3a02704d5"/></dir></dir></dir></dir><dir name="wizard"><file name="complete.phtml" hash="7cf33a9a829eb07148d16da5056324dd"/><dir name="config"><file name="button.phtml" hash="b1644ee569882b05c2d8cb2f1eecddbc"/></dir><dir name="configure"><file name="attributes.phtml" hash="d54f0a86e78390fbe66825d0771aad25"/><file name="store.phtml" hash="c3a4fce90c554be53ecca58a41c2813d"/><file name="user.phtml" hash="e5678d947c0ccd6f14a23be3df7e9d7d"/><file name="userplan.phtml" hash="812420878cde0f51e8dcefa2a3ae7039"/></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="boosting.xml" hash="c17c262a50d6dfa4dc3ee6dbaac18432"/><file name="search.xml" hash="26cef989bb342bad783f5d8fc6a49e7f"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="klevu"><dir name="addtocart"><file name="index.phtml" hash="64503e05ee420827bdba15b22e53dd9c"/><file name="index.phtml" hash="64503e05ee420827bdba15b22e53dd9c"/></dir><dir name="content"><file name="content_tracking.phtml" hash="54dc6f0ce8112013c1bcaad01899d7bc"/><file name="index.phtml" hash="a6fdec47b211db2177c9ceba0683d302"/><file name="left.phtml" hash="51f0cad58008a71a27e44377319fa044"/><file name="search.phtml" hash="379b8164a6760762ae1fcea9109f8924"/><file name="top.phtml" hash="2e2e3484388be8eed022ff541fc354f5"/><file name="type_of_query.phtml" hash="25b05bfe942a3bba838a44a8e150a453"/><file name="content_tracking.phtml" hash="54dc6f0ce8112013c1bcaad01899d7bc"/><file name="index.phtml" hash="a6fdec47b211db2177c9ceba0683d302"/><file name="left.phtml" hash="51f0cad58008a71a27e44377319fa044"/><file name="search.phtml" hash="379b8164a6760762ae1fcea9109f8924"/><file name="top.phtml" hash="2e2e3484388be8eed022ff541fc354f5"/><file name="type_of_query.phtml" hash="25b05bfe942a3bba838a44a8e150a453"/></dir><dir name="learning"><file name="category.phtml" hash="ce6ab73d3c9f2a36ac0d34e7a0cf3280"/><file name="category_tracking.phtml" hash="b825ba28a49b9ebb2e4d15ac5459fbf4"/></dir><dir name="search"><file name="form_js.phtml" hash="db06ac54a3fc083297a47792bfd91a38"/><file name="index.phtml" hash="df508e23fce08ddcd980a4fea4988f8e"/><file name="klevulog.phtml" hash="9cebbd9ec162570768aefc30c777fb78"/><file name="product_tracking.phtml" hash="e773b0cfcc8c3649bf26cc83d71345ec"/><file name="form_js.phtml" hash="db06ac54a3fc083297a47792bfd91a38"/><file name="index.phtml" hash="df508e23fce08ddcd980a4fea4988f8e"/><file name="klevulog.phtml" hash="9cebbd9ec162570768aefc30c777fb78"/><file name="product_tracking.phtml" hash="e773b0cfcc8c3649bf26cc83d71345ec"/></dir><dir name="searchterm"><file name="popular_searchterms.phtml" hash="4306a14ced0036bdb72158e11d4091d3"/></dir></dir></dir><dir name="layout"><dir name="klevu"><file name="search.xml" hash="7c581fe86dd6379ccdfdfce5120e43ca"/><file name="addtocart.xml" hash="78bb1c4910c4c2c37b49a9c36446f9d5"/><file name="content.xml" hash="633558c22064c1eb89c684d51b9deb00"/><file name="searchterms.xml" hash="c0db7111782ef105d6c44281b5a95303"/></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="359afd117dc5cc7ccd14c838eacb573d"/></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="klevumagestyle.css" hash="c2c4508f1193336d078cae94a45d1528"/><file name="notifications.css" hash="019a5a055bc621cb0f4c166ab8e5604c"/><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"><dir name="content"><file name="klevu-landing-left.css" hash="38c63d7796e4e33b212a1d8b044d0a91"/></dir><file name="klevu-landing-page-style.css" hash="778364c191321c1a96f4582f929c3195"/><file name="klevu-landing-responsive.css" hash="1381b9400a4b286a7a02aef4e3ff4970"/><dir name="search"><file name="klevu-search-term.css" hash="e7e3f2e24073e6fa0949ac157d6d4d34"/></dir></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="009d5e60ec4c77c9a3351a3bf625b257"/></dir></dir></dir></dir></dir></target><target name="mage"><dir name="shell"><dir name="klevu"><file name="sync.php" hash="a1c1cedadb2f584c769409c17183d3fa"/></dir></dir></target></contents>
24
  <compatible/>
25
- <dependencies><required><php><min>5.3.0</min><max>7.1.0</max></php></required></dependencies>
26
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Klevu_SmartSearch</name>
4
+ <version>1.2.13</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>- Shell script message change&#xD;
18
+ - Css change&#xD;
19
+ - Domain related notification&#xD;
20
+ - Change cloud search url to change 4&#xD;
21
+ - Pass the date when the product was added&#xD;
22
+ - Add an option in the plugin to regenerate images using shell script command&#xD;
23
+ - Exclude in search change&#xD;
24
+ - Options to use configurable product description&#xD;
25
+ - bug fix for Bundle product tax issue&#xD;
26
+ - All data sync with magento indexing using shell script command&#xD;
27
+ - Trigger option to detect ERP and third party api direct db change in stock and price&#xD;
28
+ - Message change for openssl</notes>
29
  <authors><author><name>Klevu</name><user>Klevu</user><email>niraj.aswani@klevu.com</email></author></authors>
30
+ <date>2017-05-29</date>
31
+ <time>11:14:00</time>
32
+ <contents><target name="mageetc"><dir name="modules"><file name="Klevu_Search.xml" hash="49674c121481f67bcfc2f31bb21e5aaf"/><file name="Klevu_Boosting.xml" hash="e5e64cc12dacfc956c2b0cb2b47dd0c4"/><file name="Klevu_Content.xml" hash="26c6470ff0f3b121bc6eb85686ac285d"/><file name="Klevu_Searchterms.xml" hash="3b38e76a2c869aedf4caa37ac81f6325"/><file name="Klevu_Addtocart.xml" hash="1702387194f7bb2addab6b7b0c701505"/></dir></target><target name="magecommunity"><dir name="Klevu"><dir name="Boosting"><dir name="Block"><dir name="Adminhtml"><dir name="Boost"><dir name="Edit"><file name="Form.php" hash="f383d355c07e8f6930037a3cb663fea8"/><dir name="Tab"><file name="Actions.php" hash="bea65d14949e38f7e2470f596e6a8757"/><file name="Conditions.php" hash="f471bf87addc58de5fc577efb1ef000f"/><file name="Form.php" hash="ceb369273be213ab6c0699edf029f8f5"/></dir><file name="Tabs.php" hash="956926b08afbd7d5c24d4015b8d5fb1a"/></dir><file name="Edit.php" hash="102725d29f9a72655baa68f334837d2c"/><file name="Grid.php" hash="3e9f1e10943666904bdf2cf895111e19"/></dir><file name="Boost.php" hash="ca0e56e107ef39310f81d43ad16f6ae5"/><dir name="Form"><dir name="Field"><dir name="Rule"><file name="Button.php" hash="54234efa375229e734b38f0f1daa7c44"/></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5dd9cdbc59b7886d7248a49013ee0692"/></dir><dir name="Model"><dir name="Boost"><dir name="Rule"><dir name="Condition"><file name="Combine.php" hash="f01c5f12ea202559feed422130df4d5f"/><file name="Product.php" hash="f35bd54c39f6412db9e08b78a00687fc"/></dir></dir></dir><file name="Boost.php" hash="b11c92c884361d22e705bde6f18f413a"/><dir name="Mysql4"><dir name="Boost"><file name="Collection.php" hash="1ac0d91b93e00c6ca0c6229b8dce69e0"/></dir><file name="Boost.php" hash="2d7c34e4800945c9fdcab56b7d41d7da"/></dir><file name="Observer.php" hash="5f9982c232746da15c1b0ee7ab5581de"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Boosting"><file name="Attribute.php" hash="6debec1229df22e3f4eda58dd781053a"/></dir></dir></dir></dir></dir><dir name="Test"><dir name="Model"><dir name="Boost"><dir name="fixtures"><file name="testGetMatchingProductIds.yaml" hash="023c1cc74e5525ccfbed76d38674243d"/></dir></dir><file name="Boost.php" hash="e2cba3650eeed3e39ed29381a6014579"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="BoostController.php" hash="0f2ce187d18fe74c8445becd6e44acfc"/></dir></dir><dir name="etc"><file name="config.xml" hash="66c1bcd5daab17ef03d671553670cac5"/><file name="system.xml" hash="a9f3647f178f8f373c31a90569ffd651"/></dir><dir name="sql"><dir name="klevu_boosting_setup"><file name="mysql4-install-10.0.0.php" hash="b36ab1905efd2ba496635fd8830d7438"/></dir></dir></dir><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="a5775de3c82a73e0cda865586a2d10ee"/></dir><dir name="Store"><dir name="Level"><file name="Label.php" hash="df3680c83924ece232eb14bd0b7ac9b3"/></dir><file name="Status.php" hash="0e023c95f20bea421ea6e7f4e64e5eae"/></dir><dir name="Sync"><file name="Button.php" hash="aeec22e3e952e40d1e1bed33a9e8185b"/></dir><dir name="Trigger"><file name="Button.php" hash="4f5273f072fe626bc7146a7bd6393091"/></dir></dir><file name="Infolinks.php" hash="201b94b4b627bf9053424fcd70bbd101"/><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="System"><dir name="Config"><dir name="Form"><file name="Field.php" hash="d4e9023e6cdbedceb7145d248168d33b"/></dir></dir></dir><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="b885cf0d838e5de5d734c4c0c76cb173"/><file name="Userplan.php" hash="5fc147d5266c2251b4388800fe8f78fb"/></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="Tracking.php" hash="049f45dfc363c0f604ef57472611d7cd"/></dir></dir></dir><dir name="Helper"><file name="Api.php" hash="f7f1b51781d27032c114ec2392cb5371"/><file name="Compat.php" hash="3726862a4576a53c5a44dda59a1e9a86"/><file name="Config.php" hash="5fa52a958c6651ce5491f2a11bc3199b"/><file name="Data.php" hash="4d9f1ec6f54168c0bdb6dea727871eb0"/></dir><dir name="Model"><dir name="Adminhtml"><file name="Comment.php" hash="2d3cb94ca5bea4c6ea50f9aa9dd3a936"/></dir><dir name="Api"><dir name="Action"><file name="Addrecords.php" hash="71a37b56f652371056e2a0cfb5f20157"/><file name="Adduser.php" hash="d8b6e6d37fe6ce522747fd6951c8e9df"/><file name="Addwebstore.php" hash="ea33f2c7032682a6ec2bdb8324cdaf0e"/><file name="Checkuserdetail.php" hash="ebe4eeaf8986684bb7081932e68553bf"/><file name="Debuginfo.php" hash="dd92df091719aa73eca07a08d9681d42"/><file name="Deleterecords.php" hash="0e404db0aab2c58ff90a4e7e4fe73818"/><file name="Features.php" hash="f3f22d268fe2e6651cdab8f12c56599a"/><file name="Getplans.php" hash="82715646d1fdacee524525c51c47138f"/><file name="Gettimezone.php" hash="4bb572b68f42236d765f8194e413b1ca"/><file name="Getuserdetail.php" hash="849a0f04bfdbf39ae75a2627d26717ca"/><file name="Idsearch.php" hash="9b8ba6fde615675884e6e0b6a49e8200"/><file name="Producttracking.php" hash="d88a30dcc3926ad0626591567868a04b"/><file name="Removetestmode.php" hash="bd2e7ecf6c233b1430e2989b2b62000f"/><file name="Searchtermtracking.php" hash="450a05e0598618130ef06d71410a3fcc"/><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="6fb6945b88624571b332733076f1cd3b"/></dir><file name="Request.php" hash="2c81a4f0d4a41d31ad5105220f3d1452"/><dir name="Response"><file name="Data.php" hash="9dbe8e28a501feacb07a6ce2bcc4deb8"/><file name="Empty.php" hash="cffe9f5070c4771a6d4e12f0343078b5"/><file name="Invalid.php" hash="8287280c3b99f64e08cf54a0bf65e4a1"/><file name="Message.php" hash="5b6d717c75014e798e619e3df2008d29"/><file name="Search.php" hash="28bd2503c07b2a89ce00f81e601c2e2b"/><file name="Timezone.php" hash="ffa4d48e42fa52d2c928e202c2af61fd"/></dir><file name="Response.php" hash="c63251cb98f4da2ae3a4438c20d17cf5"/></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="8e970880623949bdd01c620b64c518fe"/></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="b7f623d149cae8c9f11490605dbe0589"/><dir name="Order"><file name="Sync.php" hash="8268fe69f6f3f326bab438eb6af78e18"/></dir><dir name="Product"><file name="Sync.php" hash="4144c2bc1e10ec4e4df3f879335bd0e5"/></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="6c032e3e9a2d6b45c92cbcdb4b6a44e4"/><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="3a347a4238031e73a03e38a14ab56b0a"/><file name="Landingoptions.php" hash="031834ff6c6c794735350120a686c77e"/><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="Taxoptions.php" hash="2754ec4fcaa8fcaf17976bc35d2f2ed2"/><file name="Triggeroptions.php" hash="3471bd23d03f2b4b1ac9582ad660484d"/><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="Getuserfeaturesdetail"><dir name="providers"><file name="testValidateRequiredFields.yaml" hash="e4ef56d9b494fad5392984a144401998"/></dir></dir><file name="Getuserfeaturesdetail.php" hash="601f204cb67a44628c2c951aa8228cd3"/><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="feature_response.xml" hash="4d400030f5c322b6ab85ccbc7bcd2c0d"/><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="880ebe97a3e7f9cd1d8d0da41447ae12"/><dir name="Search"><file name="WizardController.php" hash="9b478e0ed333e20b41ed4fe28d17b015"/></dir><file name="SearchController.php" hash="f83573076eb79b00490760f1b2735411"/></dir></dir><file name="IndexController.php" hash="28fffa70ab3f89f35112eda48053aa2c"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6ce395b9dec2d88a7709d0917c13d50f"/><file name="config.xml" hash="7e209dda8fb12e0baa1ffcd1dba4efbf"/><file name="system.xml" hash="e3c58be415545b7ca00a05d78c84f45c"/></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.22-1.1.23.php" hash="79a74acda887a3a5e435a4793bd39dfd"/><file name="mysql4-data-upgrade-1.1.25-1.1.26.php" hash="0c31a59a5562739a00909738ef26d742"/><file name="mysql4-data-upgrade-1.1.27-1.1.28.php" hash="b9dcc6b50d2177976e13b61064adfa2a"/><file name="mysql4-data-upgrade-1.2.10-1.2.11.php" hash="bc8e3dfcc2e019809b72f98f3f7987b7"/><file name="mysql4-data-upgrade-1.2.4-1.2.5.php" hash="b53f5e8b923a26538f26df55fe4038e8"/><file name="mysql4-data-upgrade-1.2.8-1.2.9.php" hash="8126ee936691fefb761dfa304f70938f"/><file name="mysql4-install-1.0.0.php" hash="028831a3f92cf63768a5b43beba06e75"/></dir></dir></dir><dir name="Searchterms"><dir name="Block"><dir name="Catalog"><dir name="Product"><file name="Popularterms.php" hash="aa85fe13044e5477b08dc8b5b5b9da24"/></dir></dir><file name="Popularterms.php" hash="aa85fe13044e5477b08dc8b5b5b9da24"/></dir><dir name="Helper"><file name="Data.php" hash="8e9151b766cdb3eda6f78063c3abbe08"/></dir><dir name="Model"><dir name="Api"><dir name="Action"><file name="Boostingscore.php" hash="13ab65ce0a7109d71b6764495cee7790"/><file name="Popularterms.php" hash="8551ebb57c02e80cf36497f324b55955"/></dir></dir><file name="Observer.php" hash="38538cda2093dfa3502b2ba5dd3dd833"/><dir name="Product"><file name="Seo.php" hash="52dcabcd7be98ccceaa2d3cdea6aaa6c"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="4578e1f39d16335c7a3acd9bb6fdc560"/></dir><dir name="etc"><file name="config.xml" hash="5c8664b8fa4997b2b762e571111868da"/><file name="system.xml" hash="17b7d94f5635e3cbbdaa164ced250e0d"/></dir><dir name="sql"><dir name="klevu_searchterms_setup"><file name="mysql4-data-upgrade-10.0.0-10.0.1.php" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="mysql4-install-10.0.0.php" hash="d41d8cd98f00b204e9800998ecf8427e"/></dir></dir></dir><dir name="Addtocart"><dir name="Helper"><file name="Data.php" hash="1cf568a02f4d4a319683c986201934e7"/></dir><dir name="etc"><file name="config.xml" hash="bb74783fa2486f42a92efc93ac1b1e8e"/><file name="system.xml" hash="5f214a95e3095fbd78a17f69bf5dc249"/></dir></dir><dir name="Content"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><file name="Cmspages.php" hash="74fc3262b45481e33dad508f48002746"/><dir name="System"><dir name="Config"><dir name="Field"><file name="Select.php" hash="a42ac33f00dfd9346479143ac910f53f"/></dir></dir></dir></dir><dir name="Wizard"><dir name="Configure"><file name="Store.php" hash="6926f8cc65cdcf47bdc89d5067a1e0e4"/></dir></dir></dir><file name="Index.php" hash="4e40ebae7545e7a61a2fcd8da21b7e64"/><file name="Tracking.php" hash="15150693e0d1a6167960f3f96ea3ed22"/></dir><dir name="Helper"><file name="Data.php" hash="06860754d31b39bfbb48c9814ceba0bd"/></dir><dir name="Model"><file name="Content.php" hash="a2f9bb7340ca8546a5897ab3d7693464"/><file name="Observer.php" hash="fb0b66baf26daa9f0a02b6adbf396986"/></dir><dir name="Test"><dir name="Controller"><dir name="ContentSearch"><dir name="fixtures"><file name="content_search_results.yaml" hash="952b8215496a66cca9563eea08030f8a"/></dir></dir><file name="ContentSearch.php" hash="9b0e012f2c9bf7d33394361f880020af"/></dir><dir name="Helper"><dir name="Data"><dir name="fixtures"><file name="content_search_results.yaml" hash="65a8b23a351f8b87c2993301361d9191"/><file name="testIsCmsEnabledDisabled.yaml" hash="24e89be563a355b9dcfd6016eb7fe3e2"/><file name="testIsCmsEnabledEnabled.yaml" hash="8903e1fc649bb70f4d76454fced95e2a"/></dir><dir name="providers"><file name="testGetExcludedCmsPages.yaml" hash="954599a138a65fecd75da2366aa6b515"/><file name="testIsCmsSyncEnabled.yaml" hash="9c3006c510c146f6511cae9287b3fdb8"/></dir></dir><file name="Data.php" hash="a8ee9e9d91eece007d94c0d92ddb654b"/></dir><dir name="Model"><dir name="Api"><dir name="data"><file name="message_response_content_success.xml" hash="3ac53566b3d187cb81eb04d40a195c50"/><file name="search_response_empty.xml" hash="39b739de681275c6a192dcd4ce796207"/><file name="search_response_success.xml" hash="15fea6ab852abd01c9630c86b895d773"/><file name="startsession_response_content_success.xml" hash="5fd26f817657ca9e1c1980d59219b28e"/></dir></dir><dir name="Content"><dir name="fixtures"><file name="testAddCms.yaml" hash="3054d1f054399ac080721e9a03be5f0e"/><file name="testClearAllProducts.yaml" hash="b7ec8b285d34a27e1c50d572b5ae8227"/><file name="testCmsRun.yaml" hash="074c89e69ec7a903f224ea430534c12d"/><file name="testDeleteCms.yaml" hash="21071d067eb03b1e546d1e12fe70955b"/><file name="testUpdateCms.yaml" hash="0e3a9db13fdee6858284ebb8b1d31083"/></dir></dir><file name="Content.php" hash="4d2f4c54d5389c686cd745c28fa97d40"/></dir></dir><dir name="controllers"><file name="SearchController.php" hash="b84ae7ea7a66f7c7f78c54fa7afdcfd1"/></dir><dir name="etc"><file name="config.xml" hash="c0e3647d7d4f067f14a45ab037cfc2c8"/><file name="system.xml" hash="de4dfb0d239a9d498c3157ce14d2fd57"/></dir><dir name="sql"><dir name="klevu_content_setup"><file name="mysql4-install-0.1.0.php" hash="d41d8cd98f00b204e9800998ecf8427e"/></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="boosting"><dir name="form"><dir name="field"><dir name="rule"><file name="button.phtml" hash="f27feff3fad2bbcd68b56df38de5cc83"/></dir></dir></dir></dir><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 name="trigger"><file name="button.phtml" hash="935c2d1ff308747c1a5e45417d1faa9e"/></dir></dir><file name="information.phtml" hash="9014ac2b78bf4f22be503208b377dc2c"/><file name="klevuinfo.phtml" hash="ea29b14b8f9b794f22465a6695a0e2ae"/><file name="quickinfo.phtml" hash="a383bb10176e87206954b5e379d20c7f"/></dir><file name="notifications.phtml" hash="090714ca57b11d24769c1baa1bcd4615"/><dir name="system"><dir name="config"><dir name="form"><dir name="field"><file name="array.phtml" hash="2e55476e647b79114b28d0a3a02704d5"/></dir></dir></dir></dir><dir name="wizard"><file name="complete.phtml" hash="7cf33a9a829eb07148d16da5056324dd"/><dir name="config"><file name="button.phtml" hash="b1644ee569882b05c2d8cb2f1eecddbc"/></dir><dir name="configure"><file name="attributes.phtml" hash="d54f0a86e78390fbe66825d0771aad25"/><file name="store.phtml" hash="c3a4fce90c554be53ecca58a41c2813d"/><file name="user.phtml" hash="e5678d947c0ccd6f14a23be3df7e9d7d"/><file name="userplan.phtml" hash="812420878cde0f51e8dcefa2a3ae7039"/></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="boosting.xml" hash="c17c262a50d6dfa4dc3ee6dbaac18432"/><file name="search.xml" hash="26cef989bb342bad783f5d8fc6a49e7f"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="klevu"><dir name="addtocart"><file name="index.phtml" hash="64503e05ee420827bdba15b22e53dd9c"/><file name="index.phtml" hash="64503e05ee420827bdba15b22e53dd9c"/></dir><dir name="content"><file name="content_tracking.phtml" hash="54dc6f0ce8112013c1bcaad01899d7bc"/><file name="index.phtml" hash="a6fdec47b211db2177c9ceba0683d302"/><file name="left.phtml" hash="51f0cad58008a71a27e44377319fa044"/><file name="search.phtml" hash="379b8164a6760762ae1fcea9109f8924"/><file name="top.phtml" hash="2e2e3484388be8eed022ff541fc354f5"/><file name="type_of_query.phtml" hash="25b05bfe942a3bba838a44a8e150a453"/><file name="content_tracking.phtml" hash="54dc6f0ce8112013c1bcaad01899d7bc"/><file name="index.phtml" hash="a6fdec47b211db2177c9ceba0683d302"/><file name="left.phtml" hash="51f0cad58008a71a27e44377319fa044"/><file name="search.phtml" hash="379b8164a6760762ae1fcea9109f8924"/><file name="top.phtml" hash="2e2e3484388be8eed022ff541fc354f5"/><file name="type_of_query.phtml" hash="25b05bfe942a3bba838a44a8e150a453"/></dir><dir name="learning"><file name="category.phtml" hash="ce6ab73d3c9f2a36ac0d34e7a0cf3280"/><file name="category_tracking.phtml" hash="b825ba28a49b9ebb2e4d15ac5459fbf4"/></dir><dir name="search"><file name="form_js.phtml" hash="aebc81705e43c7d50aa5db453072f1c6"/><file name="index.phtml" hash="df508e23fce08ddcd980a4fea4988f8e"/><file name="klevulog.phtml" hash="9cebbd9ec162570768aefc30c777fb78"/><file name="product_tracking.phtml" hash="e773b0cfcc8c3649bf26cc83d71345ec"/><file name="form_js.phtml" hash="aebc81705e43c7d50aa5db453072f1c6"/><file name="index.phtml" hash="df508e23fce08ddcd980a4fea4988f8e"/><file name="klevulog.phtml" hash="9cebbd9ec162570768aefc30c777fb78"/><file name="product_tracking.phtml" hash="e773b0cfcc8c3649bf26cc83d71345ec"/></dir><dir name="searchterm"><file name="popular_searchterms.phtml" hash="4306a14ced0036bdb72158e11d4091d3"/></dir></dir></dir><dir name="layout"><dir name="klevu"><file name="search.xml" hash="7c581fe86dd6379ccdfdfce5120e43ca"/><file name="addtocart.xml" hash="78bb1c4910c4c2c37b49a9c36446f9d5"/><file name="content.xml" hash="633558c22064c1eb89c684d51b9deb00"/><file name="searchterms.xml" hash="c0db7111782ef105d6c44281b5a95303"/></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="359afd117dc5cc7ccd14c838eacb573d"/></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="klevumagestyle.css" hash="c2c4508f1193336d078cae94a45d1528"/><file name="notifications.css" hash="019a5a055bc621cb0f4c166ab8e5604c"/><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"><dir name="content"><file name="klevu-landing-left.css" hash="38c63d7796e4e33b212a1d8b044d0a91"/></dir><file name="klevu-landing-page-style.css" hash="ea3b2def562e2bc312c6608556c2254f"/><file name="klevu-landing-responsive.css" hash="1381b9400a4b286a7a02aef4e3ff4970"/><dir name="search"><file name="klevu-search-term.css" hash="e7e3f2e24073e6fa0949ac157d6d4d34"/></dir></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="009d5e60ec4c77c9a3351a3bf625b257"/></dir></dir></dir></dir></dir></target><target name="mage"><dir name="shell"><dir name="klevu"><file name="sync.php" hash="153e2895d8fbd544d8bf29d9504f5495"/></dir></dir><dir name="lib"><dir name="Klevu"><file name="Trigger.php" hash="c6e027b2e3924dbac1330c403cef78af"/></dir></dir></target></contents>
33
  <compatible/>
34
+ <dependencies><required><php><min>5.3.0</min><max>7.1.2</max></php></required></dependencies>
35
  </package>
shell/klevu/sync.php CHANGED
@@ -24,16 +24,71 @@ class Klevu_Shell_Sync extends Mage_Shell_Abstract
24
  if ($this->getArg('updatesonly')) {
25
  Mage::getModel('klevu_search/product_sync')->run();
26
  Mage::getModel("content/content")->run();
27
- echo "Data updates have been sent to Klevu";
 
 
 
 
 
28
  } else if($this->getArg('alldata')) {
29
  // Modified the updated date klevu_product_sync table
30
  Mage::getModel('klevu_search/product_sync')->markAllProductsForUpdate();
31
  // Run the product sync for all store
32
  Mage::getModel('klevu_search/product_sync')->run();
33
  Mage::getModel("content/content")->run();
34
- echo "All Data have been sent to Klevu";
35
-
36
- } else {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  echo $this->usageHelp();
38
  }
39
  } catch(Exception $e){
@@ -46,6 +101,24 @@ class Klevu_Shell_Sync extends Mage_Shell_Abstract
46
 
47
 
48
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
 
50
  // Usage instructions
51
  public function usageHelp()
24
  if ($this->getArg('updatesonly')) {
25
  Mage::getModel('klevu_search/product_sync')->run();
26
  Mage::getModel("content/content")->run();
27
+ $failedMessage = Mage::getSingleton('core/session')->getKlevuFailedFlag();
28
+ if(!empty($failedMessage) && $failedMessage == 1) {
29
+ echo "Product sync failed.Please consult klevu_search.log file for more information.";
30
+ } else {
31
+ echo "Data updates have been sent to Klevu";
32
+ }
33
  } else if($this->getArg('alldata')) {
34
  // Modified the updated date klevu_product_sync table
35
  Mage::getModel('klevu_search/product_sync')->markAllProductsForUpdate();
36
  // Run the product sync for all store
37
  Mage::getModel('klevu_search/product_sync')->run();
38
  Mage::getModel("content/content")->run();
39
+ if(!empty($failedMessage) && $failedMessage == 1) {
40
+ echo "Product sync failed.Please consult klevu_search.log file for more information.";
41
+ } else {
42
+ echo "All Data have been sent to Klevu";
43
+ }
44
+ } else if ($this->getArg('updatesonlywithindexing')) {
45
+ /* @var $indexCollection Mage_Index_Model_Resource_Process_Collection */
46
+ $indexCollection = Mage::getModel('index/process')->getCollection();
47
+ foreach ($indexCollection as $index) {
48
+ /* @var $index Mage_Index_Model_Process */
49
+ $index->reindexAll();
50
+ }
51
+
52
+ Mage::getModel('klevu_search/product_sync')->run();
53
+ Mage::getModel("content/content")->run();
54
+ $failedMessage = Mage::getSingleton('core/session')->getKlevuFailedFlag();
55
+ if(!empty($failedMessage) && $failedMessage == 1) {
56
+ echo "Product sync failed.Please consult klevu_search.log file for more information.";
57
+ } else {
58
+ echo "Data updates have been sent to Klevu";
59
+ }
60
+ } else if($this->getArg('alldatawithindexing')) {
61
+
62
+ /* @var $indexCollection Mage_Index_Model_Resource_Process_Collection */
63
+ $indexCollection = Mage::getModel('index/process')->getCollection();
64
+ foreach ($indexCollection as $index) {
65
+ /* @var $index Mage_Index_Model_Process */
66
+ $index->reindexAll();
67
+ }
68
+
69
+ // Modified the updated date klevu_product_sync table
70
+ Mage::getModel('klevu_search/product_sync')->markAllProductsForUpdate();
71
+ // Run the product sync for all store
72
+ Mage::getModel('klevu_search/product_sync')->run();
73
+ Mage::getModel("content/content")->run();
74
+ if(!empty($failedMessage) && $failedMessage == 1) {
75
+ echo "Product sync failed.Please consult klevu_search.log file for more information.";
76
+ } else {
77
+ echo "All Data have been sent to Klevu";
78
+ }
79
+
80
+ } else if($this->getArg('refreshklevuimages')) {
81
+ $collections = Mage::getModel('catalog/product')->getCollection();
82
+ foreach($collections as $collection){
83
+ $stores = Mage::app()->getStores();
84
+ foreach ($stores as $store) {
85
+ $ProductModel = Mage::getModel('catalog/product')->setStoreId($store->getId())
86
+ ->load($collection->getId());
87
+ $image = $ProductModel->getImage();
88
+ $this->createThumb($ProductModel->getImage());
89
+ }
90
+ }
91
+ } else {
92
  echo $this->usageHelp();
93
  }
94
  } catch(Exception $e){
101
 
102
 
103
  }
104
+
105
+
106
+ public function createThumb($image) {
107
+ $imageResized = Mage::getBaseDir('media').DS."klevu_images".$image;
108
+ $baseImageUrl = Mage::getBaseDir('media').DS."catalog".DS."product".$image;
109
+ if(file_exists($baseImageUrl)) {
110
+ list($width, $height, $type, $attr)= getimagesize($baseImageUrl);
111
+ if($width > 200 && $height > 200) {
112
+ if(file_exists($imageResized)) {
113
+ if (!unlink('media/klevu_images'. $image))
114
+ {
115
+ Mage::helper('klevu_search')->log(Zend_Log::DEBUG, sprintf("Image Deleting Error:\n%s", $image));
116
+ }
117
+ }
118
+ Mage::getModel("klevu_search/product_sync")->thumbImageObj($baseImageUrl,$imageResized);
119
+ }
120
+ }
121
+ }
122
 
123
  // Usage instructions
124
  public function usageHelp()
skin/frontend/base/default/css/klevu/klevu-landing-page-style.css CHANGED
@@ -945,6 +945,22 @@ transition: background 200ms;
945
  color: #414042;
946
  }
947
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
948
  /* show variants */
949
  .kuVariants{
950
  font-size: 10px;
945
  color: #414042;
946
  }
947
 
948
+ /* div to display or query message */
949
+ .kuOrQueryMessage{
950
+ text-align: center;
951
+ margin-top: 10px;
952
+ color: #414042;
953
+ background: #ebebeb;
954
+ font-size: 13px;
955
+ padding: 7px 0px !important;
956
+ margin: 10px 15px;
957
+ }
958
+
959
+ .kuOrQueryMessage span {
960
+ font-weight: 600;
961
+ }
962
+
963
+
964
  /* show variants */
965
  .kuVariants{
966
  font-size: 10px;