Antidot_Antidot - Version 1.1.0

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.1.0
Comparing to
See all releases


Code changes from version 1.0.19 to 1.1.0

Files changed (113) hide show
  1. app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Attribute.php +2 -2
  2. app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Boolean.php +2 -2
  3. app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Category.php +2 -2
  4. app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Decimal.php +2 -2
  5. app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Price.php +2 -2
  6. app/code/community/MDN/Antidot/Block/Catalog/Layer/View.php +2 -2
  7. app/code/community/MDN/Antidot/Block/Catalogsearch/Category.php +2 -2
  8. app/code/community/MDN/Antidot/Block/Catalogsearch/Layer.php +2 -2
  9. app/code/community/MDN/Antidot/Block/Catalogsearch/Layer/Filter/Attribute.php +2 -2
  10. app/code/community/MDN/Antidot/Block/Catalogsearch/Result.php +2 -2
  11. app/code/community/MDN/Antidot/Block/Html/Select.php +2 -2
  12. app/code/community/MDN/Antidot/Block/System/Config/Button/AfsStore.php +54 -0
  13. app/code/community/MDN/Antidot/Block/System/Config/Button/PushArticles.php +2 -2
  14. app/code/community/MDN/Antidot/Block/System/Config/Button/PushBrands.php +0 -36
  15. app/code/community/MDN/Antidot/Block/System/Config/Button/PushCategories.php +2 -2
  16. app/code/community/MDN/Antidot/Block/System/Config/Button/PushProducts.php +2 -2
  17. app/code/community/MDN/Antidot/Block/System/Config/Button/RestoreTemplate.php +2 -2
  18. app/code/community/MDN/Antidot/Block/System/Config/Button/ShowXml.php +2 -2
  19. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Additional.php +2 -2
  20. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ArticleAdditional.php +2 -2
  21. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ArticleIdentifier.php +2 -2
  22. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/DefaultSort.php +2 -2
  23. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Facet.php +2 -2
  24. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Identifier.php +2 -2
  25. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ProductAdditionalFacet.php +2 -2
  26. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ProductAdditionalField.php +2 -2
  27. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ProductIdentifier.php +2 -2
  28. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Sort.php +2 -2
  29. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/CategoryAttribute.php +2 -2
  30. app/code/community/MDN/Antidot/Block/System/Config/Form/Field/ProductAttribute.php +2 -2
  31. app/code/community/MDN/Antidot/Block/System/Config/Html/Export.php +2 -2
  32. app/code/community/MDN/Antidot/Block/System/Config/Html/ShowXml.php +2 -2
  33. app/code/community/MDN/Antidot/Block/System/Config/Html/Version.php +2 -2
  34. app/code/community/MDN/Antidot/Helper/Antidot.php +2 -2
  35. app/code/community/MDN/Antidot/Helper/CatalogSearch/Data.php +2 -2
  36. app/code/community/MDN/Antidot/Helper/Compress.php +2 -2
  37. app/code/community/MDN/Antidot/Helper/Data.php +4 -4
  38. app/code/community/MDN/Antidot/Helper/LogExport.php +2 -2
  39. app/code/community/MDN/Antidot/Helper/Url.php +2 -2
  40. app/code/community/MDN/Antidot/Helper/XmlWriter.php +3 -3
  41. app/code/community/MDN/Antidot/Model/Catalog/Layer.php +2 -2
  42. app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Attribute.php +2 -2
  43. app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Boolean.php +2 -2
  44. app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Category.php +2 -2
  45. app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Decimal.php +2 -2
  46. app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Item.php +28 -11
  47. app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Price.php +2 -2
  48. app/code/community/MDN/Antidot/Model/Catalogsearch/Layer.php +2 -2
  49. app/code/community/MDN/Antidot/Model/Catalogsearch/Layer/Filter/Attribute.php +2 -2
  50. app/code/community/MDN/Antidot/Model/Catalogsearch/Resource/Attribute.php +2 -2
  51. app/code/community/MDN/Antidot/Model/Export/Abstract.php +26 -2
  52. app/code/community/MDN/Antidot/Model/Export/Article.php +4 -18
  53. app/code/community/MDN/Antidot/Model/Export/Brand.php +0 -130
  54. app/code/community/MDN/Antidot/Model/Export/Category.php +19 -11
  55. app/code/community/MDN/Antidot/Model/Export/Product.php +109 -72
  56. app/code/community/MDN/Antidot/Model/Observer.php +165 -38
  57. app/code/community/MDN/Antidot/Model/Resource/Advanced.php +2 -2
  58. app/code/community/MDN/Antidot/Model/Resource/Catalog/Product/Collection.php +2 -2
  59. app/code/community/MDN/Antidot/Model/Resource/Engine/Abstract.php +2 -2
  60. app/code/community/MDN/Antidot/Model/Resource/Engine/Antidot.php +24 -5
  61. app/code/community/MDN/Antidot/Model/Search/Abstract.php +6 -5
  62. app/code/community/MDN/Antidot/Model/Search/Search.php +2 -2
  63. app/code/community/MDN/Antidot/Model/Search/Suggest.php +2 -2
  64. app/code/community/MDN/Antidot/Model/System/Config/ArticleAttribute.php +2 -2
  65. app/code/community/MDN/Antidot/Model/System/Config/Backend/Engine.php +2 -2
  66. app/code/community/MDN/Antidot/Model/System/Config/CategoryAttribute.php +2 -2
  67. app/code/community/MDN/Antidot/Model/System/Config/Dir.php +2 -2
  68. app/code/community/MDN/Antidot/Model/System/Config/DisableEnable.php +2 -2
  69. app/code/community/MDN/Antidot/Model/System/Config/Engine.php +2 -2
  70. app/code/community/MDN/Antidot/Model/System/Config/Facet.php +2 -2
  71. app/code/community/MDN/Antidot/Model/System/Config/Number.php +2 -2
  72. app/code/community/MDN/Antidot/Model/System/Config/Options.php +2 -2
  73. app/code/community/MDN/Antidot/Model/System/Config/ProductAttribute.php +2 -2
  74. app/code/community/MDN/Antidot/Model/System/Config/PromoteRedirect.php +2 -2
  75. app/code/community/MDN/Antidot/Model/System/Config/Sort.php +18 -13
  76. app/code/community/MDN/Antidot/Model/System/Config/Suggest/Type.php +2 -2
  77. app/code/community/MDN/Antidot/Model/System/Config/WSStatus.php +2 -2
  78. app/code/community/MDN/Antidot/Model/Transport.php +2 -2
  79. app/code/community/MDN/Antidot/Model/Transport/Abstract.php +2 -2
  80. app/code/community/MDN/Antidot/Model/Transport/File.php +2 -2
  81. app/code/community/MDN/Antidot/Model/Transport/Ftp.php +2 -2
  82. app/code/community/MDN/Antidot/Model/Transport/Http.php +2 -2
  83. app/code/community/MDN/Antidot/Model/Transport/Interface.php +2 -2
  84. app/code/community/MDN/Antidot/Test/Block/System/Config/Button/AfsStore.php +90 -0
  85. app/code/community/MDN/Antidot/Test/Model/Export/Article.php +23 -0
  86. app/code/community/MDN/Antidot/Test/Model/Export/Category.php +46 -0
  87. app/code/community/MDN/Antidot/Test/Model/Export/Product.php +543 -0
  88. app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteImageUrl.yaml +90 -0
  89. app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteProductUrl.yaml +90 -0
  90. app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteProperties.yaml +80 -0
  91. app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteXml.yaml +116 -0
  92. app/code/community/MDN/Antidot/Test/Model/Export/Product/providers/testWriteImageUrl.yaml +9 -0
  93. app/code/community/MDN/Antidot/Test/Model/Export/Product/providers/testWriteProductUrl.yaml +9 -0
  94. app/code/community/MDN/Antidot/Test/Model/Observer.php +144 -0
  95. app/code/community/MDN/Antidot/Test/Model/Observer/fixtures/testGetDefaultContext.yaml +85 -0
  96. app/code/community/MDN/Antidot/Test/Model/Observer/providers/testGetOwnerForFilename.yaml +9 -0
  97. app/code/community/MDN/Antidot/Test/Model/Resource/Engine/Antidot.php +42 -0
  98. app/code/community/MDN/Antidot/Test/Model/System/Config/Sort.php +68 -0
  99. app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/expectations/testToOptionArray.yaml +44 -0
  100. app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/fixtures/testToOptionArray1.yaml +4 -0
  101. app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/fixtures/testToOptionArray2.yaml +4 -0
  102. app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/fixtures/testToOptionArray3.yaml +4 -0
  103. app/code/community/MDN/Antidot/Test/PHPUnitUtil.php +18 -0
  104. app/code/community/MDN/Antidot/controllers/Admin/PushController.php +33 -9
  105. app/code/community/MDN/Antidot/controllers/Front/SearchController.php +2 -2
  106. app/code/community/MDN/Antidot/etc/config.xml +76 -31
  107. app/code/community/MDN/Antidot/etc/system.xml +13 -6
  108. i18n/i18n.php +13 -0
  109. package.xml +4 -4
  110. shell/antidotExport.php +15 -2
  111. shell/antidotExportCategory.php +14 -1
  112. shell/antidotExportInc.php +14 -1
  113. shell/antidotExportProduct.php +14 -1
app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Attribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalog_Layer_Filter_Attribute extends Mage_Catalog_Block_Layer_Filter_Abstract
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_Block_Catalog_Layer_Filter_Attribute extends Mage_Catalog_Block_Layer_Filter_Abstract
app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Boolean.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalog_Layer_Filter_Boolean extends MDN_Antidot_Block_Catalog_Layer_Filter_Attribute
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_Block_Catalog_Layer_Filter_Boolean extends MDN_Antidot_Block_Catalog_Layer_Filter_Attribute
app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Category.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalog_Layer_Filter_Category extends Mage_Catalog_Block_Layer_Filter_Abstract
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_Block_Catalog_Layer_Filter_Category extends Mage_Catalog_Block_Layer_Filter_Abstract
app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Decimal.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalog_Layer_Filter_Decimal extends Mage_Catalog_Block_Layer_Filter_Abstract
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_Block_Catalog_Layer_Filter_Decimal extends Mage_Catalog_Block_Layer_Filter_Abstract
app/code/community/MDN/Antidot/Block/Catalog/Layer/Filter/Price.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalog_Layer_Filter_Price extends Mage_Catalog_Block_Layer_Filter_Abstract
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_Block_Catalog_Layer_Filter_Price extends Mage_Catalog_Block_Layer_Filter_Abstract
app/code/community/MDN/Antidot/Block/Catalog/Layer/View.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalog_Layer_View extends Mage_Catalog_Block_Layer_View
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_Block_Catalog_Layer_View extends Mage_Catalog_Block_Layer_View
app/code/community/MDN/Antidot/Block/Catalogsearch/Category.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalogsearch_Category extends Mage_Core_Block_Template
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_Block_Catalogsearch_Category extends Mage_Core_Block_Template
app/code/community/MDN/Antidot/Block/Catalogsearch/Layer.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalogsearch_Layer extends Mage_CatalogSearch_Block_Layer
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_Block_Catalogsearch_Layer extends Mage_CatalogSearch_Block_Layer
app/code/community/MDN/Antidot/Block/Catalogsearch/Layer/Filter/Attribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Catalogsearch_Layer_Filter_Attribute extends Mage_Catalog_Block_Layer_Filter_Abstract
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_Block_Catalogsearch_Layer_Filter_Attribute extends Mage_Catalog_Block_Layer_Filter_Abstract
app/code/community/MDN/Antidot/Block/Catalogsearch/Result.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
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
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_Block_CatalogSearch_Result extends Mage_CatalogSearch_Block_Result
app/code/community/MDN/Antidot/Block/Html/Select.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_Html_Select extends Mage_Core_Block_Html_Select
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_Block_Html_Select extends Mage_Core_Block_Html_Select
app/code/community/MDN/Antidot/Block/System/Config/Button/AfsStore.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_Block_System_Config_Button_AfsStore extends Mage_Adminhtml_Block_System_Config_Form_Field
17
+ {
18
+
19
+ /*
20
+ * The AfsStore Back-Office can be translated in theses locales
21
+ */
22
+ protected $afsStoreLocales = array('en', 'fr');
23
+
24
+ /**
25
+ * {@inherit}
26
+ */
27
+ protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
28
+ {
29
+ $this->setElement($element);
30
+ $url = 'https://bo-store.afs-antidot.net/';
31
+
32
+ /*
33
+ * we get the magento back-office session language to determine
34
+ * the locale of the AfsStore Back-office link
35
+ */
36
+ $locale = Mage::getSingleton('adminhtml/session')->getLocale();
37
+ $locArr = explode('_',$locale);
38
+ $urlLocale = array_shift($locArr);
39
+ if (in_array($urlLocale, $this->afsStoreLocales)) {
40
+ $url .= $urlLocale;
41
+ } else {
42
+ $url .= 'en';
43
+ }
44
+
45
+ $html = $this->getLayout()->createBlock('adminhtml/widget_button')
46
+ ->setType('button')
47
+ ->setClass('scalable')
48
+ ->setLabel(Mage::helper('Antidot')->__('Analytics, Synonyms, Promote'))
49
+ ->setOnClick("window.open('$url')")
50
+ ->toHtml();
51
+
52
+ return $html;
53
+ }
54
+ }
app/code/community/MDN/Antidot/Block/System/Config/Button/PushArticles.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Button_PushArticles extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Button_PushArticles extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Button/PushBrands.php DELETED
@@ -1,36 +0,0 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
- */
16
- class MDN_Antidot_Block_System_Config_Button_PushBrands extends Mage_Adminhtml_Block_System_Config_Form_Field
17
- {
18
-
19
- /**
20
- * {@inherit}
21
- */
22
- protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
23
- {
24
- $this->setElement($element);
25
- $url = $this->getUrl('Antidotadmin/Admin_Push/Brand');
26
-
27
- $html = $this->getLayout()->createBlock('adminhtml/widget_button')
28
- ->setType('button')
29
- ->setClass('scalable')
30
- ->setLabel(Mage::helper('Antidot')->__('Push'))
31
- ->setOnClick("setLocation('$url')")
32
- ->toHtml();
33
-
34
- return $html;
35
- }
36
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/MDN/Antidot/Block/System/Config/Button/PushCategories.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Button_PushCategories extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Button_PushCategories extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Button/PushProducts.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Button_PushProducts extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Button_PushProducts extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Button/RestoreTemplate.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Button_RestoreTemplate extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Button_RestoreTemplate extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Button/ShowXml.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Button_ShowXml extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Button_ShowXml extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Additional.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_Additional extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
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_Block_System_Config_Form_Field_Array_Additional extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ArticleAdditional.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_ArticleAdditional extends MDN_Antidot_Block_System_Config_Form_Field_Array_Additional
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_Block_System_Config_Form_Field_Array_ArticleAdditional extends MDN_Antidot_Block_System_Config_Form_Field_Array_Additional
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ArticleIdentifier.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_ArticleIdentifier extends MDN_Antidot_Block_System_Config_Form_Field_Array_Identifier
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_Block_System_Config_Form_Field_Array_ArticleIdentifier extends MDN_Antidot_Block_System_Config_Form_Field_Array_Identifier
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/DefaultSort.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_DefaultSort extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
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_Block_System_Config_Form_Field_Array_DefaultSort extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Facet.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_Facet extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
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_Block_System_Config_Form_Field_Array_Facet extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Identifier.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_Identifier extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
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_Block_System_Config_Form_Field_Array_Identifier extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ProductAdditionalFacet.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_ProductAdditionalFacet extends MDN_Antidot_Block_System_Config_Form_Field_Array_Additional
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_Block_System_Config_Form_Field_Array_ProductAdditionalFacet extends MDN_Antidot_Block_System_Config_Form_Field_Array_Additional
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ProductAdditionalField.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_ProductAdditionalField extends MDN_Antidot_Block_System_Config_Form_Field_Array_Additional
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_Block_System_Config_Form_Field_Array_ProductAdditionalField extends MDN_Antidot_Block_System_Config_Form_Field_Array_Additional
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/ProductIdentifier.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_ProductIdentifier extends MDN_Antidot_Block_System_Config_Form_Field_Array_Identifier
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_Block_System_Config_Form_Field_Array_ProductIdentifier extends MDN_Antidot_Block_System_Config_Form_Field_Array_Identifier
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/Array/Sort.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_Array_Sort extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
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_Block_System_Config_Form_Field_Array_Sort extends Mage_Adminhtml_Block_System_Config_Form_Field_Array_Abstract
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/CategoryAttribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_CategoryAttribute extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Form_Field_CategoryAttribute extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Form/Field/ProductAttribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Form_Field_ProductAttribute extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Form_Field_ProductAttribute extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Html/Export.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Html_Export extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Html_Export extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Html/ShowXml.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Html_ShowXml extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Html_ShowXml extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Block/System/Config/Html/Version.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Block_System_Config_Html_Version extends Mage_Adminhtml_Block_System_Config_Form_Field
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_Block_System_Config_Html_Version extends Mage_Adminhtml_Block_System_Config_Form_Field
app/code/community/MDN/Antidot/Helper/Antidot.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Helper_Antidot extends MDN_Antidot_Helper_Data
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_Helper_Antidot extends MDN_Antidot_Helper_Data
app/code/community/MDN/Antidot/Helper/CatalogSearch/Data.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Helper_CatalogSearch_Data extends Mage_CatalogSearch_Helper_Data {
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_Helper_CatalogSearch_Data extends Mage_CatalogSearch_Helper_Data {
app/code/community/MDN/Antidot/Helper/Compress.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Helper_Compress extends Mage_Core_Helper_Abstract {
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_Helper_Compress extends Mage_Core_Helper_Abstract {
app/code/community/MDN/Antidot/Helper/Data.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Helper_Data extends Mage_Core_Helper_Abstract
@@ -223,9 +223,9 @@ class MDN_Antidot_Helper_Data extends Mage_Core_Helper_Abstract
223
  * @param $number
224
  * @return float|mixed
225
  */
226
- public function round($number)
227
  {
228
- $number = round($number, 2);
229
  $number = str_replace(',', '.', $number);
230
  $number = str_replace(' ', '', $number);
231
  return $number;
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_Helper_Data extends Mage_Core_Helper_Abstract
223
  * @param $number
224
  * @return float|mixed
225
  */
226
+ public function round($number, $precision = 2)
227
  {
228
+ $number = round($number, $precision);
229
  $number = str_replace(',', '.', $number);
230
  $number = str_replace(' ', '', $number);
231
  return $number;
app/code/community/MDN/Antidot/Helper/LogExport.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Helper_LogExport extends Mage_Core_Helper_Abstract
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_Helper_LogExport extends Mage_Core_Helper_Abstract
app/code/community/MDN/Antidot/Helper/Url.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Helper_Url extends Mage_Core_Helper_Abstract
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_Helper_Url extends Mage_Core_Helper_Abstract
app/code/community/MDN/Antidot/Helper/XmlWriter.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Helper_XmlWriter extends Mage_Core_Helper_Abstract
@@ -207,4 +207,4 @@ class MDN_Antidot_Helper_XmlWriter extends Mage_Core_Helper_Abstract
207
 
208
  return $return;
209
  }
210
- }
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_Helper_XmlWriter extends Mage_Core_Helper_Abstract
207
 
208
  return $return;
209
  }
210
+ }
app/code/community/MDN/Antidot/Model/Catalog/Layer.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalog_Layer extends Mage_Catalog_Model_Layer
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_Catalog_Layer extends Mage_Catalog_Model_Layer
app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Attribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalog_Layer_Filter_Attribute extends Mage_Catalog_Model_Layer_Filter_Attribute
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_Catalog_Layer_Filter_Attribute extends Mage_Catalog_Model_Layer_Filter_Attribute
app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Boolean.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalog_Layer_Filter_Boolean extends MDN_Antidot_Model_Catalog_Layer_Filter_Attribute
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_Catalog_Layer_Filter_Boolean extends MDN_Antidot_Model_Catalog_Layer_Filter_Attribute
app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Category.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalog_Layer_Filter_Category extends Mage_Catalog_Model_Layer_Filter_Category
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_Catalog_Layer_Filter_Category extends Mage_Catalog_Model_Layer_Filter_Category
app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Decimal.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalog_Layer_Filter_Decimal extends Mage_Catalog_Model_Layer_Filter_Decimal
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_Catalog_Layer_Filter_Decimal extends Mage_Catalog_Model_Layer_Filter_Decimal
app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Item.php CHANGED
@@ -56,23 +56,20 @@ class MDN_Antidot_Model_Catalog_Layer_Filter_Item extends Mage_Catalog_Model_Lay
56
  */
57
  public function getUrl()
58
  {
59
- $values = array();
60
- if($currentValues = Mage::getSingleton('core/app')->getRequest()->getParam($this->getFilter()->getRequestVar())) {
61
- $values = explode(',', $currentValues);
62
- }
63
-
64
  if(false !== $key = array_search($this->getValue(), $values)) {
65
  unset($values[$key]);
66
  } else {
67
  $values[] = $this->getValue();
68
  }
69
 
70
- $values = count($values) > 1 ? implode(',', $values) : current($values);
71
  $query = array(
72
  $this->getFilter()->getRequestVar() => (empty($values) ? null : $values),
73
  Mage::getBlockSingleton('page/html_pager')->getPageVarName() => null // exclude current page from urls
74
  );
75
-
76
  return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
77
  }
78
 
@@ -144,8 +141,28 @@ class MDN_Antidot_Model_Catalog_Layer_Filter_Item extends Mage_Catalog_Model_Lay
144
  */
145
  public function isSelected()
146
  {
147
- $selected = Mage::getSingleton('core/app')->getRequest()->getParam($this->getFilter()->getRequestVar());
148
-
149
- return in_array($this->getValue(), explode(',', $selected), true);
150
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
151
  }
56
  */
57
  public function getUrl()
58
  {
59
+ $values = $this->getCurrentSelectedValues($this->getFilter()->getRequestVar());
60
+
 
 
 
61
  if(false !== $key = array_search($this->getValue(), $values)) {
62
  unset($values[$key]);
63
  } else {
64
  $values[] = $this->getValue();
65
  }
66
 
67
+ $values = count($values) > 1 ? implode(',', $values) : array_shift($values);
68
  $query = array(
69
  $this->getFilter()->getRequestVar() => (empty($values) ? null : $values),
70
  Mage::getBlockSingleton('page/html_pager')->getPageVarName() => null // exclude current page from urls
71
  );
72
+
73
  return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
74
  }
75
 
141
  */
142
  public function isSelected()
143
  {
144
+
145
+ $selectedArray = $this->getCurrentSelectedValues($this->getFilter()->getRequestVar());
146
+
147
+ return in_array($this->getValue(), $selectedArray, true);
148
+ }
149
+
150
+ /**
151
+ * Return array of the selected values of
152
+ * the given filter
153
+ *
154
+ * @param string $filter
155
+ * @return array
156
+ */
157
+ public function getCurrentSelectedValues($filter) {
158
+
159
+ $selected = Mage::getSingleton('core/app')->getRequest()->getParam($filter);
160
+
161
+ if ($selected) {
162
+ $antidotEngine = Mage::getResourceSingleton('Antidot/engine_Antidot');
163
+ return $antidotEngine->extractMultiSelectValues($selected);
164
+ } else {
165
+ return array();
166
+ }
167
+ }
168
  }
app/code/community/MDN/Antidot/Model/Catalog/Layer/Filter/Price.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalog_Layer_Filter_Price extends Mage_Catalog_Model_Layer_Filter_Price
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_Catalog_Layer_Filter_Price extends Mage_Catalog_Model_Layer_Filter_Price
app/code/community/MDN/Antidot/Model/Catalogsearch/Layer.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalogsearch_Layer extends Mage_CatalogSearch_Model_Layer
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_Catalogsearch_Layer extends Mage_CatalogSearch_Model_Layer
app/code/community/MDN/Antidot/Model/Catalogsearch/Layer/Filter/Attribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalogsearch_Layer_Filter_Attribute extends MDN_Antidot_Model_Catalog_Layer_Filter_Attribute
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_Catalogsearch_Layer_Filter_Attribute extends MDN_Antidot_Model_Catalog_Layer_Filter_Attribute
app/code/community/MDN/Antidot/Model/Catalogsearch/Resource/Attribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Catalogsearch_Resource_Attribute
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_Catalogsearch_Resource_Attribute
app/code/community/MDN/Antidot/Model/Export/Abstract.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
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
@@ -136,4 +136,28 @@ class MDN_Antidot_Model_Export_Abstract extends Mage_Core_Model_Abstract
136
 
137
  return $this->storeLang[$storeId];
138
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  }
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_Export_Abstract extends Mage_Core_Model_Abstract
136
 
137
  return $this->storeLang[$storeId];
138
  }
139
+
140
+ /**
141
+ * Write the xml header
142
+ *
143
+ */
144
+ protected function writeHeader($context)
145
+ {
146
+ $this->xml->push('header');
147
+ $this->xml->element('owner', $context['owner']);
148
+ $this->xml->element('feed', $this->getFeed($context));
149
+ $this->xml->element('generated_at', date('c', Mage::getModel('core/date')->timestamp(time())));
150
+ $this->xml->pop();
151
+ }
152
+
153
+ /**
154
+ * Get the value to insert in the feed tag
155
+ * @param $type (product, category, article)
156
+ * @param $context
157
+ * @return string
158
+ */
159
+ public function getFeed($context) {
160
+ return strtolower($this::TYPE) . ' ' . $context['run'] . ' v' . Mage::getConfig()->getNode()->modules->MDN_Antidot->version;
161
+ }
162
+
163
  }
app/code/community/MDN/Antidot/Model/Export/Article.php CHANGED
@@ -9,16 +9,16 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Export_Article extends MDN_Antidot_Model_Export_Product
17
  {
18
 
19
  const TYPE = 'ARTICLE';
20
- const FILENAME_XML = 'articles-mdn-fr.xml';
21
- const FILENAME_ZIP = '%s_full_mdn_articles.zip';
22
  const XSD = 'http://ref.antidot.net/store/latest/articles.xsd';
23
 
24
  const imagePrefix = 'media/catalog/article';
@@ -83,20 +83,6 @@ class MDN_Antidot_Model_Export_Article extends MDN_Antidot_Model_Export_Product
83
  $this->writePart($this->xml->flush(), true);
84
  }
85
 
86
- /**
87
- * Write the xml header
88
- *
89
- * @param array $context
90
- */
91
- protected function writeHeader($context)
92
- {
93
- $this->xml->push('header');
94
- $this->xml->element('owner', $context['owner']);
95
- $this->xml->element('feed', 'article');
96
- $this->xml->element('generated_at', date('c', Mage::getModel('core/date')->timestamp(time())));
97
- $this->xml->pop();
98
- }
99
-
100
  /**
101
  * Write the article identifiers
102
  *
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_Export_Article extends MDN_Antidot_Model_Export_Product
17
  {
18
 
19
  const TYPE = 'ARTICLE';
20
+ const FILENAME_XML = 'articles-%s-fr.xml';
21
+ const FILENAME_ZIP = '%s_full_%s_articles.zip';
22
  const XSD = 'http://ref.antidot.net/store/latest/articles.xsd';
23
 
24
  const imagePrefix = 'media/catalog/article';
83
  $this->writePart($this->xml->flush(), true);
84
  }
85
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  /**
87
  * Write the article identifiers
88
  *
app/code/community/MDN/Antidot/Model/Export/Brand.php DELETED
@@ -1,130 +0,0 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
- * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
- */
16
- class MDN_Antidot_Model_Export_Brand extends MDN_Antidot_Model_Export_Abstract
17
- {
18
- const TYPE = 'BRAND';
19
- const FILENAME_XML = 'brands-mdn-fr.xml';
20
- const FILENAME_ZIP = '%s_full_mdn_brands.zip';
21
- const XSD = 'http://ref.antidot.net/store/latest/brands.xsd';
22
-
23
- const PATTERN_URL = '/brands/{brand}';
24
-
25
- protected $urlHelper;
26
-
27
- /**
28
- * Get xml
29
- *
30
- * @param type $context
31
- */
32
- public function getXml($context)
33
- {
34
- $this->initXml();
35
- $this->initFields('brand');
36
-
37
- $brandPattern = $this->getBrandPattern();
38
-
39
- $this->xml->push('brands', array('xmlns' => "http://ref.antidot.net/store/afs#"));
40
-
41
- $this->xml->push('header');
42
- $this->xml->element('owner', $context['owner']);
43
- $this->xml->element('feed', 'brand');
44
- $this->xml->element('generated_at', date('c', Mage::getModel('core/date')->timestamp(time())));
45
- $this->xml->pop();
46
-
47
- foreach($context['store_id']as $storeId) {
48
- $store = Mage::getModel('core/store')->load($storeId);
49
- foreach($this->getBrands() as $brandId => $brand) {
50
- $this->xml->push('brand', array('id' => $brandId, 'xml:lang' => $context['lang']));
51
-
52
- $this->xml->element('name', $this->xml->encloseCData($brand));
53
- $this->xml->element('url', $this->getUrl($brand, $brandPattern));
54
-
55
- $this->xml->push('websites');
56
- $this->xml->element('website', '', array('id' => $storeId, 'name' => $store->getName()));
57
- $this->xml->pop();
58
-
59
- $this->xml->pop();
60
- }
61
- }
62
-
63
- $this->xml->pop();
64
-
65
- return $this->xml->getXml();
66
- }
67
-
68
- /**
69
- * Return categories
70
- *
71
- * @param int $rootCategoryId
72
- * @param array
73
- */
74
- protected function getBrands()
75
- {
76
- $attribute = Mage::getModel('eav/config')
77
- ->getAttribute('catalog_product', 'manufacturer');
78
-
79
- $brands = array();
80
- foreach($attribute->getSource()->getAllOptions(true, true) as $option) {
81
- if(!empty($option['value'])) {
82
- $brands[$option['value']] = $option['label'];
83
- }
84
- }
85
-
86
- return $brands;
87
- }
88
-
89
- /**
90
- * Return brand url
91
- *
92
- * @param string $brand
93
- * @return string
94
- */
95
- public function getUrl($brand, $brandPattern = null)
96
- {
97
- $brandPattern = $brandPattern === null ? $this->getBrandPattern() : $brandPattern;
98
-
99
- return preg_replace('/\{brand\}/', $this->getUrlHelper()->url($brand), $brandPattern);
100
- }
101
-
102
- /**
103
- * Get the brand pattern
104
- *
105
- * @return string
106
- */
107
- protected function getBrandPattern()
108
- {
109
- $brandPattern = Mage::getStoreConfig('antidot/general/brand');
110
- if(strpos($brandPattern, '{brand}') === false) {
111
- $brandPattern = self::PATTERN_URL;
112
- }
113
-
114
- return $brandPattern;
115
- }
116
-
117
- /**
118
- * Return url Helper
119
- *
120
- * @return Antidot/Url
121
- */
122
- protected function getUrlHelper()
123
- {
124
- if($this->urlHelper === null) {
125
- $this->urlHelper = Mage::helper('Antidot/Url');
126
- }
127
-
128
- return $this->urlHelper;
129
- }
130
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/MDN/Antidot/Model/Export/Category.php CHANGED
@@ -9,15 +9,15 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Export_Category extends MDN_Antidot_Model_Export_Abstract
17
  {
18
  const TYPE = 'CATEGORY';
19
- const FILENAME_XML = 'categories-mdn_%s-%s.xml';
20
- const FILENAME_ZIP = '%s_full_mdn_categories.zip';
21
  const XSD = 'http://ref.antidot.net/store/latest/categories.xsd';
22
 
23
  /**
@@ -27,20 +27,28 @@ class MDN_Antidot_Model_Export_Category extends MDN_Antidot_Model_Export_Abstrac
27
  */
28
  public function writeXml($context, $filename)
29
  {
 
 
 
 
 
 
 
 
 
 
 
 
30
  $this->initXml();
31
  $this->initFields('category');
32
 
33
  $this->xml->push('categories', array('xmlns' => "http://ref.antidot.net/store/afs#"));
34
 
35
- $this->xml->push('header');
36
- $this->xml->element('owner', $context['owner']);
37
- $this->xml->element('feed', 'category');
38
- $this->xml->element('generated_at', date('c', Mage::getModel('core/date')->timestamp(time())));
39
- $this->xml->pop();
40
 
41
  $nbItems = 0;
42
  foreach($context['stores'] as $store) {
43
- foreach($this->getCategories($store) as $cat) {
44
 
45
  if (!$this->getField($cat, 'name'))
46
  continue;
@@ -117,4 +125,4 @@ class MDN_Antidot_Model_Export_Category extends MDN_Antidot_Model_Export_Abstrac
117
  ->addFieldToFilter('path', array('like' => Mage::getModel('catalog/category')->load($store->getRootCategoryId())->getPath().'/%'))
118
  ;
119
  }
120
- }
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_Export_Category extends MDN_Antidot_Model_Export_Abstract
17
  {
18
  const TYPE = 'CATEGORY';
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
  /**
27
  */
28
  public function writeXml($context, $filename)
29
  {
30
+ $nbTotalCategories = 0;
31
+ $context['categories'] = array();
32
+ foreach($context['stores'] as $store) {
33
+ $categories = $this->getCategories($store);
34
+ $nbTotalCategories += $categories->getSize();
35
+ $context['categories'][$store->getId()] = $categories;
36
+ }
37
+
38
+ if ($nbTotalCategories == 0) {
39
+ return 0;
40
+ }
41
+
42
  $this->initXml();
43
  $this->initFields('category');
44
 
45
  $this->xml->push('categories', array('xmlns' => "http://ref.antidot.net/store/afs#"));
46
 
47
+ $this->writeHeader($context);
 
 
 
 
48
 
49
  $nbItems = 0;
50
  foreach($context['stores'] as $store) {
51
+ foreach($context['categories'][$store->getId()] as $cat) {
52
 
53
  if (!$this->getField($cat, 'name'))
54
  continue;
125
  ->addFieldToFilter('path', array('like' => Mage::getModel('catalog/category')->load($store->getRootCategoryId())->getPath().'/%'))
126
  ;
127
  }
128
+ }
app/code/community/MDN/Antidot/Model/Export/Product.php CHANGED
@@ -9,17 +9,17 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
17
  {
18
 
19
  const TYPE = 'CATALOG';
20
- const FILENAME_XML = 'catalog-mdn_%s-%s.xml';
21
- const FILENAME_ZIP = '%s_full_mdn_catalog.zip';
22
- const FILENAME_ZIP_INC = '%s_inc_mdn_catalog.zip';
23
  const XSD = 'http://ref.antidot.net/store/latest/catalog.xsd';
24
 
25
  /*
@@ -88,7 +88,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
88
  ->joinField('qty',
89
  'cataloginventory/stock_item',
90
  'qty',
91
- 'product_id = entity_id',
92
  '{{table}}.stock_id = 1'.$productsInStock)
93
  ;
94
 
@@ -130,15 +130,20 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
130
  Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
131
 
132
  foreach($collection as $product) {
133
-
134
- //if($context['langs'] > 1) {
135
- $store = current($this->getProductStores($product, $context)); //we take the "first" store of the current lang
136
- if ($store)
137
- $product = Mage::getModel('catalog/product')->setStoreId($store->getId())->load($product->getId());
138
- //}
139
- $this->writeProduct($product, $context);
140
-
141
- $product->clearInstance(); //memory flush
 
 
 
 
 
142
 
143
  }
144
  $this->writePart($this->xml->flush());
@@ -204,30 +209,16 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
204
  }
205
  }
206
  }
207
-
208
- /**
209
- * Write the xml header
210
- *
211
- */
212
- protected function writeHeader($context)
213
- {
214
- $this->xml->push('header');
215
- $this->xml->element('owner', $context['owner']);
216
- $this->xml->element('feed', 'product');
217
- $this->xml->element('generated_at', date('c', Mage::getModel('core/date')->timestamp(time())));
218
- $this->xml->pop();
219
- }
220
-
221
  /**
222
  * Write the product
223
  *
224
  * @param Product $product
225
- * @param Array $context
226
  */
227
- protected function writeProduct($product, $context)
228
  {
229
- $stores = $this->getProductStores($product, $context);
230
-
231
  //skip product if no websites
232
  if (count($stores) == 0)
233
  return;
@@ -259,11 +250,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
259
  if ($keywords = $this->getField($product, 'keywords')) {
260
  $this->xml->element('keywords', $this->xml->encloseCData($keywords));
261
  }
262
- $this->writeDescriptions($product);
263
- $this->xml->element('url', $this->xml->encloseCData($product->getProductUrl()));
264
- $this->writeImageUrl($product);
265
  $this->writeClassification($product, $rootCategoriesIds);
266
- $this->writeProperties($product, $stores);
267
  $this->writeBrand($product);
268
  $this->writeMaterials($product);
269
  $this->writeColors($product);
@@ -287,7 +274,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
287
  {
288
  $this->xml->push('stores');
289
 
290
- /* Qty is the same for all stores, better copute it outside the loop: */
291
  $qty = Mage::getModel('cataloginventory/stock_item')->loadByProduct($variantProduct)->getQty();
292
  $qty = ($qty > 0 ? $qty : 0);
293
 
@@ -297,10 +284,12 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
297
  /*
298
  * reload the $variantProduct if this is a real variant or if we are on a different store
299
  */
 
300
  if ($product->getId() != $variantProduct->getId() || $store->getId() != $product->getStoreId()) {
301
  $reloadedVariantProduct = Mage::getModel('catalog/product')->setStoreId($store->getId())->load(
302
  $variantProduct->getId()
303
  );
 
304
  } else {
305
  $reloadedVariantProduct = $variantProduct;
306
  }
@@ -310,7 +299,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
310
  $storeContext['country'] = $this->getStoreLang($store->getId());
311
 
312
  $operations = $this->getOperations($product, $store);
313
- $this->writePrices($reloadedVariantProduct, $product, $storeContext, $store, $operations);
314
  $this->writeMarketing($reloadedVariantProduct, $operations);
315
 
316
  $isAvailable = $reloadedVariantProduct->isSalable() || (in_array($reloadedVariantProduct->getTypeId(), $this->productMultiple) && $product->isInStock());
@@ -318,9 +307,19 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
318
 
319
  $this->xml->element('stock', (int)$qty);
320
 
321
- $this->xml->element('url', $this->xml->encloseCData($reloadedVariantProduct->getProductUrl(false)));
 
 
322
  $this->xml->pop();
323
 
 
 
 
 
 
 
 
 
324
  }
325
  $this->xml->pop();
326
  }
@@ -354,7 +353,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
354
  if (in_array($storeId, $this->enabledStores))
355
  $stores[] = $context['stores'][$storeId];
356
  }
357
-
358
  return $stores;
359
  }
360
 
@@ -458,26 +457,46 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
458
  }
459
  }
460
  }
461
-
462
  /**
463
  * Write the product urls
 
 
 
 
 
 
 
 
 
 
 
 
464
  *
465
  * @param Product $product
466
  * @param string $urlImg
467
  */
468
  protected function writeImageUrl($product, $urlImg = true)
469
  {
470
- try {
 
 
 
 
471
  if ($product->getThumbnail() && ($product->getThumbnail() != 'no_selection')) {
472
- $this->xml->element('url_thumbnail', $this->xml->encloseCData(Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getThumbnail())));
473
  }
474
- } catch(Exception $e) {}
 
 
475
 
476
  try {
477
  if ($urlImg && $product->getImage() && ($product->getImage() != 'no_selection')) {
478
- $this->xml->element('url_image', $this->xml->encloseCData(Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getImage())));
479
  }
480
- } catch(Exception $e) {}
 
 
481
  }
482
 
483
  /**
@@ -684,9 +703,8 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
684
  * Write the product properties
685
  *
686
  * @param Product $product
687
- * @param array $stores List product store
688
  */
689
- protected function writeProperties($product, $stores)
690
  {
691
  $properties = array();
692
  if(!empty($this->fields['properties'])) {
@@ -697,16 +715,20 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
697
 
698
  $attribute = $product->getResource()->getAttribute($property['value']);
699
  if ($attribute) {
 
700
  $value = $attribute->getFrontend()->getValue($product);
701
- $label = $attribute->getStoreLabel();
702
- if (!$label) {
703
- $labels = $attribute->getStoreLabels();
704
- if (isset($labels[current($stores)->getId()])) {
705
- $label = $labels[current($stores)->getId()];
706
- }
707
- }
708
-
709
- $labels = array();
 
 
 
710
  switch($attribute->getfrontend_input())
711
  {
712
  case 'multiselect':
@@ -723,15 +745,18 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
723
  break;
724
  default:
725
  $optionName = $value;
726
- if(!empty($this->propertyLabel[$property['value']]['options'][$id]['per_store'][current($stores)->getId()])) {
727
- $optionName = $this->propertyLabel[$property['value']]['options'][$id]['per_store'][current($stores)->getId()];
728
  }
729
- $value = is_bool($value) ? (int)$value : $value;
730
- $properties[] = array(
731
- 'name' => $property['value'],
732
- 'display_name' => substr($label, 0, self::FACET_MAX_LENGTH),
733
- 'label' => substr($optionName, 0, self::FACET_MAX_LENGTH),
734
- 'autocomplete' => ($property['autocomplete'] == 1 ? 'on' : 'off'));
 
 
 
735
  break;
736
  }
737
  } else {
@@ -756,7 +781,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
756
  *
757
  * @param Product $product
758
  */
759
- protected function writePrices($product, $parentProduct, $context, $store, $operations)
760
  {
761
  $prices = ($this->getPrices($parentProduct->getId(), $store->getWebsiteId()));
762
 
@@ -775,7 +800,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
775
  $attributes = array('currency' => $context['currency'], 'type' => 'PRICE_FINAL', 'vat_included' => 'true', 'country' => strtoupper($context['country']));
776
  if (isset($priceCut))
777
  {
778
- $off = (int)(($priceCut - $price) / $priceCut * 100);
779
  $attributes['off'] = $off;
780
  }
781
  $this->xml->element(
@@ -789,7 +814,7 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
789
  $priceCut = Mage::helper('directory')->currencyConvert($priceCut, Mage::app()->getStore()->getCurrentCurrencyCode(), $store->getCurrentCurrencyCode());
790
  $this->xml->element(
791
  'price',
792
- Mage::helper('Antidot')->round($priceCut, 2),
793
  array('currency' => $context['currency'], 'type' => 'PRICE_CUT', 'vat_included' => 'true', 'country' => strtoupper($context['country']))
794
  );
795
 
@@ -798,6 +823,16 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
798
  $this->xml->pop();
799
  }
800
 
 
 
 
 
 
 
 
 
 
 
801
  /**
802
  * Return product special price (if exists)
803
  *
@@ -858,7 +893,10 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
858
  $result['min_price'] = $product->getPrice();
859
  $result['price'] = $product->getPrice();
860
  $result['final_price'] = $product->getPrice();
861
- $product->clearInstance();
 
 
 
862
  }
863
 
864
  return $result;
@@ -1002,13 +1040,12 @@ class MDN_Antidot_Model_Export_Product extends MDN_Antidot_Model_Export_Abstract
1002
  $this->writeDescriptions($variantProduct);
1003
  $this->writeStore($product, $stores, $variantProduct);
1004
  $this->writeIdentifiers($variantProduct);
1005
- $this->writeProperties($variantProduct, $stores);
1006
  $this->writeMaterials($variantProduct);
1007
  $this->writeColors($variantProduct);
1008
  $this->writeModels($variantProduct);
1009
  $this->writeSizes($variantProduct);
1010
  $this->writeGenders($product);
1011
- $this->writeImageUrl($variantProduct);
1012
  $this->writeMisc($variantProduct);
1013
  }
1014
 
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_Export_Product extends MDN_Antidot_Model_Export_Abstract
17
  {
18
 
19
  const TYPE = 'CATALOG';
20
+ const FILENAME_XML = 'catalog-%s_%s-%s.xml';
21
+ const FILENAME_ZIP = '%s_full_%s_catalog.zip';
22
+ const FILENAME_ZIP_INC = '%s_inc_%s_catalog.zip';
23
  const XSD = 'http://ref.antidot.net/store/latest/catalog.xsd';
24
 
25
  /*
88
  ->joinField('qty',
89
  'cataloginventory/stock_item',
90
  'qty',
91
+ 'product_id=entity_id', // warning : no spaces between = and entity_id , magento1.5 isn't robust enought
92
  '{{table}}.stock_id = 1'.$productsInStock)
93
  ;
94
 
130
  Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
131
 
132
  foreach($collection as $product) {
133
+
134
+ $stores = $this->getProductStores($product, $context);
135
+ if ($store = current($stores)) { //we take the "first" store of the current lang
136
+ $product = Mage::getModel('catalog/product')->setStoreId($store->getId())->load(
137
+ $product->getId()
138
+ );
139
+
140
+ $this->writeProduct($product, $stores);
141
+
142
+ $product->clearInstance(); //memory flush
143
+ $product = null;
144
+ unset($product);
145
+ gc_collect_cycles();
146
+ }
147
 
148
  }
149
  $this->writePart($this->xml->flush());
209
  }
210
  }
211
  }
212
+
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  /**
214
  * Write the product
215
  *
216
  * @param Product $product
217
+ * @param Array $stores
218
  */
219
+ protected function writeProduct($product, $stores)
220
  {
221
+
 
222
  //skip product if no websites
223
  if (count($stores) == 0)
224
  return;
250
  if ($keywords = $this->getField($product, 'keywords')) {
251
  $this->xml->element('keywords', $this->xml->encloseCData($keywords));
252
  }
 
 
 
253
  $this->writeClassification($product, $rootCategoriesIds);
 
254
  $this->writeBrand($product);
255
  $this->writeMaterials($product);
256
  $this->writeColors($product);
274
  {
275
  $this->xml->push('stores');
276
 
277
+ /* Qty is the same for all stores, better compute it outside the loop: */
278
  $qty = Mage::getModel('cataloginventory/stock_item')->loadByProduct($variantProduct)->getQty();
279
  $qty = ($qty > 0 ? $qty : 0);
280
 
284
  /*
285
  * reload the $variantProduct if this is a real variant or if we are on a different store
286
  */
287
+ $reloaded = false;
288
  if ($product->getId() != $variantProduct->getId() || $store->getId() != $product->getStoreId()) {
289
  $reloadedVariantProduct = Mage::getModel('catalog/product')->setStoreId($store->getId())->load(
290
  $variantProduct->getId()
291
  );
292
+ $reloaded = true;
293
  } else {
294
  $reloadedVariantProduct = $variantProduct;
295
  }
299
  $storeContext['country'] = $this->getStoreLang($store->getId());
300
 
301
  $operations = $this->getOperations($product, $store);
302
+ $this->writePrices($reloadedVariantProduct, $product, $storeContext, $store);
303
  $this->writeMarketing($reloadedVariantProduct, $operations);
304
 
305
  $isAvailable = $reloadedVariantProduct->isSalable() || (in_array($reloadedVariantProduct->getTypeId(), $this->productMultiple) && $product->isInStock());
307
 
308
  $this->xml->element('stock', (int)$qty);
309
 
310
+ $this->writeProductUrl($reloadedVariantProduct);
311
+ $this->writeImageUrl($reloadedVariantProduct);
312
+
313
  $this->xml->pop();
314
 
315
+ if ($reloaded) {
316
+ $reloadedVariantProduct->clearInstance(); //memory flush
317
+ $reloadedVariantProduct = null;
318
+ unset($reloadedVariantProduct);
319
+ gc_collect_cycles();
320
+ }
321
+
322
+
323
  }
324
  $this->xml->pop();
325
  }
353
  if (in_array($storeId, $this->enabledStores))
354
  $stores[] = $context['stores'][$storeId];
355
  }
356
+
357
  return $stores;
358
  }
359
 
457
  }
458
  }
459
  }
460
+
461
  /**
462
  * Write the product urls
463
+ *
464
+ * @param Product $product
465
+ * @param string $urlImg
466
+ */
467
+ protected function writeProductUrl($product)
468
+ {
469
+ $this->xml->element('url', $this->xml->encloseCData($product->getProductUrl(false)));
470
+ }
471
+
472
+
473
+ /**
474
+ * Write the product images urls
475
  *
476
  * @param Product $product
477
  * @param string $urlImg
478
  */
479
  protected function writeImageUrl($product, $urlImg = true)
480
  {
481
+
482
+ //Set the current store to generate correct URls (even in unit tests)
483
+ Mage::app()->setCurrentStore($product->getStoreId());
484
+
485
+ try {
486
  if ($product->getThumbnail() && ($product->getThumbnail() != 'no_selection')) {
487
+ $this->xml->element('url_thumbnail', $this->xml->encloseCData(Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getThumbnail())));
488
  }
489
+ } catch(Exception $e) {
490
+ Mage::log($e, Zend_Log::ERR, 'antidot.log');
491
+ }
492
 
493
  try {
494
  if ($urlImg && $product->getImage() && ($product->getImage() != 'no_selection')) {
495
+ $this->xml->element('url_image', $this->xml->encloseCData(Mage::getModel('catalog/product_media_config')->getMediaUrl($product->getImage())));
496
  }
497
+ } catch(Exception $e) {
498
+ Mage::log($e, Zend_Log::ERR, 'antidot.log');
499
+ }
500
  }
501
 
502
  /**
703
  * Write the product properties
704
  *
705
  * @param Product $product
 
706
  */
707
+ protected function writeProperties($product)
708
  {
709
  $properties = array();
710
  if(!empty($this->fields['properties'])) {
715
 
716
  $attribute = $product->getResource()->getAttribute($property['value']);
717
  if ($attribute) {
718
+ $attribute->setStoreId($product->getStoreId());
719
  $value = $attribute->getFrontend()->getValue($product);
720
+ $label = $attribute->getFrontendLabel(); // we use Admin label as default value
721
+ $labels = $attribute->getStoreLabels();
722
+ if (isset($labels[$product->getStoreId()])) {
723
+ $label = $labels[$product->getStoreId()];
724
+ }
725
+ /**
726
+ * Note : we don't use $attribute->getStoreLabel() method because
727
+ * $product->getResource() is a singleton which cache the attributes
728
+ * then the attribute (and his store label) is loaded for the first store
729
+ * processed, and we get wrong label for the next stores.
730
+ * Flush this cache would be less performance
731
+ */
732
  switch($attribute->getfrontend_input())
733
  {
734
  case 'multiselect':
745
  break;
746
  default:
747
  $optionName = $value;
748
+ if(!empty($this->propertyLabel[$property['value']]['options'][$id]['per_store'][$product->getStoreId()])) {
749
+ $optionName = $this->propertyLabel[$property['value']]['options'][$id]['per_store'][$product->getStoreId()];
750
  }
751
+ //do not insert the properties tag if it has no value (in label attribute) :
752
+ if ($optionName) {
753
+ $properties[] = array(
754
+ 'name' => $property['value'],
755
+ 'display_name' => substr($label, 0, self::FACET_MAX_LENGTH),
756
+ 'label' => substr($optionName, 0, self::FACET_MAX_LENGTH),
757
+ 'autocomplete' => ($property['autocomplete'] == 1 ? 'on' : 'off')
758
+ );
759
+ }
760
  break;
761
  }
762
  } else {
781
  *
782
  * @param Product $product
783
  */
784
+ protected function writePrices($product, $parentProduct, $context, $store)
785
  {
786
  $prices = ($this->getPrices($parentProduct->getId(), $store->getWebsiteId()));
787
 
800
  $attributes = array('currency' => $context['currency'], 'type' => 'PRICE_FINAL', 'vat_included' => 'true', 'country' => strtoupper($context['country']));
801
  if (isset($priceCut))
802
  {
803
+ $off = $this->computePriceOff($priceCut, $price);
804
  $attributes['off'] = $off;
805
  }
806
  $this->xml->element(
814
  $priceCut = Mage::helper('directory')->currencyConvert($priceCut, Mage::app()->getStore()->getCurrentCurrencyCode(), $store->getCurrentCurrencyCode());
815
  $this->xml->element(
816
  'price',
817
+ Mage::helper('Antidot')->round($priceCut),
818
  array('currency' => $context['currency'], 'type' => 'PRICE_CUT', 'vat_included' => 'true', 'country' => strtoupper($context['country']))
819
  );
820
 
823
  $this->xml->pop();
824
  }
825
 
826
+ /**
827
+ * Return The price reduction percentage
828
+ *
829
+ * @param $priceCut
830
+ * @param $price
831
+ */
832
+ protected function computePriceOff($priceCut, $price) {
833
+ return round(($priceCut - $price) / $priceCut * 100);
834
+ }
835
+
836
  /**
837
  * Return product special price (if exists)
838
  *
893
  $result['min_price'] = $product->getPrice();
894
  $result['price'] = $product->getPrice();
895
  $result['final_price'] = $product->getPrice();
896
+ $product->clearInstance(); //memory flush
897
+ $product = null;
898
+ unset($product);
899
+ gc_collect_cycles();
900
  }
901
 
902
  return $result;
1040
  $this->writeDescriptions($variantProduct);
1041
  $this->writeStore($product, $stores, $variantProduct);
1042
  $this->writeIdentifiers($variantProduct);
1043
+ $this->writeProperties($variantProduct);
1044
  $this->writeMaterials($variantProduct);
1045
  $this->writeColors($variantProduct);
1046
  $this->writeModels($variantProduct);
1047
  $this->writeSizes($variantProduct);
1048
  $this->writeGenders($product);
 
1049
  $this->writeMisc($variantProduct);
1050
  }
1051
 
app/code/community/MDN/Antidot/Model/Observer.php CHANGED
@@ -9,14 +9,15 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
17
  {
18
  const GENERATE_FULL = 'FULL';
19
  const GENERATE_INC = 'INC';
 
20
 
21
  /**
22
  * @var string @tmpDirectory
@@ -48,9 +49,52 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
48
  $this->begin = microtime(true);
49
  $this->initTmpDirectory();
50
 
51
- ini_set('memory_limit', '1024M');
 
 
 
 
 
 
 
52
  }
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  /**
55
  * Init the tmp directory
56
  */
@@ -77,26 +121,26 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
77
  /**
78
  * Generate the full catalog file
79
  */
80
- public function catalogFullExport()
81
  {
82
  $this->log('FULL EXPORT');
83
- $this->generate(Mage::getModel('Antidot/Export_Product'), self::GENERATE_FULL);
84
  }
85
 
86
  /**
87
  * Generate the inc catalog file
88
  */
89
- public function catalogIncExport()
90
  {
91
- $this->generate(Mage::getModel('Antidot/Export_Product'), self::GENERATE_INC);
92
  }
93
 
94
  /**
95
  * Generate the category file
96
  */
97
- public function categoriesFullExport()
98
  {
99
- $this->generate(Mage::getModel('Antidot/Export_Category'), self::GENERATE_FULL);
100
  }
101
 
102
  /**
@@ -106,7 +150,7 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
106
  * @param string $type
107
  * @throws Exception
108
  */
109
- protected function generate($exportModel, $type)
110
  {
111
  $this->type = $exportModel::TYPE;
112
  $this->log('start');
@@ -118,12 +162,13 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
118
  try
119
  {
120
 
121
- $files = array();
122
- foreach($this->getDefaultContext() as $context) {
 
123
  $this->log('generate '.$exportModel::TYPE.' '.$context['owner']);
124
  $context['store_id'] = array_keys($context['stores']);
125
 
126
- $filename = $this->tmpDirectory.sprintf($exportModel::FILENAME_XML, $type, $context['lang']);
127
  $items = $exportModel->writeXml($context, $filename, $type);
128
  if($items === 0) {
129
  $this->log('No items to export');
@@ -131,30 +176,31 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
131
  }
132
 
133
  $log['items']+= $items;
134
- if ($this->schemaValidate($filename, $exportModel::XSD)) {
135
- $this->log('Schema validated');
136
  $files[] = $filename;
137
  } else {
 
138
  $this->fileError($filename);
139
 
140
- $errors = Mage::helper('Antidot/XmlWriter')->getErrors();
141
- $this->log('xml schema not valid '.print_r($errors, true));
142
- Mage::helper('Antidot')->sendMail('Export failed', print_r($errors, true));
143
- foreach($errors as $error)
144
  $log['error'][] = $error;
 
145
  continue;
 
146
  }
147
  }
148
 
149
  if($log['items'] === 0) {
150
  $this->log('No items available, cancel export');
151
- return;
152
  }
153
 
154
  $log['reference'] = 'unknown';
155
  if(!empty($files)) {
156
  $this->log('Compress files');
157
  $filenameZip = $type === self::GENERATE_INC ? $exportModel::FILENAME_ZIP_INC : $exportModel::FILENAME_ZIP;
 
158
  $filename = $this->compress($files, $filenameZip);
159
  $log['reference'] = md5($filename);
160
  $this->send($filename);
@@ -163,8 +209,11 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
163
  } else {
164
  $log['status'] = 'FAILED';
165
  $lastError = current(Mage::helper('Antidot/XmlWriter')->getErrors());
166
- if ($lastError)
167
- $log['error'][] = $lastError;
 
 
 
168
  }
169
 
170
  if(file_exists($filename)) {
@@ -184,6 +233,15 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
184
  $this->log('end');
185
 
186
  Mage::helper('Antidot/LogExport')->add($log['reference'], $type, $exportModel::TYPE, $log['begin'], $log['end'], $log['items'], $log['status'], implode(',', $log['error']));
 
 
 
 
 
 
 
 
 
187
  }
188
 
189
  /**
@@ -223,7 +281,7 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
223
  {
224
  $this->log('compress the file');
225
 
226
- $compressFile = dirname(current($files)).'/'.sprintf($compressFile, date('YmdHis'));
227
  Mage::helper('Antidot/Compress')->zip($files, $compressFile);
228
 
229
  return $compressFile;
@@ -246,27 +304,61 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
246
 
247
  /**
248
  * Check if the xml file is valid
 
249
  *
250
  * @param string $filename xml file
251
  * @param string $xsd xsd file
252
- * @return boolean
253
  */
254
  protected function schemaValidate($filename, $xsd)
255
  {
 
 
256
  //disable schema validation
257
  if (Mage::getStoreConfig('antidot/xsd_verification/disable') == 1)
258
  {
259
  $this->log('schema validation is DISABLED');
260
- return true;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  }
 
262
 
263
- libxml_use_internal_errors(true);
264
- $this->log('schema validate');
265
-
266
- $xml = new DOMDocument();
267
- $xml->load($filename);
268
-
269
- return $xml->schemaValidate($xsd);
270
  }
271
 
272
  /**
@@ -275,7 +367,7 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
275
  * @todo retrieve these data from the db
276
  * @return array
277
  */
278
- private function getDefaultContext()
279
  {
280
  $listStore = array();
281
  foreach (Mage::app()->getStores() as $store) {
@@ -284,12 +376,16 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
284
  $listStore[$lang][$store->getId()] = $store;
285
  }
286
  }
287
-
 
 
 
 
288
  $listContext = array();
289
- $context['website_ids'] = array();
290
  foreach($listStore as $lang => $stores) {
291
- $defaultOwner = 'AFS@Store for Magento v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version;
292
- $context['owner'] = Mage::getStoreConfig('antidot/general/owner') === '' ? $defaultOwner : Mage::getStoreConfig('antidot/general/owner');
 
293
  $context['lang'] = $lang;
294
  $context['stores'] = $stores;
295
  foreach ($stores as $store) {
@@ -319,4 +415,35 @@ class MDN_Antidot_Model_Observer extends Mage_Core_Model_Abstract
319
 
320
  Mage::log($message, null, 'antidot.log');
321
  }
322
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_Observer extends Mage_Core_Model_Abstract
17
  {
18
  const GENERATE_FULL = 'FULL';
19
  const GENERATE_INC = 'INC';
20
+ const MINIMUM_MEMORY_LIMIT = '2048M';
21
 
22
  /**
23
  * @var string @tmpDirectory
49
  $this->begin = microtime(true);
50
  $this->initTmpDirectory();
51
 
52
+ /*
53
+ * If the default memory limit is below 2048M set it to 2048M
54
+ * else if it is above 2048M let it as it is
55
+ */
56
+ if ($this->return_bytes(ini_get('memory_limit')) < $this->return_bytes(self::MINIMUM_MEMORY_LIMIT)) {
57
+ ini_set('memory_limit', self::MINIMUM_MEMORY_LIMIT);
58
+ }
59
+
60
  }
61
 
62
+ /**
63
+ * Gives the value in bytes
64
+ */
65
+ protected function return_bytes ($val)
66
+ {
67
+ if(empty($val))return 0;
68
+
69
+ $val = trim($val);
70
+
71
+ preg_match('#([0-9]+)[\s]*([a-z]+)#i', $val, $matches);
72
+
73
+ $last = '';
74
+ if(isset($matches[2])){
75
+ $last = $matches[2];
76
+ }
77
+
78
+ if(isset($matches[1])){
79
+ $val = (int) $matches[1];
80
+ }
81
+
82
+ switch (strtolower($last))
83
+ {
84
+ case 'g':
85
+ case 'gb':
86
+ $val *= 1024;
87
+ case 'm':
88
+ case 'mb':
89
+ $val *= 1024;
90
+ case 'k':
91
+ case 'kb':
92
+ $val *= 1024;
93
+ }
94
+
95
+ return (int) $val;
96
+ }
97
+
98
  /**
99
  * Init the tmp directory
100
  */
121
  /**
122
  * Generate the full catalog file
123
  */
124
+ public function catalogFullExport($runContext = 'cron')
125
  {
126
  $this->log('FULL EXPORT');
127
+ return $this->generate(Mage::getModel('Antidot/Export_Product'), self::GENERATE_FULL, $runContext);
128
  }
129
 
130
  /**
131
  * Generate the inc catalog file
132
  */
133
+ public function catalogIncExport($runContext = 'cron')
134
  {
135
+ return $this->generate(Mage::getModel('Antidot/Export_Product'), self::GENERATE_INC, $runContext);
136
  }
137
 
138
  /**
139
  * Generate the category file
140
  */
141
+ public function categoriesFullExport($runContext = 'cron')
142
  {
143
+ return $this->generate(Mage::getModel('Antidot/Export_Category'), self::GENERATE_FULL, $runContext);
144
  }
145
 
146
  /**
150
  * @param string $type
151
  * @throws Exception
152
  */
153
+ protected function generate($exportModel, $type, $runContext)
154
  {
155
  $this->type = $exportModel::TYPE;
156
  $this->log('start');
162
  try
163
  {
164
 
165
+ $owner = $this->getOwnerForFilename(Mage::getStoreConfig('antidot/general/owner'));
166
+ $files = array();
167
+ foreach($this->getDefaultContext($runContext) as $context) {
168
  $this->log('generate '.$exportModel::TYPE.' '.$context['owner']);
169
  $context['store_id'] = array_keys($context['stores']);
170
 
171
+ $filename = $this->tmpDirectory.sprintf($exportModel::FILENAME_XML, $owner, $type, $context['lang']);
172
  $items = $exportModel->writeXml($context, $filename, $type);
173
  if($items === 0) {
174
  $this->log('No items to export');
176
  }
177
 
178
  $log['items']+= $items;
179
+ $validationErrors = $this->schemaValidate($filename, $exportModel::XSD);
180
+ if (count($validationErrors)==0) {
181
  $files[] = $filename;
182
  } else {
183
+
184
  $this->fileError($filename);
185
 
186
+ foreach ($validationErrors as $error) {
 
 
 
187
  $log['error'][] = $error;
188
+ }
189
  continue;
190
+
191
  }
192
  }
193
 
194
  if($log['items'] === 0) {
195
  $this->log('No items available, cancel export');
196
+ return 0;
197
  }
198
 
199
  $log['reference'] = 'unknown';
200
  if(!empty($files)) {
201
  $this->log('Compress files');
202
  $filenameZip = $type === self::GENERATE_INC ? $exportModel::FILENAME_ZIP_INC : $exportModel::FILENAME_ZIP;
203
+ $filenameZip = sprintf($filenameZip, date('YmdHis'), $owner);
204
  $filename = $this->compress($files, $filenameZip);
205
  $log['reference'] = md5($filename);
206
  $this->send($filename);
209
  } else {
210
  $log['status'] = 'FAILED';
211
  $lastError = current(Mage::helper('Antidot/XmlWriter')->getErrors());
212
+ if ($lastError) {
213
+ $log['error'][] = $lastError;
214
+ } else {
215
+ $log['error'][] = 'No file to export';
216
+ }
217
  }
218
 
219
  if(file_exists($filename)) {
233
  $this->log('end');
234
 
235
  Mage::helper('Antidot/LogExport')->add($log['reference'], $type, $exportModel::TYPE, $log['begin'], $log['end'], $log['items'], $log['status'], implode(',', $log['error']));
236
+
237
+ if ( count($log['error']) ) {
238
+ //send error alert mail
239
+ Mage::helper('Antidot')->sendMail('Export failed', print_r($log['error'], true));
240
+ //throw Exception in order to dispay error message in UI
241
+ Mage::throwException(implode(',', $log['error']));
242
+ }
243
+
244
+ return $log['items'];
245
  }
246
 
247
  /**
281
  {
282
  $this->log('compress the file');
283
 
284
+ $compressFile = dirname(current($files)).'/'.$compressFile;
285
  Mage::helper('Antidot/Compress')->zip($files, $compressFile);
286
 
287
  return $compressFile;
304
 
305
  /**
306
  * Check if the xml file is valid
307
+ * Returns array of error message, empty if schema is valid
308
  *
309
  * @param string $filename xml file
310
  * @param string $xsd xsd file
311
+ * @return array
312
  */
313
  protected function schemaValidate($filename, $xsd)
314
  {
315
+ $errors = array();
316
+
317
  //disable schema validation
318
  if (Mage::getStoreConfig('antidot/xsd_verification/disable') == 1)
319
  {
320
  $this->log('schema validation is DISABLED');
321
+ } else {
322
+
323
+ libxml_use_internal_errors(true);
324
+ $this->log('schema validate');
325
+
326
+ $xml = new DOMDocument();
327
+ $xml->load($filename);
328
+
329
+ try {
330
+
331
+ if ($xml->schemaValidate($xsd)) {
332
+ $this->log('Schema validated');
333
+ } else {
334
+
335
+ $errors = Mage::helper('Antidot/XmlWriter')->getErrors();
336
+
337
+ $match = array();
338
+ if (preg_match('#Warning 1549: failed to load external entity "(.*)\.xsd"#', $errors[0], $match)) {
339
+ $errors = array();
340
+ //In case XSD is not reacheable, disable the schema validation
341
+ $this->log('failed to load external entity '.$match[1].'.xsd, schema validation is DISABLED');
342
+ $this->log('Schema validated');
343
+ }
344
+ }
345
+
346
+ } catch (Exception $e) {
347
+ $match = array();
348
+ if (preg_match(
349
+ "#Warning: DOMDocument::schemaValidate\(http://(.*)\.xsd\): failed to open stream:#",
350
+ $e->getMessage(),
351
+ $match
352
+ )) {
353
+ //In case xsd is not reacheable, disable the schema validation
354
+ $this->log('http://'.$match[1].'.xsd is not reacheable, schema validation is DISABLED');
355
+ } else {
356
+ throw $e;
357
+ }
358
+ }
359
  }
360
+ return $errors;
361
 
 
 
 
 
 
 
 
362
  }
363
 
364
  /**
367
  * @todo retrieve these data from the db
368
  * @return array
369
  */
370
+ private function getDefaultContext($runContext)
371
  {
372
  $listStore = array();
373
  foreach (Mage::app()->getStores() as $store) {
376
  $listStore[$lang][$store->getId()] = $store;
377
  }
378
  }
379
+ $owner = 'AFS@Store for Magento v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version;
380
+ if (Mage::getStoreConfig('antidot/general/owner')) {
381
+ $owner = Mage::getStoreConfig('antidot/general/owner');
382
+ }
383
+
384
  $listContext = array();
 
385
  foreach($listStore as $lang => $stores) {
386
+ $context['website_ids'] = array();
387
+ $context['owner'] = $owner;
388
+ $context['run'] = $runContext;
389
  $context['lang'] = $lang;
390
  $context['stores'] = $stores;
391
  foreach ($stores as $store) {
415
 
416
  Mage::log($message, null, 'antidot.log');
417
  }
418
+
419
+ /**
420
+ * MCNX-27 Return the Owner defined in the AFSStore Config Area
421
+ * formated in order tu be used in the export filename
422
+ *
423
+ * @return string
424
+ */
425
+ private function getOwnerForFilename($owner = null) {
426
+
427
+ $filename = 'magento';
428
+ if ($owner) {
429
+
430
+ /// convert non-alphanumeric characters
431
+ // - see the rules below on the page
432
+ $owner = Mage::helper('catalog/product_url')->format($owner);
433
+
434
+ // replace remaining non-alphanumeric characters
435
+ // with dashes
436
+ $owner = preg_replace('#[^0-9a-z]+#i', '_', $owner);
437
+
438
+ // make it lowercase
439
+ $owner = strtolower($owner);
440
+
441
+ // trim dashes on the left and right
442
+ $owner = trim($owner, '_');
443
+
444
+ $filename .= '_'.$owner;
445
+ }
446
+
447
+ return $filename;
448
+ }
449
+ }
app/code/community/MDN/Antidot/Model/Resource/Advanced.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Resource_Advanced extends Mage_CatalogSearch_Model_Resource_Advanced
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_Resource_Advanced extends Mage_CatalogSearch_Model_Resource_Advanced
app/code/community/MDN/Antidot/Model/Resource/Catalog/Product/Collection.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Resource_Catalog_Product_Collection extends Mage_Catalog_Model_Resource_Product_Collection
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_Resource_Catalog_Product_Collection extends Mage_Catalog_Model_Resource_Product_Collection
app/code/community/MDN/Antidot/Model/Resource/Engine/Abstract.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  abstract class MDN_Antidot_Model_Resource_Engine_Abstract
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
  abstract class MDN_Antidot_Model_Resource_Engine_Abstract
app/code/community/MDN/Antidot/Model/Resource/Engine/Antidot.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resource_Engine_Abstract
@@ -163,10 +163,11 @@ class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resour
163
  foreach ($value as $part) {
164
  //explode values if facet is multi select
165
  $isMultiSelect = $this->isMultiSelect($field);
166
- if ($isMultiSelect)
167
- $fieldCondition = array($field => explode(',', $part));
168
- else
169
  $fieldCondition = array($field => $part);
 
170
  break;
171
  }
172
  }
@@ -181,6 +182,24 @@ class MDN_Antidot_Model_Resource_Engine_Antidot extends MDN_Antidot_Model_Resour
181
  return $result;
182
  }
183
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
184
  /**
185
  * Return true if a facet allows multi select
186
  *
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_Resource_Engine_Antidot extends MDN_Antidot_Model_Resource_Engine_Abstract
163
  foreach ($value as $part) {
164
  //explode values if facet is multi select
165
  $isMultiSelect = $this->isMultiSelect($field);
166
+ if ($isMultiSelect) {
167
+ $fieldCondition = array($field => $this->extractMultiSelectValues($part));
168
+ } else {
169
  $fieldCondition = array($field => $part);
170
+ }
171
  break;
172
  }
173
  }
182
  return $result;
183
  }
184
 
185
+ /**
186
+ * Extract the multi select values from his raw value
187
+ *
188
+ * @param $rawValue
189
+ * @return array
190
+ */
191
+ public function extractMultiSelectValues($rawValue)
192
+ {
193
+ /* MCNX-171 : String facet with coma were sent as two facet
194
+ * Correction : we use str_getcsv because fields are separated by , and enclosed by ", then we re-add the enclosing "
195
+ */
196
+ $partArray = str_getcsv($rawValue);
197
+ array_walk($partArray, function(&$value, $key) {
198
+ $value='"' . $value . '"';
199
+ });
200
+ return $partArray;
201
+ }
202
+
203
  /**
204
  * Return true if a facet allows multi select
205
  *
app/code/community/MDN/Antidot/Model/Search/Abstract.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Search_Abstract extends Mage_Core_Model_Abstract
@@ -28,12 +28,13 @@ class MDN_Antidot_Model_Search_Abstract extends Mage_Core_Model_Abstract
28
  {
29
  //set_include_path(get_include_path().':'.MAGENTO_ROOT.DS.'lib'.DS.'antidot'.DS);
30
  require_once "antidot/afs_lib.php";
31
-
32
- if($config = Mage::getStoreConfig('antidot/web_service')) {
 
33
  $this->afsHost = $config['host'];
34
  $this->afsService = (int)$config['service'];
35
  $this->afsStatus = $config['status'];
36
-
37
  $this->isConfigured = true;
38
  }
39
  }
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_Search_Abstract extends Mage_Core_Model_Abstract
28
  {
29
  //set_include_path(get_include_path().':'.MAGENTO_ROOT.DS.'lib'.DS.'antidot'.DS);
30
  require_once "antidot/afs_lib.php";
31
+
32
+ $config = Mage::getStoreConfig('antidot/web_service');
33
+ if(isset($config['host']) && isset($config['service'])) {
34
  $this->afsHost = $config['host'];
35
  $this->afsService = (int)$config['service'];
36
  $this->afsStatus = $config['status'];
37
+
38
  $this->isConfigured = true;
39
  }
40
  }
app/code/community/MDN/Antidot/Model/Search/Search.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Search_Search extends MDN_Antidot_Model_Search_Abstract
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_Search_Search extends MDN_Antidot_Model_Search_Abstract
app/code/community/MDN/Antidot/Model/Search/Suggest.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Search_Suggest extends MDN_Antidot_Model_Search_Abstract
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_Search_Suggest extends MDN_Antidot_Model_Search_Abstract
app/code/community/MDN/Antidot/Model/System/Config/ArticleAttribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_ArticleAttribute extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
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_ArticleAttribute extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
app/code/community/MDN/Antidot/Model/System/Config/Backend/Engine.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Backend_Engine extends Mage_Core_Model_Config_Data
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_Backend_Engine extends Mage_Core_Model_Config_Data
app/code/community/MDN/Antidot/Model/System/Config/CategoryAttribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_CategoryAttribute extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
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_CategoryAttribute extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
app/code/community/MDN/Antidot/Model/System/Config/Dir.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Dir
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_Dir
app/code/community/MDN/Antidot/Model/System/Config/DisableEnable.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_DisableEnable extends Mage_Adminhtml_Model_System_Config_Source_Enabledisable
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_DisableEnable extends Mage_Adminhtml_Model_System_Config_Source_Enabledisable
app/code/community/MDN/Antidot/Model/System/Config/Engine.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Engine
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_Engine
app/code/community/MDN/Antidot/Model/System/Config/Facet.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Facet
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_Facet
app/code/community/MDN/Antidot/Model/System/Config/Number.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Number
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_Number
app/code/community/MDN/Antidot/Model/System/Config/Options.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Options
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_Options
app/code/community/MDN/Antidot/Model/System/Config/ProductAttribute.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_ProductAttribute extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
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_ProductAttribute extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
app/code/community/MDN/Antidot/Model/System/Config/PromoteRedirect.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_PromoteRedirect
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_PromoteRedirect
app/code/community/MDN/Antidot/Model/System/Config/Sort.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Sort
@@ -36,27 +36,25 @@ class MDN_Antidot_Model_System_Config_Sort
36
  $this->initMarketingFields();
37
  $options = array();
38
  $options[] = array('value' => 'afs:relevance|Relevance', 'label' => Mage::helper('Antidot')->__('Relevance'));
39
- //$options[] = array('value' => 'position|Position', 'label' => Mage::helper('Antidot')->__('Position'));
40
  $options[] = array('value' => 'name|Name', 'label' => Mage::helper('Antidot')->__('Name'));
 
 
 
41
 
42
  foreach($this->marketingFields as $field => $label) {
43
- if(Mage::getStoreConfig('antidot/fields_product/'.$field) !== '') {
44
  $options[] = array('value' => $field.'|'.$label, 'label' => $label);
45
  }
46
  }
47
 
48
-
49
- self::$options = array_merge($options, Mage::getModel("Antidot/System_Config_Facet")->toOptionArray('STRING'));
50
-
51
- foreach(self::$options as &$option) {
52
- if(preg_match('/^price_/', $option['value'])) {
53
- $option['label'] = Mage::helper('Antidot')->__('Price');
54
- $option['value'] = 'price|'.Mage::helper('Antidot')->__('Price');
55
  }
56
  }
57
 
 
58
  }
59
-
60
  return self::$options;
61
  }
62
 
@@ -66,10 +64,17 @@ class MDN_Antidot_Model_System_Config_Sort
66
  public function initMarketingFields()
67
  {
68
  $this->marketingFields = array(
69
- 'is_promotional' => Mage::helper('Antidot')->__('Is promotional'),
70
  'is_new' => Mage::helper('Antidot')->__('Is new'),
71
  'is_best_sale' => Mage::helper('Antidot')->__('Is top sale'),
72
  'is_featured' => Mage::helper('Antidot')->__('Is featured'),
73
  );
74
  }
 
 
 
 
 
 
 
 
75
  }
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_Sort
36
  $this->initMarketingFields();
37
  $options = array();
38
  $options[] = array('value' => 'afs:relevance|Relevance', 'label' => Mage::helper('Antidot')->__('Relevance'));
 
39
  $options[] = array('value' => 'name|Name', 'label' => Mage::helper('Antidot')->__('Name'));
40
+ $options[] = array('value' => 'price|Price', 'label' => Mage::helper('Antidot')->__('Price'));
41
+ $options[] = array('value' => 'is_promotional|Is promotional', 'label' => Mage::helper('Antidot')->__('Is promotional'));
42
+ $options[] = array('value' => 'stock|Stock', 'label' => Mage::helper('Antidot')->__('Stock'));
43
 
44
  foreach($this->marketingFields as $field => $label) {
45
+ if(Mage::getStoreConfig('antidot/fields_product/'.$field) != '') {
46
  $options[] = array('value' => $field.'|'.$label, 'label' => $label);
47
  }
48
  }
49
 
50
+ foreach(Mage::getModel("Antidot/System_Config_Facet")->toOptionArray('STRING') as $facetOption) {
51
+ if(!preg_match('/^price_/', $facetOption['value'])) {
52
+ $options[] = $facetOption;
 
 
 
 
53
  }
54
  }
55
 
56
+ self::$options = $options;
57
  }
 
58
  return self::$options;
59
  }
60
 
64
  public function initMarketingFields()
65
  {
66
  $this->marketingFields = array(
 
67
  'is_new' => Mage::helper('Antidot')->__('Is new'),
68
  'is_best_sale' => Mage::helper('Antidot')->__('Is top sale'),
69
  'is_featured' => Mage::helper('Antidot')->__('Is featured'),
70
  );
71
  }
72
+
73
+ /**
74
+ * flush options cache
75
+ * for unit test only !
76
+ */
77
+ public function reinitOptions() {
78
+ self::$options = null;
79
+ }
80
  }
app/code/community/MDN/Antidot/Model/System/Config/Suggest/Type.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_Suggest_Type
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_Suggest_Type
app/code/community/MDN/Antidot/Model/System/Config/WSStatus.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_System_Config_WSStatus
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_WSStatus
app/code/community/MDN/Antidot/Model/Transport.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Transport extends Mage_Core_Model_Abstract
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_Transport extends Mage_Core_Model_Abstract
app/code/community/MDN/Antidot/Model/Transport/Abstract.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Transport_Abstract extends Mage_Core_Model_Abstract
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_Transport_Abstract extends Mage_Core_Model_Abstract
app/code/community/MDN/Antidot/Model/Transport/File.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Transport_File extends MDN_Antidot_Model_Transport_Abstract implements MDN_Antidot_Model_Transport_Interface
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_Transport_File extends MDN_Antidot_Model_Transport_Abstract implements MDN_Antidot_Model_Transport_Interface
app/code/community/MDN/Antidot/Model/Transport/Ftp.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Model_Transport_Ftp extends MDN_Antidot_Model_Transport_Abstract implements MDN_Antidot_Model_Transport_Interface
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_Transport_Ftp extends MDN_Antidot_Model_Transport_Abstract implements MDN_Antidot_Model_Transport_Interface
app/code/community/MDN/Antidot/Model/Transport/Http.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
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
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_Transport_Http extends MDN_Antidot_Model_Transport_Abstract implements MDN_Antidot_Model_Transport_Interface
app/code/community/MDN/Antidot/Model/Transport/Interface.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  interface MDN_Antidot_Model_Transport_Interface
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
  interface MDN_Antidot_Model_Transport_Interface
app/code/community/MDN/Antidot/Test/Block/System/Config/Button/AfsStore.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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_System_Config_Button_AfsStore extends EcomDev_PHPUnit_Test_Case
17
+ {
18
+
19
+
20
+ /**
21
+ *
22
+ */
23
+ public function testGetElementHtml()
24
+ {
25
+
26
+ /* @var $block MDN_Antidot_Block_System_Config_Button_AfsStore */
27
+ $block = Mage::app()->getLayout()->createBlock('Antidot/system_config_button_afsStore');
28
+
29
+ /**
30
+ * First test : session fr => button fr
31
+ */
32
+ $mockSession = $this->getModelMock('adminhtml/session', array('getLocale'), false, array(), '', false);
33
+ //set the paramterer $callOriginalConstructor to false in order to not initialise session during unit test
34
+ $mockSession->expects($this->any())
35
+ ->method('getLocale')
36
+ ->will($this->returnCallBack(function(){return 'fr_FR';}));
37
+
38
+ $this->replaceByMock('singleton', 'adminhtml/session', $mockSession);
39
+
40
+ $html= MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($block, '_getElementHtml', array(new Varien_Data_Form_Element_Button()));
41
+
42
+ $expectedPattern = '#https://bo-store.afs-antidot.net/fr#';
43
+
44
+ $this->assertRegExp(
45
+ $expectedPattern,
46
+ $html
47
+ );
48
+
49
+ /**
50
+ * Second test : session en => button en
51
+ */
52
+ $mockSession = $this->getModelMock('adminhtml/session', array('getLocale'), false, array(), '', false);
53
+ //set the paramterer $callOriginalConstructor to false in order to not initialise session during unit test
54
+ $mockSession->expects($this->any())
55
+ ->method('getLocale')
56
+ ->will($this->returnCallBack(function(){return 'en_GB';}));
57
+
58
+ $this->replaceByMock('singleton', 'adminhtml/session', $mockSession);
59
+
60
+ $html= MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($block, '_getElementHtml', array(new Varien_Data_Form_Element_Button()));
61
+
62
+ $expectedPattern = '#https://bo-store.afs-antidot.net/en#';
63
+
64
+ $this->assertRegExp(
65
+ $expectedPattern,
66
+ $html
67
+ );
68
+
69
+ /**
70
+ * Second test : session en => button en
71
+ */
72
+ $mockSession = $this->getModelMock('adminhtml/session', array('getLocale'), false, array(), '', false);
73
+ //set the paramterer $callOriginalConstructor to false in order to not initialise session during unit test
74
+ $mockSession->expects($this->any())
75
+ ->method('getLocale')
76
+ ->will($this->returnCallBack(function(){return 'es_ES';}));
77
+
78
+ $this->replaceByMock('singleton', 'adminhtml/session', $mockSession);
79
+
80
+ $html= MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($block, '_getElementHtml', array(new Varien_Data_Form_Element_Button()));
81
+
82
+ $expectedPattern = '#https://bo-store.afs-antidot.net/en#';
83
+
84
+ $this->assertRegExp(
85
+ $expectedPattern,
86
+ $html
87
+ );
88
+
89
+ }
90
+ }
app/code/community/MDN/Antidot/Test/Model/Export/Article.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_Export_Article extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ /*
8
+ * MCNX-56 add version number and run context in the feed tag
9
+ */
10
+ public function testGetFeed() {
11
+
12
+ $export = Mage::getModel('Antidot/export_article');
13
+
14
+ $feed = $export->getFeed(array('run'=>'UI'));
15
+
16
+ $this->assertEquals(
17
+ 'article UI v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version,
18
+ $feed
19
+ );
20
+
21
+ }
22
+
23
+ }
app/code/community/MDN/Antidot/Test/Model/Export/Category.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_Export_Category extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ /*
8
+ * MCNX-56 add version number and run context in the feed tag
9
+ */
10
+ public function testGetFeed() {
11
+
12
+ $export = Mage::getModel('Antidot/export_category');
13
+
14
+ $feed = $export->getFeed(array('run'=>'UI'));
15
+
16
+ $this->assertEquals(
17
+ 'category UI v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version,
18
+ $feed
19
+ );
20
+
21
+ }
22
+
23
+ /*
24
+ * MCNX-170 don't generate file if there's no categories to export
25
+ * test the XmlWriter has not been initialised if there's no categories to export
26
+ */
27
+ public function testEmptyFile() {
28
+
29
+ $export = Mage::getModel('Antidot/export_category');
30
+
31
+ $context = array();
32
+ $context['store_id'] = array(1);
33
+ $context['website_ids'] = array(1);
34
+ $context['stores'] = array(Mage::getModel('core/store')->load(1));
35
+ $nbItem = $export->writeXml($context, 'categories-magento_jetpulp_FULL-en.xml', MDN_Antidot_Model_Observer::GENERATE_FULL);
36
+
37
+ $this->assertEquals($nbItem, 0);
38
+
39
+ $this->assertEquals(
40
+ null,
41
+ MDN_Antidot_Test_PHPUnitUtil::getPrivateProperty($export, 'xml')
42
+ );
43
+
44
+ }
45
+
46
+ }
app/code/community/MDN/Antidot/Test/Model/Export/Product.php ADDED
@@ -0,0 +1,543 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_Export_Product extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ /**
8
+ * options filed used to get the values in db
9
+ */
10
+ protected static $authorsOptions;
11
+ protected static $editorOptions;
12
+
13
+ /**
14
+ * Create needed attributes for the tests and stores his options values
15
+ *
16
+ * These are attributes created in admin UI, there are not created by magento installation
17
+ * scripts, then it can't be populated by EcomDev PHPUnit fixtures system
18
+ *
19
+ * We must recreate then on each test by setUp method
20
+ *
21
+ * Like this we can also store the id value in DB of the options of theses "dropdown-list" attributes,
22
+ * and use them in the tests.
23
+ *
24
+ */
25
+ public static function setUpBeforeClass() {
26
+
27
+ //avoid errors when session_start is called during the test
28
+ @session_start();
29
+
30
+ $setup = Mage::getResourceModel('catalog/setup', 'catalog_setup');
31
+ $setup->startSetup();
32
+
33
+ //delete attributes in case of the precedent test had crashed
34
+ $attributeModel = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'authors');
35
+ if ($attributeModel->getAttributeId()) {
36
+ self::removeProductAttribute($setup, $attributeModel);
37
+ }
38
+
39
+ $attributeModel = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'editor');
40
+ if ($attributeModel->getAttributeId()) {
41
+ self::removeProductAttribute($setup, $attributeModel);
42
+ }
43
+
44
+ $attr = array(
45
+ 'attribute_model' => null,
46
+ 'backend' => null,
47
+ 'type' => 'text',
48
+ 'table' => null,
49
+ 'frontend' => null,
50
+ 'input' => 'multiselect',
51
+ 'label' => 'Authors',
52
+ 'frontend_class' => '',
53
+ 'source' => 'eav/entity_attribute_source_table',
54
+ 'required' => '0',
55
+ 'user_defined' => '1',
56
+ 'default' => null,
57
+ 'unique' => '0',
58
+ 'note' => '',
59
+ 'input_renderer' => null,
60
+ 'global' => '1',
61
+ 'visible' => '1',
62
+ 'searchable' => '1',
63
+ 'filterable' => '0',
64
+ 'comparable' => '0',
65
+ 'visible_on_front' => '0',
66
+ 'is_html_allowed_on_front' => '0',
67
+ 'is_used_for_price_rules' => '1',
68
+ 'filterable_in_search' => '0',
69
+ 'used_in_product_listing' => '0',
70
+ 'used_for_sort_by' => '0',
71
+ 'is_configurable' => '1',
72
+ 'apply_to' => 'simple,grouped,configurable',
73
+ 'visible_in_advanced_search' => '1',
74
+ 'position' => '1',
75
+ 'wysiwyg_enabled' => '0',
76
+ 'used_for_promo_rules' => '1',
77
+ 'option' =>
78
+ array(
79
+ 'values' =>
80
+ array(
81
+ 0 => 'JK Rowling',
82
+ 1 => 'Stephen King',
83
+ ),
84
+ ),
85
+ );
86
+ $setup->addAttribute('catalog_product','authors',$attr);
87
+
88
+ $attr = array(
89
+ 'attribute_model' => null,
90
+ 'backend' => null,
91
+ 'type' => 'int',
92
+ 'table' => null,
93
+ 'frontend' => null,
94
+ 'input' => 'select',
95
+ 'label' => 'Editor',
96
+ 'frontend_class' => '',
97
+ 'source' => 'eav/entity_attribute_source_table',
98
+ 'required' => '0',
99
+ 'user_defined' => '1',
100
+ 'default' => null,
101
+ 'unique' => '0',
102
+ 'note' => '',
103
+ 'input_renderer' => null,
104
+ 'global' => '1',
105
+ 'visible' => '1',
106
+ 'searchable' => '1',
107
+ 'filterable' => '0',
108
+ 'comparable' => '0',
109
+ 'visible_on_front' => '0',
110
+ 'is_html_allowed_on_front' => '0',
111
+ 'is_used_for_price_rules' => '1',
112
+ 'filterable_in_search' => '0',
113
+ 'used_in_product_listing' => '0',
114
+ 'used_for_sort_by' => '0',
115
+ 'is_configurable' => '1',
116
+ 'apply_to' => 'simple,grouped,configurable',
117
+ 'visible_in_advanced_search' => '1',
118
+ 'position' => '1',
119
+ 'wysiwyg_enabled' => '0',
120
+ 'used_for_promo_rules' => '1',
121
+ 'option' =>
122
+ array(
123
+ 'values' =>
124
+ array(
125
+ 0 => 'Scholastic',
126
+ ),
127
+ ),
128
+ );
129
+ $setup->addAttribute('catalog_product','editor',$attr);
130
+
131
+ $setup->endSetup();
132
+
133
+ $attributeModel = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'authors');
134
+ self::$authorsOptions = Mage::getResourceModel('eav/entity_attribute_option_collection')->setAttributeFilter($attributeModel->getId())->setStoreFilter($attributeModel->getStoreId());
135
+ $attributeModel = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'editor');
136
+ self::$editorOptions = Mage::getResourceModel('eav/entity_attribute_option_collection')->setAttributeFilter($attributeModel->getId())->setStoreFilter($attributeModel->getStoreId());
137
+
138
+ }
139
+
140
+ /**
141
+ * gets the value in db of the option of author attribute
142
+ */
143
+ protected function getAuthorOptionId($text) {
144
+ foreach ( self::$authorsOptions as $opt) {
145
+ if ($opt->getValue()==$text) {
146
+ return $opt->getOptionId();
147
+ }
148
+ }
149
+ return null;
150
+ }
151
+
152
+ /**
153
+ * gets the value in db of the option of editor attribute
154
+ */
155
+ protected function getEditorOptionId($text) {
156
+ foreach ( self::$editorOptions as $opt) {
157
+ if ($opt->getValue()==$text) {
158
+ return $opt->getOptionId();
159
+ }
160
+ }
161
+ return null;
162
+ }
163
+
164
+ /**
165
+ * remove a product attribute
166
+ * @param Mage_Eav_Model_Attribute $attributeModel
167
+ */
168
+ protected static function removeProductAttribute($setup, $attributeModel) {
169
+
170
+ $setup->removeAttribute('catalog_product',$attributeModel->getAttributeCode());
171
+ $setup->deleteTableRow('catalog/eav_attribute', 'attribute_id', $attributeModel->getAttributeId());
172
+
173
+ }
174
+
175
+ /**
176
+ * remove the created attributes and its options
177
+ */
178
+ public static function tearDownAfterClass() {
179
+
180
+ $setup = Mage::getResourceModel('catalog/setup', 'catalog_setup');
181
+ $setup->startSetup();
182
+
183
+ $attributeModel = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'authors');
184
+ self::removeProductAttribute($setup, $attributeModel);
185
+
186
+ $attributeModel = Mage::getModel('eav/entity_attribute')->loadByCode('catalog_product', 'editor');
187
+ self::removeProductAttribute($setup, $attributeModel);
188
+
189
+ $setup->endSetup();
190
+
191
+ foreach ( self::$authorsOptions as $opt) {
192
+ $opt->delete();
193
+ }
194
+
195
+ foreach ( self::$editorOptions as $opt) {
196
+ $opt->delete();
197
+ }
198
+
199
+ }
200
+
201
+ /**
202
+ * MCNX-56 add version number and run context in the feed tag
203
+ */
204
+ public function testGetFeed() {
205
+
206
+ /** @var $export MDN_Antidot_Model_Export_Product */
207
+ $export = Mage::getModel('Antidot/export_product');
208
+
209
+ $feed = $export->getFeed(array('run'=>'UI'));
210
+
211
+ $this->assertEquals(
212
+ 'catalog UI v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version,
213
+ $feed
214
+ );
215
+
216
+ }
217
+
218
+ /**
219
+ * MCNX-29 incremental product export without product
220
+ * test the XmlWriter has not been initialised if there's no product to export
221
+ */
222
+ public function testEmptyFile() {
223
+
224
+ $export = Mage::getModel('Antidot/export_product');
225
+
226
+ $context = array();
227
+ $context['store_id'] = array(1);
228
+ $context['website_ids'] = array(1);
229
+ $nbItem = $export->writeXml($context, 'catalog-magento_jetpulp_FULL-en.xml', MDN_Antidot_Model_Observer::GENERATE_INC);
230
+
231
+ $this->assertEquals(0, $nbItem);
232
+
233
+ $this->assertEquals(
234
+ null,
235
+ MDN_Antidot_Test_PHPUnitUtil::getPrivateProperty($export, 'xml')
236
+ );
237
+
238
+ }
239
+
240
+ /**
241
+ * MCNX-33 inconsistency in price off
242
+ */
243
+ public function testComputePriceOff() {
244
+
245
+ /* @var $export \MDN_Antidot_Model_Export_Product */
246
+ $export = Mage::getModel('Antidot/export_product');
247
+
248
+ $off = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'computePriceOff', array(44.9, 35.92));
249
+ $this->assertEquals(20, $off);
250
+
251
+ $off = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'computePriceOff', array(44.7, 35.92));
252
+ $this->assertEquals(20, $off);
253
+
254
+ $off = MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export, 'computePriceOff', array(44.5, 35.92));
255
+ $this->assertEquals(19, $off);
256
+
257
+ }
258
+
259
+ /**
260
+ * MCNX-30 test the properties tag generation
261
+ * @test
262
+ * @loadFixture
263
+ */
264
+ public function testWriteProperties() {
265
+
266
+ /* @var $export \MDN_Antidot_Model_Export_Product */
267
+ $export = Mage::getModel('Antidot/export_product');
268
+
269
+ $product = Mage::getModel('catalog/product')->load(1);
270
+
271
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'initXml', array('product'));
272
+ /* @var $export \MDN_Antidot_Helper_Xml_Writer */
273
+ $xmlWriter = MDN_Antidot_Test_PHPUnitUtil::getPrivateProperty($export, 'xml');
274
+ $xmlWriter->flush();
275
+
276
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'initFields', array('product'));
277
+
278
+ /*
279
+ * first test : we load the product without the properties attributes authors anf editor
280
+ * expected empty result in the xml writer
281
+ */
282
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'writeProperties', array($product));
283
+
284
+ $expected = '';
285
+ $this->assertEquals($expected, $xmlWriter->getXml());
286
+
287
+ /*
288
+ * second test : we add attribute value editor
289
+ * expected 2 property tag
290
+ */
291
+ $xmlWriter->flush(); //empty the xmlwriter
292
+ $product->setEditor($this->getEditorOptionId('Scholastic'));
293
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'writeProperties', array($product));
294
+
295
+ $expected = '<property name="editor" display_name="Editor" label="Scholastic" autocomplete="off" />';
296
+ $this->assertContains($expected, $xmlWriter->getXml());
297
+
298
+ /*
299
+ * third test : we add attribute values authors (multiselect)
300
+ * expected three property tag
301
+ */
302
+ $xmlWriter->flush(); //empty the xmlwriter
303
+ $product->setAuthors($this->getAuthorOptionId('JK Rowling').','.$this->getAuthorOptionId('Stephen King'));
304
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'writeProperties', array($product));
305
+
306
+ $expected = '<property name="authors" display_name="Authors" label="JK Rowling" autocomplete="off" />';
307
+ $expected .= '<property name="authors" display_name="Authors" label="Stephen King" autocomplete="off" />';
308
+ $expected .= '<property name="editor" display_name="Editor" label="Scholastic" autocomplete="off" />';
309
+ $this->assertContains($expected, $xmlWriter->getXml());
310
+
311
+ }
312
+
313
+ /**
314
+ * MCNX-31 : image url for multisite catalog
315
+ * @test
316
+ * @loadFixture
317
+ * @dataProvider dataProvider
318
+ */
319
+ public function testWriteImageUrl($storeId, $expected) {
320
+
321
+ /* @var $export \MDN_Antidot_Model_Export_Product */
322
+ $export = Mage::getModel('Antidot/export_product');
323
+
324
+ Mage::app()->setCurrentStore($storeId);
325
+ $product = $this->loadProduct(1, $storeId);
326
+
327
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'initXml', array('product'));
328
+ /* @var $export \MDN_Antidot_Helper_Xml_Writer */
329
+ $xmlWriter = MDN_Antidot_Test_PHPUnitUtil::getPrivateProperty($export, 'xml');
330
+ $xmlWriter->flush();
331
+
332
+ /*
333
+ * The writeImageUrl method is called with the product loaded in 3 different store (see dataProvider)
334
+ * expected data also in dataProvider
335
+ */
336
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'writeImageUrl', array($product));
337
+
338
+ $this->assertEquals($expected, $xmlWriter->getXml());
339
+
340
+
341
+ }
342
+
343
+
344
+ /**
345
+ * MCNX-146 : Multi website support : urls in acp.
346
+ * @test
347
+ * @loadFixture
348
+ * @dataProvider dataProvider
349
+ */
350
+ public function testWriteProductUrl($storeId, $expected) {
351
+
352
+ /* @var $export \MDN_Antidot_Model_Export_Product */
353
+ $export = Mage::getModel('Antidot/export_product');
354
+
355
+ Mage::app()->setCurrentStore($storeId);
356
+ $product = $this->loadProduct(1, $storeId);
357
+
358
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'initXml', array('product'));
359
+ /* @var $export \MDN_Antidot_Helper_Xml_Writer */
360
+ $xmlWriter = MDN_Antidot_Test_PHPUnitUtil::getPrivateProperty($export, 'xml');
361
+ $xmlWriter->flush();
362
+
363
+ /*
364
+ * The writeProductUrl method is called with the product loaded in 3 different stores (see dataProvider)
365
+ * expected data also in dataProvider
366
+ */
367
+ MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($export,'writeProductUrl', array($product));
368
+
369
+ $this->assertEquals($expected, $xmlWriter->getXml());
370
+
371
+
372
+ }
373
+
374
+ /**
375
+ *
376
+ * @param $productId
377
+ * @param $storeId
378
+ * @param bool $forceAvailabilityIndexing
379
+ * @return Mage_Catalog_Model_Product
380
+ */
381
+ private function loadProduct($productId, $storeId, $forceAvailabilityIndexing = false) {
382
+
383
+ $product = Mage::getModel('catalog/product');
384
+ if ($storeId) {
385
+ $product->setStoreId($storeId);
386
+ }
387
+ $product->load($productId);
388
+
389
+ if ($forceAvailabilityIndexing){
390
+ /**
391
+ * HACK EcomDev : There's obviously a bug in the EcomDev Module with magento Enterprise 1.13 and 1.14
392
+ * (https://github.com/EcomDev/EcomDev_PHPUnit/issues/253 )
393
+ * The product fixture is not well indexed
394
+ * We force the stock reindexation by loading/update/saving the product
395
+ */
396
+ if (Mage::helper('core')->isModuleEnabled('Enterprise_Catalog')) {
397
+ $stockItem = $product->getStockItem()->setQty(100)->save();
398
+ }
399
+ }
400
+
401
+ /**
402
+ * HACK EcomDev : with the product fixture, there's no data in core_url_rewrite, set request_path
403
+ * here in order to have rewrited URLs
404
+ */
405
+ if (Mage::helper('core')->isModuleEnabled('Enterprise_Catalog')) { //compatibility with Enterprise version
406
+ $product->setData('request_path', $product->getData('url_key'));
407
+ } else {
408
+ $product->setData('request_path', $product->getData('url_key').'.html');
409
+ }
410
+
411
+ return $product;
412
+
413
+ }
414
+ /**
415
+ * Test Full file export
416
+ * @test
417
+ * @loadFixture
418
+ */
419
+ public function testWriteXml() {
420
+
421
+ /** @var $product Mage_Catalog_Model_Product */
422
+ $product = $this->loadProduct(1, null, true);
423
+
424
+ /* @var $export \MDN_Antidot_Model_Export_Product */
425
+ $export = Mage::getModel('Antidot/export_product');
426
+
427
+ $context = array();
428
+ $context['owner'] = 'JETPULP';
429
+ $context['run'] = 'PHPUNIT';
430
+ $context['lang'] = 'fr';
431
+
432
+ $context['stores'] = array();
433
+ $context['website_ids'] = array();
434
+ //Store id 3 : site FR, id5 : site FR discount
435
+ $storeIds = array(3, 5);
436
+ foreach ($storeIds as $storeId) {
437
+ $store = Mage::getModel('core/store')->load($storeId);
438
+ $context['stores'][$storeId] = $store;
439
+ $context['website_ids'][] = $store->getWebsite()->getId();
440
+ }
441
+ $context['store_id'] = array_keys($context['stores']);
442
+ $context['langs'] = 1;
443
+
444
+ $type = MDN_Antidot_Model_Observer::GENERATE_FULL;
445
+
446
+ $filename = sys_get_temp_dir().DS.sprintf(MDN_Antidot_Model_Export_Product::FILENAME_XML, 'jetpulp', $type, $context['lang']);
447
+
448
+ $items = $export->writeXml($context, $filename, $type);
449
+
450
+ /*
451
+ * test one product is exported, number returned by the method
452
+ */
453
+ $this->assertEquals(1, $items);
454
+
455
+ //replace generated_at by the one in the expected result
456
+ $result = file_get_contents($filename);
457
+
458
+ /**
459
+ * test the xml is valid
460
+ *
461
+ * Canceled sometimes the http://www.w3.org/2001/xml.xsd is not available and it causes errors
462
+ *
463
+ */
464
+ // $xml = new DOMDocument();
465
+ // $xml->load($filename);
466
+ // $valid = $xml->schemaValidate(MDN_Antidot_Model_Export_Product::XSD);
467
+ // $this->assertTrue($valid);
468
+
469
+ /**
470
+ * test the xml contains the correct owner tag
471
+ */
472
+ $this->assertContains('<owner>JETPULP</owner>', $result);
473
+
474
+ /**
475
+ * test the xml contains the correct feed tag
476
+ */
477
+ $this->assertContains('<feed>catalog PHPUNIT v'.Mage::getConfig()->getNode()->modules->MDN_Antidot->version.'</feed>', $result);
478
+
479
+ /**
480
+ * test the xml contains the correct websites tag
481
+ */
482
+ $this->assertContains('<websites><website id="3">French Website</website><website id="5">France Website_discount</website></websites>', $result);
483
+
484
+ /**
485
+ * test the xml contains the correct name tag
486
+ */
487
+ $this->assertContains('<name><![CDATA[Book]]></name>', $result);
488
+
489
+ /**
490
+ * test the xml contains the variants variant fake tag
491
+ */
492
+ $this->assertContains('<variants><variant id="fake">', $result);
493
+
494
+ /**
495
+ * test the xml contains the correct descriptions tag
496
+ */
497
+ $this->assertContains('<descriptions><description type="short_description"><![CDATA[Book]]></description></descriptions>', $result);
498
+
499
+ /**
500
+ * test the xml contains the correct store tags
501
+ */
502
+ $this->assertContains('<store id="3" name="France Store">', $result);
503
+ $this->assertContains('<store id="5" name="France Store Discount">', $result);
504
+
505
+ /**
506
+ * test the xml contains the price tag
507
+ */
508
+ $this->assertContains('<prices><price currency="USD" type="PRICE_FINAL" vat_included="true" country="FR">12.99</price></prices>', $result);
509
+
510
+ /**
511
+ * test the xml contains the price tag
512
+ */
513
+ $this->assertContains('<marketing><is_new>0</is_new><is_best_sale>0</is_best_sale><is_featured>0</is_featured><is_promotional>0</is_promotional></marketing>', $result);
514
+
515
+ /**
516
+ * test the xml contains the stock tags
517
+ */
518
+ $this->assertContains('<stock>100</stock>', $result);
519
+
520
+
521
+ /**
522
+ * test the xml contains the correct url tags
523
+ */
524
+ $this->assertContains('<url><![CDATA[http://www.monsiteweb.fr/catalog/product/view/id/1/s/book/]]></url>', $result);
525
+ $this->assertContains('<url><![CDATA[http://www.monsitediscount.fr/catalog/product/view/id/1/s/book/]]></url>', $result);
526
+
527
+ /**
528
+ * test the xml contains the correct images url tags
529
+ */
530
+ $this->assertContains('<url_thumbnail><![CDATA[http://www.monsiteweb.fr/media/catalog/product/b/o/book_small.jpg]]></url_thumbnail>', $result);
531
+ $this->assertContains('<url_image><![CDATA[http://www.monsiteweb.fr/media/catalog/product/b/o/book.jpg]]>', $result);
532
+ $this->assertContains('<url_thumbnail><![CDATA[http://www.monsitediscount.fr/media/catalog/product/b/o/book_small.jpg]]></url_thumbnail>', $result);
533
+ $this->assertContains('<url_image><![CDATA[http://www.monsitediscount.fr/media/catalog/product/b/o/book.jpg]]>', $result);
534
+
535
+ /**
536
+ * test the xml contains the identifier
537
+ */
538
+ $this->assertContains('<identifiers><identifier type="sku"><![CDATA[book]]></identifier></identifiers>', $result);
539
+
540
+
541
+
542
+ }
543
+ }
app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteImageUrl.yaml ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ scope:
2
+ website: # Initialize websites
3
+ - website_id: 2
4
+ code: usa_website
5
+ name: USA Website
6
+ default_group_id: 2
7
+ - website_id: 3
8
+ code: french_website
9
+ name: French Website
10
+ default_group_id: 3
11
+ - website_id: 4
12
+ code: german_website
13
+ name: German Website
14
+ default_group_id: 4
15
+ group: # Initializes store groups
16
+ - group_id: 2
17
+ website_id: 2
18
+ name: USA Store Group
19
+ default_store_id: 2
20
+ root_category_id: 2 # Default Category
21
+ - group_id: 3
22
+ website_id: 3
23
+ name: French Store Group
24
+ default_store_id: 3
25
+ root_category_id: 2 # Default Category
26
+ - group_id: 4
27
+ website_id: 4
28
+ name: German Store Group
29
+ default_store_id: 4
30
+ root_category_id: 2 # Default Category
31
+ store: # Initializes store views
32
+ - store_id: 2
33
+ website_id: 2
34
+ group_id: 2
35
+ code: usa
36
+ name: USA Store
37
+ is_active: 1
38
+ - store_id: 3
39
+ website_id: 3
40
+ group_id: 3
41
+ code: france
42
+ name: France Store
43
+ is_active: 1
44
+ - store_id: 4
45
+ website_id: 4
46
+ group_id: 4
47
+ code: germany
48
+ name: Germany Store
49
+ is_active: 1
50
+ config:
51
+ 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";}}
52
+ default/web/secure/base_url: http://www.mywebsite.com/
53
+ default/web/unsecure/base_url: http://www.mywebsite.com/
54
+ stores/usa/web/secure/base_url: http://www.mywebsite.com/
55
+ stores/france/web/secure/base_url: http://www.monsiteweb.fr/
56
+ stores/germany/web/secure/base_url: http://www.meinwebseite.de/
57
+ stores/usa/web/unsecure/base_url: http://www.mywebsite.com/
58
+ stores/france/web/unsecure/base_url: http://www.monsiteweb.fr/
59
+ stores/germany/web/unsecure/base_url: http://www.meinwebseite.de/
60
+ eav:
61
+ catalog_product:
62
+ - entity_id: 1
63
+ type_id: simple
64
+ attribute_set_id: 4 # Default
65
+ sku: book
66
+ name: Book
67
+ short_description: Book
68
+ description: Book
69
+ url_key: book
70
+ image: b/o/book.jpg
71
+ thumbnail: b/o/book_small.jpg
72
+ stock:
73
+ qty: 100.00
74
+ is_in_stock: 1
75
+ website_ids:
76
+ - usa_website
77
+ - french_website
78
+ - german_website
79
+ category_ids:
80
+ - 2 # Default Category
81
+ price: 12.99
82
+ tax_class_id: 2 # Taxable Goods
83
+ status: 1 # Enabled
84
+ visibility: 4 # Visible in Catalog & Search
85
+ /websites: # Set different prices per website
86
+ usa_website:
87
+ special_price: 9.99
88
+ german_website:
89
+ price: 9.99
90
+ special_price: 5.99
app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteProductUrl.yaml ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ scope:
2
+ website: # Initialize websites
3
+ - website_id: 2
4
+ code: usa_website
5
+ name: USA Website
6
+ default_group_id: 2
7
+ - website_id: 3
8
+ code: french_website
9
+ name: French Website
10
+ default_group_id: 3
11
+ - website_id: 4
12
+ code: german_website
13
+ name: German Website
14
+ default_group_id: 4
15
+ group: # Initializes store groups
16
+ - group_id: 2
17
+ website_id: 2
18
+ name: USA Store Group
19
+ default_store_id: 2
20
+ root_category_id: 2 # Default Category
21
+ - group_id: 3
22
+ website_id: 3
23
+ name: French Store Group
24
+ default_store_id: 3
25
+ root_category_id: 2 # Default Category
26
+ - group_id: 4
27
+ website_id: 4
28
+ name: German Store Group
29
+ default_store_id: 4
30
+ root_category_id: 2 # Default Category
31
+ store: # Initializes store views
32
+ - store_id: 2
33
+ website_id: 2
34
+ group_id: 2
35
+ code: usa
36
+ name: USA Store
37
+ is_active: 1
38
+ - store_id: 3
39
+ website_id: 3
40
+ group_id: 3
41
+ code: france
42
+ name: France Store
43
+ is_active: 1
44
+ - store_id: 4
45
+ website_id: 4
46
+ group_id: 4
47
+ code: germany
48
+ name: Germany Store
49
+ is_active: 1
50
+ config:
51
+ 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";}}
52
+ default/web/secure/base_url: http://www.mywebsite.com/
53
+ default/web/unsecure/base_url: http://www.mywebsite.com/
54
+ stores/usa/web/secure/base_url: http://www.mywebsite.com/
55
+ stores/france/web/secure/base_url: http://www.monsiteweb.fr/
56
+ stores/germany/web/secure/base_url: http://www.meinwebseite.de/
57
+ stores/usa/web/unsecure/base_url: http://www.mywebsite.com/
58
+ stores/france/web/unsecure/base_url: http://www.monsiteweb.fr/
59
+ stores/germany/web/unsecure/base_url: http://www.meinwebseite.de/
60
+ eav:
61
+ catalog_product:
62
+ - entity_id: 1
63
+ type_id: simple
64
+ attribute_set_id: 4 # Default
65
+ sku: book
66
+ name: Book
67
+ short_description: Book
68
+ description: Book
69
+ url_key: book
70
+ image: b/o/book.jpg
71
+ thumbnail: b/o/book_small.jpg
72
+ stock:
73
+ qty: 100.00
74
+ is_in_stock: 1
75
+ website_ids:
76
+ - usa_website
77
+ - french_website
78
+ - german_website
79
+ category_ids:
80
+ - 2 # Default Category
81
+ price: 12.99
82
+ tax_class_id: 2 # Taxable Goods
83
+ status: 1 # Enabled
84
+ visibility: 4 # Visible in Catalog & Search
85
+ /websites: # Set different prices per website
86
+ usa_website:
87
+ special_price: 9.99
88
+ german_website:
89
+ price: 9.99
90
+ special_price: 5.99
app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteProperties.yaml ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ scope:
2
+ website: # Initialize websites
3
+ - website_id: 2
4
+ code: usa_website
5
+ name: USA Website
6
+ default_group_id: 2
7
+ - website_id: 3
8
+ code: french_website
9
+ name: French Website
10
+ default_group_id: 3
11
+ - website_id: 4
12
+ code: german_website
13
+ name: German Website
14
+ default_group_id: 4
15
+ group: # Initializes store groups
16
+ - group_id: 2
17
+ website_id: 2
18
+ name: USA Store Group
19
+ default_store_id: 2
20
+ root_category_id: 2 # Default Category
21
+ - group_id: 3
22
+ website_id: 3
23
+ name: French Store Group
24
+ default_store_id: 3
25
+ root_category_id: 2 # Default Category
26
+ - group_id: 4
27
+ website_id: 4
28
+ name: German Store Group
29
+ default_store_id: 4
30
+ root_category_id: 2 # Default Category
31
+ store: # Initializes store views
32
+ - store_id: 2
33
+ website_id: 2
34
+ group_id: 2
35
+ code: usa
36
+ name: USA Store
37
+ is_active: 1
38
+ - store_id: 3
39
+ website_id: 3
40
+ group_id: 3
41
+ code: france
42
+ name: France Store
43
+ is_active: 1
44
+ - store_id: 4
45
+ website_id: 4
46
+ group_id: 4
47
+ code: germany
48
+ name: Germany Store
49
+ is_active: 1
50
+ config:
51
+ 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";}}
52
+ eav:
53
+ catalog_product:
54
+ - entity_id: 1
55
+ type_id: simple
56
+ attribute_set_id: 4 # Default
57
+ sku: book
58
+ name: Book
59
+ short_description: Book
60
+ description: Book
61
+ url_key: book
62
+ stock:
63
+ qty: 100.00
64
+ is_in_stock: 1
65
+ website_ids:
66
+ - usa_website
67
+ - french_website
68
+ - german_website
69
+ category_ids:
70
+ - 2 # Default Category
71
+ price: 12.99
72
+ tax_class_id: 2 # Taxable Goods
73
+ status: 1 # Enabled
74
+ visibility: 4 # Visible in Catalog & Search
75
+ /websites: # Set different prices per website
76
+ usa_website:
77
+ special_price: 9.99
78
+ german_website:
79
+ price: 9.99
80
+ special_price: 5.99
app/code/community/MDN/Antidot/Test/Model/Export/Product/fixtures/testWriteXml.yaml ADDED
@@ -0,0 +1,116 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ scope:
2
+ website: # Initialize websites
3
+ - website_id: 2
4
+ code: usa_website
5
+ name: USA Website
6
+ default_group_id: 2
7
+ - website_id: 3
8
+ code: french_website
9
+ name: French Website
10
+ default_group_id: 3
11
+ - website_id: 4
12
+ code: german_website
13
+ name: German Website
14
+ default_group_id: 4
15
+ - website_id: 5
16
+ code: french_website_discount
17
+ name: France Website_discount
18
+ default_group_id: 5
19
+ group: # Initializes store groups
20
+ - group_id: 2
21
+ website_id: 2
22
+ name: USA Store Group
23
+ default_store_id: 2
24
+ root_category_id: 2 # Default Category
25
+ - group_id: 3
26
+ website_id: 3
27
+ name: French Store Group
28
+ default_store_id: 3
29
+ root_category_id: 2 # Default Category
30
+ - group_id: 4
31
+ website_id: 4
32
+ name: German Store Group
33
+ default_store_id: 4
34
+ root_category_id: 2 # Default Category
35
+ - group_id: 5
36
+ website_id: 5
37
+ name: French Store Group Discount
38
+ default_store_id: 5
39
+ root_category_id: 2 # Default Category
40
+ store: # Initializes store views
41
+ - store_id: 2
42
+ website_id: 2
43
+ group_id: 2
44
+ code: usa
45
+ name: USA Store
46
+ is_active: 1
47
+ - store_id: 3
48
+ website_id: 3
49
+ group_id: 3
50
+ code: france
51
+ name: France Store
52
+ is_active: 1
53
+ - store_id: 4
54
+ website_id: 4
55
+ group_id: 4
56
+ code: germany
57
+ name: Germany Store
58
+ is_active: 1
59
+ - store_id: 5
60
+ website_id: 5
61
+ group_id: 5
62
+ code: france_discount
63
+ name: France Store Discount
64
+ is_active: 1
65
+
66
+ config:
67
+ default/antidot/fields_product/model:
68
+ default/antidot/fields_product/gender:
69
+ 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";}}
70
+ default/web/secure/base_url: http://www.mywebsite.com/
71
+ default/web/unsecure/base_url: http://www.mywebsite.com/
72
+ default/general/locale/code: zz
73
+ stores/usa/web/secure/base_url: http://www.mywebsite.com/
74
+ stores/usa/web/unsecure/base_url: http://www.mywebsite.com/
75
+ stores/usa/general/locale/code: en
76
+ stores/france/web/secure/base_url: http://www.monsiteweb.fr/
77
+ stores/france/web/unsecure/base_url: http://www.monsiteweb.fr/
78
+ stores/france/general/locale/code: fr
79
+ stores/germany/web/secure/base_url: http://www.meinwebseite.de/
80
+ stores/germany/web/unsecure/base_url: http://www.meinwebseite.de/
81
+ stores/germany/general/locale/code: de
82
+ stores/france_discount/web/secure/base_url: http://www.monsitediscount.fr/
83
+ stores/france_discount/web/unsecure/base_url: http://www.monsitediscount.fr/
84
+ stores/france_discount/general/locale/code: fr
85
+ eav:
86
+ catalog_product:
87
+ - entity_id: 1
88
+ type_id: simple
89
+ attribute_set_id: 4 # Default
90
+ sku: book
91
+ name: Book
92
+ short_description: Book
93
+ description: Book
94
+ url_key: book
95
+ image: b/o/book.jpg
96
+ thumbnail: b/o/book_small.jpg
97
+ stock:
98
+ qty: 100.00
99
+ is_in_stock: 1
100
+ website_ids:
101
+ - usa_website
102
+ - french_website
103
+ - german_website
104
+ - french_website_discount
105
+ category_ids:
106
+ - 2 # Default Category
107
+ price: 12.99
108
+ tax_class_id: 2 # Taxable Goods
109
+ status: 1 # Enabled
110
+ visibility: 4 # Visible in Catalog & Search
111
+ /websites: # Set different prices per website
112
+ usa_website:
113
+ special_price: 9.99
114
+ german_website:
115
+ price: 9.99
116
+ special_price: 5.99
app/code/community/MDN/Antidot/Test/Model/Export/Product/providers/testWriteImageUrl.yaml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ -
2
+ - 2
3
+ - <url_thumbnail><![CDATA[http://www.mywebsite.com/media/catalog/product/b/o/book_small.jpg]]></url_thumbnail><url_image><![CDATA[http://www.mywebsite.com/media/catalog/product/b/o/book.jpg]]></url_image>
4
+ -
5
+ - 3
6
+ - <url_thumbnail><![CDATA[http://www.monsiteweb.fr/media/catalog/product/b/o/book_small.jpg]]></url_thumbnail><url_image><![CDATA[http://www.monsiteweb.fr/media/catalog/product/b/o/book.jpg]]></url_image>
7
+ -
8
+ - 4
9
+ - <url_thumbnail><![CDATA[http://www.meinwebseite.de/media/catalog/product/b/o/book_small.jpg]]></url_thumbnail><url_image><![CDATA[http://www.meinwebseite.de/media/catalog/product/b/o/book.jpg]]></url_image>
app/code/community/MDN/Antidot/Test/Model/Export/Product/providers/testWriteProductUrl.yaml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ -
2
+ - 2
3
+ - <url><![CDATA[http://www.mywebsite.com/book.html]]></url>
4
+ -
5
+ - 3
6
+ - <url><![CDATA[http://www.monsiteweb.fr/book.html]]></url>
7
+ -
8
+ - 4
9
+ - <url><![CDATA[http://www.meinwebseite.de/book.html]]></url>
app/code/community/MDN/Antidot/Test/Model/Observer.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_Observer extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ /**
8
+ * MCNX-27 : Test owner for filename generation
9
+ *
10
+ * @test
11
+ * @dataProvider dataProvider
12
+ */
13
+ public function testGetOwnerForFilename($owner, $expected) {
14
+
15
+ /** @var $observer MDN_Antidot_Model_Observer */
16
+ $observer = Mage::getModel('Antidot/observer');
17
+
18
+ $value= MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($observer, 'getOwnerForFilename', array($owner));
19
+
20
+ $this->assertEquals(
21
+ $expected,
22
+ $value
23
+ );
24
+
25
+ }
26
+
27
+ /**
28
+ * MCNX-169 : memory limit
29
+ * @test
30
+ */
31
+ public function testMemoryLimit() {
32
+
33
+ /* store the default limit */
34
+ $initalLimit = ini_get('memory_limit');
35
+
36
+
37
+ /**
38
+ * First test : if the memory limit is under 2048M
39
+ * we force it to 2048M
40
+ */
41
+ ini_set('memory_limit', '1024M');
42
+ /** @var $observer MDN_Antidot_Model_Observer */
43
+ $observer = Mage::getModel('Antidot/observer');
44
+
45
+ $this->assertEquals(
46
+ '2048M',
47
+ ini_get('memory_limit')
48
+ );
49
+
50
+ /**
51
+ * First test : if the memory limit is above 2048M
52
+ * we let it as it is
53
+ */
54
+ ini_set('memory_limit', '4096M');
55
+ $observer = Mage::getModel('Antidot/observer');
56
+
57
+ $this->assertEquals(
58
+ '4096M',
59
+ ini_get('memory_limit')
60
+ );
61
+
62
+ /* restore the default limit */
63
+ ini_set('memory_limit', $initalLimit);
64
+
65
+ }
66
+
67
+ /**
68
+ * MCNX-2O5 : Test getDefaultContext method return the correct websites Ids
69
+ * (used in Export collection)
70
+ *
71
+ * @test
72
+ * @loadFixture
73
+ */
74
+ public function testGetDefaultContext() {
75
+
76
+ //inactive default store id=1 which is not in the fixtures but created by magento on install
77
+ $defaultStore = Mage::getModel('core/store')->load(1);
78
+ if ($defaultStore->getId()) {
79
+ $defaultStore->setIsActive(0);
80
+ $defaultStore->save();
81
+ }
82
+ Mage::app()->reinitStores();
83
+
84
+ /** @var $observer MDN_Antidot_Model_Observer */
85
+ $observer = Mage::getModel('Antidot/observer');
86
+
87
+ $listContext= MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($observer, 'getDefaultContext', array('phpunit'));
88
+
89
+ $this->assertEquals(
90
+ 2,
91
+ count($listContext[0]['stores'])
92
+ );
93
+ unset($listContext[0]['stores']);
94
+
95
+ $this->assertEquals(
96
+ 1,
97
+ count($listContext[1]['stores'])
98
+ );
99
+ unset($listContext[1]['stores']);
100
+
101
+ $expected = array();
102
+ $expected[] = array (
103
+ 'website_ids' => array ('3', '5'),
104
+ 'owner' => 'JETPULP',
105
+ 'run' => 'phpunit',
106
+ 'lang' => 'fr',
107
+ 'langs' => 2
108
+ );
109
+ $expected[] = array (
110
+ 'website_ids' => array ('2'),
111
+ 'owner' => 'JETPULP',
112
+ 'run' => 'phpunit',
113
+ 'lang' => 'en',
114
+ 'langs' => 2
115
+ );
116
+
117
+ $this->assertEquals(
118
+ $expected,
119
+ $listContext
120
+ );
121
+
122
+ }
123
+
124
+ /**
125
+ * MCNX-218 XSD not available mustn't generate a error of validation
126
+ *
127
+ */
128
+ function testSchemaValidate() {
129
+
130
+ /** @var $observer MDN_Antidot_Model_Observer */
131
+ $observer = Mage::getModel('Antidot/observer');
132
+
133
+ $filename = tempnam(sys_get_temp_dir(), 'testSchemaValidate');
134
+ file_put_contents($filename, '<?xml version="1.0" encoding="utf-8"?><test></test>');
135
+
136
+ $errors= MDN_Antidot_Test_PHPUnitUtil::callPrivateMethod($observer, 'schemaValidate', array($filename, 'http://ref.antidot.net/store/latest/notexist-catalog.xsd'));
137
+ $this->assertEquals(
138
+ array(),
139
+ $errors
140
+ );
141
+
142
+ unlink($filename);
143
+ }
144
+ }
app/code/community/MDN/Antidot/Test/Model/Observer/fixtures/testGetDefaultContext.yaml ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ scope:
2
+ website: # Initialize websites
3
+ - website_id: 2
4
+ code: usa_website
5
+ name: USA Website
6
+ default_group_id: 2
7
+ - website_id: 3
8
+ code: french_website
9
+ name: French Website
10
+ default_group_id: 3
11
+ - website_id: 4
12
+ code: german_website
13
+ name: German Website
14
+ default_group_id: 4
15
+ - website_id: 5
16
+ code: french_website_discount
17
+ name: France Website_discount
18
+ default_group_id: 5
19
+ group: # Initializes store groups
20
+ - group_id: 2
21
+ website_id: 2
22
+ name: USA Store Group
23
+ default_store_id: 2
24
+ root_category_id: 2 # Default Category
25
+ - group_id: 3
26
+ website_id: 3
27
+ name: French Store Group
28
+ default_store_id: 3
29
+ root_category_id: 2 # Default Category
30
+ - group_id: 4
31
+ website_id: 4
32
+ name: German Store Group
33
+ default_store_id: 4
34
+ root_category_id: 2 # Default Category
35
+ - group_id: 5
36
+ website_id: 5
37
+ name: French Store Group Discount
38
+ default_store_id: 5
39
+ root_category_id: 2 # Default Category
40
+ store: # Initializes store views
41
+ - store_id: 2
42
+ website_id: 2
43
+ group_id: 2
44
+ code: usa
45
+ name: USA Store
46
+ is_active: 1
47
+ - store_id: 3
48
+ website_id: 3
49
+ group_id: 3
50
+ code: france
51
+ name: France Store
52
+ is_active: 1
53
+ - store_id: 4
54
+ website_id: 4
55
+ group_id: 4
56
+ code: germany
57
+ name: Germany Store
58
+ is_active: 0
59
+ - store_id: 5
60
+ website_id: 5
61
+ group_id: 5
62
+ code: france_discount
63
+ name: France Store Discount
64
+ is_active: 1
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/
73
+ default/general/locale/code: zz
74
+ stores/usa/web/secure/base_url: http://www.mywebsite.com/
75
+ stores/usa/web/unsecure/base_url: http://www.mywebsite.com/
76
+ stores/usa/general/locale/code: en
77
+ stores/france/web/secure/base_url: http://www.monsiteweb.fr/
78
+ stores/france/web/unsecure/base_url: http://www.monsiteweb.fr/
79
+ stores/france/general/locale/code: fr
80
+ stores/germany/web/secure/base_url: http://www.meinwebseite.de/
81
+ stores/germany/web/unsecure/base_url: http://www.meinwebseite.de/
82
+ stores/germany/general/locale/code: de
83
+ stores/france_discount/web/secure/base_url: http://www.monsitediscount.fr/
84
+ stores/france_discount/web/unsecure/base_url: http://www.monsitediscount.fr/
85
+ stores/france_discount/general/locale/code: fr
app/code/community/MDN/Antidot/Test/Model/Observer/providers/testGetOwnerForFilename.yaml ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ -
2
+ -
3
+ - magento
4
+ -
5
+ - JETPULP
6
+ - magento_jetpulp
7
+ -
8
+ - MON entreprise!@%
9
+ - magento_mon_entreprise_at
app/code/community/MDN/Antidot/Test/Model/Resource/Engine/Antidot.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_Resource_Engine_Antidot extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ /**
8
+ * MCNX-171 Test extraction of the raw value of multiselect facet into array of values
9
+ *
10
+ * @test
11
+ */
12
+ public function testExtractMultiSelectValues() {
13
+
14
+ /** @var $antidotEngine MDN_Antidot_Model_Resource_Engine_Antidot */
15
+ $antidotEngine = Mage::getResourceSingleton('Antidot/engine_antidot');
16
+
17
+ /**
18
+ * test if no value is well extracted
19
+ */
20
+ $array = $antidotEngine->extractMultiSelectValues('');
21
+ $this->assertEquals($array, array('""'));
22
+
23
+ /**
24
+ * test if empty value is well extracted
25
+ */
26
+ $array = $antidotEngine->extractMultiSelectValues('""');
27
+ $this->assertEquals($array, array('""'));
28
+
29
+ /**
30
+ * test if multi-value is well extracted
31
+ */
32
+ $array = $antidotEngine->extractMultiSelectValues('"Pommes","Poires","Pêches"');
33
+ $this->assertEquals($array, array('"Pommes"','"Poires"','"Pêches"'));
34
+
35
+ /**
36
+ * test if a mono-value with coma is well extracted
37
+ */
38
+ $array = $antidotEngine->extractMultiSelectValues('"Pommes,Poires,Pêches"');
39
+ $this->assertEquals($array, array('"Pommes,Poires,Pêches"'));
40
+
41
+ }
42
+ }
app/code/community/MDN/Antidot/Test/Model/System/Config/Sort.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class MDN_Antidot_Test_Model_System_Config_Sort extends EcomDev_PHPUnit_Test_Case
5
+ {
6
+
7
+ /**
8
+ * Test toOptionArray method
9
+ * case 1
10
+ *
11
+ * @loadFixture
12
+ * @loadExpectation testToOptionArray.yaml
13
+ * @test
14
+ */
15
+ public function testToOptionArray1()
16
+ {
17
+ $expected = $this->expected("1-1")->getOptions();
18
+ $this->toOptionArray($expected);
19
+ }
20
+
21
+ /**
22
+ * Test toOptionArray method
23
+ * case 2
24
+ *
25
+ * @loadFixture
26
+ * @loadExpectation testToOptionArray.yaml
27
+ * @test
28
+ */
29
+ public function testToOptionArray2()
30
+ {
31
+ $expected = $this->expected("1-2")->getOptions();
32
+ $this->toOptionArray($expected);
33
+ }
34
+
35
+ /**
36
+ * Test toOptionArray method
37
+ * case 3
38
+ *
39
+ * @loadFixture
40
+ * @loadExpectation testToOptionArray.yaml
41
+ * @test
42
+ */
43
+ public function testToOptionArray3()
44
+ {
45
+ $expected = $this->expected("1-3")->getOptions();
46
+ $this->toOptionArray($expected);
47
+ }
48
+
49
+ /**
50
+ * Test toOptionArray method
51
+ *
52
+ * MCNX-28 : add stock, price and promotion as "static" option
53
+ */
54
+ private function toOptionArray(array $expected)
55
+ {
56
+
57
+ /** @var $configSort MDN_Antidot_Model_System_Config_Sort */
58
+ $configSort = Mage::getModel('Antidot/system_config_sort');
59
+ $configSort->reinitOptions();
60
+
61
+ $value= $configSort->toOptionArray();
62
+
63
+ $this->assertEquals(
64
+ $expected,
65
+ $value
66
+ );
67
+ }
68
+ }
app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/expectations/testToOptionArray.yaml ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ 1-1:
2
+ options:
3
+ - value: afs:relevance|Relevance
4
+ label: Relevance
5
+ - value: name|Name
6
+ label: Name
7
+ - value: price|Price
8
+ label: Price
9
+ - value: is_promotional|Is promotional
10
+ label: Is promotional
11
+ - value: stock|Stock
12
+ label: Stock
13
+ 1-2:
14
+ options:
15
+ - value: afs:relevance|Relevance
16
+ label: Relevance
17
+ - value: name|Name
18
+ label: Name
19
+ - value: price|Price
20
+ label: Price
21
+ - value: is_promotional|Is promotional
22
+ label: Is promotional
23
+ - value: stock|Stock
24
+ label: Stock
25
+ - value: is_best_sale|Is top sale
26
+ label: Is top sale
27
+ 1-3:
28
+ options:
29
+ - value: afs:relevance|Relevance
30
+ label: Relevance
31
+ - value: name|Name
32
+ label: Name
33
+ - value: price|Price
34
+ label: Price
35
+ - value: is_promotional|Is promotional
36
+ label: Is promotional
37
+ - value: stock|Stock
38
+ label: Stock
39
+ - value: is_new|Is new
40
+ label: Is new
41
+ - value: is_best_sale|Is top sale
42
+ label: Is top sale
43
+ - value: is_featured|Is featured
44
+ label: Is featured
app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/fixtures/testToOptionArray1.yaml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ config:
2
+ default/antidot/fields_product/is_new: null
3
+ default/antidot/fields_product/is_best_sale: null
4
+ default/antidot/fields_product/is_featured: null
app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/fixtures/testToOptionArray2.yaml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ config:
2
+ default/antidot/fields_product/is_new: null
3
+ default/antidot/fields_product/is_best_sale: best
4
+ default/antidot/fields_product/is_featured: null
app/code/community/MDN/Antidot/Test/Model/System/Config/Sort/fixtures/testToOptionArray3.yaml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ config:
2
+ default/antidot/fields_product/is_new: new
3
+ default/antidot/fields_product/is_best_sale: best
4
+ default/antidot/fields_product/is_featured: featured
app/code/community/MDN/Antidot/Test/PHPUnitUtil.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class MDN_Antidot_Test_PHPUnitUtil
3
+ {
4
+ public static function callPrivateMethod($obj, $name, array $args) {
5
+ $class = new \ReflectionClass($obj);
6
+ $method = $class->getMethod($name);
7
+ $method->setAccessible(true);
8
+ return $method->invokeArgs($obj, $args);
9
+ }
10
+
11
+ public static function getPrivateProperty($obj, $name) {
12
+ $class = new \ReflectionClass($obj);
13
+ $property = $class->getProperty($name);
14
+ $property->setAccessible(true);
15
+ return $property->getValue($obj);
16
+ }
17
+
18
+ }
app/code/community/MDN/Antidot/controllers/Admin/PushController.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
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
@@ -21,7 +21,23 @@ class MDN_Antidot_Admin_PushController extends Mage_Adminhtml_Controller_Action
21
  */
22
  public function CategoryAction()
23
  {
24
- Mage::getModel('Antidot/Observer')->categoriesFullExport();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
25
  $this->_redirectReferer();
26
  }
27
 
@@ -30,13 +46,21 @@ class MDN_Antidot_Admin_PushController extends Mage_Adminhtml_Controller_Action
30
  */
31
  public function ProductAction()
32
  {
33
- try
34
- {
35
- Mage::getModel('Antidot/Observer')->catalogFullExport();
 
 
 
 
 
 
 
36
  }
37
- catch(Exception $ex)
38
- {
39
- Mage::getSingleton('adminhtml/session')->addError(mage::helper('Antidot')->__('An error occured : %s', $ex->getMessage()));
 
40
  }
41
  $this->_redirectReferer();
42
  }
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
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
 
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
  }
app/code/community/MDN/Antidot/controllers/Front/SearchController.php CHANGED
@@ -9,8 +9,8 @@
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) 2009 Maison du Logiciel (http://www.maisondulogiciel.com)
13
- * @author : Olivier ZIMMERMANN
14
  * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
15
  */
16
  class MDN_Antidot_Front_SearchController extends Mage_Core_Controller_Front_Action
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_Front_SearchController extends Mage_Core_Controller_Front_Action
app/code/community/MDN/Antidot/etc/config.xml CHANGED
@@ -18,7 +18,7 @@
18
  </crontab>
19
  <modules>
20
  <MDN_Antidot>
21
- <version>1.0.19</version>
22
  </MDN_Antidot>
23
  </modules>
24
  <global>
@@ -203,6 +203,10 @@
203
  <xsl:variable name="IN">in</xsl:variable>
204
  <!-- Default search url: customize if needed -->
205
  <xsl:variable name="searchUrl">/index.php/catalogsearch/result/?q=</xsl:variable>
 
 
 
 
206
 
207
  <!-- Main HTML template -->
208
  <xsl:template match="afs:replies">
@@ -258,17 +262,39 @@
258
  </xsl:otherwise>
259
  </xsl:choose>
260
  </xsl:variable>
261
- <li class="title">
262
- <span>
 
263
  <xsl:value-of select="$title"/>
264
- </span>
265
- </li>
266
  <xsl:apply-templates select="afs:reply"/>
267
  </xsl:template>
268
 
269
  <!-- Template common to basic and products replies -->
270
  <xsl:template match="afs:reply">
271
- <li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
272
  <!-- Show thumbnail if any -->
273
  <xsl:apply-templates select="afs:option[@key='url_thumbnail']" mode="url_thumbnail"/>
274
  <a>
@@ -335,53 +361,63 @@
335
  </a>
336
  <!-- Needed to avoir cascaded results -->
337
  <div style="clear:both;"/>
338
- </li>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
  </xsl:template>
340
 
341
  <!-- Thumbnail display -->
342
  <xsl:template match="afs:option" mode="url_thumbnail">
343
- <div class="image" style="float: left; margin-right:5px;">
344
- <img>
 
 
345
  <xsl:attribute name="width">
346
  <xsl:value-of select="$thumbnail_width"/>
347
  </xsl:attribute>
348
  <xsl:attribute name="src">
349
- <xsl:apply-templates select="@value" mode="baseUri"/>
350
  </xsl:attribute>
351
- </img>
352
- </div>
353
  </xsl:template>
354
 
355
  <!-- Creates href link -->
356
  <xsl:template match="afs:option" mode="href">
357
  <xsl:attribute name="href">
358
- <xsl:apply-templates select="@value" mode="baseUri"/>
359
  </xsl:attribute>
360
  </xsl:template>
361
 
362
- <!-- Transform absolute url into a relative one -->
363
- <xsl:template match="@value" mode="baseUri">
364
- <xsl:choose>
365
- <xsl:when test="contains(.,'http')">
366
- <xsl:value-of select="concat('/',substring-after(substring-after(.,'http://'),'/'))"
367
- />
368
- </xsl:when>
369
- <xsl:otherwise>
370
- <xsl:value-of select="."/>
371
- </xsl:otherwise>
372
- </xsl:choose>
373
- </xsl:template>
374
-
375
  <!-- Basic suggestion template with a custom rendering for categories -->
376
  <xsl:template match="afs:reply" mode="basic">
377
- <div class="name">
 
378
  <xsl:value-of select="@label"/>
379
  <span style="padding-left: 5px;"/>
380
  <xsl:if
381
  test="$display_parent_category=true() and starts-with(ancestor::afs:replySet/@name,'categories')">
382
  <xsl:apply-templates select="afs:option[@key='parent']" mode="parent"/>
383
  </xsl:if>
384
- </div>
385
  </xsl:template>
386
 
387
  <!-- Display parent category -->
@@ -395,7 +431,8 @@
395
 
396
  <!-- Product rich template: uses custom metadata like price -->
397
  <xsl:template match="afs:reply" mode="product">
398
- <div class="name">
 
399
  <xsl:value-of select="@label"/>
400
  <xsl:if test="$display_price=true()">
401
  <xsl:variable name="price_display">
@@ -415,7 +452,7 @@
415
  </xsl:choose>
416
  </span>
417
  </xsl:if>
418
- </div>
419
  </xsl:template>
420
 
421
  <!-- Display price using regional settings -->
@@ -446,6 +483,7 @@
446
  </xsl:when>
447
  <xsl:otherwise>
448
  <xsl:value-of select="translate(@value,'.',$decimal-separator)"/>
 
449
  <xsl:value-of select="$currency"/>
450
  </xsl:otherwise>
451
  </xsl:choose>
@@ -543,4 +581,11 @@
543
  </promote>
544
  </antidot>
545
  </default>
546
- </config>
 
 
 
 
 
 
 
18
  </crontab>
19
  <modules>
20
  <MDN_Antidot>
21
+ <version>1.1.0</version>
22
  </MDN_Antidot>
23
  </modules>
24
  <global>
203
  <xsl:variable name="IN">in</xsl:variable>
204
  <!-- Default search url: customize if needed -->
205
  <xsl:variable name="searchUrl">/index.php/catalogsearch/result/?q=</xsl:variable>
206
+ <!-- if set to false, will display 'promo text' instead of promo percentage -->
207
+ <xsl:variable name="display_promo" select="true()"/>
208
+ <xsl:variable name="display_price_off" select="true()"/>
209
+ <xsl:variable name="promo_text">PROMO</xsl:variable>
210
 
211
  <!-- Main HTML template -->
212
  <xsl:template match="afs:replies">
262
  </xsl:otherwise>
263
  </xsl:choose>
264
  </xsl:variable>
265
+ <xsl:element name="li">
266
+ <xsl:attribute name="class">title</xsl:attribute>
267
+ <xsl:element name="span">
268
  <xsl:value-of select="$title"/>
269
+ </xsl:element>
270
+ </xsl:element>
271
  <xsl:apply-templates select="afs:reply"/>
272
  </xsl:template>
273
 
274
  <!-- Template common to basic and products replies -->
275
  <xsl:template match="afs:reply">
276
+ <xsl:variable name="parent" select="parent::afs:replySet/@name"/>
277
+ <xsl:element name="li">
278
+ <!-- Add css class for custom rendering -->
279
+ <xsl:attribute name="class">
280
+ <xsl:choose>
281
+ <xsl:when test="starts-with($parent,'categories')">category</xsl:when>
282
+ <xsl:when test="starts-with($parent,'featured_products')">product</xsl:when>
283
+ <xsl:when test="starts-with($parent,'brands')">brand</xsl:when>
284
+ <xsl:when test="starts-with($parent,'property_')">
285
+ <xsl:value-of
286
+ select="substring(substring-after($parent,'property_'),1,string-length($parent)-14)"
287
+ />
288
+ </xsl:when>
289
+ <xsl:otherwise>
290
+ <xsl:value-of select="$parent"/>
291
+ </xsl:otherwise>
292
+ </xsl:choose>
293
+ </xsl:attribute>
294
+ <!-- Show discount percentage if any -->
295
+ <xsl:if test="$display_promo">
296
+ <xsl:apply-templates select="afs:option[@key='price_off']" mode="price_off"/>
297
+ </xsl:if>
298
  <!-- Show thumbnail if any -->
299
  <xsl:apply-templates select="afs:option[@key='url_thumbnail']" mode="url_thumbnail"/>
300
  <a>
361
  </a>
362
  <!-- Needed to avoir cascaded results -->
363
  <div style="clear:both;"/>
364
+ </xsl:element>
365
+ </xsl:template>
366
+
367
+ <!-- Price discount percentage -->
368
+ <xsl:template match="afs:option" mode="price_off">
369
+ <xsl:element name="span">
370
+ <xsl:attribute name="class">promo_flag</xsl:attribute>
371
+ <!-- Default style: Feel free to customize by using above class -->
372
+ <xsl:attribute name="style">border-radius: 100px; background: #FE9A2E; color : white;
373
+ padding : 5px 5px;</xsl:attribute>
374
+ <xsl:choose>
375
+ <xsl:when test="$display_price_off">
376
+ <xsl:text>-</xsl:text>
377
+ <xsl:value-of select="@value"/>
378
+ <xsl:text>%</xsl:text>
379
+ </xsl:when>
380
+ <xsl:otherwise>
381
+ <xsl:value-of select="$promo_text"/>
382
+ </xsl:otherwise>
383
+ </xsl:choose>
384
+ </xsl:element>
385
  </xsl:template>
386
 
387
  <!-- Thumbnail display -->
388
  <xsl:template match="afs:option" mode="url_thumbnail">
389
+ <xsl:element name="div">
390
+ <xsl:attribute name="class">image</xsl:attribute>
391
+ <xsl:attribute name="style">float: left; margin-right:5px;</xsl:attribute>
392
+ <xsl:element name="img">
393
  <xsl:attribute name="width">
394
  <xsl:value-of select="$thumbnail_width"/>
395
  </xsl:attribute>
396
  <xsl:attribute name="src">
397
+ <xsl:apply-templates select="@value"/>
398
  </xsl:attribute>
399
+ </xsl:element>
400
+ </xsl:element>
401
  </xsl:template>
402
 
403
  <!-- Creates href link -->
404
  <xsl:template match="afs:option" mode="href">
405
  <xsl:attribute name="href">
406
+ <xsl:apply-templates select="@value"/>
407
  </xsl:attribute>
408
  </xsl:template>
409
 
 
 
 
 
 
 
 
 
 
 
 
 
 
410
  <!-- Basic suggestion template with a custom rendering for categories -->
411
  <xsl:template match="afs:reply" mode="basic">
412
+ <xsl:element name="div">
413
+ <xsl:attribute name="class">name</xsl:attribute>
414
  <xsl:value-of select="@label"/>
415
  <span style="padding-left: 5px;"/>
416
  <xsl:if
417
  test="$display_parent_category=true() and starts-with(ancestor::afs:replySet/@name,'categories')">
418
  <xsl:apply-templates select="afs:option[@key='parent']" mode="parent"/>
419
  </xsl:if>
420
+ </xsl:element>
421
  </xsl:template>
422
 
423
  <!-- Display parent category -->
431
 
432
  <!-- Product rich template: uses custom metadata like price -->
433
  <xsl:template match="afs:reply" mode="product">
434
+ <xsl:element name="div">
435
+ <xsl:attribute name="class">name</xsl:attribute>
436
  <xsl:value-of select="@label"/>
437
  <xsl:if test="$display_price=true()">
438
  <xsl:variable name="price_display">
452
  </xsl:choose>
453
  </span>
454
  </xsl:if>
455
+ </xsl:element>
456
  </xsl:template>
457
 
458
  <!-- Display price using regional settings -->
483
  </xsl:when>
484
  <xsl:otherwise>
485
  <xsl:value-of select="translate(@value,'.',$decimal-separator)"/>
486
+ <xsl:text> </xsl:text>
487
  <xsl:value-of select="$currency"/>
488
  </xsl:otherwise>
489
  </xsl:choose>
581
  </promote>
582
  </antidot>
583
  </default>
584
+ <phpunit>
585
+ <suite>
586
+ <modules>
587
+ <MDN_Antidot />
588
+ </modules>
589
+ </suite>
590
+ </phpunit>
591
+ </config>
app/code/community/MDN/Antidot/etc/system.xml CHANGED
@@ -12,20 +12,27 @@
12
  <groups>
13
  <general>
14
  <label>General</label>
15
- <comment><![CDATA[<a href="https://bo-store.afs-antidot.net/" target="_blank" style="font-size:16px">Antidot Back office (Analytics, Synonyms, Promote)</a>]]></comment>
16
  <frontend_type>text</frontend_type>
17
  <sort_order>1</sort_order>
18
  <show_in_default>1</show_in_default>
19
  <show_in_website>1</show_in_website>
20
  <show_in_store>1</show_in_store>
21
  <fields>
 
 
 
 
 
 
 
 
22
  <version translate="label">
23
  <label>AFS@Store Extension Version</label>
24
  <frontend_model>Antidot/System_Config_Html_Version</frontend_model>
25
- <sort_order>1</sort_order>
26
  <show_in_default>1</show_in_default>
27
- <show_in_website>1</show_in_website>
28
- <show_in_store>1</show_in_store>
29
  <comment>Communicate this version to the support team if you need help</comment>
30
  </version>
31
  <owner translate="label">
@@ -33,8 +40,8 @@
33
  <frontend_type>text</frontend_type>
34
  <sort_order>10</sort_order>
35
  <show_in_default>1</show_in_default>
36
- <show_in_website>1</show_in_website>
37
- <show_in_store>1</show_in_store>
38
  <comment>Useful for support team</comment>
39
  </owner>
40
  <email translate="label">
12
  <groups>
13
  <general>
14
  <label>General</label>
 
15
  <frontend_type>text</frontend_type>
16
  <sort_order>1</sort_order>
17
  <show_in_default>1</show_in_default>
18
  <show_in_website>1</show_in_website>
19
  <show_in_store>1</show_in_store>
20
  <fields>
21
+ <afsstore translate="label">
22
+ <label>AFS@Store Back-Office</label>
23
+ <frontend_model>Antidot/System_Config_Button_AfsStore</frontend_model>
24
+ <sort_order>1</sort_order>
25
+ <show_in_default>1</show_in_default>
26
+ <show_in_website>0</show_in_website>
27
+ <show_in_store>0</show_in_store>
28
+ </afsstore>
29
  <version translate="label">
30
  <label>AFS@Store Extension Version</label>
31
  <frontend_model>Antidot/System_Config_Html_Version</frontend_model>
32
+ <sort_order>2</sort_order>
33
  <show_in_default>1</show_in_default>
34
+ <show_in_website>0</show_in_website>
35
+ <show_in_store>0</show_in_store>
36
  <comment>Communicate this version to the support team if you need help</comment>
37
  </version>
38
  <owner translate="label">
40
  <frontend_type>text</frontend_type>
41
  <sort_order>10</sort_order>
42
  <show_in_default>1</show_in_default>
43
+ <show_in_website>0</show_in_website>
44
+ <show_in_store>0</show_in_store>
45
  <comment>Useful for support team</comment>
46
  </owner>
47
  <email translate="label">
i18n/i18n.php CHANGED
@@ -1,4 +1,17 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  $ref = __DIR__."/en_US";
4
  $toTranslate = array(
1
  <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
12
+ * @author : Antidot devmagento@antidot.net
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
 
16
  $ref = __DIR__."/en_US";
17
  $toTranslate = array(
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Antidot_Antidot</name>
4
- <version>1.0.19</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-04-24</date>
21
- <time>10:55:06</time>
22
- <contents><target name="mage"><dir name="shell"><file name="antidotExport.php" hash="b5719d6cce70f9e3c1b2babc121ea5b1"/><file name="antidotExportCategory.php" hash="c6ec8609a42966292004123d5b40fe6e"/><file name="antidotExportInc.php" hash="1444df084b6f3dfacab5f6038a593e85"/><file name="antidotExportProduct.php" hash="3a6603f997db76b9b11524db6aa2d320"/></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="104c26dcc76365069b274fa0e68588ec"/></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="c8147e06452988877fd23de97e47ba7d"/><file name="Boolean.php" hash="0d301b2ca3c1c1e60a69dbfc043a8520"/><file name="Category.php" hash="695722041376ff47c15c78b233e32f29"/><file name="Decimal.php" hash="a5a605767a6b3322dcab4715f107b71c"/><file name="Price.php" hash="3e8fe52c943c4d7cc21062ebd63ff9a0"/></dir><file name="View.php" hash="95d6226dc5e264422511bc19dcf23358"/></dir></dir><dir name="Catalogsearch"><file name="Category.php" hash="e7fdd211e62b37cddac5649183e49dfe"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="4b7dd735852366d7d999afaf1c5ad4b9"/></dir></dir><file name="Layer.php" hash="c1d43a8ff0930cac311110fb28434e95"/><file name="Result.php" hash="ea9e7f3965136907768255817e0a2731"/></dir><dir name="Html"><file name="Select.php" hash="9e12a50fecdc9185fb1f009584368c88"/></dir><dir name="System"><dir name="Config"><dir name="Button"><file name="PushArticles.php" hash="33bcfed4c5d168e8f429cb52b1fbac7d"/><file name="PushBrands.php" hash="d91fa99b4e25d3ac9393f3a4b263f70c"/><file name="PushCategories.php" hash="2968e1ad8329329491768b61fb13063d"/><file name="PushProducts.php" hash="c536d094f60a1789011cbd6dd4ccd94e"/><file name="RestoreTemplate.php" hash="541d3141c4b1a8202e511a0978ec0de1"/><file name="ShowXml.php" hash="c70714536a6d46ce5d056d41fd62ead6"/></dir><dir name="Form"><dir name="Field"><dir name="Array"><file name="Additional.php" hash="a92ccc94d40b2c05ccf4b6dec8882eff"/><file name="AdditionalFeed.php" hash="b4489921424513278869ece9bbcd09be"/><file name="ArticleAdditional.php" hash="506594804d3b624523e04481e8925b35"/><file name="ArticleIdentifier.php" hash="6e85e062f65eeed99dd3274cc689c47f"/><file name="DefaultSort.php" hash="d12eb339e80a7b38c111a63aa003ce6e"/><file name="Facet.php" hash="7ffdd3568f12a9495d39b943402dd861"/><file name="Identifier.php" hash="669eb4a937943dec8a577881f3f20d3c"/><file name="ProductAdditionalFacet.php" hash="3fd8f3957e8c364b39258cf32100b70d"/><file name="ProductAdditionalField.php" hash="9c245ddfb26372a9af712815ace7497b"/><file name="ProductIdentifier.php" hash="14dcf3125eae94145df4c802344cbfcd"/><file name="Sort.php" hash="f1a565e63b90a249fbae162fa2b90e54"/></dir><file name="CategoryAttribute.php" hash="6f20dd2ee95865d458ab37318ea47ad5"/><file name="ProductAttribute.php" hash="9475af9768d2f0bd3e8a1078eb3a03f9"/></dir></dir><dir name="Html"><file name="Export.php" hash="9814c5ed5cacb5792020344bf3f6b863"/><file name="ShowXml.php" hash="4b4012d9973dd397a91734f73d09df17"/><file name="Version.php" hash="7e780d7a124dffb964c63e7136bf161a"/></dir></dir></dir></dir><dir name="Helper"><file name="Antidot.php" hash="2acc8b8ab743de5f0872dd5c983ebd67"/><dir name="CatalogSearch"><file name="Data.php" hash="ffbbd7d6f1965fce0403c5a5eda73063"/></dir><file name="Compress.php" hash="7d284da9ec13c64f436817fd65947d32"/><file name="Data.php" hash="36ae4060d3637b4df20b49ec34b136bb"/><dir name="Enterprise"><dir name="Search"><file name="Data.php" hash="8bfe0146c64511f86cb796638b65112f"/></dir></dir><file name="LogExport.php" hash="9bd67e1c49e7b37fc1c0effd22233f26"/><dir name="ManaFilters"><file name="Data.php" hash="e5dd65e6e52c03427aa68528cc1f140a"/></dir><file name="Url.php" hash="156f1fb9c829919144ebb7fd01588f7e"/><file name="XmlWriter.php" hash="91a30b09dd02cd12dd3f1f065476569c"/></dir><dir name="Model"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="4a95baa6605e8d47ecf315c3cbd995b1"/><file name="Boolean.php" hash="7151f37fda430c2ceea55db8e39b0dc4"/><file name="Category.php" hash="062b705848d8be4fbba569c7f6bdfbe5"/><file name="Decimal.php" hash="32dc400184631b7913e68224f9aac9a2"/><file name="Item.php" hash="10cb250f8c2e8a763a18cf16f0f1800e"/><file name="Price.php" hash="946b42279612884380b984fef527a212"/></dir></dir><file name="Layer.php" hash="c83e63e6725830e545ab13890f69c5b7"/></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="1b5f705dceb4cc62d1e6375332414872"/></dir></dir><file name="Layer.php" hash="e99d8aee533b6179cf0898c08dcdedca"/><dir name="Resource"><file name="Attribute.php" hash="766e331e27af9d114b946e023522956a"/></dir></dir><dir name="Export"><file name="Abstract.php" hash="7f8c2e5383d30259d5957322d5797329"/><file name="Article.php" hash="a724568ff3b207b1ce465310ebd585fa"/><file name="Brand.php" hash="84e0ee8e7760a987c615b079f9f0a28d"/><file name="Category.php" hash="99fb2befa7b91073896ed74702a313b9"/><file name="Product.php" hash="bb0a23dcfe0d5daf96a5879a6a250b20"/></dir><file name="Observer.php" hash="29aa6b6d71a8db9dfd6589b00e805541"/><dir name="Resource"><file name="Advanced.php" hash="39a9d8a23da4824b32037b0365669c72"/><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="a136057b3cd365b36ac7a5f4cc1a7e0d"/></dir></dir><dir name="Engine"><file name="Abstract.php" hash="994a72dea3044cf66ca1ef2b28ec2120"/><file name="Antidot.php" hash="dd74d857c69cb49ca5908c5592ccf846"/></dir></dir><dir name="Search"><file name="Abstract.php" hash="0ccd58da349eca4f5f1fce005f441e5f"/><file name="Search.php" hash="7b01ae94b89b294e0283ce94088f6994"/><file name="Suggest.php" hash="559a124841f318be57c0217ce1debb6a"/></dir><dir name="System"><dir name="Config"><file name="ArticleAttribute.php" hash="1a826cf609a0f0c3c47bf4ef6564de24"/><dir name="Backend"><file name="Engine.php" hash="301dbcfff7ca9034b731443686b85a2e"/></dir><file name="CategoryAttribute.php" hash="7149c1efa8207038d7fd2023c9761c98"/><file name="Dir.php" hash="7df80dbf0ee36504dba95c1d243e88ff"/><file name="DisableEnable.php" hash="903763b2023bb0c8c53ba050a9effc0e"/><file name="Engine.php" hash="8547fb84cbdfb1e61526da1ac79e2d1c"/><file name="Facet.php" hash="0a5274c46a4dde0cbfc803464f35dd28"/><file name="Number.php" hash="addd25d977b6dfdab80e1d010ca3bd12"/><file name="Options.php" hash="341e4677d0a060a63731fb9015d66ae4"/><file name="ProductAttribute.php" hash="f8060f25a70a7e681f5021eedef5dfa8"/><file name="PromoteRedirect.php" hash="9639c16ad74cfc680bd3b727ba2cf331"/><file name="Sort.php" hash="ef8c019fd3ae439e1349d20d229af094"/><dir name="Suggest"><file name="Type.php" hash="f0c083bbaa7fd339832d14937afe1af1"/></dir><file name="WSStatus.php" hash="b469dc276dd3623e51f79ec433791bcc"/></dir></dir><dir name="Transport"><file name="Abstract.php" hash="1c1a1f70c5813872a871f5b558c21360"/><file name="File.php" hash="136190f20ed7f7a340771d3b78f03331"/><file name="Ftp.php" hash="d9814ef96a23f7111e2b8e5a48196786"/><file name="Http.php" hash="667a6f2d07034604b6ec6f2b48b55332"/><file name="Interface.php" hash="82c6c2d1748439a6850e90f6556fec92"/></dir><file name="Transport.php" hash="663e33aaf620ffd4f05292b4e6f27f42"/></dir><dir name="controllers"><dir name="Admin"><file name="PushController.php" hash="0cb3e55625acd83e255dac46704e82f3"/></dir><dir name="Front"><file name="SearchController.php" hash="c1514fc18b5412a9e9072bcca0352607"/></dir></dir><dir name="etc"><file name="config.xml" hash="777f28aefc87ec454abdaf6d867e12a7"/><file name="system.xml" hash="c26c85633d0771eee7804bdb281bf3ce"/></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="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"><file name="result.phtml" hash="12c082ddff0e6c4fef74630b8253face"/></dir></dir></dir></dir></dir><dir name="default"><dir name="default"><dir name="layout"><file name="antidot.xml" hash="654b0cbb9d7c3f7a0a506e3f6adf164b"/></dir><dir name="template"><dir name="antidot"><dir name="catalogsearch"><dir name="result"><file name="category.phtml" hash="7413580b825508f2cfc08566d62369ae"/></dir></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="f73ff4aa6f983793957a6b295e8e6488"/></dir><dir name="de_CH"><file name="MDN_Antidot.csv" hash="f73ff4aa6f983793957a6b295e8e6488"/></dir><dir name="de_DE"><file name="MDN_Antidot.csv" hash="f73ff4aa6f983793957a6b295e8e6488"/></dir><dir name="es_AR"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_CL"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_CO"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_CR"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_ES"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_MX"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_PA"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_PE"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_VE"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="fr_CA"><file name="MDN_Antidot.csv" hash="5a408d02979b224a1387c1be415caa37"/></dir><dir name="fr_FR"><file name="MDN_Antidot.csv" hash="aed12e90a30b556952e5c33dd904867a"/></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="cf872314b38a86ebe7bb56b19bce9236"/><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="1efc032fd2615c82c350f69ba11860fa"/><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_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="523abcf4ab7a42e16c39c2b02bae927c"/><file name="clusterHelperTest.php" hash="e112e7c756f63c8e8ceb554281b418c9"/><file name="conceptHelperTest.php" hash="b44e39b62d0537bf1f7b7feb23f8111f"/><file name="facetDefaultTest.php" hash="382e4ea35e1c7173371b4a84046a38e5"/><file name="facetHelperTest.php" hash="2c6fbec3f1d4dd6e37c089ac835a88b0"/><file name="facetManagerTest.php" hash="bbef8e207c387dbe6a26142fd55264d5"/><file name="facetTest.php" hash="f0264af2550394a4a3d944bc86dac667"/><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="b756d39c29c1d3cfb2733ab13062542e"/><file name="promoteReplyHelperTest.php" hash="7cbb68a7f50c2bd2ef11a085ac94deb2"/><file name="promoteReplysetHelperTest.php" hash="749180b072997539d322c88c97c586d6"/><file name="queryCoderTest.php" hash="064979c30a7e215c486e34abce79b1b5"/><file name="queryTest.php" hash="c48bc5a88a788bbc4a26604b86d60454"/><file name="replyHelperTest.php" hash="5b3cfec02c640282bf4fec92353801d6"/><file name="replysetHelperTest.php" hash="fdb55d9a09f9198fb26b5fab3edc58c3"/><file name="responseHelperTest.php" hash="35969ff7882d97b93aa874fafd4b55c3"/><file name="searchConnectorTest.php" hash="9201de573884b643041b6c32bc535e7e"/><file name="searchQueryManagerTest.php" hash="2334d06f4247abfd69c2b4dc842cc404"/><file name="searchTest.php" hash="eeb7a86bd5b48108434fb93da4e0c0f2"/><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="c1c3961f3cc03924fda382adf6e6c419"/><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="b2383fc244d6bbcda6de7387ae7b1b0d"/><file name="afs_cluster_exception.php" hash="86d97623db7aebaa28a20857ce2cf17f"/><file name="afs_cluster_helper.php" hash="60b7fbcc869a672929ef9fc6d840d2b2"/><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="b5d89249e71741b0558dbb762ad1a077"/><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="63bf1e4b92cf1e1bdf06b7da54afd5f9"/><file name="afs_facet_helper_retriever.php" hash="5628cc41c50ab25fd3336df302d903f4"/><file name="afs_facet_layout.php" hash="c83f6fef1c13ba3cda667c611841ff87"/><file name="afs_facet_manager.php" hash="3f022435274cbb500699ea054461f4bf"/><file name="afs_facet_mode.php" hash="17f17d277168a017e66364be5ac85394"/><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="0df08c2d4e30c9b99d56ce7fdbc1b40b"/><file name="afs_filter_coder.php" hash="6a528ece8d5999aab9eb0fffabea25e3"/><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="8e93f8c060d2fedabbcbad5607a27807"/><file name="afs_producer.php" hash="7c8c515ccb8126523fa0d09a7f759dd5"/><file name="afs_promote_reply_helper.php" hash="b582c3064f0dff62514e28e91d715cf9"/><file name="afs_promote_replyset_helper.php" hash="fdefc6f8a686addb31ea9b6c0a3fa5ad"/><file name="afs_query.php" hash="015bc3e7d007943708f064a34582d6ef"/><file name="afs_query_coder.php" hash="87021c05f45168f11eae4045b999b347"/><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="04a65217b88a53a951d687455986b2a6"/><file name="afs_reply_helper_factory.php" hash="119fba6f39a19ef27fb8c864158cc7a2"/><file name="afs_replyset_helper.php" hash="190b08443559c28a204e8cfb6826d441"/><file name="afs_response_exception.php" hash="0a865bb92fb700ae555dcb5ae675f644"/><file name="afs_response_helper.php" hash="1805fd45c11ef77121867bb84850bedd"/><file name="afs_search.php" hash="11770cf52edd84331988bf61228ab24a"/><file name="afs_search_connector.php" hash="17242fb6536f4596b2c0198a16986310"/><file name="afs_search_query_manager.php" hash="91ee821f87eaeb9f14d5313a19b3f807"/><file name="afs_sort_builtins.php" hash="0cc1617a62f1a834a28d7d2ac249b081"/><file name="afs_sort_coder.php" hash="543015ed1d40caa40317a231476ea06c"/><file name="afs_sort_order.php" hash="7755deb99386650c9974871474168cda"/><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="3e000a037ca1d64587a90f53dd6c888b"/><file name="afs_exception.php" hash="c1840fe279f9cb313cec151012ed4513"/><file name="afs_origin.php" hash="a6b7e39a687210572c116afcbea0e7cb"/><file name="afs_query_base.php" hash="63b8fba7bb5c17150e4af0e765deab27"/><file name="afs_response_helper_base.php" hash="b087f7bdad35ed0526566042ef9afc8c"/></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="6a04f43252f67f6dd90cc23d03fa2b63"/><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="c45bcd565a4124da5d6b23a21d5845a5"/><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="29dda789ed7b363dc512e3c52a9d80ce"/><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="455ed27e3ee2636761d16f833e4d3984"/></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="c38fa0e7c5aa391c2842affdf89c4795"/><file name="afs_lib.doxygen" hash="4f5839371b1b6ba64f76029bc5865dbf"/><file name="afs_lib.php" hash="4e93523d71e8b083654ac85cb24f8c68"/><file name="afs_version.php" hash="c8db9ed5ee1881b6e31a60a471a81b8a"/><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="ed86e971114243f3b28fa39bcaa972b8"/><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="9e3570d254b92d571849718d98492192"/><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="14de6527ce1e67cea1543b75a2322165"/></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.1.0</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-05-12</date>
21
+ <time>09:47:33</time>
22
+ <contents><target name="mage"><dir name="shell"><file name="antidotExport.php" hash="84b760a0cab3cc225ff8b50d6d25ed61"/><file name="antidotExportCategory.php" hash="87ebde88a80a1eb1f919aca67a69984b"/><file name="antidotExportInc.php" hash="437d19933543a58c8becd250613e5c26"/><file name="antidotExportProduct.php" hash="62c1fda71a6929d6e19864df9654c8a9"/></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="Category.php" hash="e9605415ba85929115a443b1b4f00ab0"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2b274bf7d8f8dbd915bdf73f65e694fc"/></dir></dir><file name="Layer.php" hash="52a903855aa9cb7211eb0932d01368af"/><file name="Result.php" hash="8aaa0be7830f41616e266b2c7928604e"/></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="c68e3a42a701267e9371972da60c22cb"/><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="Form"><dir name="Field"><dir name="Array"><file name="Additional.php" hash="acbde0308213fa976f55934fb45aba60"/><file name="AdditionalFeed.php" hash="b4489921424513278869ece9bbcd09be"/><file name="ArticleAdditional.php" hash="38c62d610f585c460151841f7350348b"/><file name="ArticleIdentifier.php" hash="ec9479fd1ca087a1fe924795cc9ff5f6"/><file name="DefaultSort.php" hash="61dec4828212e7a145b6eeda5c476858"/><file name="Facet.php" hash="dab308e0ac79a89be8d72e487739031e"/><file name="Identifier.php" hash="294c5d3bda7dae5637eabfdfdb08afc7"/><file name="ProductAdditionalFacet.php" hash="208e01078409951327f1794e17e11e89"/><file name="ProductAdditionalField.php" hash="9c9f9c9c1c940963e1a24c039a392cc4"/><file name="ProductIdentifier.php" hash="d30809119cb35018697533075f7ee485"/><file name="Sort.php" hash="6ece671c902cf6f5db66652a2c51e79f"/></dir><file name="CategoryAttribute.php" hash="1ba0dd22410eb27d18ac77b51f78ac49"/><file name="ProductAttribute.php" hash="3acbdaee390ce50e18d0ede1d641255d"/></dir></dir><dir name="Html"><file name="Export.php" hash="7cb82e5f21c769e5b39efc0be7b76473"/><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="9c057cf9d594b07e6d36c1142b9ceae6"/><file name="Data.php" hash="a0695759c4de3f81a07e46784761b7b2"/><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="e5dd65e6e52c03427aa68528cc1f140a"/></dir><file name="Url.php" hash="1d2ee02a8e135bfc4b866f5219f62acd"/><file name="XmlWriter.php" hash="77addcc2f245646c50c3da4bcee16774"/></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="9224a05ffa914bfcaded1c6c52bd92f9"/><file name="Decimal.php" hash="b9b1e2cff1d0332fab77d101dca4c3d2"/><file name="Item.php" hash="f7cd6f73001c61046277a4807c37c73b"/><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="1425db54170c23fc23e579284e4e1418"/><dir name="Resource"><file name="Attribute.php" hash="80d2a34d746f307109b6bf910b0f2958"/></dir></dir><dir name="Export"><file name="Abstract.php" hash="38d6d6dbb68872d0c46e26c61c38c30e"/><file name="Article.php" hash="91ea6e7acae1519413711abfc076ad0c"/><file name="Category.php" hash="a326b576f9a5f0f90cb5f57f3f155b26"/><file name="Product.php" hash="197f7ba0fe7f96808f2676d31313df22"/></dir><file name="Observer.php" hash="8d7d35c1362b1597a773a749377f9b28"/><dir name="Resource"><file name="Advanced.php" hash="f4810c1af8d5a15f7a424d7baf5fc777"/><dir name="Catalog"><dir name="Product"><file name="Collection.php" hash="144dd8688830992c9300d420ed203a23"/></dir></dir><dir name="Engine"><file name="Abstract.php" hash="6ad534401be39ac25229b11fea341804"/><file name="Antidot.php" hash="8b9b768bb91471260e927d33879b85c0"/></dir></dir><dir name="Search"><file name="Abstract.php" hash="fd71154b987b16f8d13bc3e10a3faeac"/><file name="Search.php" hash="aeef203f9a3794e9ae1e35a825f0eca3"/><file name="Suggest.php" hash="86586ee73cbc7aee0aef8c81d92fb34e"/></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="Engine.php" hash="a3703b427ee777ce4ea58c8b31604158"/><file name="Facet.php" hash="84e108c99b57f88f6ce73931e5db0944"/><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="608358f239a483a8b5b3217284c14896"/><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="8d1aa862bb8f3656bd199d5ce592e0b1"/><file name="Http.php" hash="fb80d47a6d991b9f706418061a2cbd7e"/><file name="Interface.php" hash="32d1d3958e0cd726bc34cae482464ef8"/></dir><file name="Transport.php" hash="de133bf273352bcafead75745fb347ba"/></dir><dir name="Test"><dir name="Block"><dir name="System"><dir name="Config"><dir name="Button"><file name="AfsStore.php" hash="dcbfefb440b8512b1298b624a3582076"/></dir></dir></dir></dir><dir name="Model"><dir name="Export"><file name="Article.php" hash="c2d43ccf7c9b6648b633d122c657f27d"/><file name="Category.php" hash="c29dbe5ffb63eae4d51e57f7ff298bd3"/><dir name="Product"><dir name="fixtures"><file name="testWriteImageUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWriteProductUrl.yaml" hash="a4e08b8f1565eba67a16553cf57e1004"/><file name="testWriteProperties.yaml" hash="d434749b80908bbceefd5781e2d0e998"/><file name="testWriteXml.yaml" hash="c53ef98d6dea648dc63cc34ce3ee9509"/></dir><dir name="providers"><file name="testWriteImageUrl.yaml" hash="666c33585c611bcc0b0ebe6e87dce1fc"/><file name="testWriteProductUrl.yaml" hash="18f511460efea04586fc888f5c85b3ea"/></dir></dir><file name="Product.php" hash="d2f3b44893933e339db77ba0515d1c3b"/></dir><dir name="Observer"><dir name="fixtures"><file name="testGetDefaultContext.yaml" hash="e9c8aa4acd4e2c3af2e69c8eb04996bc"/></dir><dir name="providers"><file name="testGetOwnerForFilename.yaml" hash="c5c07e73f536f9ffacc0c3ff6b5a13d1"/></dir></dir><file name="Observer.php" hash="86536c523b1249b9d100a5dc40ea7793"/><dir name="Resource"><dir name="Engine"><file name="Antidot.php" hash="7e59165d905a8679fe282a9dd8d0e285"/></dir></dir><dir name="System"><dir name="Config"><dir name="Sort"><dir name="expectations"><file name="testToOptionArray.yaml" hash="13fc5b4c17962fb267f443d03a2219b2"/></dir><dir name="fixtures"><file name="testToOptionArray1.yaml" hash="f1e09ff12a4c13817d3aafd9254d3f7c"/><file name="testToOptionArray2.yaml" hash="160c861aa7adf28b4d3dc1423dcc8d84"/><file name="testToOptionArray3.yaml" hash="bbb2d78972449929cac497c62ec6fef8"/></dir></dir><file name="Sort.php" hash="8173c08ae65d529ace25a745ffd4b3e6"/></dir></dir></dir><file name="PHPUnitUtil.php" hash="2a128a7c19f4c37cb9dd7fc60e679693"/></dir><dir name="controllers"><dir name="Admin"><file name="PushController.php" hash="fb131afc3d26e5e591968e8fa3ed5375"/></dir><dir name="Front"><file name="SearchController.php" hash="474f1bd0136e3bdea38e9991df361679"/></dir></dir><dir name="etc"><file name="config.xml" hash="ad7a33972038da10d70414ba4be650db"/><file name="system.xml" hash="f6e7ac229fe171ef4896ea9c97643aef"/></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="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"><file name="result.phtml" hash="12c082ddff0e6c4fef74630b8253face"/></dir></dir></dir></dir></dir><dir name="default"><dir name="default"><dir name="layout"><file name="antidot.xml" hash="654b0cbb9d7c3f7a0a506e3f6adf164b"/></dir><dir name="template"><dir name="antidot"><dir name="catalogsearch"><dir name="result"><file name="category.phtml" hash="7413580b825508f2cfc08566d62369ae"/></dir></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="f73ff4aa6f983793957a6b295e8e6488"/></dir><dir name="de_CH"><file name="MDN_Antidot.csv" hash="f73ff4aa6f983793957a6b295e8e6488"/></dir><dir name="de_DE"><file name="MDN_Antidot.csv" hash="f73ff4aa6f983793957a6b295e8e6488"/></dir><dir name="es_AR"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_CL"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_CO"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_CR"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_ES"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_MX"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_PA"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_PE"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="es_VE"><file name="MDN_Antidot.csv" hash="7a6a749b1da8b3fca7823e8b08f53add"/></dir><dir name="fr_CA"><file name="MDN_Antidot.csv" hash="5a408d02979b224a1387c1be415caa37"/></dir><dir name="fr_FR"><file name="MDN_Antidot.csv" hash="aed12e90a30b556952e5c33dd904867a"/></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="cf872314b38a86ebe7bb56b19bce9236"/><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="1efc032fd2615c82c350f69ba11860fa"/><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_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="523abcf4ab7a42e16c39c2b02bae927c"/><file name="clusterHelperTest.php" hash="e112e7c756f63c8e8ceb554281b418c9"/><file name="conceptHelperTest.php" hash="b44e39b62d0537bf1f7b7feb23f8111f"/><file name="facetDefaultTest.php" hash="382e4ea35e1c7173371b4a84046a38e5"/><file name="facetHelperTest.php" hash="2c6fbec3f1d4dd6e37c089ac835a88b0"/><file name="facetManagerTest.php" hash="bbef8e207c387dbe6a26142fd55264d5"/><file name="facetTest.php" hash="f0264af2550394a4a3d944bc86dac667"/><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="b756d39c29c1d3cfb2733ab13062542e"/><file name="promoteReplyHelperTest.php" hash="7cbb68a7f50c2bd2ef11a085ac94deb2"/><file name="promoteReplysetHelperTest.php" hash="749180b072997539d322c88c97c586d6"/><file name="queryCoderTest.php" hash="064979c30a7e215c486e34abce79b1b5"/><file name="queryTest.php" hash="c48bc5a88a788bbc4a26604b86d60454"/><file name="replyHelperTest.php" hash="5b3cfec02c640282bf4fec92353801d6"/><file name="replysetHelperTest.php" hash="fdb55d9a09f9198fb26b5fab3edc58c3"/><file name="responseHelperTest.php" hash="35969ff7882d97b93aa874fafd4b55c3"/><file name="searchConnectorTest.php" hash="9201de573884b643041b6c32bc535e7e"/><file name="searchQueryManagerTest.php" hash="2334d06f4247abfd69c2b4dc842cc404"/><file name="searchTest.php" hash="eeb7a86bd5b48108434fb93da4e0c0f2"/><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="c1c3961f3cc03924fda382adf6e6c419"/><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="b2383fc244d6bbcda6de7387ae7b1b0d"/><file name="afs_cluster_exception.php" hash="86d97623db7aebaa28a20857ce2cf17f"/><file name="afs_cluster_helper.php" hash="60b7fbcc869a672929ef9fc6d840d2b2"/><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="b5d89249e71741b0558dbb762ad1a077"/><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="63bf1e4b92cf1e1bdf06b7da54afd5f9"/><file name="afs_facet_helper_retriever.php" hash="5628cc41c50ab25fd3336df302d903f4"/><file name="afs_facet_layout.php" hash="c83f6fef1c13ba3cda667c611841ff87"/><file name="afs_facet_manager.php" hash="3f022435274cbb500699ea054461f4bf"/><file name="afs_facet_mode.php" hash="17f17d277168a017e66364be5ac85394"/><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="0df08c2d4e30c9b99d56ce7fdbc1b40b"/><file name="afs_filter_coder.php" hash="6a528ece8d5999aab9eb0fffabea25e3"/><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="8e93f8c060d2fedabbcbad5607a27807"/><file name="afs_producer.php" hash="7c8c515ccb8126523fa0d09a7f759dd5"/><file name="afs_promote_reply_helper.php" hash="b582c3064f0dff62514e28e91d715cf9"/><file name="afs_promote_replyset_helper.php" hash="fdefc6f8a686addb31ea9b6c0a3fa5ad"/><file name="afs_query.php" hash="015bc3e7d007943708f064a34582d6ef"/><file name="afs_query_coder.php" hash="87021c05f45168f11eae4045b999b347"/><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="04a65217b88a53a951d687455986b2a6"/><file name="afs_reply_helper_factory.php" hash="119fba6f39a19ef27fb8c864158cc7a2"/><file name="afs_replyset_helper.php" hash="190b08443559c28a204e8cfb6826d441"/><file name="afs_response_exception.php" hash="0a865bb92fb700ae555dcb5ae675f644"/><file name="afs_response_helper.php" hash="1805fd45c11ef77121867bb84850bedd"/><file name="afs_search.php" hash="11770cf52edd84331988bf61228ab24a"/><file name="afs_search_connector.php" hash="17242fb6536f4596b2c0198a16986310"/><file name="afs_search_query_manager.php" hash="91ee821f87eaeb9f14d5313a19b3f807"/><file name="afs_sort_builtins.php" hash="0cc1617a62f1a834a28d7d2ac249b081"/><file name="afs_sort_coder.php" hash="543015ed1d40caa40317a231476ea06c"/><file name="afs_sort_order.php" hash="7755deb99386650c9974871474168cda"/><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="3e000a037ca1d64587a90f53dd6c888b"/><file name="afs_exception.php" hash="c1840fe279f9cb313cec151012ed4513"/><file name="afs_origin.php" hash="a6b7e39a687210572c116afcbea0e7cb"/><file name="afs_query_base.php" hash="63b8fba7bb5c17150e4af0e765deab27"/><file name="afs_response_helper_base.php" hash="b087f7bdad35ed0526566042ef9afc8c"/></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="6a04f43252f67f6dd90cc23d03fa2b63"/><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="c45bcd565a4124da5d6b23a21d5845a5"/><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="29dda789ed7b363dc512e3c52a9d80ce"/><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="455ed27e3ee2636761d16f833e4d3984"/></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="c38fa0e7c5aa391c2842affdf89c4795"/><file name="afs_lib.doxygen" hash="4f5839371b1b6ba64f76029bc5865dbf"/><file name="afs_lib.php" hash="4e93523d71e8b083654ac85cb24f8c68"/><file name="afs_version.php" hash="c8db9ed5ee1881b6e31a60a471a81b8a"/><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="ed86e971114243f3b28fa39bcaa972b8"/><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="9e3570d254b92d571849718d98492192"/><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="14de6527ce1e67cea1543b75a2322165"/></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>
shell/antidotExport.php CHANGED
@@ -1,4 +1,17 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  require_once 'abstract.php';
4
 
@@ -15,9 +28,9 @@ class MDN_Shell_AntidotExport extends Mage_Shell_Abstract
15
 
16
  $start = time();
17
 
18
- Mage::getModel('Antidot/Observer')->categoriesFullExport();
19
 
20
- Mage::getModel('Antidot/Observer')->catalogFullExport();
21
 
22
  return true;
23
  }
1
  <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
12
+ * @author : Antidot devmagento@antidot.net
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
 
16
  require_once 'abstract.php';
17
 
28
 
29
  $start = time();
30
 
31
+ Mage::getModel('Antidot/Observer')->categoriesFullExport('cli');
32
 
33
+ Mage::getModel('Antidot/Observer')->catalogFullExport('cli');
34
 
35
  return true;
36
  }
shell/antidotExportCategory.php CHANGED
@@ -1,4 +1,17 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  require_once 'abstract.php';
4
 
@@ -15,7 +28,7 @@ class MDN_Shell_AntidotExportCategory extends Mage_Shell_Abstract
15
 
16
  $start = time();
17
 
18
- Mage::getModel('Antidot/Observer')->categoriesFullExport();
19
 
20
  return true;
21
  }
1
  <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
12
+ * @author : Antidot devmagento@antidot.net
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
 
16
  require_once 'abstract.php';
17
 
28
 
29
  $start = time();
30
 
31
+ Mage::getModel('Antidot/Observer')->categoriesFullExport('cli');
32
 
33
  return true;
34
  }
shell/antidotExportInc.php CHANGED
@@ -1,4 +1,17 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  require_once 'abstract.php';
4
 
@@ -15,7 +28,7 @@ class MDN_Shell_AntidotExportInc extends Mage_Shell_Abstract
15
 
16
  $start = time();
17
 
18
- Mage::getModel('Antidot/Observer')->catalogIncExport();
19
 
20
  return true;
21
  }
1
  <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
12
+ * @author : Antidot devmagento@antidot.net
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
 
16
  require_once 'abstract.php';
17
 
28
 
29
  $start = time();
30
 
31
+ Mage::getModel('Antidot/Observer')->catalogIncExport('cli');
32
 
33
  return true;
34
  }
shell/antidotExportProduct.php CHANGED
@@ -1,4 +1,17 @@
1
  <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
2
 
3
  require_once 'abstract.php';
4
 
@@ -15,7 +28,7 @@ class MDN_Shell_AntidotExport extends Mage_Shell_Abstract
15
 
16
  $start = time();
17
 
18
- Mage::getModel('Antidot/Observer')->catalogFullExport();
19
 
20
  return true;
21
  }
1
  <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Open Software License (OSL 3.0)
8
+ * It is also available through the world-wide-web at this URL:
9
+ * http://opensource.org/licenses/osl-3.0.php
10
+ *
11
+ * @copyright Copyright (c) 2015 Antidot (http://www.antidot.net)
12
+ * @author : Antidot devmagento@antidot.net
13
+ * @license http://opensource.org/licenses/osl-3.0.php Open Software License (OSL 3.0)
14
+ */
15
 
16
  require_once 'abstract.php';
17
 
28
 
29
  $start = time();
30
 
31
+ Mage::getModel('Antidot/Observer')->catalogFullExport('cli');
32
 
33
  return true;
34
  }