Antidot_Antidot - Version 1.2.2

Version Notes

Fix facet with ampersand configuration for search engine > facets
Replace "-" with "&afs:feed" to separate feeds in url (compatibility with AFS 7.7)
Fix empty facet id sent when performing an empty query to afs to get facets list
Add description node for variants
Add cdata for variant name
Prevent to export empty categories node
Add cdata for variant name
Add variant details for grouped products

Download this release

Release Info

Developer Antidot
Extension Antidot_Antidot
Version 1.2.2
Comparing to
See all releases


Code changes from version 1.2.1 to 1.2.2

Files changed (79) hide show
  1. app/code/community/MDN/Antidot/Block/Catalogsearch/Result.php +2 -2
  2. app/code/community/MDN/Antidot/Block/System/Config/Button/PushArticles.php +1 -1
  3. app/code/community/MDN/Antidot/Block/System/Config/Button/PushCategories.php +1 -1
  4. app/code/community/MDN/Antidot/Block/System/Config/Button/PushProducts.php +1 -1
  5. app/code/community/MDN/Antidot/Block/System/Config/Fieldset/Notice.php +2 -2
  6. app/code/community/MDN/Antidot/Model/Export/Abstract.php +8 -1
  7. app/code/community/MDN/Antidot/Model/Export/Article.php +8 -1
  8. app/code/community/MDN/Antidot/Model/Export/Category.php +8 -1
  9. app/code/community/MDN/Antidot/Model/Export/Model/Product.php +23 -0
  10. app/code/community/MDN/Antidot/Model/Export/Product.php +7 -0
  11. app/code/community/MDN/Antidot/Model/Observer.php +3 -3
  12. app/code/community/MDN/Antidot/Model/Resource/Catalog/Product/Collection.php +30 -4
  13. app/code/community/MDN/Antidot/Model/Resource/Engine/Abstract.php +1 -0
  14. app/code/community/MDN/Antidot/Model/Resource/Engine/Antidot.php +41 -8
  15. app/code/community/MDN/Antidot/Model/Search/Search.php +20 -0
  16. app/code/community/MDN/Antidot/Model/System/Config/ExportType.php +28 -0
  17. app/code/community/MDN/Antidot/Model/System/Config/Source/Redirect.php +45 -0
  18. app/code/community/MDN/Antidot/Model/Transport.php +4 -3
  19. app/code/community/MDN/Antidot/Model/Transport/File.php +1 -1
  20. app/code/community/MDN/Antidot/Model/Transport/Ftp.php +1 -1
  21. app/code/community/MDN/Antidot/Model/Transport/Http.php +62 -4
  22. app/code/community/MDN/Antidot/Model/Transport/Interface.php +2 -1
  23. app/code/community/MDN/Antidot/Test/Block/Catalogsearch/Result.php +64 -0
  24. app/code/community/MDN/Antidot/Test/Block/Catalogsearch/Result/fixtures/testSetListOrders.yaml +3 -0
  25. app/code/community/MDN/Antidot/Test/Model/Export/Abstract.php +1 -0
  26. app/code/community/MDN/Antidot/Test/Model/Export/Category.php +1 -0
  27. app/code/community/MDN/Antidot/Test/Model/Export/Context.php +1 -0
  28. app/code/community/MDN/Antidot/Test/Model/Export/Model/Product.php +22 -0
  29. app/code/community/MDN/Antidot/Test/Model/Export/Model/Product/fixtures/testGetIsInStock.yaml +4 -0
  30. app/code/community/MDN/Antidot/Test/Model/Export/Product.php +1 -0
  31. app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteXml.yaml +0 -2
  32. app/code/community/MDN/Antidot/Test/Model/Observer/fixtures/testGetDefaultContext.yaml +0 -2
  33. app/code/community/MDN/Antidot/Test/Model/Resource/Engine/Antidot.php +117 -1
  34. app/code/community/MDN/Antidot/Test/Model/Resource/Engine/Antidot/fixtures/testFormatResult.yaml +1 -0
  35. app/code/community/MDN/Antidot/Test/Model/System/Config/Facet.php +1 -0
  36. app/code/community/MDN/Antidot/Test/Model/System/Config/Source/Acpengine.php +25 -0
  37. app/code/community/MDN/Antidot/Test/Model/System/Config/Source/Redirect.php +25 -0
  38. app/code/community/MDN/Antidot/Test/Model/Transport/Http.php +43 -0
  39. app/code/community/MDN/Antidot/Test/Model/Transport/fixtures/testSend.yaml +7 -0
  40. app/code/community/MDN/Antidot/controllers/{Admin → Adminhtml/Antidot}/PushController.php +76 -67
  41. app/code/community/MDN/Antidot/etc/adminhtml.xml +22 -0
  42. app/code/community/MDN/Antidot/etc/config.xml +11 -25
  43. app/code/community/MDN/Antidot/etc/system.xml +54 -7
  44. app/code/community/MDN/Antidot/sql/Antidot_setup/mysql4-upgrade-1.2.1-1.2.2.php +24 -0
  45. app/design/frontend/base/default/template/antidot/catalog/layer/category.phtml +8 -3
  46. app/locale/de_AT/MDN_Antidot.csv +10 -1
  47. app/locale/de_CH/MDN_Antidot.csv +10 -1
  48. app/locale/de_DE/MDN_Antidot.csv +10 -1
  49. app/locale/es_AR/MDN_Antidot.csv +10 -1
  50. app/locale/es_CL/MDN_Antidot.csv +10 -1
  51. app/locale/es_CO/MDN_Antidot.csv +10 -1
  52. app/locale/es_CR/MDN_Antidot.csv +10 -1
  53. app/locale/es_ES/MDN_Antidot.csv +10 -1
  54. app/locale/es_MX/MDN_Antidot.csv +10 -1
  55. app/locale/es_PA/MDN_Antidot.csv +10 -1
  56. app/locale/es_PE/MDN_Antidot.csv +10 -1
  57. app/locale/es_VE/MDN_Antidot.csv +10 -1
  58. app/locale/fr_CA/MDN_Antidot.csv +10 -1
  59. app/locale/fr_FR/MDN_Antidot.csv +10 -1
  60. lib/antidot/AFS/SEARCH/TEST/facetHelperTest.php +1 -1
  61. lib/antidot/AFS/SEARCH/TEST/headerHelperTest.php +70 -691
  62. lib/antidot/AFS/SEARCH/TEST/queryOrchestrationTest.php +173 -0
  63. lib/antidot/AFS/SEARCH/afs_facet_helper.php +7 -5
  64. lib/antidot/AFS/SEARCH/afs_header_helper.php +43 -0
  65. lib/antidot/AFS/SEARCH/afs_response_helper.php +19 -0
  66. lib/antidot/AFS/orchestration_type.php +18 -0
  67. lib/antidot/AIF/TEST/authenticationTest.php +1 -6
  68. lib/antidot/AIF/TEST/pafConnectorTest.php +3 -3
  69. lib/antidot/AIF/afs_about_connector.php +1 -1
  70. lib/antidot/AIF/afs_authentication.php +2 -2
  71. lib/antidot/AIF/afs_bows_connector.php +1 -1
  72. lib/antidot/AIF/afs_paf_connector.php +7 -7
  73. lib/antidot/AIF/afs_paf_live_connector.php +1 -1
  74. lib/antidot/AIF/afs_token_authentication.php +4 -10
  75. lib/antidot/AIF/afs_user_authentication.php +12 -14
  76. lib/antidot/afs_lib.php +7 -0
  77. lib/antidot/afs_version.php +1 -1
  78. lib/antidot/doc/data/raw_example.php +13 -338
  79. package.xml +4 -4
app/code/community/MDN/Antidot/Block/Catalogsearch/Result.php CHANGED
@@ -13,7 +13,7 @@
13
  * @author : Antidot devmagento@antidot.net
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
- class MDN_Antidot_Block_CatalogSearch_Result extends Mage_CatalogSearch_Block_Result
17
  {
18
  /**
19
  * Set default order
@@ -40,7 +40,7 @@ class MDN_Antidot_Block_CatalogSearch_Result extends Mage_CatalogSearch_Block_Re
40
  if (isset($availableOrders[$dfield])) {
41
  $field = $dfield;
42
  $dir = $defaultSort['dir'];
43
- continue;
44
  }
45
  }
46
  /*
13
  * @author : Antidot devmagento@antidot.net
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
+ class MDN_Antidot_Block_Catalogsearch_Result extends Mage_CatalogSearch_Block_Result
17
  {
18
  /**
19
  * Set default order
40
  if (isset($availableOrders[$dfield])) {
41
  $field = $dfield;
42
  $dir = $defaultSort['dir'];
43
+ break;
44
  }
45
  }
46
  /*
app/code/community/MDN/Antidot/Block/System/Config/Button/PushArticles.php CHANGED
@@ -22,7 +22,7 @@ class MDN_Antidot_Block_System_Config_Button_PushArticles extends Mage_Adminhtml
22
  protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
23
  {
24
  $this->setElement($element);
25
- $url = $this->getUrl('Antidotadmin/Admin_Push/Article');
26
 
27
  $html = $this->getLayout()->createBlock('adminhtml/widget_button')
28
  ->setType('button')
22
  protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
23
  {
24
  $this->setElement($element);
25
+ $url = Mage::helper("adminhtml")->getUrl('adminhtml/antidot_push/article');
26
 
27
  $html = $this->getLayout()->createBlock('adminhtml/widget_button')
28
  ->setType('button')
app/code/community/MDN/Antidot/Block/System/Config/Button/PushCategories.php CHANGED
@@ -22,7 +22,7 @@ class MDN_Antidot_Block_System_Config_Button_PushCategories extends Mage_Adminht
22
  protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
23
  {
24
  $this->setElement($element);
25
- $url = $this->getUrl('Antidotadmin/Admin_Push/Category');
26
 
27
  $html = $this->getLayout()->createBlock('adminhtml/widget_button')
28
  ->setType('button')
22
  protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
23
  {
24
  $this->setElement($element);
25
+ $url = Mage::helper("adminhtml")->getUrl('adminhtml/antidot_push/category');
26
 
27
  $html = $this->getLayout()->createBlock('adminhtml/widget_button')
28
  ->setType('button')
app/code/community/MDN/Antidot/Block/System/Config/Button/PushProducts.php CHANGED
@@ -22,7 +22,7 @@ class MDN_Antidot_Block_System_Config_Button_PushProducts extends Mage_Adminhtml
22
  protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
23
  {
24
  $this->setElement($element);
25
- $url = $this->getUrl('Antidotadmin/Admin_Push/Product');
26
 
27
  $html = $this->getLayout()->createBlock('adminhtml/widget_button')
28
  ->setType('button')
22
  protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
23
  {
24
  $this->setElement($element);
25
+ $url = Mage::helper("adminhtml")->getUrl('adminhtml/antidot_push/product');
26
 
27
  $html = $this->getLayout()->createBlock('adminhtml/widget_button')
28
  ->setType('button')
app/code/community/MDN/Antidot/Block/System/Config/Fieldset/Notice.php CHANGED
@@ -44,8 +44,8 @@ class MDN_Antidot_Block_System_Config_Fieldset_Notice
44
  $html .= "<li><strong>" . $helper->__("The curl php extension is not installed, it's required to upload export files") . "</strong></li>";
45
  } else {
46
  $curl_version = curl_version();
47
- if (!isset($curl_version['protocols']) || !in_array("sftp", $curl_version['protocols'])) {
48
- $html .= "<li><strong>" . $helper->__("The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded") . "</strong></li>";
49
  }
50
  }
51
 
44
  $html .= "<li><strong>" . $helper->__("The curl php extension is not installed, it's required to upload export files") . "</strong></li>";
45
  } else {
46
  $curl_version = curl_version();
47
+ if (!isset($curl_version['protocols']) || !in_array("https", $curl_version['protocols'])) {
48
+ $html .= "<li><strong>" . $helper->__("The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded") . "</strong></li>";
49
  }
50
  }
51
 
app/code/community/MDN/Antidot/Model/Export/Abstract.php CHANGED
@@ -13,7 +13,7 @@
13
  * @author : Antidot devmagento@antidot.net
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
- class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstract
17
  {
18
  /**
19
  * Instance of XmlWriter
@@ -36,6 +36,13 @@ class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstract
36
  'description'
37
  );
38
 
 
 
 
 
 
 
 
39
  /**
40
  * Init the xml writer
41
  */
13
  * @author : Antidot devmagento@antidot.net
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
+ abstract class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstract
17
  {
18
  /**
19
  * Instance of XmlWriter
36
  'description'
37
  );
38
 
39
+ /**
40
+ * The name of the PAF export
41
+ *
42
+ * @return string
43
+ */
44
+ abstract public function getPafName();
45
+
46
  /**
47
  * Init the xml writer
48
  */
app/code/community/MDN/Antidot/Model/Export/Article.php CHANGED
@@ -24,7 +24,14 @@ class MDN_Antidot_Model_Export_Article extends MDN_Antidot_Model_Export_Product
24
  const imagePrefix = 'media/catalog/article';
25
 
26
  const ARTICLE_LIMIT = 1000;
27
-
 
 
 
 
 
 
 
28
  /**
29
  * Write the xml file
30
  *
24
  const imagePrefix = 'media/catalog/article';
25
 
26
  const ARTICLE_LIMIT = 1000;
27
+
28
+ /**
29
+ * {@inherit}
30
+ */
31
+ public function getPafName() {
32
+ return "Articles";
33
+ }
34
+
35
  /**
36
  * Write the xml file
37
  *
app/code/community/MDN/Antidot/Model/Export/Category.php CHANGED
@@ -19,7 +19,14 @@ class MDN_Antidot_Model_Export_Category extends MDN_Antidot_Model_Export_Abstrac
19
  const FILENAME_XML = 'categories-%s_%s-%s.xml';
20
  const FILENAME_ZIP = '%s_full_%s_categories.zip';
21
  const XSD = 'http://ref.antidot.net/store/latest/categories.xsd';
22
-
 
 
 
 
 
 
 
23
  /**
24
  * Get xml
25
  *
19
  const FILENAME_XML = 'categories-%s_%s-%s.xml';
20
  const FILENAME_ZIP = '%s_full_%s_categories.zip';
21
  const XSD = 'http://ref.antidot.net/store/latest/categories.xsd';
22
+
23
+ /**
24
+ * {@inherit}
25
+ */
26
+ public function getPafName() {
27
+ return "Categories";
28
+ }
29
+
30
  /**
31
  * Get xml
32
  *
app/code/community/MDN/Antidot/Model/Export/Model/Product.php CHANGED
@@ -343,10 +343,17 @@ class MDN_Antidot_Model_Export_Model_Product extends Mage_Catalog_Model_Product
343
  * Return is_in_stock status
344
  *
345
  * is_in_stock is loaded by product collection join with inventory table
 
346
  *
347
  * @return int
348
  */
349
  public function getIsInStock() {
 
 
 
 
 
 
350
  if (!$this->hasData('is_in_stock')) {
351
  if ($this->hasData('stock_item')) {
352
  $this->setData('stock_item', Mage::getModel('cataloginventory/stock_item')->loadByProduct($this));
@@ -409,4 +416,20 @@ class MDN_Antidot_Model_Export_Model_Product extends Mage_Catalog_Model_Product
409
  return $this;
410
  }
411
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
412
  }
343
  * Return is_in_stock status
344
  *
345
  * is_in_stock is loaded by product collection join with inventory table
346
+ * see MDN_Antidot_Model_Export_Model_Product_Link getProductCollection()
347
  *
348
  * @return int
349
  */
350
  public function getIsInStock() {
351
+ /**
352
+ * MCNX-264 if config !cataloginventory/item_options/manage_stock : meens all product are available
353
+ */
354
+ if (!Mage::getStoreConfig('cataloginventory/item_options/manage_stock')) {
355
+ return true;
356
+ }
357
  if (!$this->hasData('is_in_stock')) {
358
  if ($this->hasData('stock_item')) {
359
  $this->setData('stock_item', Mage::getModel('cataloginventory/stock_item')->loadByProduct($this));
416
  return $this;
417
  }
418
 
419
+ /**
420
+ * Get attribute text by its code
421
+ *
422
+ * @param $attributeCode Code of the attribute
423
+ * @return string
424
+ */
425
+ public function getAttributeText($attributeCode)
426
+ {
427
+ if ($attribute = $this->getResource()->getAttribute($attributeCode)) {
428
+ return $attribute
429
+ ->getSource()
430
+ ->getOptionText($this->getData($attributeCode));
431
+ } else {
432
+ return '';
433
+ }
434
+ }
435
  }
app/code/community/MDN/Antidot/Model/Export/Product.php CHANGED
@@ -54,6 +54,13 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
54
  Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE
55
  );
56
 
 
 
 
 
 
 
 
57
  /**
58
  * Write the xml file
59
  *
54
  Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE
55
  );
56
 
57
+ /**
58
+ * {@inherit}
59
+ */
60
+ public function getPafName() {
61
+ return "Catalog";
62
+ }
63
+
64
  /**
65
  * Write the xml file
66
  *
app/code/community/MDN/Antidot/Model/Observer.php CHANGED
@@ -180,7 +180,7 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
180
  $filenameZip = sprintf($filenameZip, date('YmdHis'), $ownerForFilename);
181
  $filename = $this->compress($files, $filenameZip);
182
  $log['reference'] = md5($filename);
183
- $this->send($filename);
184
 
185
  $log['status'] = 'SUCCESS';
186
  } else {
@@ -270,13 +270,13 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
270
  * @param string $filename
271
  * @return boolean
272
  */
273
- protected function send($filename)
274
  {
275
  $this->log('send the file');
276
 
277
  $transport = Mage::getModel('Antidot/transport');
278
 
279
- return $transport->send($filename, $transport::TRANS_FTP);
280
  }
281
 
282
  /**
180
  $filenameZip = sprintf($filenameZip, date('YmdHis'), $ownerForFilename);
181
  $filename = $this->compress($files, $filenameZip);
182
  $log['reference'] = md5($filename);
183
+ $this->send($filename, $exportModel);
184
 
185
  $log['status'] = 'SUCCESS';
186
  } else {
270
  * @param string $filename
271
  * @return boolean
272
  */
273
+ protected function send($filename, $exportModel)
274
  {
275
  $this->log('send the file');
276
 
277
  $transport = Mage::getModel('Antidot/transport');
278
 
279
+ return $transport->send($filename, Mage::getStoreConfig('antidot/ftp/upload_type'), $exportModel);
280
  }
281
 
282
  /**
app/code/community/MDN/Antidot/Model/Resource/Catalog/Product/Collection.php CHANGED
@@ -37,7 +37,13 @@ class MDN_Antidot_Model_Resource_Catalog_Product_Collection extends Mage_Catalog
37
  /**
38
  * @var array banners
39
  */
40
- protected $_banners = false;
 
 
 
 
 
 
41
 
42
  /**
43
  * @var array Facets conditions.
@@ -294,11 +300,11 @@ class MDN_Antidot_Model_Resource_Catalog_Product_Collection extends Mage_Catalog
294
  */
295
  protected function _beforeLoad()
296
  {
297
- $ids = array();
298
  if ($this->_engine) {
299
  $this->initQueryResult($this->_getQuery(), $this->_getParams());
300
- if(count($this->_searchedEntityIds) === 1) {
301
- header('location: '. Mage::getModel('catalog/product')->load(current($this->_searchedEntityIds))->getProductUrl());
302
  exit(0);
303
  }
304
  }
@@ -309,6 +315,25 @@ class MDN_Antidot_Model_Resource_Catalog_Product_Collection extends Mage_Catalog
309
  return parent::_beforeLoad();
310
  }
311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
  /**
313
  * Retrieve the query result
314
  *
@@ -326,6 +351,7 @@ class MDN_Antidot_Model_Resource_Catalog_Product_Collection extends Mage_Catalog
326
  $this->_searchedEntityIds = isset($this->queryResult['ids']) ? $this->queryResult['ids'] : array();
327
  $this->_categoryIds = isset($this->queryResult['category_ids']) ? $this->queryResult['category_ids'] : array();
328
  $this->_banners = isset($this->queryResult['banners']) ? $this->queryResult['banners'] : array();
 
329
  }
330
  }
331
 
37
  /**
38
  * @var array banners
39
  */
40
+ protected $_banners = array();
41
+
42
+ /**
43
+ * @var boolen spellcheck
44
+ */
45
+ protected $_spellcheck = false;
46
+
47
 
48
  /**
49
  * @var array Facets conditions.
300
  */
301
  protected function _beforeLoad()
302
  {
303
+
304
  if ($this->_engine) {
305
  $this->initQueryResult($this->_getQuery(), $this->_getParams());
306
+ if ($this->redirectToProduct()) {
307
+ header('location: '.Mage::getModel('catalog/product')->load(current($this->_searchedEntityIds))->getProductUrl());
308
  exit(0);
309
  }
310
  }
315
  return parent::_beforeLoad();
316
  }
317
 
318
+ /**
319
+ * Return if the redirection to the product page must be done
320
+ * MCNX-260
321
+ * @return boolean
322
+ */
323
+ protected function redirectToProduct() {
324
+
325
+ if(count($this->_searchedEntityIds) === 1) {
326
+ $redirect = Mage::getStoreConfig('antidot/engine/redirect_product');
327
+ if ($redirect == MDN_Antidot_Model_System_Config_Source_Redirect::ALWAYS ||
328
+ ($redirect == MDN_Antidot_Model_System_Config_Source_Redirect::UNLESS_SPELLCHECK &&
329
+ !$this->_spellcheck )) {
330
+ return true;
331
+ }
332
+ }
333
+ return false;
334
+
335
+ }
336
+
337
  /**
338
  * Retrieve the query result
339
  *
351
  $this->_searchedEntityIds = isset($this->queryResult['ids']) ? $this->queryResult['ids'] : array();
352
  $this->_categoryIds = isset($this->queryResult['category_ids']) ? $this->queryResult['category_ids'] : array();
353
  $this->_banners = isset($this->queryResult['banners']) ? $this->queryResult['banners'] : array();
354
+ $this->_spellcheck = isset($this->queryResult['spellcheck']) ? $this->queryResult['spellcheck'] : false;
355
  }
356
  }
357
 
app/code/community/MDN/Antidot/Model/Resource/Engine/Abstract.php CHANGED
@@ -104,6 +104,7 @@ abstract class MDN_Antidot_Model_Resource_Engine_Abstract
104
  'faceted_data' => (isset($resultTmp['facets'])) ? $resultTmp['facets'] : array(),
105
  'category_ids' => (isset($resultTmp['category_ids'])) ? $resultTmp['category_ids'] : array(),
106
  'banners' => (isset($resultTmp['banners'])) ? $resultTmp['banners'] : array(),
 
107
  );
108
  }
109
 
104
  'faceted_data' => (isset($resultTmp['facets'])) ? $resultTmp['facets'] : array(),
105
  'category_ids' => (isset($resultTmp['category_ids'])) ? $resultTmp['category_ids'] : array(),
106
  'banners' => (isset($resultTmp['banners'])) ? $resultTmp['banners'] : array(),
107
+ 'spellcheck' => (isset($resultTmp['spellcheck'])) ? $resultTmp['spellcheck'] : false,
108
  );
109
  }
110
 
app/code/community/MDN/Antidot/Model/Resource/Engine/Antidot.php CHANGED
@@ -30,6 +30,13 @@ class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resour
30
  $this->client = Mage::getModel('Antidot/search_search');
31
  }
32
 
 
 
 
 
 
 
 
33
  /**
34
  * Returns search helper.
35
  *
@@ -387,17 +394,43 @@ class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resour
387
  }
388
  }
389
  }
390
-
391
- if (!$this->addedNote && $result['total_count'] == 0 && isset($resultAntidot->spellcheck)) {
392
- if($spellcheck = $resultAntidot->spellcheck) {
393
- $link = '<a href="'.Mage::helper('catalogsearch')->getResultUrl($spellcheck).'">'.$spellcheck.'</a>';
394
- $spellcheck = str_replace('{spellcheck}', $link, Mage::getStoreConfig('antidot/engine/spellcheck'));
395
 
396
- Mage::helper('catalogsearch')->addNoteMessage($spellcheck);
397
- $this->addedNote = true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
398
  }
399
  }
400
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
401
  return $result;
402
  }
403
 
30
  $this->client = Mage::getModel('Antidot/search_search');
31
  }
32
 
33
+ /**
34
+ * reset addedNote (unit tests)
35
+ */
36
+ public function init() {
37
+ $this->addedNote = false;
38
+ }
39
+
40
  /**
41
  * Returns search helper.
42
  *
394
  }
395
  }
396
  }
 
 
 
 
 
397
 
398
+ $result['spellcheck'] = false;
399
+ if (!$this->addedNote) {
400
+ if (isset($resultAntidot->spellcheck) && $resultAntidot->spellcheck) {
401
+ $redirect = Mage::getStoreConfig('antidot/engine/redirect_product');
402
+ if ($result['total_count'] == 0 ||
403
+ ($result['total_count'] == 1 && $redirect == MDN_Antidot_Model_System_Config_Source_Redirect::UNLESS_SPELLCHECK) ) {
404
+ $spellcheck = $resultAntidot->spellcheck;
405
+ $message = Mage::helper('Antidot')->__(Mage::getStoreConfig('antidot/engine/spellcheck'));
406
+ $link = '<a href="'.Mage::helper('catalogsearch')->getResultUrl(
407
+ $spellcheck
408
+ ).'">'.$spellcheck.'</a>';
409
+ $message = str_replace('{spellcheck}', $link, $message);
410
+
411
+ Mage::helper('catalogsearch')->addNoteMessage($message);
412
+ $this->addedNote = true;
413
+ $result['spellcheck'] = true;
414
+ }
415
  }
416
  }
417
+
418
+ /**
419
+ * MCNX-64 query orchestration : add a message if the query has been re-executed by AFSStore based on spellcheck
420
+ */
421
+ if (!$this->addedNote && isset($resultAntidot->isOrchestrated) && isset($resultAntidot->spellcheck)) {
422
+ if(($spellcheck = $resultAntidot->spellcheck) && $resultAntidot->isOrchestrated) {
423
+ if ($message = Mage::getStoreConfig('antidot/engine/spellcheck_query')) {
424
+ $message = Mage::helper('Antidot')->__($message);
425
+ $message = str_replace('{spellcheck}', $spellcheck, $message);
426
+ $message = str_replace('{originalQuery}', $resultAntidot->originalQuery, $message);
427
+
428
+ Mage::helper('catalogsearch')->addNoteMessage($message);
429
+ $this->addedNote = true;
430
+ }
431
+ }
432
+ }
433
+
434
  return $result;
435
  }
436
 
app/code/community/MDN/Antidot/Model/Search/Search.php CHANGED
@@ -96,9 +96,11 @@ class MDN_Antidot_Model_Search_Search extends MDN_Antidot_Model_Search_Abstract
96
  }
97
 
98
  $resultAntidot->spellcheck = $this->getSpellcheckFromResult($results);
 
99
  $resultAntidot->promote = $this->getPromoteFromResult($results);
100
  $resultAntidot->replyset = $this->getReplySetFromResult($results);
101
  $resultAntidot->replysetCategories = $this->getReplySetFromResult($results, 'Categories');
 
102
 
103
  //save translations
104
  if ($resultAntidot->replyset) {
@@ -169,6 +171,24 @@ class MDN_Antidot_Model_Search_Search extends MDN_Antidot_Model_Search_Abstract
169
  return $replyset;
170
  }
171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  /**
173
  * Return facets list
174
  *
96
  }
97
 
98
  $resultAntidot->spellcheck = $this->getSpellcheckFromResult($results);
99
+ $resultAntidot->originalQuery = Mage::helper('catalogsearch')->getEscapedQueryText();
100
  $resultAntidot->promote = $this->getPromoteFromResult($results);
101
  $resultAntidot->replyset = $this->getReplySetFromResult($results);
102
  $resultAntidot->replysetCategories = $this->getReplySetFromResult($results, 'Categories');
103
+ $resultAntidot->isOrchestrated = $this->getOrchestratedFromResult($results);
104
 
105
  //save translations
106
  if ($resultAntidot->replyset) {
171
  return $replyset;
172
  }
173
 
174
+ /**
175
+ * Get Orchestraed boolean from results
176
+ *
177
+ * @param StdClass $results
178
+ * @return boolean
179
+ */
180
+ protected function getOrchestratedFromResult($results)
181
+ {
182
+ $orchestrated = false;
183
+ try {
184
+ $orchestrated = $results->is_orchestrated();
185
+ } catch (Exception $e) {
186
+ Mage::log($e->getMessage(), null, 'antidot.log');
187
+ }
188
+
189
+ return $orchestrated;
190
+ }
191
+
192
  /**
193
  * Return facets list
194
  *
app/code/community/MDN/Antidot/Model/System/Config/ExportType.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
13
+ * @author : Antidot devmagento@antidot.net
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ class MDN_Antidot_Model_System_Config_ExportType
17
+ {
18
+ /**
19
+ * {@inherit}
20
+ */
21
+ public function toOptionArray()
22
+ {
23
+ return array(
24
+ array('value' => MDN_Antidot_Model_Transport::TRANS_HTTP, 'label' => 'HTTPS'),
25
+ array('value' => MDN_Antidot_Model_Transport::TRANS_FTP, 'label' => 'SFTP'),
26
+ );
27
+ }
28
+ }
app/code/community/MDN/Antidot/Model/System/Config/Source/Redirect.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
13
+ * @author : Antidot devmagento@antidot.net
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+
17
+ class MDN_Antidot_Model_System_Config_Source_Redirect
18
+ {
19
+
20
+ const ALWAYS = '1';
21
+ const UNLESS_SPELLCHECK = '2';
22
+ const NEVER = '3';
23
+
24
+
25
+ /**
26
+ * {@inherit}
27
+ */
28
+ public function toOptionArray()
29
+ {
30
+ $options = array();
31
+ $options[] = array(
32
+ 'value' => self::ALWAYS,
33
+ 'label' => Mage::helper('Antidot')->__('Always')
34
+ );
35
+ $options[] = array(
36
+ 'value' => self::UNLESS_SPELLCHECK,
37
+ 'label' => Mage::helper('Antidot')->__('Unless there\'s a spellcheck')
38
+ );
39
+ $options[] = array(
40
+ 'value' => self::NEVER,
41
+ 'label' => Mage::helper('Antidot')->__('Never')
42
+ );
43
+ return $options;
44
+ }
45
+ }
app/code/community/MDN/Antidot/Model/Transport.php CHANGED
@@ -25,11 +25,12 @@ class MDN_Antidot_Model_Transport extends Mage_Core_Model_Abstract
25
  *
26
  * @param string $file File to send
27
  * @param string $type The transport type used to send the file
 
28
  */
29
- public function send($file, $type = self::TRANS_FILE)
30
  {
31
- if($transport = Mage::getModel('Antidot/transport_'.ucfirst($type))) {
32
- return $transport->send($file);
33
  }
34
 
35
  throw new Exception('The type transport "'.$type.'" does not exist');
25
  *
26
  * @param string $file File to send
27
  * @param string $type The transport type used to send the file
28
+ * @param MDN_Antidot_Model_Export_Abstract $exportModel the type of data exported
29
  */
30
+ public function send($file, $type = self::TRANS_FILE, $exportModel)
31
  {
32
+ if($transport = Mage::getModel('Antidot/transport_'.$type)) {
33
+ return $transport->send($file, $exportModel);
34
  }
35
 
36
  throw new Exception('The type transport "'.$type.'" does not exist');
app/code/community/MDN/Antidot/Model/Transport/File.php CHANGED
@@ -21,7 +21,7 @@ class MDN_Antidot_Model_Transport_File extends MDN_Antidot_Model_Transport_Abstr
21
  /**
22
  * {@inherit}
23
  */
24
- public function send($file)
25
  {
26
  return rename($file, self::DIRECTORY.'/'.basename($file));
27
  }
21
  /**
22
  * {@inherit}
23
  */
24
+ public function send($file, $exportModel, SAI_CurlInterface $curlConnector=null)
25
  {
26
  return rename($file, self::DIRECTORY.'/'.basename($file));
27
  }
app/code/community/MDN/Antidot/Model/Transport/Ftp.php CHANGED
@@ -19,7 +19,7 @@ class MDN_Antidot_Model_Transport_Ftp extends MDN_Antidot_Model_Transport_Abstra
19
  /**
20
  * {@inherit}
21
  */
22
- public function send($file)
23
  {
24
  $ftpConfig = Mage::getStoreConfig('antidot/ftp');
25
  if (!$ftpConfig)
19
  /**
20
  * {@inherit}
21
  */
22
+ public function send($file, $exportModel, SAI_CurlInterface $curlConnector=null)
23
  {
24
  $ftpConfig = Mage::getStoreConfig('antidot/ftp');
25
  if (!$ftpConfig)
app/code/community/MDN/Antidot/Model/Transport/Http.php CHANGED
@@ -13,14 +13,72 @@
13
  * @author : Antidot devmagento@antidot.net
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
- class MDN_Antidot_Model_Transport_Http extends MDN_Antidot_Model_Transport_Abstract implements MDN_Antidot_Model_Transport_Interface
17
  {
18
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  /**
20
  * {@inherit}
21
  */
22
- public function send($file)
23
  {
24
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  }
26
  }
13
  * @author : Antidot devmagento@antidot.net
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
+ class MDN_Antidot_Model_Transport_Http extends MDN_Antidot_Model_Transport_Abstract implements MDN_Antidot_Model_Transport_Interface
17
  {
18
+
19
+ protected $afsHost;
20
+ protected $afsService;
21
+ protected $afsStatus;
22
+ protected $afsUser;
23
+ protected $afsPasswd;
24
+
25
+ /**
26
+ * Init Antidot API
27
+ */
28
+ public function _construct($host = 'bo-store.afs-antidot.net')
29
+ {
30
+ parent::_construct();
31
+
32
+ $this->afsHost = $host;
33
+
34
+ require_once "antidot/afs_lib.php";
35
+
36
+ if ($config = Mage::getStoreConfig('antidot/web_service')) {
37
+
38
+ if (isset($config['service'])) {
39
+ $this->afsService = (int)$config['service'];
40
+ }
41
+ if (isset($config['status'])) {
42
+ $this->afsStatus = $config['status'];
43
+ }
44
+ }
45
+ if ($config = Mage::getStoreConfig('antidot/ftp')) {
46
+
47
+ if (isset($config['username'])) {
48
+ $this->afsUser = $config['username'];
49
+ }
50
+ if (isset($config['passwd'])) {
51
+ $this->afsPasswd = $config['passwd'];
52
+ }
53
+
54
+ }
55
+ }
56
+
57
+
58
  /**
59
  * {@inherit}
60
  */
61
+ public function send($file, $exportModel, SAI_CurlInterface $curlConnector=null)
62
  {
63
+
64
+ /**
65
+ * see http://antidot.github.io/PHP_API/doc/html/classAfsPafConnector.html
66
+ */
67
+ $auth = new AfsUserAuthentication($this->afsUser, $this->afsPasswd, null);
68
+
69
+ $service = new AfsService($this->afsService, $this->afsStatus);
70
+
71
+ $doc = new AfsDocument(file_get_contents($file));
72
+
73
+ $connector = new AfsPafConnector($this->afsHost, $service, $exportModel->getPafName(), $auth, AFS_SCHEME_HTTPS, $curlConnector);
74
+
75
+ /** @var AfsPafUploadReply $result */
76
+ $result = $connector->upload_doc($doc);
77
+
78
+ if ($result->in_error()) {
79
+ throw new Exception("Can't send the file (".$result->get_error().")");
80
+ }
81
+
82
+
83
  }
84
  }
app/code/community/MDN/Antidot/Model/Transport/Interface.php CHANGED
@@ -19,6 +19,7 @@ interface MDN_Antidot_Model_Transport_Interface
19
  * Send file to Antidot
20
  *
21
  * @param string $file Files to send
 
22
  */
23
- public function send($files);
24
  }
19
  * Send file to Antidot
20
  *
21
  * @param string $file Files to send
22
+ * @param MDN_Antidot_Model_Export_Abstract $exportModel the type of data exported
23
  */
24
+ public function send($files, $exportModel, SAI_CurlInterface $curlConnector=null);
25
  }
app/code/community/MDN/Antidot/Test/Block/Catalogsearch/Result.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
13
+ * @author : Antidot devmagento@antidot.net
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ class MDN_Antidot_Test_Block_Catalogsearch_Result extends EcomDev_PHPUnit_Test_Case
17
+ {
18
+
19
+ public static function setUpBeforeClass()
20
+ {
21
+
22
+ //avoid errors when session_start is called during the test
23
+ @session_start();
24
+
25
+ }
26
+
27
+ /**
28
+ *
29
+ * @test
30
+ * @loadFixture
31
+ */
32
+ public function testSetListOrders()
33
+ {
34
+
35
+
36
+ /**
37
+ * Create block result and check it's rewrited by Antidot module's one
38
+ */
39
+
40
+ $layout = Mage::app()->getLayout();
41
+ //créer le block head qui est utilisé dans la méthode _prepareLayout du blok result :
42
+ $layout->createBlock('page/html_head', 'head');
43
+ /** @var MDN_Antidot_Block_Catalogsearch_Result $blockResult */
44
+ $blockResult = $layout->createBlock('catalogsearch/result');
45
+ $this->assertEquals(
46
+ 'MDN_Antidot_Block_Catalogsearch_Result',
47
+ get_class($blockResult)
48
+ );
49
+
50
+ /**
51
+ * Create block product list and at it as the result block child
52
+ */
53
+ $blockList = $layout->createBlock('catalog/product_list');
54
+ $blockResult->setChild('search_result_list', $blockList);
55
+
56
+ $blockResult->setListOrders();
57
+
58
+ $this->assertEquals(
59
+ 'afs:relevance',
60
+ $blockResult->getListBlock()->getSortBy()
61
+ );
62
+
63
+ }
64
+ }
app/code/community/MDN/Antidot/Test/Block/Catalogsearch/Result/fixtures/testSetListOrders.yaml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ config:
2
+ default/antidot/engine/sortable: a:2:{s:17:"_1426771479065_65";a:1:{s:4:"sort";s:23:"afs:relevance|Relevance";}s:18:"_1445496660565_565";a:1:{s:4:"sort";s:11:"price|Price";}}
3
+ default/antidot/engine/default_sort: a:2:{s:18:"_1426771516777_777";a:2:{s:5:"field";s:23:"afs:relevance|Relevance";s:3:"dir";s:3:"asc";}s:18:"_1445849231624_624";a:2:{s:5:"field";s:11:"price|Price";s:3:"dir";s:3:"asc";}}
app/code/community/MDN/Antidot/Test/Model/Export/Abstract.php CHANGED
@@ -10,6 +10,7 @@ class MDN_Antidot_Test_Model_Export_Abstract extends EcomDev_PHPUnit_Test_Case
10
  * gc is enabled in fixture
11
  * percentage is set to 10% in fixture
12
  *
 
13
  * @loadFixture
14
  */
15
  public function testGarbageCollection() {
10
  * gc is enabled in fixture
11
  * percentage is set to 10% in fixture
12
  *
13
+ * @test
14
  * @loadFixture
15
  */
16
  public function testGarbageCollection() {
app/code/community/MDN/Antidot/Test/Model/Export/Category.php CHANGED
@@ -30,6 +30,7 @@ class MDN_Antidot_Test_Model_Export_Category extends EcomDev_PHPUnit_Test_Case
30
  /*
31
  * MCNX-170 don't generate file if there's no categories to export
32
  * test the XmlWriter has not been initialised if there's no categories to export
 
33
  * @loadFixture
34
  */
35
  public function testEmptyFile() {
30
  /*
31
  * MCNX-170 don't generate file if there's no categories to export
32
  * test the XmlWriter has not been initialised if there's no categories to export
33
+ * @test
34
  * @loadFixture
35
  */
36
  public function testEmptyFile() {
app/code/community/MDN/Antidot/Test/Model/Export/Context.php CHANGED
@@ -16,6 +16,7 @@ class MDN_Antidot_Test_Model_Export_Context extends EcomDev_PHPUnit_Test_Case
16
  *
17
  * Test Context Object construction
18
  *
 
19
  * @loadFixture
20
  */
21
  public function testContext() {
16
  *
17
  * Test Context Object construction
18
  *
19
+ * @test
20
  * @loadFixture
21
  */
22
  public function testContext() {
app/code/community/MDN/Antidot/Test/Model/Export/Model/Product.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_Export_Model_Product extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ /**
8
+ * MCNX-264
9
+ * in fixture config cataloginventory/item_options/manage_stock : 0 meens the product is available
10
+ * even if is_in_stock data from database is false
11
+ *
12
+ * @test
13
+ * @loadFixture
14
+ */
15
+ public function testGetIsInStock() {
16
+
17
+ $product = Mage::getModel('Antidot/export_model_product');
18
+ $product->setData('is_in_stock', 0);
19
+
20
+ $this->assertTrue($product->getIsInStock());
21
+ }
22
+ }
app/code/community/MDN/Antidot/Test/Model/Export/Model/Product/fixtures/testGetIsInStock.yaml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ config:
2
+ default/antidot/fields_product/in_stock_only: 1
3
+ default/cataloginventory/options/show_out_of_stock: 0
4
+ default/cataloginventory/item_options/manage_stock: 0
app/code/community/MDN/Antidot/Test/Model/Export/Product.php CHANGED
@@ -577,6 +577,7 @@ class MDN_Antidot_Test_Model_Export_Product extends EcomDev_PHPUnit_Test_Case
577
 
578
  /**
579
  * MCNX-243 : test categories with inactive parent category is not exported
 
580
  * @loadFixture
581
  */
582
  public function testInactiveParentCategory()
577
 
578
  /**
579
  * MCNX-243 : test categories with inactive parent category is not exported
580
+ * @test
581
  * @loadFixture
582
  */
583
  public function testInactiveParentCategory()
app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteXml.yaml CHANGED
@@ -65,8 +65,6 @@ scope:
65
 
66
  config:
67
  default/antidot/general/owner: JETPULP
68
- default/antidot/fields_product/model:
69
- default/antidot/fields_product/gender:
70
  default/antidot/fields_product/properties: a:2:{s:18:"_1426953698813_813";a:2:{s:5:"value";s:7:"authors";s:12:"autocomplete";s:1:"0";}s:18:"_1426953714346_346";a:2:{s:5:"value";s:6:"editor";s:12:"autocomplete";s:1:"0";}}
71
  default/web/secure/base_url: http://www.mywebsite.com/
72
  default/web/unsecure/base_url: http://www.mywebsite.com/
65
 
66
  config:
67
  default/antidot/general/owner: JETPULP
 
 
68
  default/antidot/fields_product/properties: a:2:{s:18:"_1426953698813_813";a:2:{s:5:"value";s:7:"authors";s:12:"autocomplete";s:1:"0";}s:18:"_1426953714346_346";a:2:{s:5:"value";s:6:"editor";s:12:"autocomplete";s:1:"0";}}
69
  default/web/secure/base_url: http://www.mywebsite.com/
70
  default/web/unsecure/base_url: http://www.mywebsite.com/
app/code/community/MDN/Antidot/Test/Model/Observer/fixtures/testGetDefaultContext.yaml CHANGED
@@ -65,8 +65,6 @@ scope:
65
 
66
  config:
67
  default/antidot/general/owner: JETPULP
68
- default/antidot/fields_product/model:
69
- default/antidot/fields_product/gender:
70
  default/antidot/fields_product/properties: a:2:{s:18:"_1426953698813_813";a:2:{s:5:"value";s:7:"authors";s:12:"autocomplete";s:1:"0";}s:18:"_1426953714346_346";a:2:{s:5:"value";s:6:"editor";s:12:"autocomplete";s:1:"0";}}
71
  default/web/secure/base_url: http://www.mywebsite.com/
72
  default/web/unsecure/base_url: http://www.mywebsite.com/
65
 
66
  config:
67
  default/antidot/general/owner: JETPULP
 
 
68
  default/antidot/fields_product/properties: a:2:{s:18:"_1426953698813_813";a:2:{s:5:"value";s:7:"authors";s:12:"autocomplete";s:1:"0";}s:18:"_1426953714346_346";a:2:{s:5:"value";s:6:"editor";s:12:"autocomplete";s:1:"0";}}
69
  default/web/secure/base_url: http://www.mywebsite.com/
70
  default/web/unsecure/base_url: http://www.mywebsite.com/
app/code/community/MDN/Antidot/Test/Model/Resource/Engine/Antidot.php CHANGED
@@ -16,7 +16,14 @@
16
  class MDN_Antidot_Test_Model_Resource_Engine_Antidot extends EcomDev_PHPUnit_Test_Case
17
  {
18
 
19
- /**
 
 
 
 
 
 
 
20
  * MCNX-171 Test extraction of the raw value of multiselect facet into array of values
21
  *
22
  * @test
@@ -153,6 +160,115 @@ class MDN_Antidot_Test_Model_Resource_Engine_Antidot extends EcomDev_PHPUnit_Tes
153
  $this->assertEquals('http://antidot.net/banner_target', $result['banners'][0]->getUrl());
154
  $this->assertEquals('http://antidot.net/banner.jpg', $result['banners'][0]->getImage());
155
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
156
  }
157
 
158
  }
16
  class MDN_Antidot_Test_Model_Resource_Engine_Antidot extends EcomDev_PHPUnit_Test_Case
17
  {
18
 
19
+
20
+ public static function setUpBeforeClass()
21
+ {
22
+ //avoid errors when session_start is called during the test
23
+ @session_start();
24
+ }
25
+
26
+ /**
27
  * MCNX-171 Test extraction of the raw value of multiselect facet into array of values
28
  *
29
  * @test
160
  $this->assertEquals('http://antidot.net/banner_target', $result['banners'][0]->getUrl());
161
  $this->assertEquals('http://antidot.net/banner.jpg', $result['banners'][0]->getImage());
162
 
163
+ /**
164
+ * 5th test : MCNX-260 : spell check
165
+ * Search with only one result and a spellcheck, the result flag spellcheck must be true in order to do redirection
166
+ */
167
+ //previous test spellcheck must be false
168
+ $this->assertFalse($result['spellcheck']);
169
+
170
+ $mockAFSClientDateHelper = $this->getMockBuilder('AfsXmlClientDataHelper')->disableOriginalConstructor()->getMock(); //AfsXmlClientDataHelper
171
+ $mockAFSClientDateHelper
172
+ ->method('get_value')
173
+ ->willReturn("<empty></empty>");
174
+
175
+ $mockAFSReplyHelper = $this->getMockBuilder('AfsReplyHelper')->disableOriginalConstructor()->getMock(); //AfsReplyHelper
176
+ $mockAFSReplyHelper
177
+ ->method('get_clientdata')
178
+ ->willReturn($mockAFSClientDateHelper);
179
+
180
+ $mockAFSMetaHelper = $this->getMockBuilder('AfsMetaHelper')->disableOriginalConstructor()->getMock(); //AfsMetaHelper
181
+ $mockAFSMetaHelper
182
+ ->method('get_total_replies')
183
+ ->willReturn(1); //return one result
184
+
185
+ $mockAFSReplysetHelper = $this->getMockBuilder('AfsReplysetHelper')->disableOriginalConstructor()->getMock();//AfsReplysetHelper
186
+ $mockAFSReplysetHelper
187
+ ->method('get_replies')
188
+ ->willReturn(array($mockAFSReplyHelper)); //return mock meta
189
+ $mockAFSReplysetHelper
190
+ ->method('get_meta')
191
+ ->willReturn($mockAFSMetaHelper); //return array with one result
192
+
193
+ $resultAntidot = new stdClass();
194
+ $resultAntidot->spellcheck = "suggestion";
195
+ $resultAntidot->replyset = $mockAFSReplysetHelper;
196
+
197
+ $antidotEngine->init();
198
+ Mage::helper('catalogsearch')->setNoteMessages(array());
199
+ $result = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($antidotEngine, 'formatResult', array($resultAntidot));
200
+
201
+ $this->assertTrue($result['spellcheck']);
202
+
203
+ /**
204
+ * 6th test : Spellcheck (MCNX-64 : orchestrated)
205
+ * an orchestrad search must generate an appropriate message
206
+ */
207
+ $mockAfsMetaHelper = $this->getMockBuilder('AfsMetaHelper')->disableOriginalConstructor()->getMock();
208
+ $mockAfsMetaHelper->method('get_total_replies')
209
+ ->willReturn(10);
210
+
211
+ $mockAFSReplysetHelper = $this->getMockBuilder('AfsReplysetHelper')->disableOriginalConstructor()->getMock(); //AfsReplysetHelper
212
+ $mockAFSReplysetHelper->method('get_meta')
213
+ ->willReturn($mockAfsMetaHelper);
214
+ $mockAFSReplysetHelper->method('get_replies')
215
+ ->willReturn(array());
216
+
217
+ $resultAntidot = new stdClass();
218
+ $resultAntidot->isOrchestrated = true;
219
+ $resultAntidot->spellcheck = "antidot";
220
+ $resultAntidot->originalQuery = "antiot";
221
+ $resultAntidot->replyset = $mockAFSReplysetHelper;
222
+
223
+ $antidotEngine->init();
224
+ Mage::helper('catalogsearch')->setNoteMessages(array());
225
+ $result = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($antidotEngine, 'formatResult', array($resultAntidot));
226
+
227
+ $messages = Mage::helper('catalogsearch')->getNoteMessages();
228
+ $this->assertCount(1, $messages);
229
+
230
+ //translate expected message here too
231
+ $expectedMessage = Mage::helper('Antidot')->__("No result found for '{originalQuery}'. Here the results for '{spellcheck}'.");
232
+ $expectedMessage = str_replace('{spellcheck}', $resultAntidot->spellcheck, $expectedMessage);
233
+ $expectedMessage = str_replace('{originalQuery}', $resultAntidot->originalQuery, $expectedMessage);
234
+ $this->assertEquals($expectedMessage, $messages[0]);
235
+
236
+ /**
237
+ * 7th test : Spellcheck (not orchestrated, no result)
238
+ * an not orchestrad search without result and a spellcheck must generate an appropriate message
239
+ */
240
+ $mockAfsMetaHelper = $this->getMockBuilder('AfsMetaHelper')->disableOriginalConstructor()->getMock();
241
+ $mockAfsMetaHelper->method('get_total_replies')
242
+ ->willReturn(0);
243
+
244
+ $mockAFSReplysetHelper = $this->getMockBuilder('AfsReplysetHelper')->disableOriginalConstructor()->getMock(); //AfsReplysetHelper
245
+ $mockAFSReplysetHelper->method('get_meta')
246
+ ->willReturn($mockAfsMetaHelper);
247
+ $mockAFSReplysetHelper->method('get_replies')
248
+ ->willReturn(array());
249
+
250
+ $resultAntidot = new stdClass();
251
+ $resultAntidot->isOrchestrated = false;
252
+ $resultAntidot->spellcheck = "antidot";
253
+ $resultAntidot->originalQuery = "antiot";
254
+ $resultAntidot->replyset = $mockAFSReplysetHelper;
255
+
256
+
257
+ $antidotEngine->init();
258
+ Mage::helper('catalogsearch')->setNoteMessages(array());
259
+ $result = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($antidotEngine, 'formatResult', array($resultAntidot));
260
+
261
+ $messages = Mage::helper('catalogsearch')->getNoteMessages();
262
+
263
+ $this->assertCount(1, $messages);
264
+
265
+ //translate expected message here too
266
+ $expectedMessage = Mage::helper('Antidot')->__('Did you mean {spellcheck} ?');
267
+ $link = '<a href="'.Mage::helper('catalogsearch')->getResultUrl($resultAntidot->spellcheck).'">'.$resultAntidot->spellcheck.'</a>';
268
+ $expectedMessage = str_replace('{spellcheck}', $link, $expectedMessage);
269
+ $this->assertEquals($expectedMessage, $messages[0]);
270
+
271
+
272
  }
273
 
274
  }
app/code/community/MDN/Antidot/Test/Model/Resource/Engine/Antidot/fixtures/testFormatResult.yaml CHANGED
@@ -1,2 +1,3 @@
1
  config:
2
  default/antidot/promote/redirect: always
 
1
  config:
2
  default/antidot/promote/redirect: always
3
+ default/antidot/engine/redirect_product: 2
app/code/community/MDN/Antidot/Test/Model/System/Config/Facet.php CHANGED
@@ -9,6 +9,7 @@ class MDN_Antidot_Test_Model_System_Config_Facet extends EcomDev_PHPUnit_Test_Ca
9
  * Test toOptionArray method
10
  *
11
  * MCNX-217 : translation of facets labels
 
12
  * @loadFixture
13
  */
14
  public function testToOptionArray()
9
  * Test toOptionArray method
10
  *
11
  * MCNX-217 : translation of facets labels
12
+ * @test
13
  * @loadFixture
14
  */
15
  public function testToOptionArray()
app/code/community/MDN/Antidot/Test/Model/System/Config/Source/Acpengine.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_System_Config_Source_Acpengine extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+
8
+ /**
9
+ * Test toOptionArray method
10
+ *
11
+ * MCNX-249 : synchronise dropdownlist between AFSTore config and Catalog Seach config
12
+ */
13
+ public function testToOptionArray()
14
+ {
15
+
16
+ /** @var $configSort MDN_Antidot_Model_System_Config_Source_Engine */
17
+ $configSourceEngine = Mage::getModel('Antidot/system_config_source_acpengine');
18
+
19
+ $values = $configSourceEngine->toOptionArray();
20
+
21
+ $this->assertEquals(2 , count($values));
22
+
23
+ }
24
+
25
+ }
app/code/community/MDN/Antidot/Test/Model/System/Config/Source/Redirect.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_System_Config_Source_Redirect extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+
8
+ /**
9
+ * Test toOptionArray method
10
+ *
11
+ * MCNX-260
12
+ */
13
+ public function testToOptionArray()
14
+ {
15
+
16
+ /** @var $configSort MDN_Antidot_Model_System_Config_Source_Engine */
17
+ $configSourceEngine = Mage::getModel('Antidot/system_config_source_redirect');
18
+
19
+ $values = $configSourceEngine->toOptionArray();
20
+
21
+ $this->assertEquals(3 , count($values));
22
+
23
+ }
24
+
25
+ }
app/code/community/MDN/Antidot/Test/Model/Transport/Http.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_Transport_Http extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ public static function setUpBeforeClass()
8
+ {
9
+ //avoid errors when session_start is called during the test
10
+ @session_start();
11
+ }
12
+
13
+ /**
14
+ * MCNX-68 : Replace sftp upload by PaF WS Upload
15
+ *
16
+ * @test
17
+ * @loadFixture
18
+ */
19
+ public function testSend() {
20
+
21
+ require_once("antidot/COMMON/php-SAI/lib/CurlStub.php");
22
+
23
+ /** @var $observer MDN_Antidot_Model_Transport_Http */
24
+ $transport = Mage::getModel('Antidot/transport_http');
25
+
26
+ $file = "/tmp/antidot/unittest_send.xml";
27
+ file_put_contents($file,"<categories xmlns=\"http://ref.antidot.net/store/afs#\"></categories>");
28
+
29
+ $exportModel = Mage::getModel('Antidot/export_product');
30
+ $curlConnector = new SAI_CurlStub();
31
+ //Set response for upload
32
+ $pafLiveResponse = <<<JSON
33
+ {"x:type":"ws.response","query":{"x:type":"ws.response.query","locale":"*","parameters":{"x:type":"collection","x:values":[]},"properties":{"x:type":"x:dynamic"}},"result":{"x:type":"PushPafContentReply","jobId":3641,"started":true,"uuid":"e4fe5bfa-dcc7-409d-b688-288cc62e314e"}}
34
+ JSON;
35
+ $curlConnector->setResponse($pafLiveResponse);
36
+
37
+ $result = $transport->send($file, $exportModel, $curlConnector);
38
+
39
+ $this->assertNull($result);
40
+
41
+ }
42
+
43
+ }
app/code/community/MDN/Antidot/Test/Model/Transport/fixtures/testSend.yaml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ config:
2
+ default/antidot/general/owner: JETPULP
3
+ default/antidot/web_service/service: 1234
4
+ default/antidot/web_service/status: sandbox
5
+ default/antidot/ftp/upload_type: http
6
+ default/antidot/ftp/username: jetpulp
7
+ default/antidot/ftp/passwd: changeit
app/code/community/MDN/Antidot/controllers/{Admin → Adminhtml/Antidot}/PushController.php RENAMED
@@ -1,67 +1,76 @@
1
- <?php
2
-
3
- /**
4
- * Magento
5
- *
6
- * NOTICE OF LICENSE
7
- *
8
- * This source file is subject to the Open Software License (OSL 3.0)
9
- * It is also available through the world-wide-web at this URL:
10
- * http://opensource.org/licenses/osl-3.0.php
11
- *
12
- * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
13
- * @author : Antidot devmagento@antidot.net
14
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
- */
16
- class MDN_Antidot_Admin_PushController extends Mage_Adminhtml_Controller_Action
17
- {
18
-
19
- /**
20
- * Generate the category file, call from back office
21
- */
22
- public function CategoryAction()
23
- {
24
- try
25
- {
26
- if (Mage::getModel('Antidot/observer')->categoriesFullExport('UI')) {
27
- Mage::getSingleton('adminhtml/session')->addSuccess(
28
- Mage::helper('Antidot')->__('Categories exported')
29
- );
30
- } else {
31
- Mage::getSingleton('adminhtml/session')->addWarning(
32
- Mage::helper('Antidot')->__('No Category to export')
33
- );
34
- }
35
- }
36
- catch(Exception $ex) {
37
- Mage::getSingleton('adminhtml/session')->addError(
38
- Mage::helper('Antidot')->__('An error occured : %s', $ex->getMessage())
39
- );
40
- }
41
- $this->_redirectReferer();
42
- }
43
-
44
- /**
45
- * Generate the catalog file, call from back office
46
- */
47
- public function ProductAction()
48
- {
49
- try {
50
- if (Mage::getModel('Antidot/observer')->catalogFullExport('UI')) {
51
- Mage::getSingleton('adminhtml/session')->addSuccess(
52
- Mage::helper('Antidot')->__('Catalog exported')
53
- );
54
- } else {
55
- Mage::getSingleton('adminhtml/session')->addWarning(
56
- Mage::helper('Antidot')->__('No Product to export')
57
- );
58
- }
59
- }
60
- catch(Exception $ex) {
61
- Mage::getSingleton('adminhtml/session')->addError(
62
- Mage::helper('Antidot')->__('An error occured : %s', $ex->getMessage())
63
- );
64
- }
65
- $this->_redirectReferer();
66
- }
67
- }
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Open Software License (OSL 3.0)
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/osl-3.0.php
11
+ *
12
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
13
+ * @author : Antidot devmagento@antidot.net
14
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
+ */
16
+ class MDN_Antidot_Adminhtml_Antidot_PushController extends Mage_Adminhtml_Controller_Action
17
+ {
18
+
19
+ /**
20
+ * Is the controller allowed (compatibility patch SUPEE-6285)
21
+ * @return mixed
22
+ */
23
+ protected function _isAllowed()
24
+ {
25
+ return Mage::getSingleton('admin/session')->isAllowed('system/config/antidot');
26
+ }
27
+
28
+ /**
29
+ * Generate the category file, call from back office
30
+ */
31
+ public function categoryAction()
32
+ {
33
+ try
34
+ {
35
+ if (Mage::getModel('Antidot/observer')->categoriesFullExport('UI')) {
36
+ Mage::getSingleton('adminhtml/session')->addSuccess(
37
+ Mage::helper('Antidot')->__('Categories exported')
38
+ );
39
+ } else {
40
+ Mage::getSingleton('adminhtml/session')->addWarning(
41
+ Mage::helper('Antidot')->__('No Category to export')
42
+ );
43
+ }
44
+ }
45
+ catch(Exception $ex) {
46
+ Mage::getSingleton('adminhtml/session')->addError(
47
+ Mage::helper('Antidot')->__('An error occured : %s', $ex->getMessage())
48
+ );
49
+ }
50
+ $this->_redirectReferer();
51
+ }
52
+
53
+ /**
54
+ * Generate the catalog file, call from back office
55
+ */
56
+ public function productAction()
57
+ {
58
+ try {
59
+ if (Mage::getModel('Antidot/observer')->catalogFullExport('UI')) {
60
+ Mage::getSingleton('adminhtml/session')->addSuccess(
61
+ Mage::helper('Antidot')->__('Catalog exported')
62
+ );
63
+ } else {
64
+ Mage::getSingleton('adminhtml/session')->addWarning(
65
+ Mage::helper('Antidot')->__('No Product to export')
66
+ );
67
+ }
68
+ }
69
+ catch(Exception $ex) {
70
+ Mage::getSingleton('adminhtml/session')->addError(
71
+ Mage::helper('Antidot')->__('An error occured : %s', $ex->getMessage())
72
+ );
73
+ }
74
+ $this->_redirectReferer();
75
+ }
76
+ }
app/code/community/MDN/Antidot/etc/adminhtml.xml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <acl>
4
+ <resources>
5
+ <admin>
6
+ <children>
7
+ <system>
8
+ <children>
9
+ <config>
10
+ <children>
11
+ <antidot module="Antidot">
12
+ <title>Antidot</title>
13
+ </antidot>
14
+ </children>
15
+ </config>
16
+ </children>
17
+ </system>
18
+ </children>
19
+ </admin>
20
+ </resources>
21
+ </acl>
22
+ </config>
app/code/community/MDN/Antidot/etc/config.xml CHANGED
@@ -18,7 +18,7 @@
18
  </crontab>
19
  <modules>
20
  <MDN_Antidot>
21
- <version>1.2.1</version>
22
  </MDN_Antidot>
23
  </modules>
24
  <global>
@@ -133,25 +133,6 @@
133
  </Antidot>
134
  </updates>
135
  </layout>
136
- <acl>
137
- <resources>
138
- <admin>
139
- <children>
140
- <system>
141
- <children>
142
- <config>
143
- <children>
144
- <antidot module="Antidot">
145
- <title>Antidot</title>
146
- </antidot>
147
- </children>
148
- </config>
149
- </children>
150
- </system>
151
- </children>
152
- </admin>
153
- </resources>
154
- </acl>
155
  </adminhtml>
156
 
157
  <frontend>
@@ -185,23 +166,28 @@
185
 
186
  <admin>
187
  <routers>
188
- <Antidotadmin>
189
- <use>admin</use>
190
  <args>
191
- <module>MDN_Antidot</module>
192
- <frontName>Antidotadmin</frontName>
 
193
  </args>
194
- </Antidotadmin>
195
  </routers>
196
  </admin>
197
 
198
  <default>
199
  <antidot>
 
 
 
200
  <web_service>
201
  <status>rc</status>
202
  </web_service>
203
  <engine>
204
  <spellcheck>Did you mean {spellcheck} ?</spellcheck>
 
 
205
  <price_facet>From {min}€ to {max}€</price_facet>
206
  <feed_catalog>1</feed_catalog>
207
  <facet_multiple>0</facet_multiple>
18
  </crontab>
19
  <modules>
20
  <MDN_Antidot>
21
+ <version>1.2.2</version>
22
  </MDN_Antidot>
23
  </modules>
24
  <global>
133
  </Antidot>
134
  </updates>
135
  </layout>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
136
  </adminhtml>
137
 
138
  <frontend>
166
 
167
  <admin>
168
  <routers>
169
+ <adminhtml>
 
170
  <args>
171
+ <modules>
172
+ <antidot before="Mage_Adminhtml">MDN_Antidot_Adminhtml</antidot>
173
+ </modules>
174
  </args>
175
+ </adminhtml>
176
  </routers>
177
  </admin>
178
 
179
  <default>
180
  <antidot>
181
+ <ftp>
182
+ <upload_type>http</upload_type>
183
+ </ftp>
184
  <web_service>
185
  <status>rc</status>
186
  </web_service>
187
  <engine>
188
  <spellcheck>Did you mean {spellcheck} ?</spellcheck>
189
+ <spellcheck_query>No result found for '{originalQuery}'. Here the results for '{spellcheck}'.</spellcheck_query>
190
+ <redirect_product>1</redirect_product>
191
  <price_facet>From {min}€ to {max}€</price_facet>
192
  <feed_catalog>1</feed_catalog>
193
  <facet_multiple>0</facet_multiple>
app/code/community/MDN/Antidot/etc/system.xml CHANGED
@@ -72,44 +72,72 @@
72
  <show_in_website>0</show_in_website>
73
  <show_in_store>0</show_in_store>
74
  <fields>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  <host translate="label">
76
  <label>Host</label>
77
  <frontend_type>text</frontend_type>
78
- <sort_order>1</sort_order>
79
  <show_in_default>1</show_in_default>
80
  <comment>Host to connect to Antidot to push files</comment>
 
81
  </host>
82
  <directory translate="label">
83
  <label>Upload Directory</label>
84
  <frontend_type>text</frontend_type>
85
- <sort_order>2</sort_order>
86
  <show_in_default>1</show_in_default>
87
  <comment>Directory to upload files</comment>
 
88
  </directory>
89
  <login translate="label">
90
  <label>Login</label>
91
  <frontend_type>text</frontend_type>
92
- <sort_order>3</sort_order>
93
  <show_in_default>1</show_in_default>
94
  <comment>Your Antidot FTP Login</comment>
 
95
  </login>
96
  <password translate="label">
97
  <label>Password</label>
98
  <frontend_type>password</frontend_type>
99
- <sort_order>4</sort_order>
100
  <show_in_default>1</show_in_default>
101
  <comment>Your Antidot FTP Password</comment>
 
102
  </password>
103
  <working_directory translate="label">
104
  <label>Working directory</label>
105
  <frontend_type>text</frontend_type>
106
- <sort_order>5</sort_order>
107
  <show_in_default>1</show_in_default>
108
  <comment>Local directory to use to generate xml files. If empty, /tmp will be used</comment>
 
109
  </working_directory>
110
  </fields>
111
  </ftp>
112
-
113
  <web_service>
114
  <label>Web services</label>
115
  <frontend_type>text</frontend_type>
@@ -136,7 +164,7 @@
136
  <label>Status</label>
137
  <frontend_type>select</frontend_type>
138
  <source_model>Antidot/System_Config_WSStatus</source_model>
139
- <sort_order>3</sort_order>
140
  <show_in_default>1</show_in_default>
141
  <comment>Web service status. Go live only with 'stable' status on your production site</comment>
142
  </status>
@@ -543,6 +571,25 @@
543
  <show_in_store>1</show_in_store>
544
  <comment>Text to display when a spellcheck suggestion is available. Use {spellcheck} keyword to include AFS@Store suggestion in your text</comment>
545
  </spellcheck>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
546
  <facets translate="label">
547
  <label>Facets</label>
548
  <frontend_model>Antidot/System_Config_Form_Field_Array_Facet</frontend_model>
72
  <show_in_website>0</show_in_website>
73
  <show_in_store>0</show_in_store>
74
  <fields>
75
+ <upload_type translate="label">
76
+ <label>Upload Type</label>
77
+ <frontend_type>select</frontend_type>
78
+ <source_model>Antidot/system_config_exportType</source_model>
79
+ <sort_order>1</sort_order>
80
+ <show_in_default>1</show_in_default>
81
+ </upload_type>
82
+ <username translate="label">
83
+ <label>AFS@Store BO Login</label>
84
+ <frontend_type>text</frontend_type>
85
+ <sort_order>2</sort_order>
86
+ <show_in_default>1</show_in_default>
87
+ <comment></comment>
88
+ <depends><upload_type>http</upload_type></depends>
89
+ </username>
90
+ <passwd translate="label">
91
+ <label>AFS@Store BO Password</label>
92
+ <frontend_type>password</frontend_type>
93
+ <sort_order>3</sort_order>
94
+ <show_in_default>1</show_in_default>
95
+ <comment></comment>
96
+ <depends><upload_type>http</upload_type></depends>
97
+ </passwd>
98
  <host translate="label">
99
  <label>Host</label>
100
  <frontend_type>text</frontend_type>
101
+ <sort_order>2</sort_order>
102
  <show_in_default>1</show_in_default>
103
  <comment>Host to connect to Antidot to push files</comment>
104
+ <depends><upload_type>ftp</upload_type></depends>
105
  </host>
106
  <directory translate="label">
107
  <label>Upload Directory</label>
108
  <frontend_type>text</frontend_type>
109
+ <sort_order>3</sort_order>
110
  <show_in_default>1</show_in_default>
111
  <comment>Directory to upload files</comment>
112
+ <depends><upload_type>ftp</upload_type></depends>
113
  </directory>
114
  <login translate="label">
115
  <label>Login</label>
116
  <frontend_type>text</frontend_type>
117
+ <sort_order>4</sort_order>
118
  <show_in_default>1</show_in_default>
119
  <comment>Your Antidot FTP Login</comment>
120
+ <depends><upload_type>ftp</upload_type></depends>
121
  </login>
122
  <password translate="label">
123
  <label>Password</label>
124
  <frontend_type>password</frontend_type>
125
+ <sort_order>5</sort_order>
126
  <show_in_default>1</show_in_default>
127
  <comment>Your Antidot FTP Password</comment>
128
+ <depends><upload_type>ftp</upload_type></depends>
129
  </password>
130
  <working_directory translate="label">
131
  <label>Working directory</label>
132
  <frontend_type>text</frontend_type>
133
+ <sort_order>6</sort_order>
134
  <show_in_default>1</show_in_default>
135
  <comment>Local directory to use to generate xml files. If empty, /tmp will be used</comment>
136
+ <depends><upload_type>ftp</upload_type></depends>
137
  </working_directory>
138
  </fields>
139
  </ftp>
140
+
141
  <web_service>
142
  <label>Web services</label>
143
  <frontend_type>text</frontend_type>
164
  <label>Status</label>
165
  <frontend_type>select</frontend_type>
166
  <source_model>Antidot/System_Config_WSStatus</source_model>
167
+ <sort_order>5</sort_order>
168
  <show_in_default>1</show_in_default>
169
  <comment>Web service status. Go live only with 'stable' status on your production site</comment>
170
  </status>
571
  <show_in_store>1</show_in_store>
572
  <comment>Text to display when a spellcheck suggestion is available. Use {spellcheck} keyword to include AFS@Store suggestion in your text</comment>
573
  </spellcheck>
574
+ <spellcheck_query translate="label">
575
+ <label>Query Spellcheck sentence</label>
576
+ <frontend_type>text</frontend_type>
577
+ <sort_order>46</sort_order>
578
+ <show_in_default>1</show_in_default>
579
+ <show_in_website>1</show_in_website>
580
+ <show_in_store>1</show_in_store>
581
+ <comment>Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality</comment>
582
+ </spellcheck_query>
583
+ <redirect_product translate="label">
584
+ <label>Redirect to the product page</label>
585
+ <frontend_type>select</frontend_type>
586
+ <source_model>Antidot/system_config_source_redirect</source_model>
587
+ <sort_order>47</sort_order>
588
+ <show_in_default>1</show_in_default>
589
+ <show_in_website>1</show_in_website>
590
+ <show_in_store>1</show_in_store>
591
+ <comment>In case there's only one result : redirect to product page</comment>
592
+ </redirect_product>
593
  <facets translate="label">
594
  <label>Facets</label>
595
  <frontend_model>Antidot/System_Config_Form_Field_Array_Facet</frontend_model>
app/code/community/MDN/Antidot/sql/Antidot_setup/mysql4-upgrade-1.2.1-1.2.2.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ $installer->startSetup();
6
+
7
+ /**
8
+ * have to load config in setup because it is not yet done by magento
9
+ */
10
+ $config = Mage::getConfig();
11
+ $dbConfig = Mage::getResourceModel('core/config');
12
+ $dbConfig->loadToXml($config);
13
+
14
+ $ftpConfig = Mage::getStoreConfig('antidot/ftp');
15
+ /**
16
+ * if ftp config is done, it means we upgrade an installed module,
17
+ * then keep ftp upload_type
18
+ */
19
+ if ($ftpConfig && is_array($ftpConfig) && count($ftpConfig)>1) {
20
+ $config = Mage::getSingleton('core/config');
21
+ $config->saveConfig('antidot/ftp/upload_type', MDN_Antidot_Model_Transport::TRANS_FTP, 'default', 0);
22
+ }
23
+
24
+ $installer->endSetup();
app/design/frontend/base/default/template/antidot/catalog/layer/category.phtml CHANGED
@@ -46,12 +46,13 @@ if(!function_exists('getItems')) {
46
  return $listItems;
47
  }
48
 
49
- function writeItems($items, $isChild = false, $selectedNode = array())
50
  {
51
- $tree = '<ul '.(!$isChild ? 'class="collapsibleList"' : '').'>%s</ul>';
52
  $node = '<li class="%s"><a %s href="%s"> %s (%d)%s</a>';
53
 
54
  $nodes = '';
 
55
  foreach ($items as $item) {
56
  if ($item->getCount() > 0) {
57
 
@@ -60,7 +61,11 @@ if(!function_exists('getItems')) {
60
 
61
  $selected = $item->isSelected() || in_array($nodeId, $selectedNode) ? 'checked="checked"': '';
62
  $class = $selected !== '' ? ' collapsibleListClosed' : '';
63
- $child = $item->getChild() ? writeItems($item->getChild(), true, $selectedNode) : '';
 
 
 
 
64
 
65
  $nodes.= sprintf($node, $class, $selected, $item->getUrl(), $item->getLabel(), $item->getCount(), $child);
66
  }
46
  return $listItems;
47
  }
48
 
49
+ function writeItems($items, $level = 0, $selectedNode = array())
50
  {
51
+ $tree = '<ul '.($level==0 ? 'class="collapsibleList"' : '').'>%s</ul>';
52
  $node = '<li class="%s"><a %s href="%s"> %s (%d)%s</a>';
53
 
54
  $nodes = '';
55
+ $nbItems = count($items);
56
  foreach ($items as $item) {
57
  if ($item->getCount() > 0) {
58
 
61
 
62
  $selected = $item->isSelected() || in_array($nodeId, $selectedNode) ? 'checked="checked"': '';
63
  $class = $selected !== '' ? ' collapsibleListClosed' : '';
64
+ /* MCNX-94 : Expand first level of tree facet if there's only one item : */
65
+ if ($level==0 && $nbItems==1) {
66
+ $class = 'collapsibleListClosed';
67
+ }
68
+ $child = $item->getChild() ? writeItems($item->getChild(), $level+1, $selectedNode) : '';
69
 
70
  $nodes.= sprintf($node, $class, $selected, $item->getUrl(), $item->getLabel(), $item->getCount(), $child);
71
  }
app/locale/de_AT/MDN_Antidot.csv CHANGED
@@ -144,4 +144,13 @@ Price,Preis
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","ZipArchive Klasse nicht vorhanden ist, müssen Sie php zip extension zu installieren, sonst wird die Zip-Betrieb während der Export möglicherweise nicht korrekt ausgeführt"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","DOMDocument Klasse nicht vorhanden ist, müssen Sie php libxml extension zu installieren, da sonst die XSD-Validierung während des Exports wird nicht ausgeführt und weder Autovervollständigung"
146
  "The curl php extension is not installed, it's required to upload export files","Die php curl extension nicht installiert ist, es ist erforderlich , um den Export Dateien hochladen"
147
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","Die php curl extension nicht SFTP-Protokoll unterstützen, müssen libcurl auf Ihrem System aktualisiert werden , sonst werden die Exportdateien werden nicht hochgeladen werden"
 
 
 
 
 
 
 
 
 
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","ZipArchive Klasse nicht vorhanden ist, müssen Sie php zip extension zu installieren, sonst wird die Zip-Betrieb während der Export möglicherweise nicht korrekt ausgeführt"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","DOMDocument Klasse nicht vorhanden ist, müssen Sie php libxml extension zu installieren, da sonst die XSD-Validierung während des Exports wird nicht ausgeführt und weder Autovervollständigung"
146
  "The curl php extension is not installed, it's required to upload export files","Die php curl extension nicht installiert ist, es ist erforderlich , um den Export Dateien hochladen"
147
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","Die php curl extension nicht https-Protokoll unterstützen, müssen libcurl auf Ihrem System aktualisiert werden , sonst werden die Exportdateien werden nicht hochgeladen werden"
148
+ "Upload Type","hochladen Typ"
149
+ "Query Spellcheck sentence","Query-Rechtschreibprüfung Satz"
150
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidadText angezeigt werden soll, wenn ein Rechtschreibprüfung Abfrage durchgeführt wurde. Verwenden {originalQuery} und {spellcheck} Keyword Rechtschreibprüfung, die ursprüngliche Abfrage und die Rechtschreibprüfung in Ihrem Text enthalten, leer lassen, um die Funktion zu deaktivieren"
151
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","Kein Ergebnis für {originalQuery} gefunden. Hier die Ergebnisse für die Rechtschreibprüfung '{spellcheck}'."
152
+ "Redirect to the product page","Umleitung auf die Produktseite"
153
+ "In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
154
+ "Always","Immer"
155
+ "Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
156
+ "Never","Nie"
app/locale/de_CH/MDN_Antidot.csv CHANGED
@@ -144,4 +144,13 @@ Price,Preis
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","ZipArchive Klasse nicht vorhanden ist, müssen Sie php zip extension zu installieren, sonst wird die Zip-Betrieb während der Export möglicherweise nicht korrekt ausgeführt"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","DOMDocument Klasse nicht vorhanden ist, müssen Sie php libxml extension zu installieren, da sonst die XSD-Validierung während des Exports wird nicht ausgeführt und weder Autovervollständigung"
146
  "The curl php extension is not installed, it's required to upload export files","Die php curl extension nicht installiert ist, es ist erforderlich , um den Export Dateien hochladen"
147
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","Die php curl extension nicht SFTP-Protokoll unterstützen, müssen libcurl auf Ihrem System aktualisiert werden , sonst werden die Exportdateien werden nicht hochgeladen werden"
 
 
 
 
 
 
 
 
 
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","ZipArchive Klasse nicht vorhanden ist, müssen Sie php zip extension zu installieren, sonst wird die Zip-Betrieb während der Export möglicherweise nicht korrekt ausgeführt"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","DOMDocument Klasse nicht vorhanden ist, müssen Sie php libxml extension zu installieren, da sonst die XSD-Validierung während des Exports wird nicht ausgeführt und weder Autovervollständigung"
146
  "The curl php extension is not installed, it's required to upload export files","Die php curl extension nicht installiert ist, es ist erforderlich , um den Export Dateien hochladen"
147
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","Die php curl extension nicht https-Protokoll unterstützen, müssen libcurl auf Ihrem System aktualisiert werden , sonst werden die Exportdateien werden nicht hochgeladen werden"
148
+ "Upload Type","hochladen Typ"
149
+ "Query Spellcheck sentence","Query-Rechtschreibprüfung Satz"
150
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidadText angezeigt werden soll, wenn ein Rechtschreibprüfung Abfrage durchgeführt wurde. Verwenden {originalQuery} und {spellcheck} Keyword Rechtschreibprüfung, die ursprüngliche Abfrage und die Rechtschreibprüfung in Ihrem Text enthalten, leer lassen, um die Funktion zu deaktivieren"
151
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","Kein Ergebnis für {originalQuery} gefunden. Hier die Ergebnisse für die Rechtschreibprüfung '{spellcheck}'."
152
+ "Redirect to the product page","Umleitung auf die Produktseite"
153
+ "In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
154
+ "Always","Immer"
155
+ "Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
156
+ "Never","Nie"
app/locale/de_DE/MDN_Antidot.csv CHANGED
@@ -144,4 +144,13 @@ Price,Preis
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","ZipArchive Klasse nicht vorhanden ist, müssen Sie php zip extension zu installieren, sonst wird die Zip-Betrieb während der Export möglicherweise nicht korrekt ausgeführt"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","DOMDocument Klasse nicht vorhanden ist, müssen Sie php libxml extension zu installieren, da sonst die XSD-Validierung während des Exports wird nicht ausgeführt und weder Autovervollständigung"
146
  "The curl php extension is not installed, it's required to upload export files","Die php curl extension nicht installiert ist, es ist erforderlich , um den Export Dateien hochladen"
147
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","Die php curl extension nicht SFTP-Protokoll unterstützen, müssen libcurl auf Ihrem System aktualisiert werden , sonst werden die Exportdateien werden nicht hochgeladen werden"
 
 
 
 
 
 
 
 
 
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","ZipArchive Klasse nicht vorhanden ist, müssen Sie php zip extension zu installieren, sonst wird die Zip-Betrieb während der Export möglicherweise nicht korrekt ausgeführt"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","DOMDocument Klasse nicht vorhanden ist, müssen Sie php libxml extension zu installieren, da sonst die XSD-Validierung während des Exports wird nicht ausgeführt und weder Autovervollständigung"
146
  "The curl php extension is not installed, it's required to upload export files","Die php curl extension nicht installiert ist, es ist erforderlich , um den Export Dateien hochladen"
147
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","Die php curl extension nicht https-Protokoll unterstützen, müssen libcurl auf Ihrem System aktualisiert werden , sonst werden die Exportdateien werden nicht hochgeladen werden"
148
+ "Upload Type","hochladen Typ"
149
+ "Query Spellcheck sentence","Query-Rechtschreibprüfung Satz"
150
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidadText angezeigt werden soll, wenn ein Rechtschreibprüfung Abfrage durchgeführt wurde. Verwenden {originalQuery} und {spellcheck} Keyword Rechtschreibprüfung, die ursprüngliche Abfrage und die Rechtschreibprüfung in Ihrem Text enthalten, leer lassen, um die Funktion zu deaktivieren"
151
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","Kein Ergebnis für {originalQuery} gefunden. Hier die Ergebnisse für die Rechtschreibprüfung '{spellcheck}'."
152
+ "Redirect to the product page","Umleitung auf die Produktseite"
153
+ "In case there's only one result : redirect to product page","Für den Fall, es gibt nur ein Ergebnis: redirect zur Produktseite"
154
+ "Always","Immer"
155
+ "Unless there's a spellcheck","Es sei denn, es gibt eine Rechtschreibprüfung"
156
+ "Never","Nie"
app/locale/es_AR/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_CL/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_CO/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_CR/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_ES/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_MX/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_PA/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_PE/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/es_VE/MDN_Antidot.csv CHANGED
@@ -143,4 +143,13 @@ Price,Precio
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo sftp , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
 
 
 
 
 
 
 
 
 
143
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","Clase ZipArchive no existe, debe instalar el extensión php postal, de lo contrario la operación postal durante la exportación puede no funcionará correctamente"
144
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","Clase DOMDocument no existe, debe instalar el extensión php libxml, de lo contrario la validación xsd durante la exportación no se ejecutará y autocompletar ni"
145
  "The curl php extension is not installed, it's required to upload export files","La extensión php curl no está instalado, se requiere para subir archivos de exportación"
146
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","La extensión php curl no soporta el protocolo https , libcurl se debe actualizar en su sistema , de lo contrario no se subirán los archivos de exportación"
147
+ "Upload Type","Subir Tipo"
148
+ "Query Spellcheck sentence","Frase de consulta Spellcheck"
149
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalitéTexto a mostrar cuando se ha realizado una consulta basada corrección ortográfica. Use {originalQuery} y {spellcheck} corrección ortográfica palabra clave para incluir la consulta original y el corrector ortográfico en su texto, deje vacío para deshabilitar la funcionalidad"
150
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","No hay resultados para {originalQuery} originalQuery resultado. Aquí los resultados de la revisión ortográfica '{spellcheck}'."
151
+ "Redirect to the product page","Redirigir a la página del producto"
152
+ "In case there's only one result : redirect to product page","Hay en el cuadro de un solo resultado: redirigir a la página del producto"
153
+ "Always","Siempre"
154
+ "Unless there's a spellcheck","Menos Hay una corrección ortográfica"
155
+ "Never","Nunca"
app/locale/fr_CA/MDN_Antidot.csv CHANGED
@@ -144,4 +144,13 @@ Price,Prix
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","La classe ZipArchive n'existe pas, vous devez installer le extension php zip, sinon l'opération de zip lors de l'export pourrait ne pas fonctionner correctement"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","La classe DOMDocument n'existe pas, vous devez installer le extension php libxml, sinon la validation xsd lors de l'export ne fonctionnera pas et l'auto-complétion non plus"
146
  "The curl php extension is not installed, it's required to upload export files","L'extension php curl n'est pas installée, elle est nécéssaire à l'upload des fichiers d'export"
147
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","L'extension php curl ne supporte pas le protocol sftp, libcurl doit être mis à jour sur le système, sinon l'upload des fichiers d'export ne se fera pas"
 
 
 
 
 
 
 
 
 
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","La classe ZipArchive n'existe pas, vous devez installer le extension php zip, sinon l'opération de zip lors de l'export pourrait ne pas fonctionner correctement"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","La classe DOMDocument n'existe pas, vous devez installer le extension php libxml, sinon la validation xsd lors de l'export ne fonctionnera pas et l'auto-complétion non plus"
146
  "The curl php extension is not installed, it's required to upload export files","L'extension php curl n'est pas installée, elle est nécéssaire à l'upload des fichiers d'export"
147
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","L'extension php curl ne supporte pas le protocol https, libcurl doit être mis à jour sur le système, sinon l'upload des fichiers d'export ne se fera pas"
148
+ "Upload Type","Type d'envoi"
149
+ "Redirect to the product page","Rediriger vers la page prdouit"
150
+ "In case there's only one result : redirect to product page","Dans le cas où il n'y a qu'un seul résultat : rediriger vers la page produit"
151
+ "Always","Toujours"
152
+ "Unless there's a spellcheck","Sauf si il y a une suggestion orthographique"
153
+ "Never","Jamais""Query Spellcheck sentence","Phrase de recherche basée sur la suggestion orthographique"
154
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalité"
155
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","Aucun résultat trouvé à partir de votre recherche initiale '{originalQuery}'. Voici les résultats pour la recherche '{spellcheck}'."
156
+
app/locale/fr_FR/MDN_Antidot.csv CHANGED
@@ -144,4 +144,13 @@ Price,Prix
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","La classe ZipArchive n'existe pas, vous devez installer le extension php zip, sinon l'opération de zip lors de l'export pourrait ne pas fonctionner correctement"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","La classe DOMDocument n'existe pas, vous devez installer le extension php libxml, sinon la validation xsd lors de l'export ne fonctionnera pas et l'auto-complétion non plus"
146
  "The curl php extension is not installed, it's required to upload export files","L'extension php curl n'est pas installée, elle est nécéssaire à l'upload des fichiers d'export"
147
- "The curl php extension doesn't support sftp protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","L'extension php curl ne supporte pas le protocol sftp, libcurl doit être mis à jour sur le système, sinon l'upload des fichiers d'export ne se fera pas"
 
 
 
 
 
 
 
 
 
144
  "ZipArchive class doesn't exist, you must install php zip extension, otherwise the zip operation during export may not run correctly","La classe ZipArchive n'existe pas, vous devez installer le extension php zip, sinon l'opération de zip lors de l'export pourrait ne pas fonctionner correctement"
145
  "DOMDocument class doesn't exist, you must install php libxml extension, otherwise the xsd validation during export will not run and autocomplete neither","La classe DOMDocument n'existe pas, vous devez installer le extension php libxml, sinon la validation xsd lors de l'export ne fonctionnera pas et l'auto-complétion non plus"
146
  "The curl php extension is not installed, it's required to upload export files","L'extension php curl n'est pas installée, elle est nécéssaire à l'upload des fichiers d'export"
147
+ "The curl php extension doesn't support https protocol, libcurl must be upgraded on your system, otherwise the export files won't be uploaded","L'extension php curl ne supporte pas le protocol https, libcurl doit être mis à jour sur le système, sinon l'upload des fichiers d'export ne se fera pas"
148
+ "Upload Type","Type d'envoi"
149
+ "Query Spellcheck sentence","Phrase de recherche basée sur la suggestion orthographique"
150
+ "Text to display when a spellcheck based query has been made. Use {originalQuery} and {spellcheck} keyword to include the original query and the spellcheck in your text, leave empty to disable the functionality","Texte à afficher quand une recherche basée sur une suggestion orthographique a été faite. Utilisez {originalQuery} et {spellcheck} pour inclure la recherche original et la correction dans votre texte, laissez vide pour désactiver la fonctionnalité"
151
+ "No result found for '{originalQuery}'. Here the results for '{spellcheck}'.","Aucun résultat trouvé à partir de votre recherche initiale '{originalQuery}'. Voici les résultats pour la recherche '{spellcheck}'."
152
+ "Redirect to the product page","Rediriger vers la page prdouit"
153
+ "In case there's only one result : redirect to product page","Dans le cas où il n'y a qu'un seul résultat : rediriger vers la page produit"
154
+ "Always","Toujours"
155
+ "Unless there's a spellcheck","Sauf si il y a une suggestion orthographique"
156
+ "Never","Jamais"
lib/antidot/AFS/SEARCH/TEST/facetHelperTest.php CHANGED
@@ -56,7 +56,7 @@ class FacetHelperTest extends PHPUnit_Framework_TestCase
56
  $this->assertEquals(false, $helper->is_sticky());
57
 
58
  $labels = $helper->get_labels();
59
- $this->assertEquals(array("ES" => "Faceta booleana", "FR" => "Facette booléenne", "Boolean facet"), $labels);
60
  }
61
 
62
  public function testRetrieveLabelsWhenNoLabelsExists() {
56
  $this->assertEquals(false, $helper->is_sticky());
57
 
58
  $labels = $helper->get_labels();
59
+ $this->assertEquals(array("es" => "Faceta booleana", "fr" => "Facette booléenne", "Boolean facet"), $labels);
60
  }
61
 
62
  public function testRetrieveLabelsWhenNoLabelsExists() {
lib/antidot/AFS/SEARCH/TEST/headerHelperTest.php CHANGED
@@ -1,702 +1,81 @@
1
  <?php ob_start();
2
- require_once "AFS/SEARCH/afs_facet_helper.php";
3
- require_once "AFS/SEARCH/afs_query.php";
4
- require_once "AFS/SEARCH/afs_response_helper.php";
5
 
6
- class FacetHelperTest extends PHPUnit_Framework_TestCase
7
  {
8
- public function testRetrieveFacetLabel()
9
  {
10
  $input = json_decode('{
11
- "afs:t": "FacetTree",
12
- "node": [
13
- {
14
- "key": "false",
15
- "labels": [
16
- {
17
- "label": "BAD"
18
- }
19
- ],
20
- "items": 67
21
- },
22
- {
23
- "key": "true",
24
- "labels": [
25
- {
26
- "label": "GOOD"
27
- }
28
- ],
29
- "items": 133
30
- }
31
- ],
32
- "layout": "TREE",
33
- "type": "BOOL",
34
- "id": "BOOL",
35
- "labels": [
36
- {
37
- "lang": "ES",
38
- "region": "ES",
39
- "label": "Faceta booleana"
40
- },
41
- {
42
- "lang": "FR",
43
- "label": "Facette booléenne"
44
- },
45
- {
46
- "label": "Boolean facet"
47
- }
48
- ] }');
49
-
50
- $config = new AfsHelperConfiguration();
51
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
52
- $this->assertEquals($helper->get_label(), "Faceta booleana");
53
- $this->assertEquals('BOOL', $helper->get_id());
54
- $this->assertEquals(AfsFacetType::BOOL_TYPE, $helper->get_type());
55
- $this->assertEquals(AfsFacetLayout::TREE, $helper->get_layout());
56
- $this->assertEquals(false, $helper->is_sticky());
57
-
58
- $labels = $helper->get_labels();
59
- $this->assertEquals(array("es" => "Faceta booleana", "fr" => "Facette booléenne", "Boolean facet"), $labels);
60
- }
61
-
62
- public function testRetrieveLabelsWhenNoLabelsExists() {
63
- $input = json_decode('{
64
- "afs:t": "FacetTree",
65
- "node": [
66
- {
67
- "key": "false",
68
- "labels": [
69
- {
70
- "label": "BAD"
71
- }
72
- ],
73
- "items": 67
74
- }
75
- ],
76
- "layout": "TREE",
77
- "type": "BOOL",
78
- "id": "FOO",
79
- "sticky": "true" }');
80
-
81
- $config = new AfsHelperConfiguration();
82
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
83
- $labels = $helper->get_labels();
84
- $this->assertEquals(array("FOO"), $labels);
85
- $this->assertEquals("FOO", $helper->get_label());
86
- }
87
-
88
- public function testRetrieveTags() {
89
- $input = json_decode('{
90
- "afs:t": "FacetTree",
91
- "tags": "tag1 tag2 tag3",
92
- "node": [
93
- {
94
- "key": "false",
95
- "labels": [
96
- {
97
- "label": "BAD"
98
- }
99
- ],
100
- "items": 67
101
- }
102
- ],
103
- "layout": "TREE",
104
- "type": "BOOL",
105
- "id": "FOO",
106
- "labels": [
107
- {
108
- "label": "String facet"
109
- }
110
- ],
111
- "sticky": "true" }');
112
-
113
- $config = new AfsHelperConfiguration();
114
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
115
- $this->assertEquals(array('tag1', 'tag2', 'tag3'), $helper->get_tags());
116
- }
117
-
118
- public function testNotags() {
119
- $input = json_decode('{
120
- "afs:t": "FacetTree",
121
- "node": [
122
- {
123
- "key": "false",
124
- "labels": [
125
- {
126
- "label": "BAD"
127
- }
128
- ],
129
- "items": 67
130
- }
131
- ],
132
- "layout": "TREE",
133
- "type": "BOOL",
134
- "id": "FOO",
135
- "labels": [
136
- {
137
- "label": "String facet"
138
- }
139
- ],
140
- "sticky": "true" }');
141
-
142
- $config = new AfsHelperConfiguration();
143
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
144
- $this->assertEquals(array(), $helper->get_tags());
145
- }
146
-
147
- public function testRetrieveStickyness()
148
- {
149
- $input = json_decode('{
150
- "afs:t": "FacetTree",
151
- "node": [
152
- {
153
- "key": "false",
154
- "labels": [
155
- {
156
- "label": "BAD"
157
- }
158
- ],
159
- "items": 67
160
- }
161
- ],
162
- "layout": "TREE",
163
- "type": "BOOL",
164
- "id": "FOO",
165
- "labels": [
166
- {
167
- "label": "String facet"
168
- }
169
- ],
170
- "sticky": "true" }');
171
-
172
- $config = new AfsHelperConfiguration();
173
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
174
- $this->assertEquals($helper->get_label(), "String facet");
175
- $this->assertEquals('FOO', $helper->get_id());
176
- $this->assertEquals(AfsFacetType::BOOL_TYPE, $helper->get_type());
177
- $this->assertEquals(AfsFacetLayout::TREE, $helper->get_layout());
178
- $this->assertEquals(true, $helper->is_sticky());
179
- }
180
-
181
- public function testFacetValueNoMetaAvailable()
182
- {
183
- $input = json_decode('{
184
- "afs:t": "FacetTree",
185
- "node": [ {
186
- "key": "false",
187
- "labels": [ { "label": "BAD" } ],
188
- "items": 67
189
- } ],
190
- "layout": "TREE",
191
- "type": "BOOL",
192
- "id": "BOOL",
193
- "labels": [ { "label": "Boolean facet" } ] }');
194
-
195
- $config = new AfsHelperConfiguration();
196
- $config->set_helper_format(AfsHelperFormat::HELPERS);
197
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
198
- $elems = $helper->get_elements();
199
- $this->assertEquals(1, count($elems));
200
- $this->assertEquals(0, count($elems[0]->get_meta()));
201
- }
202
-
203
- public function testFacetValueOneMetaAvailable()
204
- {
205
- $input = json_decode('{
206
- "afs:t": "FacetTree",
207
- "node": [ {
208
- "key": "false",
209
- "labels": [ { "label": "BAD" } ],
210
- "items": 67,
211
- "meta": [ {
212
- "key": "meta_id",
213
- "value": "meta_value"
214
- } ]
215
- } ],
216
- "layout": "TREE",
217
- "type": "BOOL",
218
- "id": "BOOL",
219
- "labels": [ { "label": "Boolean facet" } ]
220
- }');
221
-
222
- $config = new AfsHelperConfiguration();
223
- $config->set_helper_format(AfsHelperFormat::HELPERS);
224
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
225
- $elems = $helper->get_elements();
226
-
227
- $this->assertEquals(1, count($elems));
228
- $metas = $elems[0]->get_meta();
229
- $this->assertEquals(1, count($metas));
230
- foreach ($metas as $meta_key => $meta_value) {
231
- $this->assertEquals('meta_id', $meta_key);
232
- $this->assertEquals('meta_value', $meta_value);
233
- }
234
- $this->assertEquals('meta_value', $elems[0]->get_meta('meta_id'));
235
- }
236
-
237
- public function testFacetValueMultipleMetaAvailable()
238
- {
239
- $input = json_decode('{
240
- "afs:t": "FacetTree",
241
- "node": [ {
242
- "key": "false",
243
- "labels": [ { "label": "BAD" } ],
244
- "items": 67,
245
- "meta": [
246
- {
247
- "key": "meta_id_1",
248
- "value": "meta_value_1"
249
  },
250
- {
251
- "key": "meta_id_2",
252
- "value": "meta_value_2"
253
- } ]
254
- } ],
255
- "layout": "TREE",
256
- "type": "BOOL",
257
- "id": "BOOL",
258
- "labels": [ { "label": "Boolean facet" } ]
259
- }');
260
-
261
- $config = new AfsHelperConfiguration();
262
- $config->set_helper_format(AfsHelperFormat::HELPERS);
263
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
264
- $elems = $helper->get_elements();
265
-
266
- $this->assertEquals(1, count($elems));
267
- $metas = $elems[0]->get_meta();
268
- $this->assertEquals(2, count($metas));
269
- for ($i = 1; $i < 2; $i++) {
270
- $res = each($metas);
271
- $this->assertEquals('meta_id_' . $i, $res['key']);
272
- $this->assertEquals('meta_value_' . $i, $res['value']);
273
- }
274
- $this->assertEquals('meta_value_1', $elems[0]->get_meta('meta_id_1'));
275
- $this->assertEquals('meta_value_2', $elems[0]->get_meta('meta_id_2'));
276
- }
277
-
278
- public function testFacetValueWrongMetaRequested()
279
- {
280
- $input = json_decode('{
281
- "afs:t": "FacetTree",
282
- "node": [ {
283
- "key": "false",
284
- "labels": [ { "label": "BAD" } ],
285
- "items": 67,
286
- "meta": [
287
- {
288
- "key": "meta_id_1",
289
- "value": "meta_value_1"
290
- },
291
- {
292
- "key": "meta_id_2",
293
- "value": "meta_value_2"
294
- } ]
295
- } ],
296
- "layout": "TREE",
297
- "type": "BOOL",
298
- "id": "BOOL",
299
- "labels": [ { "label": "Boolean facet" } ]
300
- }');
301
-
302
- $config = new AfsHelperConfiguration();
303
- $config->set_helper_format(AfsHelperFormat::HELPERS);
304
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
305
- $elems = $helper->get_elements();
306
-
307
- $this->assertEquals(1, count($elems));
308
- $metas = $elems[0]->get_meta();
309
- $this->assertEquals(2, count($metas));
310
- try {
311
- $elems[0]->get_meta('unknown_meta_id');
312
- $this->fail('Should have raised an exception on unknown meta id');
313
- } catch (OutOfBoundsException $e) { }
314
- }
315
-
316
- public function testFacetValueMultipleMetaAvailableInArrayFormat()
317
  {
318
  $input = json_decode('{
319
- "afs:t": "FacetTree",
320
- "node": [ {
321
- "key": "false",
322
- "labels": [ { "label": "BAD" } ],
323
- "items": 67,
324
- "meta": [
325
- {
326
- "key": "meta_id_1",
327
- "value": "meta_value_1"
328
  },
329
- {
330
- "key": "meta_id_2",
331
- "value": "meta_value_2"
332
- } ]
333
- } ],
334
- "layout": "TREE",
335
- "type": "BOOL",
336
- "id": "BOOL",
337
- "labels": [ { "label": "Boolean facet" } ]
338
- }');
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
 
340
- $config = new AfsHelperConfiguration();
341
- $helper = new AfsFacetHelper($input, new AfsQuery(), $config);
342
- $elems = $helper->get_elements();
343
 
344
- $this->assertEquals(1, count($elems));
345
- $metas = $elems[0]->meta;
346
- $this->assertEquals(2, count($metas));
347
- for ($i = 1; $i < 2; $i++) {
348
- $res = each($metas);
349
- $this->assertEquals('meta_id_' . $i, $res['key']);
350
- $this->assertEquals('meta_value_' . $i, $res['value']);
351
- }
352
- }
353
-
354
-
355
- public function testFacetElementBuilderOnInterval()
356
- {
357
- $input = json_decode('{
358
- "afs:t": "FacetInterval",
359
- "interval": [
360
- {
361
- "key": "[\"2009-10-02\" .. \"2013-10-01\"[",
362
- "items": 109
363
- },
364
- {
365
- "key": "[\"2010-10-02\" .. \"2013-10-01\"[",
366
- "items": 97
367
- }
368
- ],
369
- "layout": "INTERVAL",
370
- "type": "DATE",
371
- "id": "ADVANCED_INTERVAL_DATE",
372
- "labels": [
373
- {
374
- "label": "Advanced date interval"
375
- }
376
- ]
377
- }');
378
-
379
- $query = new AfsQuery();
380
- $config = new AfsHelperConfiguration();
381
- $config->set_helper_format(AfsHelperFormat::HELPERS);
382
- $facet_mgr = $query->get_facet_manager();
383
- $facet_mgr->add_facet(new AfsFacet('ADVANCED_INTERVAL_DATE', AfsFacetType::DATE_TYPE, AfsFacetLayout::INTERVAL));
384
- $builder = new AfsFacetElementBuilder($facet_mgr, $query);
385
- $elems = $builder->create_elements('ADVANCED_INTERVAL_DATE', $input, $config);
386
-
387
- $this->assertEquals(count($elems), 2);
388
- $elem = reset($elems);
389
- $this->assertEquals($elem->label, '["2009-10-02" .. "2013-10-01"[');
390
- $this->assertEquals('["2009-10-02" .. "2013-10-01"[', $elem->key);
391
- $this->assertEquals($elem->count, 109);
392
- $this->assertFalse($elem->active);
393
- $this->assertTrue($elem->query->has_filter('ADVANCED_INTERVAL_DATE', '["2009-10-02" .. "2013-10-01"['));
394
- $this->assertEquals(count($elem->values), 0);
395
- next($elems);
396
- $elem = current($elems);
397
- $this->assertEquals($elem->label, '["2010-10-02" .. "2013-10-01"[');
398
- $this->assertEquals('["2010-10-02" .. "2013-10-01"[', $elem->key);
399
- $this->assertEquals($elem->count, 97);
400
- $this->assertFalse($elem->active);
401
- $this->assertTrue($elem->query->has_filter('ADVANCED_INTERVAL_DATE', '["2010-10-02" .. "2013-10-01"['));
402
- $this->assertEquals(count($elem->values), 0);
403
- }
404
-
405
- public function testFacetElementBuilderOnNode()
406
- {
407
- $input = json_decode('{
408
- "afs:t": "FacetTree",
409
- "node": [
410
- {
411
- "key": "false",
412
- "labels": [
413
- {
414
- "label": "BAD"
415
- }
416
- ],
417
- "items": 67
418
- },
419
- {
420
- "key": "true",
421
- "labels": [
422
- {
423
- "label": "GOOD"
424
- }
425
- ],
426
- "items": 133
427
- }
428
- ],
429
- "layout": "TREE",
430
- "type": "BOOL",
431
- "id": "BOOL",
432
- "labels": [
433
- {
434
- "label": "Boolean facet"
435
- }
436
- ]
437
- }');
438
-
439
- $query = new AfsQuery();
440
- $config = new AfsHelperConfiguration();
441
- $config->set_helper_format(AfsHelperFormat::HELPERS);
442
- $facet_mgr = $query->get_facet_manager();
443
- $facet_mgr->add_facet(new AfsFacet('BOOL', AfsFacetType::BOOL_TYPE));
444
- $builder = new AfsFacetElementBuilder($facet_mgr, $query);
445
- $elems = $builder->create_elements('BOOL', $input, $config);
446
-
447
- $this->assertEquals(count($elems), 2);
448
- $elem = reset($elems);
449
- $this->assertEquals($elem->label, 'BAD');
450
- $this->assertEquals($elem->count, 67);
451
- $this->assertFalse($elem->active);
452
- $this->assertTrue($elem->query->has_filter('BOOL', 'false'));
453
- $this->assertEquals(count($elem->values), 0);
454
- next($elems);
455
- $elem = current($elems);
456
- $this->assertEquals($elem->label, 'GOOD');
457
- $this->assertEquals($elem->count, 133);
458
- $this->assertFalse($elem->active);
459
- $this->assertTrue($elem->query->has_filter('BOOL', 'true'));
460
- $this->assertEquals(count($elem->values), 0);
461
- }
462
-
463
- public function testFacetElementBuilderOnTreeNode()
464
- {
465
- $input = json_decode('{
466
- "afs:t": "FacetTree",
467
- "node": [
468
- {
469
- "key": "2010",
470
- "labels": [
471
- {
472
- "lang": "FR",
473
- "region": "FR",
474
- "label": "2010"
475
- }
476
- ],
477
- "items": 24,
478
- "node": [
479
- {
480
- "key": "2010-03",
481
- "labels": [
482
- {
483
- "lang": "FR",
484
- "region": "FR",
485
- "label": "03"
486
- }
487
- ],
488
- "items": 14,
489
- "node": [
490
- {
491
- "key": "2010-03-07",
492
- "labels": [
493
- {
494
- "lang": "FR",
495
- "region": "FR",
496
- "label": "07"
497
- }
498
- ],
499
- "items": 4
500
- }
501
- ]
502
- }
503
- ]
504
- }
505
- ],
506
- "layout": "TREE",
507
- "type": "DATE",
508
- "id": "TREE_DATE",
509
- "labels": [
510
- {
511
- "label": "Tree date"
512
- }
513
- ]
514
- }');
515
-
516
- $query = new AfsQuery();
517
- $config = new AfsHelperConfiguration();
518
- $config->set_helper_format(AfsHelperFormat::HELPERS);
519
- $facet_mgr = $query->get_facet_manager();
520
- $facet_mgr->add_facet(new AfsFacet('TREE_DATE', AfsFacetType::DATE_TYPE));
521
- $builder = new AfsFacetElementBuilder($facet_mgr, $query);
522
- $elems = $builder->create_elements('TREE_DATE', $input, $config);
523
-
524
- $this->assertEquals(count($elems), 1);
525
- $elem = reset($elems);
526
- $this->assertEquals($elem->label, '2010');
527
- $this->assertEquals($elem->count, 24);
528
- $this->assertFalse($elem->active);
529
- $this->assertTrue($elem->query->has_filter('TREE_DATE', '"2010"'));
530
- $this->assertEquals(count($elem->values), 1);
531
- $elem = $elem->values[0];
532
- $this->assertEquals($elem->label, '03');
533
- $this->assertEquals($elem->count, 14);
534
- $this->assertFalse($elem->active);
535
- $this->assertTrue($elem->query->has_filter('TREE_DATE', '"2010-03"'));
536
- $this->assertEquals(count($elem->values), 1);
537
- $elem = $elem->values[0];
538
- $this->assertEquals($elem->label, '07');
539
- $this->assertEquals($elem->count, 4);
540
- $this->assertFalse($elem->active);
541
- $this->assertTrue($elem->query->has_filter('TREE_DATE', '"2010-03-07"'));
542
- $this->assertEquals(count($elem->values), 0);
543
- }
544
-
545
- public function testFacetElementBuilderReplaceFilter()
546
- {
547
- $input = json_decode('{
548
- "afs:t": "FacetTree",
549
- "node": [
550
- {
551
- "key": "false",
552
- "labels": [
553
- {
554
- "label": "BAD"
555
- }
556
- ],
557
- "items": 67
558
- },
559
- {
560
- "key": "true",
561
- "labels": [
562
- {
563
- "label": "GOOD"
564
- }
565
- ],
566
- "items": 133
567
- }
568
- ],
569
- "layout": "TREE",
570
- "type": "BOOL",
571
- "id": "BOOL",
572
- "labels": [
573
- {
574
- "label": "Boolean facet"
575
- }
576
- ]
577
- }');
578
-
579
- $query = new AfsQuery();
580
- $query = $query->add_filter('BOOL', 'false');
581
- $config = new AfsHelperConfiguration();
582
- $config->set_helper_format(AfsHelperFormat::HELPERS);
583
- $facet_mgr = $query->get_facet_manager();
584
- $facet_mgr->add_facet(new AfsFacet('BOOL', AfsFacetType::BOOL_TYPE, AfsFacetLayout::TREE, AfsFacetMode::SINGLE_MODE));
585
- $builder = new AfsFacetElementBuilder($facet_mgr, $query);
586
- $elems = $builder->create_elements('BOOL', $input, $config);
587
-
588
- $this->assertEquals(count($elems), 2);
589
- $elem = reset($elems);
590
- $this->assertEquals($elem->label, 'BAD');
591
- $this->assertEquals($elem->count, 67);
592
- $this->assertTrue($elem->active);
593
- $this->assertFalse($elem->query->has_filter('BOOL', 'false'));
594
- $this->assertEquals(count($elem->values), 0);
595
- next($elems);
596
- $elem = current($elems);
597
- $this->assertEquals($elem->label, 'GOOD');
598
- $this->assertEquals($elem->count, 133);
599
- $this->assertFalse($elem->active);
600
- $this->assertTrue($elem->query->has_filter('BOOL', 'true'));
601
- $this->assertFalse($elem->query->has_filter('BOOL', 'false'));
602
- $this->assertEquals(count($elem->values), 0);
603
- }
604
-
605
- public function testFacetElementBuilderAddFilter()
606
- {
607
- $input = json_decode('{
608
- "afs:t": "FacetTree",
609
- "node": [
610
- {
611
- "key": "false",
612
- "labels": [
613
- {
614
- "label": "BAD"
615
- }
616
- ],
617
- "items": 67
618
- },
619
- {
620
- "key": "true",
621
- "labels": [
622
- {
623
- "label": "GOOD"
624
- }
625
- ],
626
- "items": 133
627
- }
628
- ],
629
- "layout": "TREE",
630
- "type": "BOOL",
631
- "id": "BOOL",
632
- "labels": [
633
- {
634
- "label": "Boolean facet"
635
- }
636
- ]
637
- }');
638
-
639
- $query = new AfsQuery();
640
- $query = $query->add_filter('BOOL', 'false');
641
-
642
- $config = new AfsHelperConfiguration();
643
- $config->set_helper_format(AfsHelperFormat::HELPERS);
644
- $facet_mgr = $query->get_facet_manager();
645
- $facet_mgr->add_facet(new AfsFacet('BOOL', AfsFacetType::BOOL_TYPE, AfsFacetLayout::TREE, AfsFacetMode::OR_MODE));
646
- $builder = new AfsFacetElementBuilder($facet_mgr, $query);
647
- $elems = $builder->create_elements('BOOL', $input, $config);
648
-
649
- $this->assertEquals(count($elems), 2);
650
- $elem = reset($elems);
651
- $this->assertEquals($elem->label, 'BAD');
652
- $this->assertEquals($elem->count, 67);
653
- $this->assertTrue($elem->active);
654
- $this->assertFalse($elem->query->has_filter('BOOL', 'false'));
655
- $this->assertEquals(count($elem->values), 0);
656
- next($elems);
657
- $elem = current($elems);
658
- $this->assertEquals($elem->label, 'GOOD');
659
- $this->assertEquals($elem->count, 133);
660
- $this->assertFalse($elem->active);
661
- $this->assertTrue($elem->query->has_filter('BOOL', 'true'));
662
- $this->assertTrue($elem->query->has_filter('BOOL', 'false'));
663
- $this->assertEquals(count($elem->values), 0);
664
- }
665
-
666
- public function testFacetWithoutLabel()
667
- {
668
- $input = json_decode('{
669
- "afs:t": "FacetTree",
670
- "node": [
671
- {
672
- "key": "false",
673
- "labels": [
674
- {
675
- "label": "BAD"
676
- }
677
- ],
678
- "items": 67
679
- },
680
- {
681
- "key": "true",
682
- "labels": [
683
- {
684
- "label": "GOOD"
685
- }
686
- ],
687
- "items": 133
688
- }
689
- ],
690
- "layout": "TREE",
691
- "type": "BOOL",
692
- "id": "BOOOOL"
693
- }');
694
-
695
- $config = new AfsHelperConfiguration();
696
- $config->set_helper_format(AfsHelperFormat::HELPERS);
697
- $query = new AfsQuery();
698
- $facet = new AfsFacetHelper($input, $query, $config);
699
-
700
- $this->assertEquals('BOOOOL', $facet->get_label());
701
- }
702
- }
1
  <?php ob_start();
2
+ require_once "AFS/SEARCH/afs_header_helper.php";
 
 
3
 
4
+ class HeaderHelperTest extends PHPUnit_Framework_TestCase
5
  {
6
+ public function testError()
7
  {
8
  $input = json_decode('{
9
+ "header": {
10
+ "query": {
11
+ "userId": "?",
12
+ "sessionId": "?",
13
+ "date": "2014-01-10T16:04:32+0000",
14
+ "queryParam": [ ],
15
+ "mainCtx": {
16
+ "textQuery": ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  },
18
+ "textQuery": ""
19
+ },
20
+ "user": {
21
+ "requestMethod": "GET",
22
+ "agent": "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0 Iceweasel/24.0",
23
+ "address": "10.61.8.236",
24
+ "output": {
25
+ "format": "JSON",
26
+ "encoding": "gzip",
27
+ "charset": "UTF-8"
28
+ }
29
+ },
30
+ "info": { },
31
+ "error": {
32
+ "message": [
33
+ "errorMsg"
34
+ ]
35
+ }
36
+ }
37
+ }');
38
+ $header = new AfsHeaderHelper($input->header);
39
+ $this->assertTrue($header->in_error());
40
+ $this->assertEquals('errorMsg', $header->get_error());
41
+ }
42
+
43
+ public function testNotInError()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  {
45
  $input = json_decode('{
46
+ "header": {
47
+ "query": {
48
+ "userId": "e3eddaff-5a3d-4807-8fb2-09e13baf78e1",
49
+ "sessionId": "4c0f28d1-bb67-469b-86bf-54f83432914e",
50
+ "date": "2014-01-10T16:17:44+0000",
51
+ "queryParam": [ ],
52
+ "mainCtx": {
53
+ "textQuery": ""
 
54
  },
55
+ "textQuery": ""
56
+ },
57
+ "user": {
58
+ "requestMethod": "GET",
59
+ "agent": "Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0 Iceweasel/24.0",
60
+ "address": "10.61.8.236",
61
+ "output": {
62
+ "format": "JSON",
63
+ "encoding": "gzip",
64
+ "charset": "UTF-8"
65
+ }
66
+ },
67
+ "performance": {
68
+ "durationMs": 204
69
+ },
70
+ "info": { }
71
+ }
72
+ }');
73
+ $header = new AfsHeaderHelper($input->header);
74
+ $this->assertFalse($header->in_error());
75
+ $this->assertEquals('e3eddaff-5a3d-4807-8fb2-09e13baf78e1', $header->get_user_id());
76
+ $this->assertEquals('4c0f28d1-bb67-469b-86bf-54f83432914e', $header->get_session_id());
77
+ $this->assertEquals(204, $header->get_duration());
78
+ }
79
+ }
80
 
 
 
 
81
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
lib/antidot/AFS/SEARCH/TEST/queryOrchestrationTest.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ require_once 'AFS/SEARCH/afs_search.php';
3
+ require_once 'COMMON/php-SAI/lib/CurlStub.php';
4
+ require_once 'AIF/afs_user_authentication.php';
5
+
6
+ class QueryOrchestrationTest extends PHPUnit_Framework_TestCase
7
+ {
8
+ public function testAutoSpellcheckOrchestration()
9
+ {
10
+ $query = AfsQuery::create_from_parameters(array("query" => "topic", "mycustomparameter" => "mycustomvalue"));
11
+ $curlConnector = new SAI_CurlStub();
12
+ $mockBaseUrl = "localhost";
13
+ $aboutRequestOpts = array(CURLOPT_URL => "http://$mockBaseUrl/bo-ws/about");
14
+ $aboutResponse = <<<JSON
15
+ {
16
+ "x:type":"ws.response",
17
+ "query":{
18
+ "x:type":"ws.response.query",
19
+ "parameters":{
20
+ "x:type":"collection",
21
+ "x:values":[
22
+
23
+ ]
24
+ },
25
+ "properties":{
26
+ "x:type":"x:dynamic"
27
+ }
28
+ },
29
+ "result":{
30
+ "x:type":"bows.about",
31
+ "boWsVersion":{
32
+ "x:type":"AfsVersion",
33
+ "build":"3eaebfd1f1fe261780347cbc35bfbd65d613575e",
34
+ "gen":"7.6",
35
+ "major":"4",
36
+ "minor":"0",
37
+ "motto":"Pink Dolphin"
38
+ },
39
+ "copyright":"Copyright (C) 1999-2013 Antidot"
40
+ }
41
+ }
42
+ JSON;
43
+ $response = <<<JSON
44
+ {"header":{"query":{"userId":"b756a0de-e252-426f-8a24-66c4bbb96aa0","sessionId":"188ff0e1-5fd9-4a06-bab5-24ade9cab206","date":"2015-10-14T14:25:22+0000","queryParam":[{"name":"afs:service","value":"42"},{"name":"afs:status","value":"beta"},{"name":"afs:query","value":"vet"},{"name":"afs:output","value":"json,2"},{"name":"afs:facetDefault","value":"replies=100"},{"name":"afs:replies","value":"20"},{"name":"afs:sort","value":"disposite, DESC and afs:relevance, DESC"}],"mainCtx":{"textQuery":"vet"},"textQuery":"vet"},"user":{"requestMethod":"GET","agent":"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.90 Safari\/537.36","address":"172.17.42.1","output":{"format":"JSON","encoding":"gzip","charset":"UTF-8"}},"performance":{"durationMs":7},"info":{},"orchestrationInfo":{"autoSpellchecker":{"triggered":true}}},"replySet":[{"meta":{"uri":"Catalog","totalItems":1,"totalItemsIsExact":true,"pageItems":1,"firstPageItem":1,"lastPageItem":1,"durationMs":1,"firstPaFId":3,"lastPaFId":3,"producer":"SEARCH"},"facets":{"facet":[{"afs:t":"FacetTree","node":[{"key":"fr","labels":[{"label":"Français"}],"items":1}],"layout":"TREE","type":"STRING","id":"afs:lang","labels":[{"label":"Language"}]}]},"content":{"reply":[{"docId":4,"uri":"3612531066812_fr","title":[{"afs:t":"KwicMatch","match":"vert"}],"relevance":{"rank":1},"clientData":[{"contents":"<product xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" id=\"3612531066812\" xml:lang=\"fr\" autocomplete=\"on\" xsi:schemaLocation=\"http:\/\/ref.antidot.net\/store\/afs# http:\/\/ref.antidot.net\/store\/v4.1\/xsd\/product.xsd\"><name xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\">vert<\/name><\/product>","id":"main","mimeType":"text\/xml"}]}]}},{"meta":{"uri":"afs:spellcheck","totalItems":1,"totalItemsIsExact":true,"pageItems":1,"firstPageItem":1,"lastPageItem":1,"durationMs":0,"firstPaFId":1,"lastPaFId":1,"producer":"SPELLCHECK"},"content":{"reply":[{"docId":1,"uri":"Catalog","title":[{"afs:t":"KwicMatch","match":"vert"}],"abstract":[{"afs:t":"KwicString","text":"vert"}],"suggestion":[{"items":[{"match":{"text":"vert","src":"vet"}}]}]}]}}]}
45
+ JSON;
46
+
47
+
48
+ //Set BO response for AboutConnector
49
+ $curlConnector->setResponse($aboutResponse, $aboutRequestOpts);
50
+ //Set response for query
51
+ $curlConnector->setResponse($response);
52
+ $search = new AfsSearch($mockBaseUrl, '71003', AfsServiceStatus::STABLE, $curlConnector);
53
+ $search->set_query($query);
54
+ $coder = new AfsQueryCoder();
55
+ $search->set_query_coder($coder);
56
+ $helper = $search->execute($query);
57
+ $this->assertEquals($helper->is_orchestrated(), true);
58
+ $this->assertEquals($helper->get_orchestration_type(), OrchestrationType::AUTOSPELLCHECKER);
59
+ }
60
+
61
+ public function testFallbackToOptionalOrchestration()
62
+ {
63
+ $query = AfsQuery::create_from_parameters(array("query" => "topic", "mycustomparameter" => "mycustomvalue"));
64
+ $curlConnector = new SAI_CurlStub();
65
+ $mockBaseUrl = "localhost";
66
+ $aboutRequestOpts = array(CURLOPT_URL => "http://$mockBaseUrl/bo-ws/about");
67
+ $aboutResponse = <<<JSON
68
+ {
69
+ "x:type":"ws.response",
70
+ "query":{
71
+ "x:type":"ws.response.query",
72
+ "parameters":{
73
+ "x:type":"collection",
74
+ "x:values":[
75
+
76
+ ]
77
+ },
78
+ "properties":{
79
+ "x:type":"x:dynamic"
80
+ }
81
+ },
82
+ "result":{
83
+ "x:type":"bows.about",
84
+ "boWsVersion":{
85
+ "x:type":"AfsVersion",
86
+ "build":"3eaebfd1f1fe261780347cbc35bfbd65d613575e",
87
+ "gen":"7.6",
88
+ "major":"4",
89
+ "minor":"0",
90
+ "motto":"Pink Dolphin"
91
+ },
92
+ "copyright":"Copyright (C) 1999-2013 Antidot"
93
+ }
94
+ }
95
+ JSON;
96
+ $response = <<<JSON
97
+
98
+ {"header":{"query":{"userId":"b756a0de-e252-426f-8a24-66c4bbb96aa0","sessionId":"188ff0e1-5fd9-4a06-bab5-24ade9cab206","date":"2015-10-14T14:24:09+0000","queryParam":[{"name":"afs:service","value":"42"},{"name":"afs:status","value":"beta"},{"name":"afs:query","value":"vert bleu"},{"name":"afs:output","value":"json,2"},{"name":"afs:facetDefault","value":"replies=100"},{"name":"afs:replies","value":"20"},{"name":"afs:sort","value":"disposite, DESC and afs:relevance, DESC"}],"mainCtx":{"textQuery":"vert bleu"},"textQuery":"vert bleu"},"user":{"requestMethod":"GET","agent":"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.90 Safari\/537.36","address":"172.17.42.1","output":{"format":"JSON","encoding":"gzip","charset":"UTF-8"}},"performance":{"durationMs":5},"info":{},"orchestrationInfo":{"fallbackToOptional":{"triggered":true}}},"replySet":[{"meta":{"uri":"Catalog","totalItems":2,"totalItemsIsExact":true,"pageItems":2,"firstPageItem":1,"lastPageItem":2,"durationMs":0,"firstPaFId":3,"lastPaFId":3,"producer":"SEARCH"},"facets":{"facet":[{"afs:t":"FacetTree","node":[{"key":"fr","labels":[{"label":"Français"}],"items":2}],"layout":"TREE","type":"STRING","id":"afs:lang","labels":[{"label":"Language"}]}]},"content":{"reply":[{"docId":5,"uri":"36125310668123_fr","title":[{"afs:t":"KwicMatch","match":"bleu"}],"relevance":{"rank":1},"clientData":[{"contents":"<product xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" id=\"36125310668123\" xml:lang=\"fr\" autocomplete=\"on\" xsi:schemaLocation=\"http:\/\/ref.antidot.net\/store\/afs# http:\/\/ref.antidot.net\/store\/v4.1\/xsd\/product.xsd\"><name xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\">bleu<\/name><\/product>","id":"main","mimeType":"text\/xml"}]},{"docId":4,"uri":"3612531066812_fr","title":[{"afs:t":"KwicMatch","match":"vert"}],"relevance":{"rank":2},"clientData":[{"contents":"<product xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" id=\"3612531066812\" xml:lang=\"fr\" autocomplete=\"on\" xsi:schemaLocation=\"http:\/\/ref.antidot.net\/store\/afs# http:\/\/ref.antidot.net\/store\/v4.1\/xsd\/product.xsd\"><name xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\">vert<\/name><\/product>","id":"main","mimeType":"text\/xml"}]}]}}]}
99
+ JSON;
100
+
101
+
102
+ //Set BO response for AboutConnector
103
+ $curlConnector->setResponse($aboutResponse, $aboutRequestOpts);
104
+ //Set response for query
105
+ $curlConnector->setResponse($response);
106
+ $search = new AfsSearch($mockBaseUrl, '71003', AfsServiceStatus::STABLE, $curlConnector);
107
+ $search->set_query($query);
108
+ $coder = new AfsQueryCoder();
109
+ $search->set_query_coder($coder);
110
+ $helper = $search->execute($query);
111
+ $this->assertEquals($helper->is_orchestrated(), true);
112
+ $this->assertEquals($helper->get_orchestration_type(), OrchestrationType::FALLBACKTOOPTIONAL);
113
+ }
114
+
115
+ /**
116
+ * @expectedException Exception
117
+ */
118
+ public function testNotOrchestratedRequest()
119
+ {
120
+ $query = AfsQuery::create_from_parameters(array("query" => "topic", "mycustomparameter" => "mycustomvalue"));
121
+ $curlConnector = new SAI_CurlStub();
122
+ $mockBaseUrl = "localhost";
123
+ $aboutRequestOpts = array(CURLOPT_URL => "http://$mockBaseUrl/bo-ws/about");
124
+ $aboutResponse = <<<JSON
125
+ {
126
+ "x:type":"ws.response",
127
+ "query":{
128
+ "x:type":"ws.response.query",
129
+ "parameters":{
130
+ "x:type":"collection",
131
+ "x:values":[
132
+
133
+ ]
134
+ },
135
+ "properties":{
136
+ "x:type":"x:dynamic"
137
+ }
138
+ },
139
+ "result":{
140
+ "x:type":"bows.about",
141
+ "boWsVersion":{
142
+ "x:type":"AfsVersion",
143
+ "build":"3eaebfd1f1fe261780347cbc35bfbd65d613575e",
144
+ "gen":"7.6",
145
+ "major":"4",
146
+ "minor":"0",
147
+ "motto":"Pink Dolphin"
148
+ },
149
+ "copyright":"Copyright (C) 1999-2013 Antidot"
150
+ }
151
+ }
152
+ JSON;
153
+ $response = <<<JSON
154
+
155
+
156
+ {"header":{"query":{"userId":"b756a0de-e252-426f-8a24-66c4bbb96aa0","sessionId":"dd33b13c-dd9f-49a1-abe1-95e89140fb40","date":"2015-10-14T15:12:00+0000","queryParam":[{"name":"afs:service","value":"42"},{"name":"afs:status","value":"beta"},{"name":"afs:query","value":"vert"},{"name":"afs:output","value":"json,2"},{"name":"afs:facetDefault","value":"replies=100"},{"name":"afs:replies","value":"20"},{"name":"afs:sort","value":"disposite, DESC and afs:relevance, DESC"}],"mainCtx":{"textQuery":"vert"},"textQuery":"vert"},"user":{"requestMethod":"GET","agent":"Mozilla\/5.0 (X11; Linux x86_64) AppleWebKit\/537.36 (KHTML, like Gecko) Chrome\/42.0.2311.90 Safari\/537.36","address":"172.17.42.1","output":{"format":"JSON","encoding":"gzip","charset":"UTF-8"}},"performance":{"durationMs":5},"info":{}},"replySet":[{"meta":{"uri":"Catalog","totalItems":1,"totalItemsIsExact":true,"pageItems":1,"firstPageItem":1,"lastPageItem":1,"durationMs":1,"firstPaFId":3,"lastPaFId":3,"producer":"SEARCH"},"facets":{"facet":[{"afs:t":"FacetTree","node":[{"key":"fr","labels":[{"label":"Français"}],"items":1}],"layout":"TREE","type":"STRING","id":"afs:lang","labels":[{"label":"Language"}]}]},"content":{"reply":[{"docId":4,"uri":"3612531066812_fr","title":[{"afs:t":"KwicMatch","match":"vert"}],"relevance":{"rank":1},"clientData":[{"contents":"<product xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\" id=\"3612531066812\" xml:lang=\"fr\" autocomplete=\"on\" xsi:schemaLocation=\"http:\/\/ref.antidot.net\/store\/afs# http:\/\/ref.antidot.net\/store\/v4.1\/xsd\/product.xsd\"><name xmlns=\"http:\/\/ref.antidot.net\/store\/afs#\">vert<\/name><\/product>","id":"main","mimeType":"text\/xml"}]}]}}]}
157
+ JSON;
158
+
159
+
160
+ //Set BO response for AboutConnector
161
+ $curlConnector->setResponse($aboutResponse, $aboutRequestOpts);
162
+ //Set response for query
163
+ $curlConnector->setResponse($response);
164
+ $search = new AfsSearch($mockBaseUrl, '71003', AfsServiceStatus::STABLE, $curlConnector);
165
+ $search->set_query($query);
166
+ $coder = new AfsQueryCoder();
167
+ $search->set_query_coder($coder);
168
+ $helper = $search->execute($query);
169
+ $this->assertEquals($helper->is_orchestrated(), false);
170
+
171
+ $helper->get_orchestration_type();
172
+ }
173
+ }
lib/antidot/AFS/SEARCH/afs_facet_helper.php CHANGED
@@ -37,7 +37,7 @@ class AfsFacetHelper extends AfsHelperBase
37
  $this->layout = $facet->layout;
38
  $this->type = $facet->type;
39
  if (property_exists($facet, 'sticky')
40
- && 0 == strcmp('true', $facet->sticky)) {
41
  $this->sticky = true;
42
  } else {
43
  $this->sticky = false;
@@ -155,7 +155,7 @@ class AfsFacetHelper extends AfsHelperBase
155
  public function format()
156
  {
157
  return array('label' => $this->get_label(),
158
- 'values' => $this->get_elements());
159
  }
160
 
161
  }
@@ -236,7 +236,7 @@ class AfsFacetValueHelper extends AfsHelperBase
236
  * @li @c label: label of the facet value,
237
  * @li @c key: key of the facet value,
238
  * @li @c count: number of element of the facet value,
239
- * @li @c active: state of the facet value: true when this facet value is
240
  * used in current query, false otherwise,
241
  * @li @c query: query associated to the facet value (see @a query property
242
  * for more details),
@@ -246,7 +246,7 @@ class AfsFacetValueHelper extends AfsHelperBase
246
  * @li @c meta: key-value pairs of meta data identifiers and values.
247
  *
248
  * @remark: When helpers are used to create such facet value, if @a link is
249
- * generated from @a query, then the query is no more necessary and not
250
  * provided. So one of @c query and @c link is null.
251
  *
252
  * @return array filled with key and values.
@@ -349,7 +349,7 @@ class AfsFacetElementBuilder
349
  $link = null;
350
  }
351
  $elements[] = new AfsFacetValueHelper($label, $value_id, $elem->items,
352
- $meta, $active, $query, $link, $children);
353
 
354
  }
355
  return $elements;
@@ -404,3 +404,5 @@ class AfsFacetElementBuilder
404
  return $result;
405
  }
406
  }
 
 
37
  $this->layout = $facet->layout;
38
  $this->type = $facet->type;
39
  if (property_exists($facet, 'sticky')
40
+ && 0 == strcmp('true', $facet->sticky)) {
41
  $this->sticky = true;
42
  } else {
43
  $this->sticky = false;
155
  public function format()
156
  {
157
  return array('label' => $this->get_label(),
158
+ 'values' => $this->get_elements());
159
  }
160
 
161
  }
236
  * @li @c label: label of the facet value,
237
  * @li @c key: key of the facet value,
238
  * @li @c count: number of element of the facet value,
239
+ * @li @c active: state of the facet value: true when this facet value is
240
  * used in current query, false otherwise,
241
  * @li @c query: query associated to the facet value (see @a query property
242
  * for more details),
246
  * @li @c meta: key-value pairs of meta data identifiers and values.
247
  *
248
  * @remark: When helpers are used to create such facet value, if @a link is
249
+ * generated from @a query, then the query is no more necessary and not
250
  * provided. So one of @c query and @c link is null.
251
  *
252
  * @return array filled with key and values.
349
  $link = null;
350
  }
351
  $elements[] = new AfsFacetValueHelper($label, $value_id, $elem->items,
352
+ $meta, $active, $query, $link, $children);
353
 
354
  }
355
  return $elements;
404
  return $result;
405
  }
406
  }
407
+
408
+
lib/antidot/AFS/SEARCH/afs_header_helper.php CHANGED
@@ -1,5 +1,6 @@
1
  <?php
2
  require_once 'COMMON/afs_helper_base.php';
 
3
 
4
  /** @brief Helper to retrieve useful information from AFS search engine reply header.
5
  */
@@ -87,6 +88,48 @@ class AfsHeaderHelper extends AfsHelperBase
87
  }
88
  return null;
89
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  }
91
 
92
 
1
  <?php
2
  require_once 'COMMON/afs_helper_base.php';
3
+ require_once 'AFS/orchestration_type.php';
4
 
5
  /** @brief Helper to retrieve useful information from AFS search engine reply header.
6
  */
88
  }
89
  return null;
90
  }
91
+
92
+ /**
93
+ * @brief get request orchestration type (AutoSpellchecker or fallbackToOptional)
94
+ * @return OrchestrationType::(AutoSpellchecker or fallbackToOptional)
95
+ * @throws Exception
96
+ * @throws OrchestrationTypeException
97
+ */
98
+ public function get_orchestration_type()
99
+ {
100
+ if ($this->is_orchestrated())
101
+ {
102
+ if (property_exists($this->header->orchestrationInfo, 'autoSpellchecker'))
103
+ {
104
+ return OrchestrationType::AUTOSPELLCHECKER;
105
+ }
106
+ elseif (property_exists($this->header->orchestrationInfo, 'fallbackToOptional'))
107
+ {
108
+ return OrchestrationType::FALLBACKTOOPTIONAL;
109
+ }
110
+ else
111
+ {
112
+ throw new OrchestrationTypeException('Unknown orchestration type');
113
+ }
114
+ }
115
+ else
116
+ {
117
+ throw new Exception('This request is not orchestrated');
118
+ }
119
+ }
120
+
121
+ /**
122
+ * @return true if this request is a result of orchestration
123
+ */
124
+ public function is_orchestrated()
125
+ {
126
+ return property_exists($this->header, 'orchestrationInfo');
127
+ }
128
+ }
129
+
130
+ class OrchestrationTypeException extends Exception
131
+ {
132
+
133
  }
134
 
135
 
lib/antidot/AFS/SEARCH/afs_response_helper.php CHANGED
@@ -308,6 +308,25 @@ class AfsResponseHelper extends AfsResponseHelperBase
308
  {
309
  return $this->header->get_query_parameter($key);
310
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
311
  /** @} */
312
 
313
  }
308
  {
309
  return $this->header->get_query_parameter($key);
310
  }
311
+
312
+ /**
313
+ * @brief get request orchestration type (AutoSpellchecker or fallbackToOptional)
314
+ * @return OrchestrationType::(AutoSpellchecker or fallbackToOptional)
315
+ * @throws Exception
316
+ * @throws OrchestrationTypeException
317
+ */
318
+ public function get_orchestration_type()
319
+ {
320
+ return $this->header->get_orchestration_type();
321
+ }
322
+
323
+ /**
324
+ * @return true if this request is a result of orchestration
325
+ */
326
+ public function is_orchestrated()
327
+ {
328
+ return $this->header->is_orchestrated();
329
+ }
330
  /** @} */
331
 
332
  }
lib/antidot/AFS/orchestration_type.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class OrchestrationType extends BasicEnum
4
+ {
5
+ private static $instance = null;
6
+
7
+ static public function check_value($value, $msg=null)
8
+ {
9
+ if (is_null(self::$instance))
10
+ {
11
+ self::$instance = new self();
12
+ }
13
+ BasicEnum::check_val(self::$instance, $value, $msg);
14
+ }
15
+
16
+ const AUTOSPELLCHECKER = 'autoSpellchecker';
17
+ const FALLBACKTOOPTIONAL = 'fallbackToOptional';
18
+ }
lib/antidot/AIF/TEST/authenticationTest.php CHANGED
@@ -16,12 +16,7 @@ class AuthenticationTest extends PHPUnit_Framework_TestCase
16
  $this->assertEquals(array('Authorization' => 'Basic ' . base64_encode('foo:bar')), $auth->format_as_header_param());
17
  }
18
 
19
- public function testTokenAuthenticationFormat76()
20
- {
21
- $auth = new AfsTokenAuthentication('foo');
22
- $this->assertEquals(array('afs:login' => 'login://foo@SSO'), $auth->format_as_url_param('7.6'));
23
- }
24
- public function testTokenAuthenticationFormatNew()
25
  {
26
  $auth = new AfsTokenAuthentication('foo');
27
  $this->assertEquals(array('access-token' => 'foo'), $auth->format_as_header_param());
16
  $this->assertEquals(array('Authorization' => 'Basic ' . base64_encode('foo:bar')), $auth->format_as_header_param());
17
  }
18
 
19
+ public function testTokenAuthenticationFormatNew()
 
 
 
 
 
20
  {
21
  $auth = new AfsTokenAuthentication('foo');
22
  $this->assertEquals(array('access-token' => 'foo'), $auth->format_as_header_param());
lib/antidot/AIF/TEST/pafConnectorTest.php CHANGED
@@ -1,17 +1,17 @@
1
  <?php ob_start();
2
  require_once('AIF/afs_paf_connector.php');
 
3
 
4
 
5
  class PafConnectorTest extends PHPUnit_Framework_TestCase
6
  {
7
  public function testOneShot()
8
  {
9
- return;
10
  $auth = new AfsUserAuthentication('antidot', 'change_on_install', AFS_AUTH_ANTIDOT);
11
- $service = new AfsService(42);
12
  $content = '<?xml version="1.0"?><root><uri>http://generated.doc.<?php ob_start();</uri><title>Generated doc</title><content>Generated content</content></root>';
13
  $doc = new AfsDocument($content);
14
- $connector = new AfsPafConnector('quigon', $service, 'TestPaF', $auth);
15
  $result = $connector->upload_doc($doc);
16
  $this->assertTrue($result->has_result());
17
  $this->assertFalse($result->in_error());
1
  <?php ob_start();
2
  require_once('AIF/afs_paf_connector.php');
3
+ require_once('AIF/afs_user_authentication.php');
4
 
5
 
6
  class PafConnectorTest extends PHPUnit_Framework_TestCase
7
  {
8
  public function testOneShot()
9
  {
 
10
  $auth = new AfsUserAuthentication('antidot', 'change_on_install', AFS_AUTH_ANTIDOT);
11
+ $service = new AfsService(42, AfsServiceStatus::BETA);
12
  $content = '<?xml version="1.0"?><root><uri>http://generated.doc.<?php ob_start();</uri><title>Generated doc</title><content>Generated content</content></root>';
13
  $doc = new AfsDocument($content);
14
+ $connector = new AfsPafConnector('kaio:8085', $service, 'Catalog', $auth);
15
  $result = $connector->upload_doc($doc);
16
  $this->assertTrue($result->has_result());
17
  $this->assertFalse($result->in_error());
lib/antidot/AIF/afs_about_connector.php CHANGED
@@ -7,7 +7,7 @@ require_once 'AIF/afs_bows_information.php';
7
  /** @brief Simple connector to retrieve AFS Back Office information. */
8
  class AfsAboutConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterface
9
  {
10
- public function __construct($host, AfsService $service=null, $scheme=AFS_SCHEME_HTTP, SAI_CurlInterface $curlConnector=null)
11
  {
12
  parent::__construct($host, $service, $scheme, $curlConnector);
13
  }
7
  /** @brief Simple connector to retrieve AFS Back Office information. */
8
  class AfsAboutConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterface
9
  {
10
+ public function __construct($host, AfsService $service=null, $scheme=AFS_SCHEME_HTTP, SAI_CurlInterface $curlConnector=null, $params=null)
11
  {
12
  parent::__construct($host, $service, $scheme, $curlConnector);
13
  }
lib/antidot/AIF/afs_authentication.php CHANGED
@@ -24,14 +24,14 @@ interface AfsAuthentication
24
  * version information.
25
  * @return string representing authentication.
26
  */
27
- public function format_as_url_param($version=null);
28
 
29
  /** @brief Formats authentication parameters.
30
  * @param $version [in] Format string representation according to provided
31
  * version information.
32
  * @return array representing authentication.
33
  */
34
- public function format_as_header_param($version=null);
35
  }
36
 
37
 
24
  * version information.
25
  * @return string representing authentication.
26
  */
27
+ public function format_as_url_param();
28
 
29
  /** @brief Formats authentication parameters.
30
  * @param $version [in] Format string representation according to provided
31
  * version information.
32
  * @return array representing authentication.
33
  */
34
+ public function format_as_header_param();
35
  }
36
 
37
 
lib/antidot/AIF/afs_bows_connector.php CHANGED
@@ -105,7 +105,7 @@ abstract class AfsBOWSConnector extends AfsConnectorBase
105
  throw new Exception("Code : " . $r->error->code . "\nMessage : " .$r->error->message . "\nDescription : " . $r->error->description);
106
  }
107
  $this->curlConnector->curl_close($request);
108
-
109
  return $result;
110
  }
111
 
105
  throw new Exception("Code : " . $r->error->code . "\nMessage : " .$r->error->message . "\nDescription : " . $r->error->description);
106
  }
107
  $this->curlConnector->curl_close($request);
108
+ Mage::log($result, null, 'antidot.log');
109
  return $result;
110
  }
111
 
lib/antidot/AIF/afs_paf_connector.php CHANGED
@@ -62,8 +62,8 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
62
  if (! $mgr->has_document())
63
  throw new InvalidArgumentException('No document to be sent');
64
 
65
- $version = $this->get_bo_version();
66
- $context = new AfsPafConnectorContext($version, $mgr, $comment);
67
  return new AfsPafUploadReply(json_decode($this->query($context)));
68
  }
69
 
@@ -76,13 +76,13 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
76
  {
77
  $url = parent::get_base_url('service');
78
 
79
- $params = $this->authentication->format_as_url_param($context->version);
80
  if (! is_null($context->comment))
81
  $params['comment'] = $context->comment;
82
 
83
  return sprintf($url . '/%d/instance/%s/paf/%s/upload?%s',
84
  $this->service->id, $this->service->status, $this->paf_name,
85
- $this->format_parameters($params));
86
  }
87
 
88
  /** @brief Retrieves authentication as HTTP header for new authentication policy (>=v7.7)
@@ -91,7 +91,7 @@ class AfsPafConnector extends AfsBOWSConnector implements AfsBOWSConnectorInterf
91
  */
92
  public function get_http_headers($context=null)
93
  {
94
- return $this->authentication->format_as_header_param($context->version);
95
  }
96
 
97
  public function set_post_content(&$request, $context)
@@ -140,9 +140,9 @@ class AfsPafConnectorContext
140
  * sent to Back Office.
141
  * @param $comment [in] Optional comment for uploaded files.
142
  */
143
- public function __construct($version, AfsDocumentManager $doc_mgr, $comment)
144
  {
145
- $this->version = $version;
146
  $this->doc_mgr = $doc_mgr;
147
  $this->comment = $comment;
148
  }
62
  if (! $mgr->has_document())
63
  throw new InvalidArgumentException('No document to be sent');
64
 
65
+ // $version = $this->get_bo_version();
66
+ $context = new AfsPafConnectorContext($mgr, $comment);
67
  return new AfsPafUploadReply(json_decode($this->query($context)));
68
  }
69
 
76
  {
77
  $url = parent::get_base_url('service');
78
 
79
+ // $params = $this->authentication->format_as_url_param($context->version);
80
  if (! is_null($context->comment))
81
  $params['comment'] = $context->comment;
82
 
83
  return sprintf($url . '/%d/instance/%s/paf/%s/upload?%s',
84
  $this->service->id, $this->service->status, $this->paf_name,
85
+ $this->format_parameters(array()));
86
  }
87
 
88
  /** @brief Retrieves authentication as HTTP header for new authentication policy (>=v7.7)
91
  */
92
  public function get_http_headers($context=null)
93
  {
94
+ return $this->authentication->format_as_header_param();
95
  }
96
 
97
  public function set_post_content(&$request, $context)
140
  * sent to Back Office.
141
  * @param $comment [in] Optional comment for uploaded files.
142
  */
143
+ public function __construct(AfsDocumentManager $doc_mgr, $comment)
144
  {
145
+ // $this->version = $version;
146
  $this->doc_mgr = $doc_mgr;
147
  $this->comment = $comment;
148
  }
lib/antidot/AIF/afs_paf_live_connector.php CHANGED
@@ -42,7 +42,7 @@ class AfsPafLiveConnector extends AfsBOWSConnector implements AfsBOWSConnectorIn
42
  {
43
  $url = parent::get_base_url('service');
44
 
45
- $params = $this->authentication->format_as_url_param($context['version']);
46
  $params['afs:layers'] = $context['layers'];
47
 
48
  return sprintf($url . '/%d/instance/%s/paf/%s/process?%s',
42
  {
43
  $url = parent::get_base_url('service');
44
 
45
+ $params = array();
46
  $params['afs:layers'] = $context['layers'];
47
 
48
  return sprintf($url . '/%d/instance/%s/paf/%s/process?%s',
lib/antidot/AIF/afs_token_authentication.php CHANGED
@@ -24,23 +24,17 @@ class AfsTokenAuthentication implements AfsAuthentication
24
  * version information.
25
  * @return array representing authentication.
26
  */
27
- public function format_as_url_param($version=null)
28
  {
29
- if ('7.6' == $version)
30
- return array('afs:login' => sprintf('login://%s@%s', $this->token, AFS_AUTH_SSO));
31
- else
32
- return array();
33
  }
34
  /** @brief Formats authentication parameters.
35
  * @param $version [in] Format string representation according to provided
36
  * version information.
37
  * @return array representing authentication.
38
  */
39
- public function format_as_header_param($version=null)
40
  {
41
- if ('7.6' == $version)
42
- return array();
43
- else
44
- return array('access-token' => $this->token);
45
  }
46
  }
24
  * version information.
25
  * @return array representing authentication.
26
  */
27
+ public function format_as_url_param()
28
  {
29
+ return array();
 
 
 
30
  }
31
  /** @brief Formats authentication parameters.
32
  * @param $version [in] Format string representation according to provided
33
  * version information.
34
  * @return array representing authentication.
35
  */
36
+ public function format_as_header_param()
37
  {
38
+ return array('access-token' => $this->token);
 
 
 
39
  }
40
  }
lib/antidot/AIF/afs_user_authentication.php CHANGED
@@ -33,27 +33,25 @@ class AfsUserAuthentication implements AfsAuthentication
33
  * version information.
34
  * @return array representing authentication.
35
  */
36
- public function format_as_url_param($version=null)
37
  {
38
- if ('7.6' == $version) {
39
- if (is_null($this->authority))
40
- throw new InvalidArgumentException('In version ' . $version
41
- . ' authority parameter is mandatory!');
42
- return array('afs:login' => sprintf('login://%s:%s@%s', $this->user, $this->password, $this->authority));
43
- } else {
44
- return array();
45
- }
 
46
  }
47
  /** @brief Formats authentication parameters.
48
  * @param $version [in] Format string representation according to provided
49
  * version information.
50
  * @return array representing authentication.
51
  */
52
- public function format_as_header_param($version=null)
53
  {
54
- if ('7.6' == $version)
55
- return array();
56
- else
57
- return array('Authorization' => 'Basic ' . base64_encode($this->user . ':' . $this->password));
58
  }
59
  }
33
  * version information.
34
  * @return array representing authentication.
35
  */
36
+ public function format_as_url_param()
37
  {
38
+ return array();
39
+ // // if ('7.6' == $version) {
40
+ // if (is_null($this->authority))
41
+ // throw new InvalidArgumentException('In version ' . $version
42
+ // . ' authority parameter is mandatory!');
43
+ // return array('afs:login' => sprintf('login://%s:%s@%s', $this->user, $this->password, $this->authority));
44
+ // // } else {
45
+ // // return array();
46
+ // // }
47
  }
48
  /** @brief Formats authentication parameters.
49
  * @param $version [in] Format string representation according to provided
50
  * version information.
51
  * @return array representing authentication.
52
  */
53
+ public function format_as_header_param()
54
  {
55
+ return array('Authorization' => 'Basic ' . base64_encode($this->user . ':' . $this->password));
 
 
 
56
  }
57
  }
lib/antidot/afs_lib.php CHANGED
@@ -16,3 +16,10 @@ require_once 'AFS/SEARCH/FILTER/afs_filter.php';
16
 
17
  require_once 'AFS/ACP/afs_acp.php';
18
 
 
 
 
 
 
 
 
16
 
17
  require_once 'AFS/ACP/afs_acp.php';
18
 
19
+ /**
20
+ * Paf Upload
21
+ */
22
+ require_once 'AIF/afs_document.php';
23
+ require_once 'AIF/afs_paf_connector.php';
24
+ require_once 'AIF/afs_authentication.php';
25
+ require_once 'AIF/afs_user_authentication.php';
lib/antidot/afs_version.php CHANGED
@@ -15,7 +15,7 @@ define('AFS_API_VERSION_MINOR', 16);
15
  /** @brief API fix version number.
16
  *
17
  * You should increase this number as soon as a bug is fixed.*/
18
- define('AFS_API_VERSION_FIX', 3);
19
 
20
  /** @brief API full version number. */
21
  define('AFS_API_VERSION', implode('.', array(AFS_API_VERSION_MAJOR, AFS_API_VERSION_MINOR, AFS_API_VERSION_FIX)));
15
  /** @brief API fix version number.
16
  *
17
  * You should increase this number as soon as a bug is fixed.*/
18
+ define('AFS_API_VERSION_FIX', 4);
19
 
20
  /** @brief API full version number. */
21
  define('AFS_API_VERSION', implode('.', array(AFS_API_VERSION_MAJOR, AFS_API_VERSION_MINOR, AFS_API_VERSION_FIX)));
lib/antidot/doc/data/raw_example.php CHANGED
@@ -2,355 +2,30 @@
2
  /** @file raw_example.php
3
  * @example raw_example.php
4
  */
5
- require_once "PHP_API/afs_lib.php";
6
- $search = new AfsSearch('eval.partners.antidot.net', 48000);
7
  $query = $search->build_query_from_url_parameters();
8
  $query = $query->set_lang('fr'); // language is set manually in order to get spellcheck results
9
  $query = $query->set_multi_selection_facets('classification');
10
  $query = $query->set_mono_selection_facets('afs:lang', 'has_variants', 'has_image');
11
  $query = $query->set_facet_order('price_eur', 'marketing', 'classification', 'has_variants', 'has_image');
12
  $query = $query->set_facets_values_sort_order(AfsFacetValuesSortMode::ITEMS, AfsSortOrder::DESC);
 
13
  $helper = $search->execute($query);
14
  $generated_url = $search->get_generated_url();
15
  $clustering_is_active = $query->has_cluster();
16
- $nsmap = array('ns' => 'http://ref.antidot.net/store/afs#');
17
- ?>
18
 
 
 
 
19
 
20
- <html>
21
- <head>
22
- <title>Antidot PHP API - Raw example</title>
23
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
24
- <meta charset="UTF-8">
25
- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
26
- <link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css">
27
- <!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
28
- <!--[if lt IE 9]>
29
- <script src="../../assets/js/html5shiv.js"></script>
30
- <script src="../../assets/js/respond.min.js"></script>
31
- <![endif]-->
32
- </head>
33
- <body>
34
- <div>
35
- <a href="<?php echo $generated_url; ?>" target="_blank"><?php echo $generated_url; ?></a>
36
- </div>
37
- <div class="page-header">
38
- <h1>Raw example <small>based on the Antidot PHP API</small></h1>
39
- </div>
40
- <!-- ####################### Search box ########################### -->
41
- <div class="row">
42
- <div class="col-md-5"></div>
43
- <div class="input-group col-md-2">
44
- <form method="get" action="" role="form" class="input-group">
45
- <span class="input-group-addon">Search</span>
46
- <input type="search" name="query" class="form-control" placeholder="Keywords" />
47
- <span class="input-group-btn">
48
- <button class="btn btn-primary" type="submit"><span class="glyphicon glyphicon-search"></span></button>
49
- </span>
50
- </form>
51
- </div>
52
- </div>
53
-
54
- <!-- ####################### Current filter parameters ########################### -->
55
- <?php
56
- $params = $query->get_parameters(false);
57
- if (array_key_exists('filter', $params) && is_array($params['filter'])) {
58
- echo '
59
- <div class="row">
60
- <div class="col-md-8">';
61
- foreach ($params['filter'] as $filter => $values) {
62
- echo '
63
- <ul>Filter: <strong>' . $filter . '</strong>';
64
- foreach ($values as $value) {
65
- echo '
66
- <li>Value: ' . $value . '</li>';
67
- }
68
- echo '
69
- </ul>';
70
- }
71
- echo '
72
- </div>
73
- </div>';
74
- } ?>
75
-
76
- <!-- ####################### Promote ########################### -->
77
- <?php
78
- if ($helper->has_promote()) {
79
- echo '
80
- <div class="row">
81
- <div class="col-md-3"></div>';
82
- foreach ($helper->get_promotes() as $promote) {
83
- echo '
84
- <div class="col-md-2">
85
- <h4><span class="label label-danger">' . $promote->get_title() . '</span></h4>
86
- <p>' . $promote->get_abstract() . '</p>
87
- <ul>Some custom data:
88
- <li>tag: ' . $promote->get_custom_data('tag') . '</li>
89
- <li>identifier: ' . $promote->get_custom_data('id') . '</li>
90
- </ul>
91
- <ul>Or loop on custom data:';
92
- foreach ($promote->get_custom_data() as $key => $value) {
93
- echo '
94
- <li><strong>' . $key . '</strong>: ' . $value . '</li>';
95
- }
96
- echo '
97
- </ul>
98
- </div>';
99
- }
100
- echo '
101
- </div>
102
- </div>';
103
- } ?>
104
-
105
- <?php
106
- // checks whether there is at least one replyset
107
  if ($helper->has_replyset()) {
108
- $replyset = $helper->get_replyset(); // Retrieves only first replyset
109
  if ($replyset->has_facet()) {
110
- /* if (in_array('facets', $replyset)) */
111
- ?>
112
- <div class="row">
113
- <div class="col-md-3">
114
- <h2>Filters</h2>
115
- <!-- ####################### Filters ########################### -->
116
- <?php
117
- foreach ($replyset->get_facets() as $facet) {
118
- /* foreach ($replyset->facets->facet as $facet) */
119
- ?>
120
- <div class="panel panel-default">
121
- <div class="panel-heading"><?php echo $facet->get_label() ?></div> <!-- $facet->labels[0]->label -->
122
- <div class="panel-body">
123
- <div class="list-group">
124
- <div class="list-group">
125
- <?php
126
- foreach ($facet->get_elements() as $value) {
127
- /* $item = null;
128
- * if ($facet->{'afs:t'} == 'FacetTree') {
129
- * $item = 'node';
130
- * } elif ($facet->{'afs:t'} == 'FacetInterval') {
131
- * $item = 'interval;
132
- * } else {
133
- * throw new Exception('Unknown facet layout: ' . $facet->{'afs:t'});
134
- * }
135
- * foreach ($facet->$item as $value) */
136
- ?>
137
- <a class="list-group-item <?php echo ($value->active ? 'active' : '') ?>" href="<?php echo $value->link ?>"><?php echo $value->label ?><span class="badge"><?php echo $value->count ?></span></a>
138
- <!-- $active = $query->has_filter($facet->id, $value->key);
139
- ...
140
- -->
141
- <?php } ?>
142
- </div>
143
- </div>
144
- </div>
145
- </div>
146
- <?php } ?>
147
- </div>
148
- <?php } ?>
149
-
150
- <div class="col-md-9">
151
- <div class="row page-header">
152
- <div class="col-md-1"></div>
153
- <div class="col-md-2">
154
- <h2>Results <span class="label label-success"><?php echo $replyset->get_meta()->get_total_replies() ?></span></h2>
155
- <h4><span class="label label-info">Duration <?php echo $replyset->get_meta()->get_duration() ?> ms</span></h4>
156
- </div>
157
- <div class="col-md-1"></div>
158
- <div class="col-md-2">
159
- <!-- ####################### Relevance ########################### -->
160
- <?php
161
- if ($query->has_sort(AfsSortBuiltins::RELEVANCE)) {
162
- if ($query->get_sort_order(AfsSortBuiltins::RELEVANCE) == AfsSortOrder::ASC) {
163
- $relevance_icon = 'glyphicon-arrow-up';
164
- $relevance_query = $query->add_sort(AfsSortBuiltins::RELEVANCE, AfsSortOrder::DESC);
165
- } else {
166
- $relevance_icon = 'glyphicon-arrow-down';
167
- $relevance_query = $query->add_sort(AfsSortBuiltins::RELEVANCE, AfsSortOrder::ASC);
168
- }
169
- } else {
170
- $relevance_query = $query->add_sort(AfsSortBuiltins::RELEVANCE, AfsSortOrder::ASC);
171
- $relevance_icon = 'glyphicon-arrow-down';
172
- }
173
- $relevance_link = $search->get_helpers_configuration()->get_query_coder()->generate_link($relevance_query);
174
- ?>
175
- <a href="<?php echo $relevance_link ?>" class="btn btn-default btn-lg active" role="button"><span class="glyphicon <?php echo $relevance_icon; ?>"></span> Relevance</a>
176
- </div>
177
- <div class="col-md-2">
178
- <?php
179
- $query_coder = $search->get_helpers_configuration()->get_query_coder();
180
- if ($clustering_is_active) {
181
- $cluster_query = $query->unset_cluster();
182
- $cluster_link = $query_coder->generate_link($query->unset_cluster());
183
- $cluster_label = 'Remove clusters';
184
- } else {
185
- $cluster_link = $query_coder->generate_link($query->set_cluster('marketing', 1)->set_overspill());
186
- $cluster_label = 'Create cluster on "marketing" filter';
187
- } ?>
188
- <a href="<?php echo $cluster_link ?>" class="btn btn-default btn-lg active" role="button"><?php echo $cluster_label ?></a>
189
- </div>
190
- </div>
191
-
192
- <!-- ####################### Clusters ########################### -->
193
- <?php
194
- if ($clustering_is_active) {
195
- foreach ($replyset->get_clusters() as $cluster) {
196
- echo '
197
- <div class="row">
198
- <div class="col-md-1"></div>
199
- <div class="col-md-5">
200
- <h3>
201
- <span class="label label-success">
202
- <a href="' . $query_coder->generate_link($cluster->get_query()) . '">' . $cluster->get_label() . '<a>
203
- </span>
204
- </h3>
205
- </div>
206
- </div>
207
- <ul class="list-unstyled">';
208
- foreach ($cluster->get_replies() as $reply) {
209
- echo '
210
- <li>
211
- <h3>' . $reply->get_title() . '</h3>
212
- <p><a href="' . $reply->get_uri() . '">' . $reply->get_uri() . '</a></p>
213
- <p>' . $reply->get_abstract() . '</p>
214
- <p>Some client data:
215
- <ul>
216
- <li>Name: ' . $reply->get_clientdata()->get_value('/ns:product/ns:name', $nsmap) . '</li>
217
- <li>Availability: ' . $reply->get_clientdata()->get_value('/ns:product/ns:is_available', $nsmap) . '</li>
218
- <li>Prices:
219
- <ul>';
220
- // Here multiple values are retrieved from client data
221
- foreach ($reply->get_clientdata()->get_values('/ns:product/ns:prices/ns:price', $nsmap) as $value)
222
- echo '<li>' . $value . '</li>';
223
- echo '
224
- </ul>
225
- </li>
226
- </ul>
227
- </p>
228
- </li>';
229
- }
230
- echo '
231
- </ul>';
232
  }
233
- echo '
234
- <div class="row">
235
- <div class="col-md-1"></div>
236
- <div class="col-md-5">
237
- <h3><span class="label label-success">Other results</span></h3>
238
- </div>
239
- </div>';
240
- } ?>
241
-
242
- <!-- ####################### Replies ########################### -->
243
- <?php
244
- echo '
245
- <ul class="list-unstyled">';
246
- foreach ($replyset->get_replies() as $reply) {
247
- ?>
248
- <li>
249
- <h3><?php echo $reply->get_title() ?></h3>
250
- <p><a href="<?php echo $reply->get_uri() ?>"><?php echo $reply->get_uri() ?></a></p>
251
- <p><?php echo $reply->get_abstract() ?></p>
252
- <p>Some client data:
253
- <ul>
254
- <li>Name: <?php echo $reply->get_clientdata()->get_value('/ns:product/ns:name', $nsmap) ?></li>
255
- <li>Availability: <?php echo $reply->get_clientdata()->get_value('/ns:product/ns:is_available', $nsmap) ?></li>
256
- <li>Prices:
257
- <ul>
258
- <?php
259
- // Here multiple values are retrieved from client data
260
- foreach ($reply->get_clientdata()->get_values('/ns:product/ns:prices/ns:price', $nsmap) as $value) {
261
- echo '<li>' . $value . '</li>';
262
- } ?>
263
- </ul>
264
- </li>
265
- </ul>
266
- </p>
267
- </li>
268
- <?php } ?>
269
- </ul>
270
- </div>
271
- </div>
272
-
273
- <!-- ####################### Pager ########################### -->
274
- <?php
275
- if ($replyset->has_pager()) {
276
- $pager = $replyset->get_pager();
277
- ?>
278
- <div class="row">
279
- <div class="row">
280
- <div class="col-md-5"></div>
281
- <div class="input-group col-md-3">
282
- <ul class="pagination">
283
- <?php
284
- foreach ($pager->get_all_pages() as $page => $url) {
285
- if ($page == $pager->get_current_no()) {
286
- $active = 'active';
287
- } else {
288
- $active = '';
289
- }
290
- ?>
291
- <li class="<?php echo $active ?>"><a href="<?php echo $url ?>"><?php echo $page ?></a></li>
292
- <?php } ?>
293
-
294
- </ul>
295
- </div>
296
- </div>
297
- <?php } ?>
298
-
299
- </div>
300
-
301
- <!-- ####################### Spellcheck ########################### -->
302
- <?php } elseif ($helper->has_spellcheck()) { // if no replyset, let's check spellcheck ?>
303
- <div class="row">
304
- <div class="col-md-9">
305
- <div class="row">
306
- <div class="col-md-1"></div>
307
- <div class="col-md-4">
308
- <h2>Typo ?</h2>
309
- </div>
310
- </div>
311
- <?php
312
- foreach ($helper->get_spellchecks() as $feed => $suggestions) {
313
- ?>
314
- <div class="row">
315
- <div class="col-md-6">
316
- <h4><?php echo $feed ?></h4>
317
- <ul class="list-unstyled">
318
- <?php
319
- foreach ($suggestions as $suggest) {
320
- ?>
321
- <li>
322
- <h3>Did you mean...</h3>
323
- <p><a href="<?php echo $suggest->get_link() ?>"><?php echo $suggest->get_formatted_text() ?></a></p>
324
- </li>
325
- <?php } ?>
326
- </ul>
327
- </div>
328
- </div>
329
- <?php } ?>
330
- </div>
331
- </div>
332
- <!-- ####################### Error ########################### -->
333
- <?php } elseif ($helper->in_error()) { // no spellcheck... is there any error? ?>
334
- <div class="row">
335
- <div class="col-md-9">
336
- <div class="row">
337
- <div class="col-md-1"></div>
338
- <div class="col-md-4">
339
- <h2>Really bad error occured</h2>
340
- </div>
341
- </div>
342
- <div class="row">
343
- <div class="col-md-10">
344
- <h2><?php echo $helper->get_error_msg() ?></h2>
345
- </div>
346
- </div>
347
- </div>
348
- </div>
349
- <?php } ?>
350
-
351
- <!-- jQuery (necessary for Bootstrap\'s JavaScript plugins) -->
352
- <script src="//code.jquery.com/jquery.js"></script>
353
- <!-- Include all compiled plugins (below), or include individual files as needed -->
354
- <script src="js/bootstrap.min.js"></script>
355
- </body>
356
- </html>
2
  /** @file raw_example.php
3
  * @example raw_example.php
4
  */
5
+ require_once "/home/ct/Dev/PHP_API/afs_lib.php";
6
+ $search = new AfsSearch('3suisses-be.afs-antidot.net', 7123);
7
  $query = $search->build_query_from_url_parameters();
8
  $query = $query->set_lang('fr'); // language is set manually in order to get spellcheck results
9
  $query = $query->set_multi_selection_facets('classification');
10
  $query = $query->set_mono_selection_facets('afs:lang', 'has_variants', 'has_image');
11
  $query = $query->set_facet_order('price_eur', 'marketing', 'classification', 'has_variants', 'has_image');
12
  $query = $query->set_facets_values_sort_order(AfsFacetValuesSortMode::ITEMS, AfsSortOrder::DESC);
13
+ $query = $query->set_page(2, 'Catalog');
14
  $helper = $search->execute($query);
15
  $generated_url = $search->get_generated_url();
16
  $clustering_is_active = $query->has_cluster();
 
 
17
 
18
+ $reply_set = $helper->get_replyset('Catalog');
19
+ $pager = $reply_set->get_pager();
20
+ $pages = $pager->get_all_pages();
21
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
22
  if ($helper->has_replyset()) {
23
+ $replyset = $helper->get_replyset('Catalog'); // Retrieves only first replyset
24
  if ($replyset->has_facet()) {
25
+ foreach ($replyset->get_facets() as $facet) {
26
+ foreach ($facet->get_labels() as $lang => $label) {
27
+ echo $facet->id + " " + $lang + " " + $label + "\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  }
29
+ }
30
+ }
31
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Antidot_Antidot</name>
4
- <version>1.2.1</version>
5
  <stability>stable</stability>
6
  <license>LGPL</license>
7
  <channel>community</channel>
@@ -17,9 +17,9 @@ Prevent to export empty categories node&amp;#xD;
17
  Add cdata for variant name&amp;#xD;
18
  Add variant details for grouped products</notes>
19
  <authors><author><name>Antidot</name><user>antidot</user><email>contact@antidot.net</email></author><author><name>Antidot</name><user>antidot</user><email>contact@antidot.net</email></author></authors>
20
- <date>2015-09-14</date>
21
- <time>09:35:46</time>
22
- <contents><target name="mage"><dir name="shell"><file name="antidotExport.php" hash="a4e184cdf1add5d42484e6997ea6f59c"/><file name="antidotExportCategory.php" hash="10de34988223fc8ca26e6f30c4070733"/><file name="antidotExportInc.php" hash="18f1b60b93245e2daf423c614dcd7efa"/><file name="antidotExportProduct.php" hash="9ddd7f0ba8e54b24665a32d26e5231b4"/></dir><dir name="i18n"><file name="de_DE" hash="f166a5ff29213a44fca77277b053897e"/><file name="en_US" hash="63c821044fda6f7c2a26dc84670b25bd"/><file name="es_ES" hash="f9319039054998955d63d51ed0930f3f"/><file name="fr_FR" hash="632367797f2fa9fef06e0b0c69377e01"/><file name="i18n.php" hash="0780b44563432f6e70de78f7a9d60f54"/></dir></target><target name="magecommunity"><dir name="MDN"><dir name="Antidot"><dir name="Block"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2158b991ccdf394c8cd47cab00829e4d"/><file name="Boolean.php" hash="d17b08e1ec9047cf4050442ababd0808"/><file name="Category.php" hash="78cb53233ad74a2b5496d6f7857d8837"/><file name="Decimal.php" hash="75b31617bca2a8f20ee7fe113e3534f2"/><file name="Price.php" hash="244068a33e8ba64423c126baf883d2b5"/></dir><file name="View.php" hash="bbdd9bb31663415001ab3751c6737cde"/></dir></dir><dir name="Catalogsearch"><file name="Banner.php" hash="cfc866a6c1cfb2ee9cb690bed84781fe"/><file name="Category.php" hash="e9605415ba85929115a443b1b4f00ab0"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2b274bf7d8f8dbd915bdf73f65e694fc"/></dir></dir><file name="Layer.php" hash="3ba32c0f20c4b7447229843f45b06d3f"/><file name="Result.php" hash="82e928664d7f1e0688f377cfbb5700bb"/></dir><dir name="Html"><file name="Select.php" hash="fc7fb19df1dd378d4e9e0860d2d47d07"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="4f00570d46d27d1cf89785e8db42a332"/><file name="Forward.php" hash="3917a1882c3d55837138782e60791167"/><file name="PushArticles.php" hash="a0cae65b4aba9b539421c0a6d06fb406"/><file name="PushCategories.php" hash="50e4b74388e1c5a65249c71dfae69400"/><file name="PushProducts.php" hash="bac543e1b17f91a558adef5da3012e28"/><file name="RestoreTemplate.php" hash="ffbbb0a73ff1ede611262a6a4da1a188"/><file name="ShowXml.php" hash="417ba0c9c62d8070b63f90397887dcc0"/></dir><dir name="Fieldset"><file name="Notice.php" hash="86e29b37d2c2390d5714ca99b45f4d6c"/></dir><dir name="Form"><dir name="Field"><dir name="Array"><file name="Additional.php" hash="d62316e3631c1c2b6a0119134c8002a8"/><file name="AdditionalFeed.php" hash="dcfb6d37d765a10e4a07465e70133dda"/><file name="ArticleAdditional.php" hash="38c62d610f585c460151841f7350348b"/><file name="ArticleIdentifier.php" hash="ec9479fd1ca087a1fe924795cc9ff5f6"/><file name="DefaultSort.php" hash="4989d99a73f57bed1fb994060cc38a72"/><file name="Facet.php" hash="7217f2296afaf11f514e4212a7a82cb9"/><file name="Identifier.php" hash="a9fa99227182bd72e59c9a315d580247"/><file name="ProductAdditionalFacet.php" hash="8d46e427d9efbac7e6ba04fdc88d4728"/><file name="ProductAdditionalField.php" hash="9c9f9c9c1c940963e1a24c039a392cc4"/><file name="ProductIdentifier.php" hash="d30809119cb35018697533075f7ee485"/><file name="Sort.php" hash="f986fbb048bf3f6aec813cdc1c70ec15"/></dir><file name="CategoryAttribute.php" hash="c119ca65f23950e7abb1f0d60e8b4755"/><file name="ProductAttribute.php" hash="6a61b98a9f6ac883a5e162e3edab300d"/></dir></dir><dir name="Html"><file name="Export.php" hash="f36beeca11c51e1a2e9678955d8cf1b8"/><file name="ShowXml.php" hash="7b70f39937aa9d24336edde6bdbdf97c"/><file name="Version.php" hash="34c624c382f3061cf322cfed52c416ac"/></dir></dir></dir></dir><dir name="Helper"><file name="Antidot.php" hash="7bbd2866c65a847e1415badb1ef0d015"/><dir name="CatalogSearch"><file name="Data.php" hash="81cc908609e68035d5714488f913e688"/></dir><file name="Compress.php" hash="12fa64a9c9f519a3f249954ab780e01c"/><file name="Data.php" hash="db586edb739ad7f7b0281a887e252a61"/><dir name="Enterprise"><dir name="Search"><file name="Data.php" hash="8bfe0146c64511f86cb796638b65112f"/></dir></dir><file name="LogExport.php" hash="6d6b262327bf1d920fc2b5b112edfef6"/><dir name="ManaFilters"><file name="Data.php" hash="f4f4e92c5e33c6142904cf27a75f6d23"/></dir><file name="Url.php" hash="1d2ee02a8e135bfc4b866f5219f62acd"/><file name="XmlWriter.php" hash="66cf65d950caddf895c823c5575a1912"/></dir><dir name="Model"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="3cd18414abccea60c5497931bc95e21e"/><file name="Boolean.php" hash="dd0414e0d96833bec6e32aac321c2763"/><file name="Category.php" hash="4dea470cb36708e0ae4b95bd0a24a85f"/><file name="Decimal.php" hash="b9b1e2cff1d0332fab77d101dca4c3d2"/><file name="Item.php" hash="c89bbca267af18a0447e0daf3e7cc8eb"/><file name="Price.php" hash="7529be0313a19896993f92eeb9dfc8a9"/></dir></dir><file name="Layer.php" hash="706000dd944a45f30826eccba2942862"/></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="a83d6761a949c8196cba33948a48c8bf"/></dir></dir><file name="Layer.php" hash="b5aa8e2cc24f1b1362749049f1cdec32"/><dir name="Resource"><file name="Attribute.php" hash="80d2a34d746f307109b6bf910b0f2958"/></dir></dir><dir name="Export"><file name="Abstract.php" hash="b1c695f2ab0fb63a9c253ceb68883845"/><file name="Article.php" hash="790a58f2fa28c52302c996163b884393"/><file name="Category.php" hash="d3a82f9ace086bf0bec88e585e37578a"/><file name="Context.php" hash="d63d33f2dfa968e90ed11a6f76f41a34"/><dir name="Model"><dir name="Product"><file name="Link.php" hash="6f764a25fcde9b315d10f46189a428d1"/><dir name="Type"><file name="Configurable.php" hash="4bb627c1f5d1fbadd37a6b54e681406f"/><file name="Grouped.php" hash="8770d1ddf8228a2db136325da494de51"/></dir></dir><file name="Product.php" hash="fe1cbcf9257581f01bb1072db813355f"/></dir><file name="Product.php" hash="a3619bfbab7c81691775d5b747c57a47"/></dir><file name="Observer.php" hash="ac85f1a93b71df59fad86dbcd0579c53"/><dir name="Resource"><file name="Advanced.php" hash="989026021706cbcfb269451187002c19"/><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="1811ce81b3c42ec999541b5f493f0985"/></dir></dir><dir name="Engine"><file name="Abstract.php" hash="6fc0659e9f57633a707254680ad23e70"/><file name="Antidot.php" hash="6f038510c3eb9d6908443dec15d14232"/></dir><dir name="Export"><dir name="Product"><file name="Collection.php" hash="dfa31e927797fb1887aec5fcec2747d1"/><dir name="Link"><dir name="Product"><file name="Collection.php" hash="a50b67c39520422770b4b16d4ab51ba0"/></dir></dir><dir name="Type"><dir name="Configurable"><dir name="Product"><file name="Collection.php" hash="79d359ae0e176d3499225452d983c210"/></dir></dir></dir></dir><file name="Product.php" hash="f3e87d35ea55e911948f3909274e29b3"/></dir></dir><dir name="Search"><file name="Abstract.php" hash="fd71154b987b16f8d13bc3e10a3faeac"/><file name="Search.php" hash="4a70644bdcd6ade7519cfebe7bbe4a85"/><file name="Suggest.php" hash="6caac0bb7683b1d330049ed0d606f36f"/></dir><dir name="System"><dir name="Config"><file name="ArticleAttribute.php" hash="f3a9596d45f275299f16530a56845c96"/><dir name="Backend"><file name="Engine.php" hash="68c93651655a77c74fd79d1de6d19be3"/></dir><file name="CategoryAttribute.php" hash="9f19b99e16c99b0e8052b1e31d2a6317"/><file name="Dir.php" hash="c80d83280ebc5ab91fd45d246ec47ba3"/><file name="DisableEnable.php" hash="6d08f33a1580b2fd1d58d87248104166"/><file name="Facet.php" hash="8b771072a32f32e81a087581ace7fd72"/><file name="Number.php" hash="7985ea6c495a35173d68291389319f93"/><file name="Options.php" hash="06930da994dec4bb05ebc3f3e8c8abb8"/><file name="ProductAttribute.php" hash="c74ad00177c3a12b03c8684928d12c40"/><file name="PromoteRedirect.php" hash="c167973ea7a0ef09f0e5fa0fd0a08926"/><file name="Sort.php" hash="e0d2c1e72f56894b75baebcb6c4b8609"/><dir name="Source"><file name="Acpengine.php" hash="fdf8d5030d8823c325d707d8bb5b7208"/><file name="Engine.php" hash="0491592c4612779ffc7890456f6b946d"/></dir><dir name="Suggest"><file name="Type.php" hash="cef491efdb9fcef86d0df75030206a78"/></dir><file name="WSStatus.php" hash="ff4954e15d75dd3139290d96773d0abf"/></dir></dir><dir name="Transport"><file name="Abstract.php" hash="3272c44b08523a9836aa15c835e2ed25"/><file name="File.php" hash="0941fd452279605a2ea6a5d40f857000"/><file name="Ftp.php" hash="291dac423dbd826394b8028c6b00064b"/><file name="Http.php" hash="fb80d47a6d991b9f706418061a2cbd7e"/><file name="Interface.php" hash="32d1d3958e0cd726bc34cae482464ef8"/></dir><file name="Transport.php" hash="96c10d2ff359849de991d8a045cc9353"/></dir><dir name="Test"><dir name="Block"><dir name="Catalogsearch"><file name="Layer.php" hash="49725570e661d72db50daab46e0e18af"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="dcbfefb440b8512b1298b624a3582076"/></dir></dir></dir></dir><dir name="Helper"><dir name="CatalogSearch"><file name="Data.php" hash="a40c1e58b5000432763aa07dd49d4b5d"/></dir><file name="Data.php" hash="9c21bd8bfa43dab48d95a886812587e6"/></dir><dir name="Model"><dir name="Export"><dir name="Abstract"><dir name="fixtures"><file name="testGarbageCollection.yaml" hash="de6c8672be0c24a102ebfed004f2361b"/></dir></dir><file name="Abstract.php" hash="094d78a413adb76559ba3e0063f7eb03"/><file name="Article.php" hash="157dc12608521f1ad255142f0143ef18"/><dir name="Category"><dir name="fixtures"><file name="testEmptyFile.yaml" hash="9573e620466cfe8260f8a87e274c8261"/></dir></dir><file name="Category.php" hash="43c0813b3b00f68b1920b4e66cb3604d"/><dir name="Context"><dir name="fixtures"><file name="testContext.yaml" hash="d912a7bd71a209f591043a3644de3ceb"/></dir></dir><file name="Context.php" hash="1043f3b0b99d3d290d4f38e633864a25"/><dir name="Product"><dir name="fixtures"><file name="testInactiveParentCategory.yaml" hash="3ef9bcefae6399ccdc23e026746a1743"/><file name="testWriteImageUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWritePricesFixedtax.yaml" hash="698da07581100c1eff5a1a85e2be6d3b"/><file name="testWriteProductNoVariant.yaml" hash="626a27b35977e5a52b02f85011c5e216"/><file name="testWriteProductNoVariantInStock.yaml" hash="9aa7736a422276842350ac73c6f4ba55"/><file name="testWriteProductUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWriteProperties.yaml" hash="d434749b80908bbceefd5781e2d0e998"/><file name="testWriteXml.yaml" hash="774cbe1c5408ff8ad838f1693ec11d84"/></dir><dir name="providers"><file name="testWriteImageUrl.yaml" hash="666c33585c611bcc0b0ebe6e87dce1fc"/><file name="testWriteProductUrl.yaml" hash="18f511460efea04586fc888f5c85b3ea"/></dir></dir><file name="Product.php" hash="c3992e99a2752e8d8240de824faa4292"/></dir><dir name="Observer"><dir name="fixtures"><file name="testGetDefaultContext.yaml" hash="5b3998808a9667ba79e8138104e24b00"/></dir><dir name="providers"><file name="testGetOwnerForFilename.yaml" hash="c5c07e73f536f9ffacc0c3ff6b5a13d1"/></dir></dir><file name="Observer.php" hash="c69240a8fe5a637c3aa447c94550e268"/><dir name="Resource"><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="2ad006d8e096ade9043a9a370177782d"/></dir></dir><dir name="Engine"><dir name="Antidot"><dir name="fixtures"><file name="testFormatResult.yaml" hash="a1a684d4f08b4d3e3b7f3711e7563010"/></dir></dir><file name="Antidot.php" hash="46cbb6e95678c8fd55badb021a5a1a32"/></dir></dir><dir name="Search"><dir name="Suggest"><dir name="fixtures"><file name="testSuggest.yaml" hash="e845f0311d93608e3221fb0678f429cc"/></dir></dir><file name="Suggest.php" hash="d97172c8ec094146f953a9704f8e1936"/></dir><dir name="System"><dir name="Config"><dir name="Facet"><dir name="fixtures"><file name="testToOptionArray.yaml" hash="b76143bd57f68be024a31d905da9cabe"/></dir></dir><file name="Facet.php" hash="3e3ef7aa45b4226df9eaf177ed69326f"/><dir name="Sort"><dir name="expectations"><file name="testToOptionArray.yaml" hash="13fc5b4c17962fb267f443d03a2219b2"/></dir><dir name="fixtures"><file name="testToOptionArray1.yaml" hash="3160d541123737644dfea5c70db35f41"/><file name="testToOptionArray2.yaml" hash="74fd97f93892920908ab7eab0124eeb6"/><file name="testToOptionArray3.yaml" hash="fe9c8a5da75f3c0d66304a39c473a3bb"/></dir></dir><file name="Sort.php" hash="3435402ae9aa30d18c8265433d643d21"/><dir name="Source"><file name="Engine.php" hash="dcbee0d360773c28faa8a894cbed22ad"/></dir></dir></dir></dir><file name="PHPUnitUtil.php" hash="2a128a7c19f4c37cb9dd7fc60e679693"/></dir><dir name="controllers"><dir name="Admin"><file name="PushController.php" hash="3f7be8a53c7a01cfd11aa5a8a8fcfac6"/></dir><dir name="Front"><file name="SearchController.php" hash="d220bd4628830ea238775ed9788e0674"/></dir></dir><dir name="etc"><file name="config.xml" hash="ce5e9dd82d1077072064ec847d585434"/><file name="system.xml" hash="f1678909f76c86b3ce017b5d351a0bb9"/></dir><dir name="sql"><dir name="Antidot_setup"><file name="mysql4-install-0.9.php" hash="62672bc47ea92dbd46966fb76e4251e0"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="antidot.xml" hash="5124433ec044f619ae99afb074ed6efc"/></dir><dir name="template"><dir name="antidot"><dir name="catalog"><dir name="layer"><file name="category.phtml" hash="3ec81f7b3e3b947317da8664c8e15927"/><file name="filter.phtml" hash="2304baebff9b798e0ebd977fbc891346"/></dir></dir><dir name="catalogsearch"><dir name="result"><file name="banner.phtml" hash="4dc4b69ef2dd51aad9689dbfb2bf8f48"/><file name="category.phtml" hash="7413580b825508f2cfc08566d62369ae"/></dir><file name="result.phtml" hash="de6eecf5bd733d3440c843133afea8b6"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="MDN_Antidot.xml" hash="988c6b7e9da4e50f1727956833ab1696"/></dir></target><target name="magelocale"><dir name="de_AT"><file name="MDN_Antidot.csv" hash="6d55b32bb063457c70296109170f944c"/></dir><dir name="de_CH"><file name="MDN_Antidot.csv" hash="6d55b32bb063457c70296109170f944c"/></dir><dir name="de_DE"><file name="MDN_Antidot.csv" hash="6d55b32bb063457c70296109170f944c"/></dir><dir name="es_AR"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_CL"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_CO"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_CR"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_ES"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_MX"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_PA"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_PE"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="es_VE"><file name="MDN_Antidot.csv" hash="b7f7906a0af8c8a524033fe6565b8da1"/></dir><dir name="fr_CA"><file name="MDN_Antidot.csv" hash="cb32f785ce819fe925347b7863d8de36"/></dir><dir name="fr_FR"><file name="MDN_Antidot.csv" hash="cb32f785ce819fe925347b7863d8de36"/></dir></target><target name="mageweb"><dir name="js"><dir name="mdn"><dir name="antidot"><file name="CollapsibleLists.js" hash="86792ecde0c2759ba85e0d863dd147ce"/></dir></dir></dir></target><target name="magelib"><dir name="antidot"><dir name="AFS"><dir name="ACP"><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="acpConnectorTest.php" hash="25a8194f3dc8895640df4f4bba895d8e"/><file name="acpQueryTest.php" hash="74ad65a4af639a409ee72a75a2a043d6"/><file name="acpReplysetHelperTest.php" hash="4f0a0d471a06e139cd11c715b67ebe81"/><file name="acpResponseHelperTest.php" hash="6d30f99108db0d9956aef9ba5e1d88df"/><file name="acpTest.php" hash="d6119d150543e7943ba4e9907901ae5d"/></dir><file name="afs_acp.php" hash="78dbfbc92f68469c92898f1da4263e68"/><file name="afs_acp_configuration.php" hash="2d644cc6c5bf2cdaeca5780576c4bf0e"/><file name="afs_acp_connector.php" hash="b72439562b02024e0b9629c18394985d"/><file name="afs_acp_exception.php" hash="f610d2cc37a15d4b981d7b43939414ad"/><file name="afs_acp_query.php" hash="ced0629355f5d4fc1c219d1adb03297d"/><file name="afs_acp_query_manager.php" hash="b3348972a850c904fc664b4e27671439"/><file name="afs_acp_reply_helper.php" hash="b0259f24f10d2e92ed6e3b8cdaaacc44"/><file name="afs_acp_replyset_helper.php" hash="07e7fdb88a42a399c96261c47ffb0231"/><file name="afs_acp_response_helper.php" hash="33a66106fd3a94194514a0d8d39af1cd"/></dir><file name="Makefile" hash="7bb31592939024f74745d6b6cb7fec0b"/><dir name="SEARCH"><dir name="FILTER"><file name="Makefile" hash="d42338199c6857ded179af2117b9f571"/><dir name="TEST"><file name="Makefile" hash="ab37090c6c5e7af1b260376237737700"/><file name="filterBuilderTest.php" hash="161ff5c8e73914eef884d17456afa133"/><file name="filterCombinationTest.php" hash="2162288d5255d3b24fe94d75b939aa51"/><file name="filterTest.php" hash="1682c0a4d50158a8d2c9369d30e45a18"/><file name="groupFilterTest.php" hash="1ebe8ce7344ed64b93cf94632d3b0184"/></dir><file name="afs_combinable_filter.php" hash="336e6c6bc9ebae3f58602d23ef734182"/><file name="afs_combinator_filter.php" hash="e2fc560b9c0c31f20c73f2057a8b7b69"/><file name="afs_filter.php" hash="6dbfc8c668cd48510cc9a9243d1bf4c3"/><file name="afs_filter_exception.php" hash="ccce583c63a4a65f7f0a27fc4a487505"/><file name="afs_filter_wrapper.php" hash="30dec104456abc037019ad93922b5afd"/><file name="afs_group_filter.php" hash="b95fa3bc0e26bc39dfc53a6010bce32f"/><file name="afs_native_function_filter.php" hash="37176bdbc66cc3dca18149132921f0a5"/><file name="afs_operator_filter.php" hash="c7ea43c8d64eedbe33397f61737e0226"/><file name="afs_valued_filter.php" hash="483653071734f77972c9b9771e187d82"/></dir><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="clientDataHelperTest.php" hash="1556ab047e1df23447586d529768befd"/><file name="clusterHelperTest.php" hash="e112e7c756f63c8e8ceb554281b418c9"/><file name="conceptHelperTest.php" hash="b44e39b62d0537bf1f7b7feb23f8111f"/><file name="facetDefaultTest.php" hash="382e4ea35e1c7173371b4a84046a38e5"/><file name="facetHelperTest.php" hash="d51a714bc116e77f5f115c26e9640f10"/><file name="facetManagerTest.php" hash="bbef8e207c387dbe6a26142fd55264d5"/><file name="facetTest.php" hash="26123aa75cb2597a3ededfa9d778095d"/><file name="facetValuesSortOrderTest.php" hash="b650080bf9b2cce2ac42a245cb84c911"/><file name="feedCoderTest.php" hash="f2b5dfdd4fa3c4e5d14c790d15235146"/><file name="filterCoderTest.php" hash="46249fa13edccf1e5d5000daf2573b77"/><file name="headerHelperTest.php" hash="8eb9450972ce082c35d7b66be7735d79"/><file name="helperConfigurationTest.php" hash="be3f74e53e27744e8214f3c341172796"/><file name="intervalTest.php" hash="912389dad049853f6bf0b4eab2af5034"/><file name="metaHelperTest.php" hash="080f160b54636c4eee743544a6a12bee"/><file name="pagerHelperTest.php" hash="d96a9891523e453647493f3219e86357"/><file name="promoteBannerReplyHelper.php" hash="94c3c14517536437e9800eaa706fbe29"/><file name="promoteRedirectReplyHelper.php" hash="ed00c66be5127d8b374f6416abf328ef"/><file name="promoteReplyHelperTest.php" hash="7cbb68a7f50c2bd2ef11a085ac94deb2"/><file name="promoteReplysetHelperTest.php" hash="ac2f1e3073015143dc7b2b705711c845"/><file name="queryCoderTest.php" hash="03983a114c6697464f8bf016822ff4a3"/><file name="queryTest.php" hash="338264d8e6dbbc09e88bd9a8179e8be4"/><file name="replyHelperTest.php" hash="4d86f19ea7de2aece5d7fd9c143c3dbc"/><file name="replysetHelperTest.php" hash="897f074b8382c6853f51b06a5ee50b0a"/><file name="responseHelperTest.php" hash="ebb167e1c330af6aa0e6a2b917431040"/><file name="searchConnectorTest.php" hash="9201de573884b643041b6c32bc535e7e"/><file name="searchQueryManagerTest.php" hash="2188b262a1c11422bcc8133f68fa6dd9"/><file name="searchTest.php" hash="fa47a7819b5c7c71172d6b1f1e7a02f7"/><file name="spellcheckHelperTest.php" hash="49960fb90055dcf265ef41e491c11325"/><file name="spellcheckTextVisitorTest.php" hash="203f0d08f548a39135517a41f6e9e43a"/><file name="textVisitorTest.php" hash="b722845dd0f5f953574cb51284ad025b"/></dir><file name="afs_base_reply_helper.php" hash="57abe4828b7ed7126db963764faa718a"/><file name="afs_base_replyset_helper.php" hash="096b124a3ebdc6e8d6beb359bd8bb7c5"/><file name="afs_client_data_exception.php" hash="899957af974d04aa7eaca44903a7f86c"/><file name="afs_client_data_helper.php" hash="4700218e2400350014fde428bc86806b"/><file name="afs_cluster_exception.php" hash="86d97623db7aebaa28a20857ce2cf17f"/><file name="afs_cluster_helper.php" hash="60b7fbcc869a672929ef9fc6d840d2b2"/><file name="afs_cluster_parameter.php" hash="20ed527d3ed1a6cf2bc80e032ecd2c7e"/><file name="afs_coder_base.php" hash="fb87fbea43d12695154b3b6102e2a019"/><file name="afs_coder_interface.php" hash="3b179b2513e215751ee4edd190b2a719"/><file name="afs_concept_helper.php" hash="982cf3d2063c565cf19cc6136b049066"/><file name="afs_count.php" hash="9f83f3baa3cf4462c0db786f4eea479a"/><file name="afs_facet.php" hash="1b4d7d35ebe8ed4894fda4881d0b168f"/><file name="afs_facet_combination.php" hash="005e9742ee032194b86856195dd59f7d"/><file name="afs_facet_default.php" hash="cbcb5d28b7b00815ce5248017065e84b"/><file name="afs_facet_exception.php" hash="f1f0afdbf9a727b53c4731e5a40ac417"/><file name="afs_facet_helper.php" hash="fe1ca1e7242c319bac96488b1f5e2063"/><file name="afs_facet_helper_retriever.php" hash="5628cc41c50ab25fd3336df302d903f4"/><file name="afs_facet_layout.php" hash="c83f6fef1c13ba3cda667c611841ff87"/><file name="afs_facet_manager.php" hash="a3fabb34d56a9614d4a0a2917f6fea0c"/><file name="afs_facet_mode.php" hash="8dcac389a37f8267a367400377631dba"/><file name="afs_facet_sort.php" hash="0d7ba4059b10da9981b9c801355cb874"/><file name="afs_facet_type.php" hash="6df82cbfa627629f9523437994d1fbb1"/><file name="afs_facet_value_formatter.php" hash="d6580281f9ef5c0820615ac385aae863"/><file name="afs_facet_values_sort_mode.php" hash="17def98365132c810515f8cf3c6fb006"/><file name="afs_facet_values_sort_order.php" hash="f95f77cb5dd7015e4f2e6094ddba49a6"/><file name="afs_feed_coder.php" hash="ed7b40e872a7ed5aa30adbcffc05de56"/><file name="afs_filter_coder.php" hash="4edbdcf6760d80465e5d2533014ba307"/><file name="afs_filter_parameter.php" hash="2b03c2c83ffe2e2968aaf50ad4903921"/><file name="afs_fts_mode.php" hash="edbd9342cd9625183e1e01ed81b79fc3"/><file name="afs_header_helper.php" hash="3b30d839efe9128773c82d47cbd591b8"/><file name="afs_helper_configuration.php" hash="dbd0378574fbc5729babfbddfef0fd67"/><file name="afs_interval.php" hash="dbf9749881be0a2b063f8a33dff214f3"/><file name="afs_interval_exception.php" hash="40f223de231df03aae59596c1a493065"/><file name="afs_meta_helper.php" hash="8403689868c98db725ebd11748508c8b"/><file name="afs_pager_helper.php" hash="077052931e0cffb1e589c21b57156b38"/><file name="afs_producer.php" hash="7c8c515ccb8126523fa0d09a7f759dd5"/><file name="afs_promote_banner_reply_helper.php" hash="418702b3c053029b3aa8fcb2775c65bd"/><file name="afs_promote_redirect_reply_helper.php" hash="be17eda6f8b4552b9ec21183362171a2"/><file name="afs_promote_reply_helper.php" hash="0e2a4f67cd307f74e8b64cd3b158235c"/><file name="afs_promote_replyset_helper.php" hash="fdefc6f8a686addb31ea9b6c0a3fa5ad"/><file name="afs_query.php" hash="bd969a62cd4bbbcb5b9996eaa19353f7"/><file name="afs_query_coder.php" hash="ca0bfad66b8d8549ab3f33380d716732"/><file name="afs_query_coder_interface.php" hash="dd16f17b3606a7418c1c714475b19b51"/><file name="afs_query_object_interface.php" hash="a9af13e2c856e4136ccadfff60f72d36"/><file name="afs_raw_text_visitor.php" hash="fd574583c4c9110165c1cadc67b832de"/><file name="afs_reply_helper.php" hash="3919f9e83cba62be9bc67117b1087b03"/><file name="afs_reply_helper_factory.php" hash="f159f7d0ef7e5a209fb872a970d0d582"/><file name="afs_replyset_helper.php" hash="cb8f81391d9a59904dcb0c3d6ae31999"/><file name="afs_response_exception.php" hash="0a865bb92fb700ae555dcb5ae675f644"/><file name="afs_response_helper.php" hash="2fec8d101712087660dc6aba5119e3c2"/><file name="afs_search.php" hash="3f2e3ef447515a2fa05b270654ef2969"/><file name="afs_search_connector.php" hash="17242fb6536f4596b2c0198a16986310"/><file name="afs_search_query_manager.php" hash="77e30683ee4ba9e004e9c7c12d9c811d"/><file name="afs_sort_builtins.php" hash="0cc1617a62f1a834a28d7d2ac249b081"/><file name="afs_sort_coder.php" hash="1dfe2d32278383d8465df67535cb91dd"/><file name="afs_sort_order.php" hash="7755deb99386650c9974871474168cda"/><file name="afs_sort_parameter.php" hash="bfb8c59c1560ec8a3b597dc45aa8ecd5"/><file name="afs_spellcheck_helper.php" hash="bb5465848ada7a9df9875f2565fb9686"/><file name="afs_spellcheck_text_helper.php" hash="3ca5c3118660aa600aadb504ceff6c4c"/><file name="afs_spellcheck_text_visitor.php" hash="c44c23ae21f61b065e457911bbc45ed2"/><file name="afs_text_helper.php" hash="59c4ae24560948c3af0f4adbf6bd1803"/><file name="afs_text_visitor.php" hash="867b44a280403cd4567358ec6d59588a"/></dir><file name="afs_configuration_base.php" hash="f26dd9efda4923cc2c71057f21be97d9"/><file name="afs_connector.php" hash="aa04a21163b57ef338bf96bd55e95882"/><file name="afs_exception.php" hash="c1840fe279f9cb313cec151012ed4513"/><file name="afs_feed.php" hash="005305cace79a3aa7719a3c942df9da7"/><file name="afs_multiple_values_parameter.php" hash="96dc30f1fbf137cbfd73c2b195d9f9ef"/><file name="afs_origin.php" hash="a6b7e39a687210572c116afcbea0e7cb"/><file name="afs_query_base.php" hash="7209115a714d9b7de209a0af691c1d22"/><file name="afs_query_parameter.php" hash="6552428d955d0a48c015e1f98ba62815"/><file name="afs_response_helper_base.php" hash="b087f7bdad35ed0526566042ef9afc8c"/><file name="afs_single_value_parameter.php" hash="65d002d7ac6b6e8dd6170309b4c84649"/></dir><dir name="AIF"><file name="Makefile" hash="2d232abf9913fcabb44033d5e5d1ebfd"/><dir name="TEST"><file name="Makefile" hash="24d3030d27e88732028d14fb1d81c203"/><file name="afsMultipartResponseTest.php" hash="70a64d0d599ea01806fac2126fb3680a"/><file name="authenticationTest.php" hash="2e476e9ab15ee221ddd63bb555262a28"/><file name="bowsInformationTest.php" hash="3bbfe71f431a35f0285afdca40906874"/><file name="documentManagerTest.php" hash="ad90a6146f5aeee383355bb05425b3dd"/><file name="documentTest.php" hash="59b204b10b90cd764b259ad4c2bc043a"/><file name="pafConnectorTest.php" hash="ac2928b501d9ea167af43dbf3adafa7d"/><file name="pafLiveTest.php" hash="92862c31d151c34b2caf44bff9d0fb80"/></dir><file name="afs_about_connector.php" hash="8972264a9b7cce237ad1a4b47852b529"/><file name="afs_authentication.php" hash="4285035550c9681a047b85abbca64936"/><file name="afs_bows_connector.php" hash="47a6bcafd5eba2361d2cea409f60d3f7"/><file name="afs_bows_connector_interface.php" hash="8fdf9749f0500a39741d696feb55af14"/><file name="afs_bows_exception.php" hash="1bd8657a37b8b4a9e08bfc4eb6b7e416"/><file name="afs_bows_information.php" hash="1f96a4cd84b2332f1186f9e0cea8542d"/><file name="afs_bows_information_cache.php" hash="1ae9a9243342c4e58a52e70473b68472"/><file name="afs_document.php" hash="c0003ec962a79b9d3f642b17bade0fff"/><file name="afs_document_manager.php" hash="8c5c0105d9337b7ae6a9f041f643ea88"/><file name="afs_multipart_response.php" hash="f2077c9eaf121fabdb2fc26c23b2e256"/><file name="afs_paf_connector.php" hash="96111b0536c83874b7c06ada5577106b"/><file name="afs_paf_live_connector.php" hash="9efeb2716f6d95e666f9c37726869fe7"/><file name="afs_paf_upload_reply.php" hash="0cb4905d1c894637d5e6acbd2cffc112"/><file name="afs_token_authentication.php" hash="1f003310f156f0a71db1d273375172d8"/><file name="afs_user_authentication.php" hash="03deeead93ee32753f2f7f80cfc011f4"/></dir><dir name="COMMON"><file name="Makefile" hash="7bb31592939024f74745d6b6cb7fec0b"/><dir name="TEST"><file name="Makefile" hash="d568cfe3683543f363312aa4b6d2bbad"/><file name="languageTest.php" hash="ad0f75b1c2f320c81eba32cade86191c"/><file name="toolsTest.php" hash="9276cb1a275d697f8e8365f2ac340cdf"/><file name="userSessionManagerTest.php" hash="b2b78d6fa156f1a61065f8ee5bfc6e0b"/></dir><file name="afs_connector_base.php" hash="b6b1f091ec71e5b92e4a1e5ca958255f"/><file name="afs_connector_interface.php" hash="68ad5e20a861b85dbf198f79cd2afd4c"/><file name="afs_exception.php" hash="b8eed4376088ae3003d0b77cc523e732"/><file name="afs_helper_base.php" hash="839cca78a663c3a22b4a8e35d1460129"/><file name="afs_helper_format.php" hash="30a3f6e945db7412ef95e83e7b0b5898"/><file name="afs_language.php" hash="277acb15b86089b37c812c47f2141d3c"/><file name="afs_service.php" hash="12c00c906e130860120552c40fa9dbc2"/><file name="afs_service_status.php" hash="1dee172850a76b46987534df89013878"/><file name="afs_tools.php" hash="26f6c01c5a61987925385e7a35260399"/><file name="afs_user_session_manager.php" hash="abd625f6b7b5cecf386dac9d82887764"/><file name="afs_versions.php" hash="556c912ff7f19f5083c4fb44d4d40ac6"/><dir name="lib"><dir name="JsonPath"><file name="JsonPath.php" hash="baa12e1baa9f8a20a095463042e96ad3"/><file name="JsonStore.php" hash="a9632aeb2126e98db9a49403a8f2ff77"/></dir></dir><dir name="php-SAI"><file name="README.md" hash="63ab581c83fe44918e6d074e20f08f95"/><dir name="lib"><dir name="Curl"><file name="Handle.php" hash="0fc7132737da7cee7df6b974447864ac"/></dir><file name="Curl.php" hash="358e4d3afca2035ee4d3f99f372ed15a"/><file name="CurlInterface.php" hash="714fa045dd4546d0c92cd022efb09422"/><file name="CurlStub.php" hash="fbdc0ece6321c5b5a1e27a65449f4a1f"/><dir name="rb_temp"><file name="HttpClient.php" hash="091b91c98acf9f1cd6c3d6d75cddfb88"/><file name="MultiCurl.php" hash="916e85d73bae6e136f889166ebc6db17"/><file name="SimpleCurl.php" hash="c296966a8bda96e03b464a1d3a9c8e06"/></dir></dir><dir name="tests"><file name="SAI_CurlStubTest.php" hash="bce69cbb17a40bd4eeba6bad1133216e"/></dir><file name=".gitignore" hash="09e625dea07b4d4098b19ec998d266f9"/></dir></dir><file name="COPYING" hash="b234ee4d69f5fce4486a80fdaf4a4263"/><file name="COPYING.LESSER" hash="4fbd65380cdd255951079008b364516c"/><file name="FAQ.md" hash="7d7c886674d70a0047303c5d93de6165"/><file name="Makefile" hash="225475a5a4a0204cecbb77621ff38bb2"/><file name="README.md" hash="7ecfd33825a0e6bc50cca099c1c0e50e"/><file name="afs_lib.doxygen" hash="8128d53d894cc57e08142377d13c72f4"/><file name="afs_lib.php" hash="946834742cd313e818f79bb96b6dfb52"/><file name="afs_version.php" hash="d2d295f9758c29cb26173f9095ff1400"/><file name="composer.json" hash="39190df70fafa99d7eb5ab566e8edf3f"/><dir name="doc"><file name="afs_filter_documentation.dox" hash="3bf4b96e25d95ce5953b822038c6f135"/><file name="afs_paf_upload.dox" hash="d36893db0234f171e6cfb43f6e13d47c"/><file name="afs_search.dox" hash="b1c5ab8728703822f910852cd17561f4"/><file name="afs_search_coder.dox" hash="77709e1bc691301017f0982e0348a9b9"/><file name="afs_search_query.dox" hash="21dcd1734a165a4cb3b4f62c42a6a0be"/><file name="afs_search_reply.dox" hash="cdb1d42447671f4352927b40b3f8f37d"/><dir name="data"><file name="acp_helper_example.php" hash="2815890e7afbae78e7eb4e6fc5c88f6f"/><file name="full_example.php" hash="e152a964d06e55de460c596070c714d8"/><file name="full_lightweight_example.php" hash="eac3bb2d251052f547a9f737e5cd0461"/><file name="raw_example.php" hash="703356b9284e7fe904cf1334abbe08c9"/><dir name="templates"><file name="error_template.html" hash="70f44bd0f45470d379a11d0a2fe507e4"/><file name="facet_template.html" hash="6836005a7dae45e9415273f1eb6b78e2"/><file name="facet_values_template.html" hash="9b41f2b55a1cecae5724b4fcd4a46cfb"/><file name="meta_template.html" hash="e664a3bb222d272ce2451fb10bf46de4"/><file name="pager_template.html" hash="2700ab5b60a1f9553b1c39374fda63d4"/><file name="result_template.html" hash="1572a4ef4e8dda0b3db1ea77bbed4a98"/><file name="spellcheck_template.html" hash="8042054a1f5a271b47c77f81436c4791"/></dir></dir><file name="detailled_integration_example_with_template.dox" hash="26ef377a6ef546b636a0e254d11d01f5"/><file name="lightweight_integration_example_with_template.dox" hash="5a388d2dbfad63ad6ec353407b79a6bb"/><file name="logo-antidot-long-200x41.png" hash="1ceac3fff767fb5e395bd767344a3d13"/><file name="main.dox" hash="ca3e97f95deead927fb3298ecafbad5e"/><file name="raw_integration_example.dox" hash="56a7126d008c2e49abdf9bf0b5ec9717"/><file name="template_prerequisites.dox" hash="baa24a943e19ff3654227850bd316abb"/><file name="templates_in_details.dox" hash="5e8db94382f1fbd6c4e0b424a9edc9a3"/></dir><file name="rules.mk" hash="ff48aa6a5c40e31b3f38aba1267e9a71"/><dir name="scripts"><file name="gen_doc.sh" hash="0f6fc60aca94da563397d3c710bd9d33"/><file name="increment_version.sh" hash="431db9c60d2f94d251be07957787fcb0"/><file name="print_version.sh" hash="a05ddc19cd27ff185721fe2bd0cffc25"/><file name="version_management.sh" hash="3d5ecd39f45ba081144b3033dbd14330"/></dir><file name=".gitignore" hash="0292f51c0906b2092255872c69603f29"/><file name=".travis.yml" hash="4330b9c449e9cd0e97829f679c2a2786"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="mdn"><dir name="antidot"><file name="CollapsibleLists.css" hash="c956d83facc41a97bf14726dcb953edb"/></dir></dir></dir><dir name="images"><dir name="mdn"><dir name="antidot"><file name="base.gif" hash="1f71b021e061a4948d69adc4ff10ccad"/><file name="button-closed.png" hash="563b78324e0712c0902cb4f77cb9eb86"/><file name="button-open.png" hash="c710849a0d2b61ad1f0fc36c0e59d131"/><file name="button.png" hash="97f3055c5046c851eea2dad7e5227508"/><file name="cd.gif" hash="f41037663522fab5c5c31530c7fa43d8"/><file name="empty.gif" hash="df22aff6e941ff1cc577333d1712b584"/><file name="folder.gif" hash="ea16980ab437fa6ba4aba3d480e83e9e"/><file name="folderopen.gif" hash="18aa3d75315bf95bf080357733437fcc"/><file name="globe.gif" hash="d6b48614cf8dc9553e077c19197637d2"/><file name="imgfolder.gif" hash="1d488d377762e65ab4e8b691ba01e5a4"/><file name="join.gif" hash="4d5d614e0da056df815a4306d6368692"/><file name="joinbottom.gif" hash="4b3daa7f2cc584f1aac0d142275d7cba"/><file name="line.gif" hash="63ab38a6203262f15ca46c631232ea2c"/><file name="list-item-contents.png" hash="00ae24d5bc76df9eedaea597859963e4"/><file name="list-item-last-open.png" hash="615ddd71f81b240e9ed7d4e383b2c01a"/><file name="list-item-last.png" hash="e2bfb790f46855c378e50f3c0a82ea01"/><file name="list-item-open.png" hash="732d1cc59f3a488c89c624eb434eac98"/><file name="list-item-root.png" hash="5529d21e7ec68e9cb750a4895ff0b480"/><file name="list-item.png" hash="e03ec1bf3d9e16bb3005ccf8d26eaa6c"/><file name="minus.gif" hash="d647fbbd0ec410b8f3bb3357b62eedcf"/><file name="minusbottom.gif" hash="b09d684cca7135ef728141aaf2464baa"/><file name="musicfolder.gif" hash="21ece951734f23adb2f75befe1f31fc1"/><file name="nolines_minus.gif" hash="eb2243a354ffcfac93ba0fe948f7167d"/><file name="nolines_plus.gif" hash="ec92b634b63608fb4b0dbf114e3b89e1"/><file name="page.gif" hash="c25b136c1cb3bb145495c25b35d93754"/><file name="plus.gif" hash="5c55d798909c553deca31d610bd18fac"/><file name="plusbottom.gif" hash="1924ce363c38a992f888a4df48c0b274"/><file name="question.gif" hash="ea0ca196ce0ebfd625cc1210abfdec6c"/><file name="trash.gif" hash="6cbfd3ed29531044aed9b4edb3cca9ad"/></dir></dir></dir></dir></dir></dir></target></contents>
23
  <compatible/>
24
  <dependencies><required><php><min>5.2.0</min><max>5.6.0</max></php><extension><name>curl</name><min/><max/></extension></required></dependencies>
25
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Antidot_Antidot</name>
4
+ <version>1.2.2</version>
5
  <stability>stable</stability>
6
  <license>LGPL</license>
7
  <channel>community</channel>
17
  Add cdata for variant name&amp;#xD;
18
  Add variant details for grouped products</notes>
19
  <authors><author><name>Antidot</name><user>antidot</user><email>contact@antidot.net</email></author><author><name>Antidot</name><user>antidot</user><email>contact@antidot.net</email></author></authors>
20
+ <date>2015-11-23</date>
21
+ <time>16:47:02</time>
22
+ <contents><target name="mage"><dir name="shell"><file name="antidotExport.php" hash="a4e184cdf1add5d42484e6997ea6f59c"/><file name="antidotExportCategory.php" hash="10de34988223fc8ca26e6f30c4070733"/><file name="antidotExportInc.php" hash="18f1b60b93245e2daf423c614dcd7efa"/><file name="antidotExportProduct.php" hash="9ddd7f0ba8e54b24665a32d26e5231b4"/></dir><dir name="i18n"><file name="de_DE" hash="f166a5ff29213a44fca77277b053897e"/><file name="en_US" hash="63c821044fda6f7c2a26dc84670b25bd"/><file name="es_ES" hash="f9319039054998955d63d51ed0930f3f"/><file name="fr_FR" hash="632367797f2fa9fef06e0b0c69377e01"/><file name="i18n.php" hash="0780b44563432f6e70de78f7a9d60f54"/></dir></target><target name="magecommunity"><dir name="MDN"><dir name="Antidot"><dir name="Block"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2158b991ccdf394c8cd47cab00829e4d"/><file name="Boolean.php" hash="d17b08e1ec9047cf4050442ababd0808"/><file name="Category.php" hash="78cb53233ad74a2b5496d6f7857d8837"/><file name="Decimal.php" hash="75b31617bca2a8f20ee7fe113e3534f2"/><file name="Price.php" hash="244068a33e8ba64423c126baf883d2b5"/></dir><file name="View.php" hash="bbdd9bb31663415001ab3751c6737cde"/></dir></dir><dir name="Catalogsearch"><file name="Banner.php" hash="cfc866a6c1cfb2ee9cb690bed84781fe"/><file name="Category.php" hash="e9605415ba85929115a443b1b4f00ab0"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2b274bf7d8f8dbd915bdf73f65e694fc"/></dir></dir><file name="Layer.php" hash="3ba32c0f20c4b7447229843f45b06d3f"/><file name="Result.php" hash="887530a08ce375d1722fc327eebc64fc"/></dir><dir name="Html"><file name="Select.php" hash="fc7fb19df1dd378d4e9e0860d2d47d07"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="4f00570d46d27d1cf89785e8db42a332"/><file name="Forward.php" hash="3917a1882c3d55837138782e60791167"/><file name="PushArticles.php" hash="c7d0ce7326c7f706c0432a2ffb57fee2"/><file name="PushCategories.php" hash="2caeb40ae6a5abe77be2ca666c01ed81"/><file name="PushProducts.php" hash="3eb6538ab55257b0a83021ff1ecbf632"/><file name="RestoreTemplate.php" hash="ffbbb0a73ff1ede611262a6a4da1a188"/><file name="ShowXml.php" hash="417ba0c9c62d8070b63f90397887dcc0"/></dir><dir name="Fieldset"><file name="Notice.php" hash="47601ca6e7732a9d22ecd25f3f1cd7bb"/></dir><dir name="Form"><dir name="Field"><dir name="Array"><file name="Additional.php" hash="d62316e3631c1c2b6a0119134c8002a8"/><file name="AdditionalFeed.php" hash="dcfb6d37d765a10e4a07465e70133dda"/><file name="ArticleAdditional.php" hash="38c62d610f585c460151841f7350348b"/><file name="ArticleIdentifier.php" hash="ec9479fd1ca087a1fe924795cc9ff5f6"/><file name="DefaultSort.php" hash="4989d99a73f57bed1fb994060cc38a72"/><file name="Facet.php" hash="7217f2296afaf11f514e4212a7a82cb9"/><file name="Identifier.php" hash="a9fa99227182bd72e59c9a315d580247"/><file name="ProductAdditionalFacet.php" hash="8d46e427d9efbac7e6ba04fdc88d4728"/><file name="ProductAdditionalField.php" hash="9c9f9c9c1c940963e1a24c039a392cc4"/><file name="ProductIdentifier.php" hash="d30809119cb35018697533075f7ee485"/><file name="Sort.php" hash="f986fbb048bf3f6aec813cdc1c70ec15"/></dir><file name="CategoryAttribute.php" hash="c119ca65f23950e7abb1f0d60e8b4755"/><file name="ProductAttribute.php" hash="6a61b98a9f6ac883a5e162e3edab300d"/></dir></dir><dir name="Html"><file name="Export.php" hash="f36beeca11c51e1a2e9678955d8cf1b8"/><file name="ShowXml.php" hash="7b70f39937aa9d24336edde6bdbdf97c"/><file name="Version.php" hash="34c624c382f3061cf322cfed52c416ac"/></dir></dir></dir></dir><dir name="Helper"><file name="Antidot.php" hash="7bbd2866c65a847e1415badb1ef0d015"/><dir name="CatalogSearch"><file name="Data.php" hash="81cc908609e68035d5714488f913e688"/></dir><file name="Compress.php" hash="12fa64a9c9f519a3f249954ab780e01c"/><file name="Data.php" hash="db586edb739ad7f7b0281a887e252a61"/><dir name="Enterprise"><dir name="Search"><file name="Data.php" hash="8bfe0146c64511f86cb796638b65112f"/></dir></dir><file name="LogExport.php" hash="6d6b262327bf1d920fc2b5b112edfef6"/><dir name="ManaFilters"><file name="Data.php" hash="f4f4e92c5e33c6142904cf27a75f6d23"/></dir><file name="Url.php" hash="1d2ee02a8e135bfc4b866f5219f62acd"/><file name="XmlWriter.php" hash="66cf65d950caddf895c823c5575a1912"/></dir><dir name="Model"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="3cd18414abccea60c5497931bc95e21e"/><file name="Boolean.php" hash="dd0414e0d96833bec6e32aac321c2763"/><file name="Category.php" hash="4dea470cb36708e0ae4b95bd0a24a85f"/><file name="Decimal.php" hash="b9b1e2cff1d0332fab77d101dca4c3d2"/><file name="Item.php" hash="c89bbca267af18a0447e0daf3e7cc8eb"/><file name="Price.php" hash="7529be0313a19896993f92eeb9dfc8a9"/></dir></dir><file name="Layer.php" hash="706000dd944a45f30826eccba2942862"/></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="a83d6761a949c8196cba33948a48c8bf"/></dir></dir><file name="Layer.php" hash="b5aa8e2cc24f1b1362749049f1cdec32"/><dir name="Resource"><file name="Attribute.php" hash="80d2a34d746f307109b6bf910b0f2958"/></dir></dir><dir name="Export"><file name="Abstract.php" hash="76d9e775c5cbdcb45c02cd2af1779b60"/><file name="Article.php" hash="3fd18081b1013360d2f151931e16a4eb"/><file name="Category.php" hash="e4c1f09bd75f6cda693ab6aab084e5b4"/><file name="Context.php" hash="d63d33f2dfa968e90ed11a6f76f41a34"/><dir name="Model"><dir name="Product"><file name="Link.php" hash="6f764a25fcde9b315d10f46189a428d1"/><dir name="Type"><file name="Configurable.php" hash="4bb627c1f5d1fbadd37a6b54e681406f"/><file name="Grouped.php" hash="8770d1ddf8228a2db136325da494de51"/></dir></dir><file name="Product.php" hash="a56c7e50bbd95c57570e38d911976962"/></dir><file name="Product.php" hash="008cb58f7dab43f01ec5a2ef65dd7d58"/></dir><file name="Observer.php" hash="dbe10b9c6996878f06db435b6321d8f2"/><dir name="Resource"><file name="Advanced.php" hash="989026021706cbcfb269451187002c19"/><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="a761f935c0e3c4da1fec329c2c80f5b1"/></dir></dir><dir name="Engine"><file name="Abstract.php" hash="a341a04e6c7fe367a7da0e91ce205034"/><file name="Antidot.php" hash="eda85b16354da0f3d87cb4186c5bad43"/></dir><dir name="Export"><dir name="Product"><file name="Collection.php" hash="dfa31e927797fb1887aec5fcec2747d1"/><dir name="Link"><dir name="Product"><file name="Collection.php" hash="a50b67c39520422770b4b16d4ab51ba0"/></dir></dir><dir name="Type"><dir name="Configurable"><dir name="Product"><file name="Collection.php" hash="79d359ae0e176d3499225452d983c210"/></dir></dir></dir></dir><file name="Product.php" hash="f3e87d35ea55e911948f3909274e29b3"/></dir></dir><dir name="Search"><file name="Abstract.php" hash="fd71154b987b16f8d13bc3e10a3faeac"/><file name="Search.php" hash="823655bc366531ba97bd707adc723aa9"/><file name="Suggest.php" hash="6caac0bb7683b1d330049ed0d606f36f"/></dir><dir name="System"><dir name="Config"><file name="ArticleAttribute.php" hash="f3a9596d45f275299f16530a56845c96"/><dir name="Backend"><file name="Engine.php" hash="68c93651655a77c74fd79d1de6d19be3"/></dir><file name="CategoryAttribute.php" hash="9f19b99e16c99b0e8052b1e31d2a6317"/><file name="Dir.php" hash="c80d83280ebc5ab91fd45d246ec47ba3"/><file name="DisableEnable.php" hash="6d08f33a1580b2fd1d58d87248104166"/><file name="ExportType.php" hash="940a74862d74f7873258b35c33b7b87a"/><file name="Facet.php" hash="8b771072a32f32e81a087581ace7fd72"/><file name="Number.php" hash="7985ea6c495a35173d68291389319f93"/><file name="Options.php" hash="06930da994dec4bb05ebc3f3e8c8abb8"/><file name="ProductAttribute.php" hash="c74ad00177c3a12b03c8684928d12c40"/><file name="PromoteRedirect.php" hash="c167973ea7a0ef09f0e5fa0fd0a08926"/><file name="Sort.php" hash="e0d2c1e72f56894b75baebcb6c4b8609"/><dir name="Source"><file name="Acpengine.php" hash="fdf8d5030d8823c325d707d8bb5b7208"/><file name="Engine.php" hash="0491592c4612779ffc7890456f6b946d"/><file name="Redirect.php" hash="ea6cb67ab98a0303d5c30c49099f5708"/></dir><dir name="Suggest"><file name="Type.php" hash="cef491efdb9fcef86d0df75030206a78"/></dir><file name="WSStatus.php" hash="ff4954e15d75dd3139290d96773d0abf"/></dir></dir><dir name="Transport"><file name="Abstract.php" hash="3272c44b08523a9836aa15c835e2ed25"/><file name="File.php" hash="4b0b2ef7940fc8cd60e96cc74a2c84f0"/><file name="Ftp.php" hash="73056ec4decef2fe9c459641e0a0ae7e"/><file name="Http.php" hash="61f334dead64bcc6b9882e1f72d64eb8"/><file name="Interface.php" hash="40cfaad8efccad7dc3ff7a920dee871a"/></dir><file name="Transport.php" hash="dfbe060f5575304736ba805f597f7393"/></dir><dir name="Test"><dir name="Block"><dir name="Catalogsearch"><file name="Layer.php" hash="49725570e661d72db50daab46e0e18af"/><dir name="Result"><dir name="fixtures"><file name="testSetListOrders.yaml" hash="3077a3199216b898963f1bcf9f4d7396"/></dir></dir><file name="Result.php" hash="a780e377612d4481c4f0c96311005620"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="dcbfefb440b8512b1298b624a3582076"/></dir></dir></dir></dir><dir name="Helper"><dir name="CatalogSearch"><file name="Data.php" hash="a40c1e58b5000432763aa07dd49d4b5d"/></dir><file name="Data.php" hash="9c21bd8bfa43dab48d95a886812587e6"/></dir><dir name="Model"><dir name="Export"><dir name="Abstract"><dir name="fixtures"><file name="testGarbageCollection.yaml" hash="de6c8672be0c24a102ebfed004f2361b"/></dir></dir><file name="Abstract.php" hash="a0768006a76b1e3004f8839988dc2d4d"/><file name="Article.php" hash="157dc12608521f1ad255142f0143ef18"/><dir name="Category"><dir name="fixtures"><file name="testEmptyFile.yaml" hash="9573e620466cfe8260f8a87e274c8261"/></dir></dir><file name="Category.php" hash="42164121852311eb200af116e0a20d58"/><dir name="Context"><dir name="fixtures"><file name="testContext.yaml" hash="d912a7bd71a209f591043a3644de3ceb"/></dir></dir><file name="Context.php" hash="c5af056a47ee7acdacbe7072a825ce90"/><dir name="Model"><dir name="Product"><dir name="fixtures"><file name="testGetIsInStock.yaml" hash="b9a95c8ad5b3999221d027192d79fe55"/></dir></dir><file name="Product.php" hash="a3b6765c5c663caa1a50dc511c78db5e"/></dir><dir name="Product"><dir name="fixtures"><file name="testInactiveParentCategory.yaml" hash="3ef9bcefae6399ccdc23e026746a1743"/><file name="testWriteImageUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWritePricesFixedtax.yaml" hash="698da07581100c1eff5a1a85e2be6d3b"/><file name="testWriteProductNoVariant.yaml" hash="626a27b35977e5a52b02f85011c5e216"/><file name="testWriteProductNoVariantInStock.yaml" hash="9aa7736a422276842350ac73c6f4ba55"/><file name="testWriteProductUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWriteProperties.yaml" hash="d434749b80908bbceefd5781e2d0e998"/><file name="testWriteXml.yaml" hash="8a702dfbd07f2d773d991679a2c219a0"/></dir><dir name="providers"><file name="testWriteImageUrl.yaml" hash="666c33585c611bcc0b0ebe6e87dce1fc"/><file name="testWriteProductUrl.yaml" hash="18f511460efea04586fc888f5c85b3ea"/></dir></dir><file name="Product.php" hash="032f8ca084fb1ec71aeac8ca0ffb2d6f"/></dir><dir name="Observer"><dir name="fixtures"><file name="testGetDefaultContext.yaml" hash="d77af9c502bf7e7c90fdb3aad609c087"/></dir><dir name="providers"><file name="testGetOwnerForFilename.yaml" hash="c5c07e73f536f9ffacc0c3ff6b5a13d1"/></dir></dir><file name="Observer.php" hash="c69240a8fe5a637c3aa447c94550e268"/><dir name="Resource"><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="2ad006d8e096ade9043a9a370177782d"/></dir></dir><dir name="Engine"><dir name="Antidot"><dir name="fixtures"><file name="testFormatResult.yaml" hash="f4aa0a050156b55c5733c5d30f4255ed"/></dir></dir><file name="Antidot.php" hash="5dff5053128f275557772330716da04c"/></dir></dir><dir name="Search"><dir name="Suggest"><dir name="fixtures"><file name="testSuggest.yaml" hash="e845f0311d93608e3221fb0678f429cc"/></dir></dir><file name="Suggest.php" hash="d97172c8ec094146f953a9704f8e1936"/></dir><dir name="System"><dir name="Config"><dir name="Facet"><dir name="fixtures"><file name="testToOptionArray.yaml" hash="b76143bd57f68be024a31d905da9cabe"/></dir></dir><file name="Facet.php" hash="0115c27c5881ff9d35f18a251686dc68"/><dir name="Sort"><dir name="expectations"><file name="testToOptionArray.yaml" hash="13fc5b4c17962fb267f443d03a2219b2"/></dir><dir name="fixtures"><file name="testToOptionArray1.yaml" hash="3160d541123737644dfea5c70db35f41"/><file name="testToOptionArray2.yaml" hash="74fd97f93892920908ab7eab0124eeb6"/><file name="testToOptionArray3.yaml" hash="fe9c8a5da75f3c0d66304a39c473a3bb"/></dir></dir><file name="Sort.php" hash="3435402ae9aa30d18c8265433d643d21"/><dir name="Source"><file name="Acpengine.php" hash="482bcb056949d9d52eda623ee9bdca0d"/><file name="Engine.php" hash="dcbee0d360773c28faa8a894cbed22ad"/><file name="Redirect.php" hash="2dbbaecbb8453ba1025e2e9b5a5957c3"/></dir></dir></dir><dir name="Transport"><file name="Http.php" hash="e517ff2ab7ddf5ba61bfe6ffb0227ad9"/><dir name="fixtures"><file name="testSend.yaml" hash="af0bc3c97a109e63aaf018f57ddad6cd"/></dir></dir></dir><file name="PHPUnitUtil.php" hash="2a128a7c19f4c37cb9dd7fc60e679693"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Antidot"><file name="PushController.php" hash="6dc15f43dbaef76efa4e0462cf6cf3aa"/></dir></dir><dir name="Front"><file name="SearchController.php" hash="d220bd4628830ea238775ed9788e0674"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="7190cd220b09b657ba9b767614aeebb2"/><file name="config.xml" hash="045a13091daac0b33bee10d17f0be393"/><file name="system.xml" hash="38a2d1d570abe54b646b6f598fc952fc"/></dir><dir name="sql"><dir name="Antidot_setup"><file name="mysql4-install-0.9.php" hash="62672bc47ea92dbd46966fb76e4251e0"/><file name="mysql4-upgrade-1.2.1-1.2.2.php" hash="fe774495c51921c2affeb8a472c049ff"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="antidot.xml" hash="5124433ec044f619ae99afb074ed6efc"/></dir><dir name="template"><dir name="antidot"><dir name="catalog"><dir name="layer"><file name="category.phtml" hash="125de3812ded3b341ab6f1a1f2f92777"/><file name="filter.phtml" hash="2304baebff9b798e0ebd977fbc891346"/></dir></dir><dir name="catalogsearch"><dir name="result"><file name="banner.phtml" hash="4dc4b69ef2dd51aad9689dbfb2bf8f48"/><file name="category.phtml" hash="7413580b825508f2cfc08566d62369ae"/></dir><file name="result.phtml" hash="de6eecf5bd733d3440c843133afea8b6"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="MDN_Antidot.xml" hash="988c6b7e9da4e50f1727956833ab1696"/></dir></target><target name="magelocale"><dir name="de_AT"><file name="MDN_Antidot.csv" hash="bd59e534fb9a44fdb706867d43479b85"/></dir><dir name="de_CH"><file name="MDN_Antidot.csv" hash="bd59e534fb9a44fdb706867d43479b85"/></dir><dir name="de_DE"><file name="MDN_Antidot.csv" hash="bd59e534fb9a44fdb706867d43479b85"/></dir><dir name="es_AR"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_CL"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_CO"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_CR"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_ES"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_MX"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_PA"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_PE"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="es_VE"><file name="MDN_Antidot.csv" hash="58b985f371a2e1a5af049365267cc318"/></dir><dir name="fr_CA"><file name="MDN_Antidot.csv" hash="5d362c657f256fd1b6a0fb4993f48cd0"/></dir><dir name="fr_FR"><file name="MDN_Antidot.csv" hash="fff8f36a7da80f27f3075ba84b6cf748"/></dir></target><target name="mageweb"><dir name="js"><dir name="mdn"><dir name="antidot"><file name="CollapsibleLists.js" hash="86792ecde0c2759ba85e0d863dd147ce"/></dir></dir></dir></target><target name="magelib"><dir name="antidot"><dir name="AFS"><dir name="ACP"><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="acpConnectorTest.php" hash="25a8194f3dc8895640df4f4bba895d8e"/><file name="acpQueryTest.php" hash="74ad65a4af639a409ee72a75a2a043d6"/><file name="acpReplysetHelperTest.php" hash="4f0a0d471a06e139cd11c715b67ebe81"/><file name="acpResponseHelperTest.php" hash="6d30f99108db0d9956aef9ba5e1d88df"/><file name="acpTest.php" hash="d6119d150543e7943ba4e9907901ae5d"/></dir><file name="afs_acp.php" hash="78dbfbc92f68469c92898f1da4263e68"/><file name="afs_acp_configuration.php" hash="2d644cc6c5bf2cdaeca5780576c4bf0e"/><file name="afs_acp_connector.php" hash="b72439562b02024e0b9629c18394985d"/><file name="afs_acp_exception.php" hash="f610d2cc37a15d4b981d7b43939414ad"/><file name="afs_acp_query.php" hash="ced0629355f5d4fc1c219d1adb03297d"/><file name="afs_acp_query_manager.php" hash="b3348972a850c904fc664b4e27671439"/><file name="afs_acp_reply_helper.php" hash="b0259f24f10d2e92ed6e3b8cdaaacc44"/><file name="afs_acp_replyset_helper.php" hash="07e7fdb88a42a399c96261c47ffb0231"/><file name="afs_acp_response_helper.php" hash="33a66106fd3a94194514a0d8d39af1cd"/></dir><file name="Makefile" hash="7bb31592939024f74745d6b6cb7fec0b"/><dir name="SEARCH"><dir name="FILTER"><file name="Makefile" hash="d42338199c6857ded179af2117b9f571"/><dir name="TEST"><file name="Makefile" hash="ab37090c6c5e7af1b260376237737700"/><file name="filterBuilderTest.php" hash="161ff5c8e73914eef884d17456afa133"/><file name="filterCombinationTest.php" hash="2162288d5255d3b24fe94d75b939aa51"/><file name="filterTest.php" hash="1682c0a4d50158a8d2c9369d30e45a18"/><file name="groupFilterTest.php" hash="1ebe8ce7344ed64b93cf94632d3b0184"/></dir><file name="afs_combinable_filter.php" hash="336e6c6bc9ebae3f58602d23ef734182"/><file name="afs_combinator_filter.php" hash="e2fc560b9c0c31f20c73f2057a8b7b69"/><file name="afs_filter.php" hash="6dbfc8c668cd48510cc9a9243d1bf4c3"/><file name="afs_filter_exception.php" hash="ccce583c63a4a65f7f0a27fc4a487505"/><file name="afs_filter_wrapper.php" hash="30dec104456abc037019ad93922b5afd"/><file name="afs_group_filter.php" hash="b95fa3bc0e26bc39dfc53a6010bce32f"/><file name="afs_native_function_filter.php" hash="37176bdbc66cc3dca18149132921f0a5"/><file name="afs_operator_filter.php" hash="c7ea43c8d64eedbe33397f61737e0226"/><file name="afs_valued_filter.php" hash="483653071734f77972c9b9771e187d82"/></dir><file name="Makefile" hash="0f76232bfabc275a3dac973666fb5dae"/><dir name="TEST"><file name="Makefile" hash="ce56cc786e1df50148e1d3222c05e5f8"/><file name="clientDataHelperTest.php" hash="1556ab047e1df23447586d529768befd"/><file name="clusterHelperTest.php" hash="e112e7c756f63c8e8ceb554281b418c9"/><file name="conceptHelperTest.php" hash="b44e39b62d0537bf1f7b7feb23f8111f"/><file name="facetDefaultTest.php" hash="382e4ea35e1c7173371b4a84046a38e5"/><file name="facetHelperTest.php" hash="4af0256294abbea651d1b8d06832556b"/><file name="facetManagerTest.php" hash="bbef8e207c387dbe6a26142fd55264d5"/><file name="facetTest.php" hash="26123aa75cb2597a3ededfa9d778095d"/><file name="facetValuesSortOrderTest.php" hash="b650080bf9b2cce2ac42a245cb84c911"/><file name="feedCoderTest.php" hash="f2b5dfdd4fa3c4e5d14c790d15235146"/><file name="filterCoderTest.php" hash="46249fa13edccf1e5d5000daf2573b77"/><file name="headerHelperTest.php" hash="62185c34e1e9015bb12014d719287f06"/><file name="helperConfigurationTest.php" hash="be3f74e53e27744e8214f3c341172796"/><file name="intervalTest.php" hash="912389dad049853f6bf0b4eab2af5034"/><file name="metaHelperTest.php" hash="080f160b54636c4eee743544a6a12bee"/><file name="pagerHelperTest.php" hash="d96a9891523e453647493f3219e86357"/><file name="promoteBannerReplyHelper.php" hash="94c3c14517536437e9800eaa706fbe29"/><file name="promoteRedirectReplyHelper.php" hash="ed00c66be5127d8b374f6416abf328ef"/><file name="promoteReplyHelperTest.php" hash="7cbb68a7f50c2bd2ef11a085ac94deb2"/><file name="promoteReplysetHelperTest.php" hash="ac2f1e3073015143dc7b2b705711c845"/><file name="queryCoderTest.php" hash="03983a114c6697464f8bf016822ff4a3"/><file name="queryOrchestrationTest.php" hash="02867da7662cdb9f005eb9c1e73dfa30"/><file name="queryTest.php" hash="338264d8e6dbbc09e88bd9a8179e8be4"/><file name="replyHelperTest.php" hash="4d86f19ea7de2aece5d7fd9c143c3dbc"/><file name="replysetHelperTest.php" hash="897f074b8382c6853f51b06a5ee50b0a"/><file name="responseHelperTest.php" hash="ebb167e1c330af6aa0e6a2b917431040"/><file name="searchConnectorTest.php" hash="9201de573884b643041b6c32bc535e7e"/><file name="searchQueryManagerTest.php" hash="2188b262a1c11422bcc8133f68fa6dd9"/><file name="searchTest.php" hash="fa47a7819b5c7c71172d6b1f1e7a02f7"/><file name="spellcheckHelperTest.php" hash="49960fb90055dcf265ef41e491c11325"/><file name="spellcheckTextVisitorTest.php" hash="203f0d08f548a39135517a41f6e9e43a"/><file name="textVisitorTest.php" hash="b722845dd0f5f953574cb51284ad025b"/></dir><file name="afs_base_reply_helper.php" hash="57abe4828b7ed7126db963764faa718a"/><file name="afs_base_replyset_helper.php" hash="096b124a3ebdc6e8d6beb359bd8bb7c5"/><file name="afs_client_data_exception.php" hash="899957af974d04aa7eaca44903a7f86c"/><file name="afs_client_data_helper.php" hash="4700218e2400350014fde428bc86806b"/><file name="afs_cluster_exception.php" hash="86d97623db7aebaa28a20857ce2cf17f"/><file name="afs_cluster_helper.php" hash="60b7fbcc869a672929ef9fc6d840d2b2"/><file name="afs_cluster_parameter.php" hash="20ed527d3ed1a6cf2bc80e032ecd2c7e"/><file name="afs_coder_base.php" hash="fb87fbea43d12695154b3b6102e2a019"/><file name="afs_coder_interface.php" hash="3b179b2513e215751ee4edd190b2a719"/><file name="afs_concept_helper.php" hash="982cf3d2063c565cf19cc6136b049066"/><file name="afs_count.php" hash="9f83f3baa3cf4462c0db786f4eea479a"/><file name="afs_facet.php" hash="1b4d7d35ebe8ed4894fda4881d0b168f"/><file name="afs_facet_combination.php" hash="005e9742ee032194b86856195dd59f7d"/><file name="afs_facet_default.php" hash="cbcb5d28b7b00815ce5248017065e84b"/><file name="afs_facet_exception.php" hash="f1f0afdbf9a727b53c4731e5a40ac417"/><file name="afs_facet_helper.php" hash="b8ad96c57ec80f40bd21a39bb9b5fbb5"/><file name="afs_facet_helper_retriever.php" hash="5628cc41c50ab25fd3336df302d903f4"/><file name="afs_facet_layout.php" hash="c83f6fef1c13ba3cda667c611841ff87"/><file name="afs_facet_manager.php" hash="a3fabb34d56a9614d4a0a2917f6fea0c"/><file name="afs_facet_mode.php" hash="8dcac389a37f8267a367400377631dba"/><file name="afs_facet_sort.php" hash="0d7ba4059b10da9981b9c801355cb874"/><file name="afs_facet_type.php" hash="6df82cbfa627629f9523437994d1fbb1"/><file name="afs_facet_value_formatter.php" hash="d6580281f9ef5c0820615ac385aae863"/><file name="afs_facet_values_sort_mode.php" hash="17def98365132c810515f8cf3c6fb006"/><file name="afs_facet_values_sort_order.php" hash="f95f77cb5dd7015e4f2e6094ddba49a6"/><file name="afs_feed_coder.php" hash="ed7b40e872a7ed5aa30adbcffc05de56"/><file name="afs_filter_coder.php" hash="4edbdcf6760d80465e5d2533014ba307"/><file name="afs_filter_parameter.php" hash="2b03c2c83ffe2e2968aaf50ad4903921"/><file name="afs_fts_mode.php" hash="edbd9342cd9625183e1e01ed81b79fc3"/><file name="afs_header_helper.php" hash="c123aeb736bf2e0506e56831fe516800"/><file name="afs_helper_configuration.php" hash="dbd0378574fbc5729babfbddfef0fd67"/><file name="afs_interval.php" hash="dbf9749881be0a2b063f8a33dff214f3"/><file name="afs_interval_exception.php" hash="40f223de231df03aae59596c1a493065"/><file name="afs_meta_helper.php" hash="8403689868c98db725ebd11748508c8b"/><file name="afs_pager_helper.php" hash="077052931e0cffb1e589c21b57156b38"/><file name="afs_producer.php" hash="7c8c515ccb8126523fa0d09a7f759dd5"/><file name="afs_promote_banner_reply_helper.php" hash="418702b3c053029b3aa8fcb2775c65bd"/><file name="afs_promote_redirect_reply_helper.php" hash="be17eda6f8b4552b9ec21183362171a2"/><file name="afs_promote_reply_helper.php" hash="0e2a4f67cd307f74e8b64cd3b158235c"/><file name="afs_promote_replyset_helper.php" hash="fdefc6f8a686addb31ea9b6c0a3fa5ad"/><file name="afs_query.php" hash="bd969a62cd4bbbcb5b9996eaa19353f7"/><file name="afs_query_coder.php" hash="ca0bfad66b8d8549ab3f33380d716732"/><file name="afs_query_coder_interface.php" hash="dd16f17b3606a7418c1c714475b19b51"/><file name="afs_query_object_interface.php" hash="a9af13e2c856e4136ccadfff60f72d36"/><file name="afs_raw_text_visitor.php" hash="fd574583c4c9110165c1cadc67b832de"/><file name="afs_reply_helper.php" hash="3919f9e83cba62be9bc67117b1087b03"/><file name="afs_reply_helper_factory.php" hash="f159f7d0ef7e5a209fb872a970d0d582"/><file name="afs_replyset_helper.php" hash="cb8f81391d9a59904dcb0c3d6ae31999"/><file name="afs_response_exception.php" hash="0a865bb92fb700ae555dcb5ae675f644"/><file name="afs_response_helper.php" hash="048910936a0fc00705d3fd4ad39a0270"/><file name="afs_search.php" hash="3f2e3ef447515a2fa05b270654ef2969"/><file name="afs_search_connector.php" hash="17242fb6536f4596b2c0198a16986310"/><file name="afs_search_query_manager.php" hash="77e30683ee4ba9e004e9c7c12d9c811d"/><file name="afs_sort_builtins.php" hash="0cc1617a62f1a834a28d7d2ac249b081"/><file name="afs_sort_coder.php" hash="1dfe2d32278383d8465df67535cb91dd"/><file name="afs_sort_order.php" hash="7755deb99386650c9974871474168cda"/><file name="afs_sort_parameter.php" hash="bfb8c59c1560ec8a3b597dc45aa8ecd5"/><file name="afs_spellcheck_helper.php" hash="bb5465848ada7a9df9875f2565fb9686"/><file name="afs_spellcheck_text_helper.php" hash="3ca5c3118660aa600aadb504ceff6c4c"/><file name="afs_spellcheck_text_visitor.php" hash="c44c23ae21f61b065e457911bbc45ed2"/><file name="afs_text_helper.php" hash="59c4ae24560948c3af0f4adbf6bd1803"/><file name="afs_text_visitor.php" hash="867b44a280403cd4567358ec6d59588a"/></dir><file name="afs_configuration_base.php" hash="f26dd9efda4923cc2c71057f21be97d9"/><file name="afs_connector.php" hash="aa04a21163b57ef338bf96bd55e95882"/><file name="afs_exception.php" hash="c1840fe279f9cb313cec151012ed4513"/><file name="afs_feed.php" hash="005305cace79a3aa7719a3c942df9da7"/><file name="afs_multiple_values_parameter.php" hash="96dc30f1fbf137cbfd73c2b195d9f9ef"/><file name="afs_origin.php" hash="a6b7e39a687210572c116afcbea0e7cb"/><file name="afs_query_base.php" hash="7209115a714d9b7de209a0af691c1d22"/><file name="afs_query_parameter.php" hash="6552428d955d0a48c015e1f98ba62815"/><file name="afs_response_helper_base.php" hash="b087f7bdad35ed0526566042ef9afc8c"/><file name="afs_single_value_parameter.php" hash="65d002d7ac6b6e8dd6170309b4c84649"/><file name="orchestration_type.php" hash="047eab54be2eba5500ef747ab7f139b9"/></dir><dir name="AIF"><file name="Makefile" hash="2d232abf9913fcabb44033d5e5d1ebfd"/><dir name="TEST"><file name="Makefile" hash="24d3030d27e88732028d14fb1d81c203"/><file name="afsMultipartResponseTest.php" hash="70a64d0d599ea01806fac2126fb3680a"/><file name="authenticationTest.php" hash="e3a84092f7eb76bc3e44335a3a47bcdd"/><file name="bowsInformationTest.php" hash="3bbfe71f431a35f0285afdca40906874"/><file name="documentManagerTest.php" hash="ad90a6146f5aeee383355bb05425b3dd"/><file name="documentTest.php" hash="59b204b10b90cd764b259ad4c2bc043a"/><file name="pafConnectorTest.php" hash="f77eb3a317443916c8e8f2774ea732ec"/><file name="pafLiveTest.php" hash="92862c31d151c34b2caf44bff9d0fb80"/></dir><file name="afs_about_connector.php" hash="dd52b41d37d47867467165203de1d1ce"/><file name="afs_authentication.php" hash="90a2405786726a6c05c7b339dff7017f"/><file name="afs_bows_connector.php" hash="0f07eea36c8c1794e46fc34c3a8a7819"/><file name="afs_bows_connector_interface.php" hash="8fdf9749f0500a39741d696feb55af14"/><file name="afs_bows_exception.php" hash="1bd8657a37b8b4a9e08bfc4eb6b7e416"/><file name="afs_bows_information.php" hash="1f96a4cd84b2332f1186f9e0cea8542d"/><file name="afs_bows_information_cache.php" hash="1ae9a9243342c4e58a52e70473b68472"/><file name="afs_document.php" hash="c0003ec962a79b9d3f642b17bade0fff"/><file name="afs_document_manager.php" hash="8c5c0105d9337b7ae6a9f041f643ea88"/><file name="afs_multipart_response.php" hash="f2077c9eaf121fabdb2fc26c23b2e256"/><file name="afs_paf_connector.php" hash="519a81178af37c7aec9dbfa460bfa7cb"/><file name="afs_paf_live_connector.php" hash="0e91807cbe49dad1428c2de5200997fd"/><file name="afs_paf_upload_reply.php" hash="0cb4905d1c894637d5e6acbd2cffc112"/><file name="afs_token_authentication.php" hash="6329f0f7b6840d610a4b3078fb4dcce9"/><file name="afs_user_authentication.php" hash="8330376642778e0e0191f66b1783896c"/></dir><dir name="COMMON"><file name="Makefile" hash="7bb31592939024f74745d6b6cb7fec0b"/><dir name="TEST"><file name="Makefile" hash="d568cfe3683543f363312aa4b6d2bbad"/><file name="languageTest.php" hash="ad0f75b1c2f320c81eba32cade86191c"/><file name="toolsTest.php" hash="9276cb1a275d697f8e8365f2ac340cdf"/><file name="userSessionManagerTest.php" hash="b2b78d6fa156f1a61065f8ee5bfc6e0b"/></dir><file name="afs_connector_base.php" hash="b6b1f091ec71e5b92e4a1e5ca958255f"/><file name="afs_connector_interface.php" hash="68ad5e20a861b85dbf198f79cd2afd4c"/><file name="afs_exception.php" hash="b8eed4376088ae3003d0b77cc523e732"/><file name="afs_helper_base.php" hash="839cca78a663c3a22b4a8e35d1460129"/><file name="afs_helper_format.php" hash="30a3f6e945db7412ef95e83e7b0b5898"/><file name="afs_language.php" hash="277acb15b86089b37c812c47f2141d3c"/><file name="afs_service.php" hash="12c00c906e130860120552c40fa9dbc2"/><file name="afs_service_status.php" hash="1dee172850a76b46987534df89013878"/><file name="afs_tools.php" hash="26f6c01c5a61987925385e7a35260399"/><file name="afs_user_session_manager.php" hash="abd625f6b7b5cecf386dac9d82887764"/><file name="afs_versions.php" hash="556c912ff7f19f5083c4fb44d4d40ac6"/><dir name="lib"><dir name="JsonPath"><file name="JsonPath.php" hash="baa12e1baa9f8a20a095463042e96ad3"/><file name="JsonStore.php" hash="a9632aeb2126e98db9a49403a8f2ff77"/></dir></dir><dir name="php-SAI"><file name="README.md" hash="63ab581c83fe44918e6d074e20f08f95"/><dir name="lib"><dir name="Curl"><file name="Handle.php" hash="0fc7132737da7cee7df6b974447864ac"/></dir><file name="Curl.php" hash="358e4d3afca2035ee4d3f99f372ed15a"/><file name="CurlInterface.php" hash="714fa045dd4546d0c92cd022efb09422"/><file name="CurlStub.php" hash="fbdc0ece6321c5b5a1e27a65449f4a1f"/><dir name="rb_temp"><file name="HttpClient.php" hash="091b91c98acf9f1cd6c3d6d75cddfb88"/><file name="MultiCurl.php" hash="916e85d73bae6e136f889166ebc6db17"/><file name="SimpleCurl.php" hash="c296966a8bda96e03b464a1d3a9c8e06"/></dir></dir><dir name="tests"><file name="SAI_CurlStubTest.php" hash="bce69cbb17a40bd4eeba6bad1133216e"/></dir><file name=".gitignore" hash="09e625dea07b4d4098b19ec998d266f9"/></dir></dir><file name="COPYING" hash="b234ee4d69f5fce4486a80fdaf4a4263"/><file name="COPYING.LESSER" hash="4fbd65380cdd255951079008b364516c"/><file name="FAQ.md" hash="7d7c886674d70a0047303c5d93de6165"/><file name="Makefile" hash="225475a5a4a0204cecbb77621ff38bb2"/><file name="README.md" hash="7ecfd33825a0e6bc50cca099c1c0e50e"/><file name="afs_lib.doxygen" hash="8128d53d894cc57e08142377d13c72f4"/><file name="afs_lib.php" hash="5d49433720f05b707dae0206c1ec1dbf"/><file name="afs_version.php" hash="15ef21883652ec9da0da0f4830f153d7"/><file name="composer.json" hash="39190df70fafa99d7eb5ab566e8edf3f"/><dir name="doc"><file name="afs_filter_documentation.dox" hash="3bf4b96e25d95ce5953b822038c6f135"/><file name="afs_paf_upload.dox" hash="d36893db0234f171e6cfb43f6e13d47c"/><file name="afs_search.dox" hash="b1c5ab8728703822f910852cd17561f4"/><file name="afs_search_coder.dox" hash="77709e1bc691301017f0982e0348a9b9"/><file name="afs_search_query.dox" hash="21dcd1734a165a4cb3b4f62c42a6a0be"/><file name="afs_search_reply.dox" hash="cdb1d42447671f4352927b40b3f8f37d"/><dir name="data"><file name="acp_helper_example.php" hash="2815890e7afbae78e7eb4e6fc5c88f6f"/><file name="full_example.php" hash="e152a964d06e55de460c596070c714d8"/><file name="full_lightweight_example.php" hash="eac3bb2d251052f547a9f737e5cd0461"/><file name="raw_example.php" hash="f1f9d547fe0d89f129c9bbb050eb263e"/><dir name="templates"><file name="error_template.html" hash="70f44bd0f45470d379a11d0a2fe507e4"/><file name="facet_template.html" hash="6836005a7dae45e9415273f1eb6b78e2"/><file name="facet_values_template.html" hash="9b41f2b55a1cecae5724b4fcd4a46cfb"/><file name="meta_template.html" hash="e664a3bb222d272ce2451fb10bf46de4"/><file name="pager_template.html" hash="2700ab5b60a1f9553b1c39374fda63d4"/><file name="result_template.html" hash="1572a4ef4e8dda0b3db1ea77bbed4a98"/><file name="spellcheck_template.html" hash="8042054a1f5a271b47c77f81436c4791"/></dir></dir><file name="detailled_integration_example_with_template.dox" hash="26ef377a6ef546b636a0e254d11d01f5"/><file name="lightweight_integration_example_with_template.dox" hash="5a388d2dbfad63ad6ec353407b79a6bb"/><file name="logo-antidot-long-200x41.png" hash="1ceac3fff767fb5e395bd767344a3d13"/><file name="main.dox" hash="ca3e97f95deead927fb3298ecafbad5e"/><file name="raw_integration_example.dox" hash="56a7126d008c2e49abdf9bf0b5ec9717"/><file name="template_prerequisites.dox" hash="baa24a943e19ff3654227850bd316abb"/><file name="templates_in_details.dox" hash="5e8db94382f1fbd6c4e0b424a9edc9a3"/></dir><file name="rules.mk" hash="ff48aa6a5c40e31b3f38aba1267e9a71"/><dir name="scripts"><file name="gen_doc.sh" hash="0f6fc60aca94da563397d3c710bd9d33"/><file name="increment_version.sh" hash="431db9c60d2f94d251be07957787fcb0"/><file name="print_version.sh" hash="a05ddc19cd27ff185721fe2bd0cffc25"/><file name="version_management.sh" hash="3d5ecd39f45ba081144b3033dbd14330"/></dir><file name=".gitignore" hash="0292f51c0906b2092255872c69603f29"/><file name=".travis.yml" hash="4330b9c449e9cd0e97829f679c2a2786"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><dir name="mdn"><dir name="antidot"><file name="CollapsibleLists.css" hash="c956d83facc41a97bf14726dcb953edb"/></dir></dir></dir><dir name="images"><dir name="mdn"><dir name="antidot"><file name="base.gif" hash="1f71b021e061a4948d69adc4ff10ccad"/><file name="button-closed.png" hash="563b78324e0712c0902cb4f77cb9eb86"/><file name="button-open.png" hash="c710849a0d2b61ad1f0fc36c0e59d131"/><file name="button.png" hash="97f3055c5046c851eea2dad7e5227508"/><file name="cd.gif" hash="f41037663522fab5c5c31530c7fa43d8"/><file name="empty.gif" hash="df22aff6e941ff1cc577333d1712b584"/><file name="folder.gif" hash="ea16980ab437fa6ba4aba3d480e83e9e"/><file name="folderopen.gif" hash="18aa3d75315bf95bf080357733437fcc"/><file name="globe.gif" hash="d6b48614cf8dc9553e077c19197637d2"/><file name="imgfolder.gif" hash="1d488d377762e65ab4e8b691ba01e5a4"/><file name="join.gif" hash="4d5d614e0da056df815a4306d6368692"/><file name="joinbottom.gif" hash="4b3daa7f2cc584f1aac0d142275d7cba"/><file name="line.gif" hash="63ab38a6203262f15ca46c631232ea2c"/><file name="list-item-contents.png" hash="00ae24d5bc76df9eedaea597859963e4"/><file name="list-item-last-open.png" hash="615ddd71f81b240e9ed7d4e383b2c01a"/><file name="list-item-last.png" hash="e2bfb790f46855c378e50f3c0a82ea01"/><file name="list-item-open.png" hash="732d1cc59f3a488c89c624eb434eac98"/><file name="list-item-root.png" hash="5529d21e7ec68e9cb750a4895ff0b480"/><file name="list-item.png" hash="e03ec1bf3d9e16bb3005ccf8d26eaa6c"/><file name="minus.gif" hash="d647fbbd0ec410b8f3bb3357b62eedcf"/><file name="minusbottom.gif" hash="b09d684cca7135ef728141aaf2464baa"/><file name="musicfolder.gif" hash="21ece951734f23adb2f75befe1f31fc1"/><file name="nolines_minus.gif" hash="eb2243a354ffcfac93ba0fe948f7167d"/><file name="nolines_plus.gif" hash="ec92b634b63608fb4b0dbf114e3b89e1"/><file name="page.gif" hash="c25b136c1cb3bb145495c25b35d93754"/><file name="plus.gif" hash="5c55d798909c553deca31d610bd18fac"/><file name="plusbottom.gif" hash="1924ce363c38a992f888a4df48c0b274"/><file name="question.gif" hash="ea0ca196ce0ebfd625cc1210abfdec6c"/><file name="trash.gif" hash="6cbfd3ed29531044aed9b4edb3cca9ad"/></dir></dir></dir></dir></dir></dir></target></contents>
23
  <compatible/>
24
  <dependencies><required><php><min>5.2.0</min><max>5.6.0</max></php><extension><name>curl</name><min/><max/></extension></required></dependencies>
25
  </package>